in src/handlers/self_integration_handler.py [0:0]
def put(self, event: SelfIntegrationPutModel, _pe: ProcessedEvent):
customer = event.customer
application = next(self._aps.list(
customer=customer,
_type=ApplicationType.CUSTODIAN.value,
limit=1,
deleted=False
), None)
if not application:
application = self._aps.build(
customer_id=event.customer,
created_by=_pe['cognito_user_id'],
type=ApplicationType.CUSTODIAN.value,
description=event.description,
is_deleted=False,
)
self.validate_username(event.username, customer)
meta = CustodianApplicationMeta.from_dict({})
if event.auto_resolve_access:
meta.update_host(
host=self._env.api_gateway_host(),
stage=self._env.api_gateway_stage()
)
else: # url
url = event.url
meta.update_host(
host=url.host,
port=int(url.port) if url.port else None,
protocol=url.scheme,
stage=url.path
)
if event.results_storage:
meta.results_storage = event.results_storage
meta.username = event.username
application.meta = meta.dict()
self.set_user_password(application, event.password)
self._aps.save(application)
# creating parents
payload = ResolveParentsPayload(
parents=list(self.get_all_activations(application.application_id,
event.customer)),
tenant_names=event.tenant_names,
exclude_tenants=event.exclude_tenants,
clouds=event.clouds,
all_tenants=event.all_tenants
)
to_keep, to_delete = split_into_to_keep_to_delete(payload)
for parent in to_delete:
self._ps.force_delete(parent)
to_create = build_parents(
payload=payload,
parent_service=self._ps,
application_id=application.application_id,
customer_id=event.customer,
type_=ParentType.CUSTODIAN,
created_by=_pe['cognito_user_id'],
)
for parent in to_create:
self._ps.save(parent)
return build_response(content=self.get_dto(application,
chain(to_create, to_keep)),
code=HTTPStatus.CREATED)