def submit_service_for_approval(self, payload):
     service = ServiceFactory().create_service_entity_model(
         self.org_uuid, self.service_uuid, payload,
         ServiceStatus.APPROVAL_PENDING.value)
     service = ServiceRepository().save_service(
         self.username, service, ServiceStatus.APPROVAL_PENDING.value)
     return service.to_response()
 def save_service(self, payload):
     service = ServiceFactory().create_service_entity_model(
         self.org_uuid, self.service_uuid, payload,
         ServiceStatus.DRAFT.value)
     service = ServiceRepository().save_service(self.username, service,
                                                ServiceStatus.DRAFT.value)
     return service.to_response()
Exemplo n.º 3
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()
Exemplo n.º 4
0
 def get_service_state_with_status(self, status):
     service_state_db = self.session.query(ServiceState).filter(
         ServiceState.state == status).all()
     service_state = ServiceFactory.convert_service_state_from_db_list(
         service_state_db)
     self.session.commit()
     return service_state
 def save_service(self, username, service, state):
     service_group_db_model = [
         ServiceFactory().convert_service_group_entity_model_to_db_model(
             group) for group in service.groups
     ]
     try:
         self.session.query(ServiceGroup).filter(
             ServiceGroup.org_uuid == service.org_uuid).filter(
                 ServiceGroup.service_uuid == service.uuid).delete(
                     synchronize_session='fetch')
         self.session.commit()
     except Exception as e:
         self.session.rollback()
         raise e
     try:
         service_db = self.session.query(Service).filter(
             Service.org_uuid == service.org_uuid).filter(
                 Service.uuid == service.uuid).first()
         service_db.display_name = service.display_name
         service_db.service_id = service.service_id
         service_db.metadata_uri = service.metadata_uri
         service_db.proto = service.proto
         service_db.short_description = service.short_description
         service_db.description = service.description
         service_db.project_url = service.project_url
         service_db.assets = service.assets
         service_db.rating = service.rating
         service_db.ranking = service.ranking
         service_db.contributors = service.contributors
         service_db.tags = service.tags
         service_db.mpe_address = service.mpe_address
         service_db.updated_on = dt.utcnow()
         service_db.groups = service_group_db_model
         service_db.service_state.state = state
         service_db.service_state.transaction_hash = service.service_state.transaction_hash
         service_db.service_state.updated_by = username
         service_db.service_state.updated_on = dt.utcnow()
         self.session.commit()
     except Exception as e:
         self.session.rollback()
         raise e
     if not service_db:
         return None
     service = ServiceFactory().convert_service_db_model_to_entity_model(
         service_db)
     return service
 def save_service(self, payload):
     service = ServiceFactory().create_service_entity_model(
         self._org_uuid, self._service_uuid, payload,
         ServiceStatus.DRAFT.value)
     service = ServicePublisherRepository().save_service(
         self._username, service, ServiceStatus.DRAFT.value)
     comments = payload.get("comments",
                            {}).get(UserType.SERVICE_PROVIDER.value, "")
     if bool(comments):
         service_provider_comment = service_factory. \
             create_service_comment_entity_model(org_uuid=self._org_uuid,
                                                 service_uuid=self._service_uuid,
                                                 support_type="SERVICE_APPROVAL",
                                                 user_type="SERVICE_PROVIDER",
                                                 commented_by=self._username,
                                                 comment=comments)
         ServicePublisherRepository().save_service_comments(
             service_provider_comment)
         service.comments = self.get_service_comments()
     return service.to_dict()
