in src/lambdas/r8s_api_handler/processors/shape_rule_processor.py [0:0]
def post(self, event):
_LOG.debug(f'Create shape rule event: {event}')
validate_params(event, (PARENT_ID_ATTR, RULE_ACTION_ATTR,
CONDITION_ATTR,
FIELD_ATTR, VALUE_ATTR))
parent_id = event.get(PARENT_ID_ATTR)
parent = self.parent_service.get_parent_by_id(
parent_id=parent_id
)
_LOG.debug(f'Validating parent.')
self._validate_parent(parent=parent)
applications = self.application_service.resolve_application(
event=event)
if not applications:
_LOG.warning(f'No application found matching given query.')
return build_response(
code=RESPONSE_BAD_REQUEST_CODE,
content=f'No application found matching given query.'
)
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.'
)
cloud = None
if parent.cloud:
cloud = parent.cloud
elif parent.tenant_name:
tenant = self.tenant_service.get(tenant_name=parent.tenant_name)
if not tenant:
_LOG.debug(f'Tenant {parent.tenant_name} linked to '
f'parent {parent.parent_id} does not exist.')
return build_response(
code=RESPONSE_BAD_REQUEST_CODE,
content=f'Tenant {parent.tenant_name} linked to '
f'parent {parent.parent_id} does not exist.'
)
cloud = tenant.cloud
if not cloud:
_LOG.error(f'Parent {parent.parent_id} must have either '
f'SPECIFIC of ALL#CLOUD scope')
return build_response(
code=RESPONSE_BAD_REQUEST_CODE,
content=f'Parent {parent.parent_id} must have either '
f'SPECIFIC of ALL#CLOUD scope'
)
shape_rule = self.parent_service.create_shape_rule(
action=event.get(RULE_ACTION_ATTR, '').lower(),
cloud=parent.cloud.upper(),
condition=event.get(CONDITION_ATTR, '').lower(),
field=event.get(FIELD_ATTR, '').lower(),
value=event.get(VALUE_ATTR, '').lower()
)
_LOG.debug(f'Shape rule created: {shape_rule.as_dict()}')
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)}'
)
parent_meta = self.parent_service.get_parent_meta(
parent=parent)
_LOG.debug(f'Parent \'{parent.parent_id}\' '
f'meta extracted')
self.parent_service.add_shape_rule_to_meta(
parent_meta=parent_meta,
shape_rule=shape_rule
)
_LOG.debug(f'Shape rule added to parent '
f'\'{parent.parent_id}\' meta')
self.parent_service.set_parent_meta(
parent=parent,
meta=parent_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
)