def publish_metadata_in_ipfs_and_update_registration(self): # first we check that we do not change payment_address or group_id in existed payment groups old_metadata = self._get_service_metadata_from_registry() new_metadata = load_mpe_service_metadata(self.args.metadata_file) for old_group in old_metadata["groups"]: if (new_metadata.is_group_name_exists(old_group["group_name"])): new_group = new_metadata.get_group(old_group["group_name"]) if (new_group["group_id"] != old_group["group_id"] or new_group["payment_address"] != old_group["payment_address"]): raise Exception( "\n\nYou are trying to change group_id or payment_address in group '%s'.\n" % old_group["group_name"] + "It would make all open channels invalid.\n" + "You shoudn't use 'metadata-init' for existed service, because it reinitialize group_id\n" + "Please use 'metadata-set-model' for change your protobuf file\n" + "Please use 'metadata-remove-all-endpoints/metadata-add-endpoints to update endpoints'\n\n" ) metadata_uri = hash_to_bytesuri( self._publish_metadata_in_ipfs(self.args.metadata_file)) params = [ type_converter("bytes32")(self.args.org_id), type_converter("bytes32")(self.args.service_id), metadata_uri ] self.transact_contract_command("Registry", "updateServiceRegistration", params)
def metadata_add_description(self): """ Metadata: add description """ service_description = {} if (self.args.json): service_description = json.loads(self.args.json) if (self.args.url): if "url" in service_description: raise Exception( "json service description already contains url field") service_description["url"] = self.args.url if (self.args.description): if "description" in service_description: raise Exception( "json service description already contains description field" ) service_description["description"] = self.args.description metadata = load_mpe_service_metadata(self.args.metadata_file) # merge with old service_description if necessary if ("service_description" in metadata): service_description = { **metadata["service_description"], **service_description } metadata.set_simple_field("service_description", service_description) metadata.save_pretty(self.args.metadata_file)
def publish_proto_metadata_update(self): """ Publish protobuf model in ipfs and update existing metadata file """ metadata = load_mpe_service_metadata(self.args.metadata_file) ipfs_hash_base58 = utils_ipfs.publish_proto_in_ipfs( self._get_ipfs_client(), self.args.protodir) metadata.set_simple_field("model_ipfs_hash", ipfs_hash_base58) metadata.save_pretty(self.args.metadata_file)
def metadata_add_endpoints(self): """ Metadata: add endpoint to the group """ metadata = load_mpe_service_metadata(self.args.metadata_file) group_name = metadata.get_group_name_nonetrick(self.args.group_name) for endpoint in self.args.endpoints: metadata.add_endpoint(group_name, endpoint) metadata.save_pretty(self.args.metadata_file)
def metadata_update_endpoints(self): """ Metadata: Remove all endpoints from the group and add new ones """ metadata = load_mpe_service_metadata(self.args.metadata_file) group_name = metadata.get_group_name_nonetrick(self.args.group_name) metadata.remove_all_endpoints_for_group(group_name) for endpoint in self.args.endpoints: metadata.add_endpoint(group_name, endpoint) metadata.save_pretty(self.args.metadata_file)
def _read_metadata_for_service(self, org_id, service_id): sdir = self.get_service_spec_dir(org_id, service_id) if (not os.path.exists(sdir)): raise Exception( "Service with org_id=%s and service_id=%s is not initialized" % (org_id, service_id)) return load_mpe_service_metadata( sdir.joinpath("service_metadata.json"))
def _publish_metadata_in_ipfs(self, metadata_file): metadata = load_mpe_service_metadata(metadata_file) mpe_address = self.get_mpe_address() if (self.args.update_mpe_address): metadata.set_simple_field("mpe_address", mpe_address) metadata.save_pretty(self.args.metadata_file) if (mpe_address.lower() != metadata["mpe_address"].lower()): raise Exception( "\n\nmpe_address in metadata does not correspond to the current MultiPartyEscrow contract address\n" + "You have two possibilities:\n" + "1. You can use --multipartyescrow-at to set current mpe address\n" + "2. You can use --update-mpe-address parameter to update mpe_address in metadata before publishing it\n" ) return self._get_ipfs_client().add_bytes( metadata.get_json().encode("utf-8"))
def extract_service_api_from_metadata(self): metadata = load_mpe_service_metadata(self.args.metadata_file) safe_extract_proto_from_ipfs(self._get_ipfs_client(), metadata["model_ipfs_hash"], self.args.protodir)
def metadata_remove_all_endpoints(self): """ Metadata: remove all endpoints from all groups """ metadata = load_mpe_service_metadata(self.args.metadata_file) metadata.remove_all_endpoints() metadata.save_pretty(self.args.metadata_file)
def metadata_add_group(self): metadata = load_mpe_service_metadata(self.args.metadata_file) self._metadata_add_group(metadata) metadata.save_pretty(self.args.metadata_file)
def metadata_set_fixed_price(self): metadata = load_mpe_service_metadata(self.args.metadata_file) metadata.set_fixed_price_in_cogs(self.args.price) metadata.save_pretty(self.args.metadata_file)
def _read_metadata_for_service(self, org_id, service_id): sdir = self.get_service_spec_dir(org_id, service_id) if (not os.path.exists(sdir)): raise Exception("Service with org_id=%s and service_id=%s is not initialized"%(org_id, service_id)) return load_mpe_service_metadata(sdir.joinpath("service_metadata.json"))
def _get_service_metadata_for_channel(self): if (not os.path.exists(self.get_channel_dir())): raise Exception("Channel %i is not initilized" % self.args.channel_id) return load_mpe_service_metadata( self.get_channel_dir().joinpath("service_metadata.json"))
def _publish_metadata_in_ipfs(self, metadata_file): metadata = load_mpe_service_metadata(metadata_file) return self._get_ipfs_client().add_bytes( metadata.get_json().encode("utf-8"))
def metadata_add_endpoints(self): metadata = load_mpe_service_metadata(self.args.metadata_file) metadata.load(self.args.metadata_file) for endpoint in self.args.endpoints: metadata.add_endpoint(self.args.group_name, endpoint) metadata.save(self.args.metadata_file)
def metadata_add_group(self): metadata = load_mpe_service_metadata(self.args.metadata_file) metadata.add_group(self.args.group_name, self.args.payment_address) metadata.save(self.args.metadata_file)
def _get_channel_service_metadata(self): return load_mpe_service_metadata( self.get_channel_dir().joinpath("service_metadata.json"))
def init_channel_from_metadata(self): metadata = load_mpe_service_metadata(self.args.metadata_file) self._check_channel_is_mine(self.args.channel_id) self._init_channel_from_metadata(self.get_channel_dir(), metadata)
def open_init_channel_from_metadata(self): metadata = load_mpe_service_metadata(self.args.metadata_file) self._open_init_channel_from_metadata(metadata)
def open_init_channel_from_metadata(self): metadata = load_mpe_service_metadata(self.args.metadata_file) self._open_init_channel_from_metadata(metadata, {})