Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
    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)