def put()

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)