Exemplo n.º 7
0
 def get_service_for_given_service_uuid(self, org_uuid, service_uuid):
     try:
         service_db = self.session.query(Service).filter(
             Service.org_uuid == org_uuid).filter(
                 Service.uuid == service_uuid).first()
         service = ServiceFactory(
         ).convert_service_db_model_to_entity_model(service_db)
         self.session.commit()
     except Exception as e:
         self.session.rollback()
         raise e
     return service
 def save_transaction_hash_for_published_service(self, payload):
     service = ServiceRepository().get_service_for_given_service_uuid(
         self.org_uuid, self.service_uuid)
     if service.service_state.state == ServiceStatus.APPROVED.value:
         service.service_state = \
             ServiceFactory().create_service_state_entity_model(
                 self.org_uuid, self.service_uuid, ServiceStatus.PUBLISH_IN_PROGRESS.value,
                 payload.get("transaction_hash", ""))
         ServiceRepository().save_service(
             self.username, service,
             ServiceStatus.PUBLISH_IN_PROGRESS.value)
     return StatusCode.OK
 def get_service_state(self, status):
     try:
         services_state_db = self.session.query(ServiceState).filter(
             ServiceState.state == status).all()
         self.session.commit()
     except SQLAlchemyError as error:
         self.session.rollback()
         raise error
     services_state = []
     for service_state_db in services_state_db:
         service_state = ServiceFactory.convert_service_state_from_db(
             service_state_db)
         services_state.append(service_state)
     return services_state
Exemplo n.º 10
0
 def get_list_of_service_pending_for_approval(self, limit):
     try:
         raw_services_data = self.session.query(Service) \
             .join(ServiceState, Service.uuid == ServiceState.service_uuid).filter(
             ServiceState.state == ServiceStatus.APPROVAL_PENDING.value).limit(limit)
         services = []
         for service in raw_services_data:
             services.append(
                 ServiceFactory().convert_service_db_model_to_entity_model(
                     service))
         self.session.commit()
     except Exception as e:
         self.session.rollback()
         raise e
     return services
Exemplo n.º 11
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()
 def get_services_for_organization(self, org_uuid, payload):
     try:
         services_db = self.session.query(Service). \
             filter(getattr(Service, payload["search_attribute"]).like("%" + payload["search_string"] + "%")). \
             filter(Service.org_uuid == org_uuid). \
             order_by(getattr(getattr(Service, payload["sort_by"]), payload["order_by"])()). \
             slice(payload["offset"], payload["limit"]).all()
         self.session.commit()
     except Exception as e:
         self.session.rollback()
         raise e
     services = []
     for service in services_db:
         services.append(
             ServiceFactory().convert_service_db_model_to_entity_model(
                 service))
     return services
Exemplo n.º 13
0
 def get_last_service_comment(self, org_uuid, service_uuid, support_type,
                              user_type):
     try:
         service_comment_db = self.session.query(ServiceComment) \
             .filter(ServiceComment.org_uuid == org_uuid). \
             filter(ServiceComment.service_uuid == service_uuid). \
             filter(ServiceComment.support_type == support_type). \
             filter(ServiceComment.user_type == user_type). \
             order_by(ServiceComment.created_on.desc()).first()
         service_comment = ServiceFactory(
         ).convert_service_comment_db_model_to_entity_model(
             service_comment_db)
         self.session.commit()
     except Exception as e:
         self.session.rollback()
         raise e
     return service_comment
 def get_offchain_service_config(self, org_uuid, service_uuid):
     try:
         sql_query = sqlalchemy.text(
             f"select * from offchain_service_config where service_uuid = '{service_uuid}' and org_uuid = '{org_uuid}'"
         )
         result = self.session.execute(sql_query)
         result_as_list = result.fetchall()
         print(f"offchain configs :: {result_as_list}")
     except SQLAlchemyError as error:
         self.session.rollback()
         raise error
     offchain_service_config = ServiceFactory(
     ).convert_offchain_service_config_db_model_to_entity_model(
         org_uuid=org_uuid,
         service_uuid=service_uuid,
         offchain_service_configs_db=result_as_list)
     return offchain_service_config
