def save_service(self, payload): service = ServicePublisherRepository( ).get_service_for_given_service_uuid(self._org_uuid, self._service_uuid) service.service_id = payload["service_id"] service.proto = payload.get("proto", {}) service.short_description = payload.get("short_description", "") service.description = payload.get("description", "") service.project_url = payload.get("project_url", "") service.contributors = ServicePublisherService. \ _get_valid_service_contributors(contributors=payload.get("contributors", [])) service.tags = payload.get("tags", []) service.mpe_address = payload.get("mpe_address", "") groups = [] for group in payload["groups"]: service_group = ServiceFactory.create_service_group_entity_model( self._org_uuid, self._service_uuid, group) groups.append(service_group) service.groups = groups service.service_state.transaction_hash = payload.get( "transaction_hash", None) service = ServicePublisherRepository().save_service( self._username, service, ServiceStatus.APPROVED.value) comment = payload.get("comments", {}).get(UserType.SERVICE_PROVIDER.value, "") if len(comment) > 0: self._save_service_comment(support_type="SERVICE_APPROVAL", user_type="SERVICE_PROVIDER", comment=comment) return service.to_dict()
def save_service_attributes(self, payload): VALID_PATCH_ATTRIBUTE = ["groups"] service_db = ServicePublisherRepository( ).get_service_for_given_service_uuid(self._org_uuid, self._service_uuid) service = ServiceFactory.convert_service_db_model_to_entity_model( service_db) for attribute, value in payload.items(): if attribute in VALID_PATCH_ATTRIBUTE: if attribute == "groups": service.groups = [ ServiceFactory.create_service_group_entity_model( self._org_uuid, self._service_uuid, group) for group in payload.get("groups", []) ] else: raise Exception( "Patching of other attributes not allowed as of now") saved_service = ServicePublisherRepository().save_service( self._username, service, service.service_state.state) return saved_service.to_dict()
def _process_service_data(self, org_id, service_id, service_metadata, transaction_hash, metadata_uri): org_uuid, existing_service = self._get_existing_service_details( org_id, service_id) service_uuid = str(uuid4()) display_name = service_metadata.get("display_name", "") description_dict = service_metadata.get("service_description", {}) short_description = description_dict.get("short_description", "") description = description_dict.get("description", "") project_url = description_dict.get("url", "") proto = { "encoding": service_metadata.get("encoding", ""), "service_type": service_metadata.get("service_type", ""), "model_ipfs_hash": service_metadata.get("model_ipfs_hash", "") } assets = service_metadata.get("assets", {}) mpe_address = service_metadata.get("mpe_address", "") metadata_uri = "ipfs://" + metadata_uri contributors = service_metadata.get("contributors", []) tags_data = service_metadata.get("tags", []) state = \ ServiceFactory.create_service_state_entity_model(org_uuid, service_uuid, getattr(ServiceStatus, "PUBLISHED_UNAPPROVED").value) self._add_validation_attribute_to_endpoint( service_metadata.get("groups", [])) groups = [ ServiceFactory.create_service_group_entity_model( org_uuid, service_uuid, group) for group in service_metadata.get("groups", []) ] if existing_service: existing_service.display_name = display_name existing_service.short_description = short_description existing_service.description = description existing_service.project_url = project_url existing_service.proto = proto existing_service.assets = ServiceFactory.parse_service_metadata_assets( assets, existing_service.assets) existing_service.mpe_address = mpe_address existing_service.metadata_uri = metadata_uri existing_service.contributors = contributors existing_service.tags = tags_data existing_service.groups = [ ServiceFactory.create_service_group_entity_model( org_uuid, existing_service.uuid, group) for group in service_metadata.get("groups", []) ] recieved_service = Service(org_uuid, str(uuid4()), service_id, display_name, short_description, description, project_url, proto, assets, DEFAULT_SERVICE_RANKING, {}, contributors, tags_data, mpe_address, metadata_uri, groups, state) if not existing_service: self._service_repository.add_service(recieved_service, BLOCKCHAIN_USER) elif existing_service.service_state.transaction_hash is None: self._service_repository.save_service(BLOCKCHAIN_USER, existing_service, ServiceStatus.DRAFT.value) elif existing_service.service_state.transaction_hash != transaction_hash: # TODO: Implement major & minor changes self._service_repository.save_service(BLOCKCHAIN_USER, existing_service, ServiceStatus.DRAFT.value) elif existing_service.service_state.transaction_hash == transaction_hash: self.__curate_service_in_marketplace(service_id, org_id, curated=True) self._service_repository.save_service( BLOCKCHAIN_USER, existing_service, ServiceStatus.PUBLISHED.value)