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 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()
 def publish_service_data_to_ipfs(self):
     service = ServiceRepository().get_service_for_given_service_uuid(
         self.org_uuid, self.service_uuid)
     if service.service_state.state == ServiceStatus.APPROVED.value:
         service = self.publish_proto_files_in_ipfs(service)
         service_metadata = service.to_metadata()
         filename = f"{METADATA_FILE_PATH}/{service.uuid}_service_metadata.json"
         service.metadata_ipfs_hash = ServicePublisherService.publish_to_ipfs(
             filename, service_metadata)
         return {
             "service_metadata": service.to_metadata(),
             "metadata_ipfs_hash": "ipfs://" + service.metadata_ipfs_hash
         }
     logger.info(
         f"Service status needs to be {ServiceStatus.APPROVED.value} to be eligible for publishing."
     )
     raise InvalidServiceState()
 def get_services_for_organization(self, payload):
     offset = payload.get("offset", DEFAULT_OFFSET)
     limit = payload.get("limit", DEFAULT_LIMIT)
     search_string = payload["q"]
     search_attribute = payload["s"]
     sort_by = payload["sort_by"].lower()
     order_by = payload["order_by"].lower()
     filter_parameters = {
         "offset":
         offset,
         "limit":
         limit,
         "search_string":
         search_string,
         "search_attribute":
         search_attribute
         if search_attribute in ALLOWED_ATTRIBUTES_FOR_SERVICE_SEARCH else
         DEFAULT_ATTRIBUTE_FOR_SERVICE_SEARCH,
         "sort_by":
         sort_by if sort_by in ALLOWED_ATTRIBUTES_FOR_SERVICE_SORT_BY else
         DEFAULT_ATTRIBUTES_FOR_SERVICE_SORT_BY,
         "order_by":
         order_by if order_by in ALLOWED_ATTRIBUTES_FOR_SERVICE_SORT_BY else
         DEFAULT_ATTRIBUTES_FOR_SERVICE_ORDER_BY
     }
     search_result = ServiceRepository().get_services_for_organization(
         self.org_uuid, filter_parameters)
     search_count = ServiceRepository(
     ).get_total_count_of_services_for_organization(self.org_uuid,
                                                    filter_parameters)
     return {
         "total_count": search_count,
         "offset": offset,
         "limit": limit,
         "result": search_result
     }
 def publish_proto_files_in_ipfs(self, service):
     proto_url = service.assets.get("proto_files", {}).get("url", None)
     if proto_url is None:
         raise ServiceProtoNotFoundException
     ipfs_client = IPFSUtil(IPFS_URL['url'], IPFS_URL['port'])
     asset_ipfs_hash = self.publish_proto_in_ipfs(
         ipfs_client, proto_url,
         f"{ASSET_DIR}/{service.org_uuid}/{service.uuid}")
     service.assets["proto_files"]["ipfs_hash"] = asset_ipfs_hash
     service.proto = {
         "model_ipfs_hash": asset_ipfs_hash,
         "encoding": "proto",
         "service_type": "grpc"
     }
     service = ServiceRepository().save_service(self.username, service,
                                                service.service_state.state)
     return service
import json
from datetime import datetime as dt
from unittest import TestCase

from common.constant import StatusCode
from registry.application.handlers.service_handlers import verify_service_id, save_service, create_service, \
    get_services_for_organization, get_service_for_service_uuid, submit_service_for_approval, \
    save_transaction_hash_for_published_service
from registry.constants import ServiceAvailabilityStatus, ServiceStatus
from registry.infrastructure.models import Organization, Service, ServiceState, ServiceGroup, \
    ServiceReviewHistory
from registry.infrastructure.repositories.organization_repository import OrganizationPublisherRepository
from registry.infrastructure.repositories.service_repository import ServiceRepository

org_repo = OrganizationPublisherRepository()
service_repo = ServiceRepository()


class TestService(TestCase):
    def setUp(self):
        pass

    def test_verify_service_id(self):
        self.tearDown()
        org_repo.add_item(
            Organization(name="test_org",
                         org_id="test_org_id",
                         uuid="test_org_uuid",
                         org_type="organization",
                         description="that is the dummy org for testcases",
                         short_description="that is the short description",
 def create_service(self, payload):
     service_uuid = uuid4().hex
     service = ServiceFactory().create_service_entity_model(
         self.org_uuid, service_uuid, payload, ServiceStatus.DRAFT.value)
     ServiceRepository().add_service(service, self.username)
     return {"org_uuid": self.org_uuid, "service_uuid": service_uuid}
 def get_service_id_availability_status(self, service_id):
     record_exist = ServiceRepository(
     ).check_service_id_within_organization(self.org_uuid, service_id)
     if record_exist:
         return ServiceAvailabilityStatus.UNAVAILABLE.value
     return ServiceAvailabilityStatus.AVAILABLE.value
 def get_service_for_given_service_uuid(self):
     service = ServiceRepository().get_service_for_given_service_uuid(
         self.org_uuid, self.service_uuid)
     return service.to_response()