Exemplo n.º 15
0
 def get_service_for_given_service_id_and_org_id(self, org_id, service_id):
     try:
         organization = self.session.query(Organization).filter(
             Organization.org_id == org_id).first()
         if not organization:
             raise Exception(
                 f"No organization found for org_id:{org_id} service_id:{service_id}"
             )
         org_uuid = organization.uuid
         service_db = self.session.query(Service).filter(
             Service.org_uuid == org_uuid).filter(
                 Service.service_id == service_id).first()
         service = ServiceFactory(
         ).convert_service_db_model_to_entity_model(service_db)
         self.session.commit()
     except Exception as e:
         self.session.rollback()
         raise e
     return org_uuid, service
 def get_service_for_given_service_id_and_org_id(self, org_id, service_id):
     try:
         service_db = self.session.query(Service). \
             join(Organization, Service.org_uuid == Organization.uuid). \
             filter(Organization.org_id == org_id). \
             filter(Service.service_id == service_id). \
             first()
         self.session.commit()
     except Exception as e:
         self.session.rollback()
         raise e
     if service_db:
         service = ServiceFactory(
         ).convert_service_db_model_to_entity_model(service_db)
         return service.org_uuid, service
     organization = org_repo.get_organization(org_id=org_id)
     if organization:
         return organization.uuid, None
     raise Exception(
         f"No organization found for org_id:{org_id} service_id:{service_id}"
     )
    def test_service_to_metadata(self):
        payload = {
            "service_id":
            "sdfadsfd1",
            "display_name":
            "new_service_123",
            "short_description":
            "sadfasd",
            "description":
            "dsada",
            "project_url":
            "df",
            "proto": {},
            "assets": {
                "proto_files": {
                    "url":
                    "https://ropsten-marketplace-service-assets.s3.amazonaws.com/9887ec2e099e4afd92c4a052737eaa97/services/7420bf47989e4afdb1797d1bba8090aa/proto/20200327130256_proto_files.zip",
                    "ipfs_hash":
                    "QmUfDprFisFeaRnmLEqks1AFN6iam5MmTh49KcomXHEiQY"
                },
                "hero_image": {
                    "url":
                    "https://ropsten-marketplace-service-assets.s3.amazonaws.com/9887ec2e099e4afd92c4a052737eaa97/services/7420bf47989e4afdb1797d1bba8090aa/assets/20200323130126_asset.png",
                    "ipfs_hash": ""
                },
                "demo_files": {
                    "url":
                    "https://ropsten-marketplace-service-assets.s3.amazonaws.com/9887ec2e099e4afd92c4a052737eaa97/services/7420bf47989e4afdb1797d1bba8090aa/component/20200401121414_component.zip",
                    "ipfs_hash":
                    "QmUfDprFisFeaRnmLEqks1AFN6iam5MmTh49KcomXHEiQY"
                }
            },
            "contributors": [{
                "name": "df",
                "email_id": ""
            }],
            "groups": [{
                "group_name":
                "default_group",
                "group_id":
                "a+8V4tUs+DBnZfxoh2vBHVv1pAt8pkCac8mpuKFltTo=",
                "free_calls":
                23,
                "free_call_signer_address":
                "0x7DF35C98f41F3Af0df1dc4c7F7D4C19a71Dd059F",
                "pricing": [{
                    "default": True,
                    "price_model": "fixed_price",
                    "price_in_cogs": 1
                }],
                "endpoints": {
                    "https://example-service-a.singularitynet.io:8085": {
                        "valid": False
                    }
                },
                "test_endpoints":
                ["https://example-service-a.singularitynet.io:8085"],
                "daemon_addresses":
                ["https://example-service-a.singularitynet.io:8085"]
            }],
            "tags": ["adsf"],
            "comments": {
                "SERVICE_PROVIDER": "",
                "SERVICE_APPROVER": "<div></div>"
            },
            "mpe_address":
            "0x8fb1dc8df86b388c7e00689d1ecb533a160b4d0c"
        }

        service = ServiceFactory.create_service_entity_model(
            "", "", payload, ServiceStatus.APPROVED.value)
        service_metadata = service.to_metadata()
        assert service_metadata == {
            "version":
            1,
            "display_name":
            "new_service_123",
            "encoding":
            "",
            "service_type":
            "",
            "model_ipfs_hash":
            "",
            "mpe_address":
            "0x8fb1dc8df86b388c7e00689d1ecb533a160b4d0c",
            "groups": [{
                "free_calls":
                23,
                "free_call_signer_address":
                "0x7DF35C98f41F3Af0df1dc4c7F7D4C19a71Dd059F",
                "daemon_addresses":
                ["https://example-service-a.singularitynet.io:8085"],
                "pricing": [{
                    "default": True,
                    "price_model": "fixed_price",
                    "price_in_cogs": 1
                }],
                "endpoints":
                ["https://example-service-a.singularitynet.io:8085"],
                "group_id":
                "a+8V4tUs+DBnZfxoh2vBHVv1pAt8pkCac8mpuKFltTo=",
                "group_name":
                "default_group"
            }],
            "service_description": {
                "url": "df",
                "short_description": "sadfasd",
                "description": "dsada"
            },
            "media": [{
                "order": 1,
                "url":
                "https://ropsten-marketplace-service-assets.s3.amazonaws.com/9887ec2e099e4afd92c4a052737eaa97/services/7420bf47989e4afdb1797d1bba8090aa/assets/20200323130126_asset.png",
                "file_type": "image",
                "asset_type": "hero_image",
                "alt_text": ""
            }],
            'tags': ['adsf'],
            "contributors": [{
                "name": "df",
                "email_id": ""
            }]
        }
