def get()

in src/lambdas/r8s_api_handler/processors/shape_rule_dry_run_processor.py [0:0]


    def get(self, event):
        _LOG.debug(f'Dry run shape rule event: {event}')
        validate_params(event, (PARENT_ID_ATTR,))

        parent, application = self.resolve_parent_application(
            event=event
        )

        _LOG.debug(f'Resolving rules for parent '
                   f'\'{parent.parent_id}\'')
        parent_meta = self.parent_service.get_parent_meta(
            parent=parent)
        shape_rules = self.parent_service.list_shape_rules(
            parent_meta=parent_meta)

        if not shape_rules:
            _LOG.warning(f'Parent \'{parent.parent_id}\' does not '
                         f'have shape rules.')
            return build_response(
                code=RESPONSE_RESOURCE_NOT_FOUND_CODE,
                content=f'Parent \'{parent.parent_id}\' does not '
                        f'have shape rules.'
            )
        cloud = None
        if parent.tenant_name:
            _LOG.debug(f'Describing tenant {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 parent '
                           f'{parent.parent_id} does not exist.')
                return build_response(
                    code=RESPONSE_BAD_REQUEST_CODE,
                    content=f'Tenant {parent.tenant_name} linked to parent '
                            f'{parent.parent_id} does not exist.'
                )
            cloud = tenant.cloud
        elif parent.cloud:
            cloud = parent.cloud

        if not cloud:
            _LOG.error(f'Parent {parent.parent_id} must have either ALL#CLOUD '
                       f'or SPECIFIC scope.')
            return build_response(
                code=RESPONSE_BAD_REQUEST_CODE,
                content=f'Parent {parent.parent_id} must have either ALL#CLOUD '
                        f'or SPECIFIC scope.'
            )

        shapes = self.shape_service.list(cloud=cloud)
        if not shapes:
            _LOG.error(f'No shapes found for cloud \'{cloud}\'')
            return build_response(
                code=RESPONSE_BAD_REQUEST_CODE,
                content=f'No shapes found for cloud \'{cloud}\''
            )
        _LOG.debug(f'Applying shape rules to {len(shapes)} shapes')

        filtered_shapes = self.shape_rules_filter_service. \
            get_allowed_instance_types(
            cloud=cloud,
            parent_meta=parent_meta,
            instances_data=shapes
        )
        _LOG.debug(f'Got {len(filtered_shapes)} filtered shapes')

        _LOG.debug(f'Describing shapes dto')
        shape_names = [shape.name for shape in filtered_shapes]
        shape_names.sort()

        response = {
            "cloud": cloud,
            "total_shapes": len(shapes),
            "allowed_for_parent": len(filtered_shapes),
            "shape_names": shape_names
        }
        _LOG.debug(f'Response: \'{response}\'')

        return build_response(
            code=RESPONSE_OK_CODE,
            content=response
        )