def _include_resources(self, resource: JsonObject, result: JsonObject) -> None: for relationship_name, relationship in resource.get( "relationships", {}).items(): relationship_guid = (relationship.get("data") or {}).get("guid") included_resources = result["included"].get( plural(relationship_name)) if relationship_guid is not None and included_resources is not None: included_resource = next( (r for r in included_resources if relationship_guid == r.get("guid")), None) if included_resource is not None: self._include_resources(included_resource, result) included = resource.setdefault("_included", {}) included.update({relationship_name: included_resource})
def _mixin_included_resources(self, result: JsonObject) -> JsonObject: if "included" not in result: return result for resource in result.get("resources", [result]): self._include_resources(resource, result) del result["included"] return result
def from_json_object(to_one_relationship: JsonObject): if to_one_relationship is None: return ToOneRelationship(None) data = to_one_relationship.pop("data", None) result = ToOneRelationship(None if data is None else data["guid"]) result.update(to_one_relationship) return result
def _safe_get_instances(self, application_guid: str) -> JsonObject: try: return self.get_instances(application_guid) except InvalidStatusCode as ex: if ex.status_code == HTTPStatus.BAD_REQUEST and type( ex.body) == dict: code = ex.body.get('code', -1) # 170002: staging not finished # 220001: instances error if code == 220001 or code == 170002: return JsonObject() else: _logger.error("") raise
def from_json_object(to_many_relations: JsonObject): result = ToManyRelationship( *[relation["guid"] for relation in to_many_relations.pop("data")]) result.update(to_many_relations) return result