in src/lambdas/r8s_api_handler/processors/shape_rule_processor.py [0:0]
def patch(self, event):
_LOG.debug(f'Update shape rule event: {event}')
validate_params(event, (PARENT_ID_ATTR, ID_ATTR,))
parent_id = event.get(PARENT_ID_ATTR)
parent = self.parent_service.get_parent_by_id(
parent_id=parent_id
)
self._validate_parent(parent=parent)
rule_id = event.get(ID_ATTR)
applications = self.application_service. \
resolve_application(event=event)
if not applications:
_LOG.warning(f'No application for cloud found.')
return build_response(
code=RESPONSE_BAD_REQUEST_CODE,
content=f'No application for cloud found.'
)
app_ids = [app.application_id for app in applications]
if not parent or parent.application_id not in app_ids:
_LOG.warning(f'No parent found matching given query.')
return build_response(
code=RESPONSE_BAD_REQUEST_CODE,
content=f'No parent found matching given query.'
)
parent_meta = self.parent_service.get_parent_meta(
parent=parent
)
shape_rule = self.parent_service.get_shape_rule(
parent_meta=parent_meta,
rule_id=rule_id
)
if not shape_rule:
_LOG.error(f'Shape rule \'{rule_id}\' does not exist in '
f'parent \'{parent_id}\'')
return build_response(
code=RESPONSE_RESOURCE_NOT_FOUND_CODE,
content=f'Shape rule \'{rule_id}\' does not exist in '
f'parent \'{parent_id}\''
)
self.parent_service.update_shape_rule(
shape_rule=shape_rule,
action=event.get(RULE_ACTION_ATTR),
field=event.get(FIELD_ATTR),
condition=event.get(CONDITION_ATTR),
value=event.get(VALUE_ATTR)
)
_LOG.debug(f'Shape rule updated')
errors = self._validate(shape_rule=shape_rule)
if errors:
_LOG.error(f'Shape rule is invalid: {", ".join(errors)}')
return build_response(
code=RESPONSE_BAD_REQUEST_CODE,
content=f'Shape rule is invalid: {", ".join(errors)}'
)
self.parent_service.update_shape_rule_in_parent(
parent_meta=parent_meta,
shape_rule=shape_rule
)
_LOG.debug(f'Shape rule updated in parent '
f'\'{parent.parent_id}\' meta')
self.parent_service.save(parent=parent)
_LOG.debug(f'Parent \'{parent.parent_id}\' saved')
shape_rule_dto = self.parent_service.get_shape_rule_dto(
shape_rule=shape_rule)
_LOG.debug(f'Response: {shape_rule_dto}')
return build_response(
code=RESPONSE_OK_CODE,
content=shape_rule_dto
)