Exemplo n.º 18
0
 def add_service(self, service, username):
     service_db_model = ServiceFactory(
     ).convert_service_entity_model_to_db_model(username, service)
     self.add_item(service_db_model)
Exemplo n.º 19
0
 def create_service(self, payload):
     service_uuid = uuid4().hex
     service = ServiceFactory().create_service_entity_model(
         self._org_uuid, service_uuid, payload, ServiceStatus.DRAFT.value)
     ServicePublisherRepository().add_service(service, self._username)
     return {"org_uuid": self._org_uuid, "service_uuid": service_uuid}
Exemplo n.º 20
0
from registry.infrastructure.repositories.organization_repository import OrganizationPublisherRepository
from registry.infrastructure.repositories.service_publisher_repository import ServicePublisherRepository

patch_all()
ALLOWED_ATTRIBUTES_FOR_SERVICE_SEARCH = ["display_name"]
DEFAULT_ATTRIBUTE_FOR_SERVICE_SEARCH = "display_name"
ALLOWED_ATTRIBUTES_FOR_SERVICE_SORT_BY = ["ranking", "service_id"]
DEFAULT_ATTRIBUTES_FOR_SERVICE_SORT_BY = "ranking"
ALLOWED_ATTRIBUTES_FOR_SERVICE_ORDER_BY = ["asc", "desc"]
DEFAULT_ATTRIBUTES_FOR_SERVICE_ORDER_BY = "desc"
DEFAULT_OFFSET = 0
DEFAULT_LIMIT = 0
BUILD_FAILURE_CODE = 0

logger = get_logger(__name__)
service_factory = ServiceFactory()
boto_util = BotoUtils(region_name=REGION_NAME)


class ServicePublisherService:
    def __init__(self, username, org_uuid, service_uuid):
        self._username = username
        self._org_uuid = org_uuid
        self._service_uuid = service_uuid
        self.obj_service_publisher_domain_service = ServicePublisherDomainService(
            username, org_uuid, service_uuid)

    def service_build_status_notifier(self, org_id, service_id, build_status):

        if build_status == BUILD_FAILURE_CODE:
            BUILD_FAIL_MESSAGE = "Build failed please check your components"
Exemplo n.º 21
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)