def test_from_json_and_to_json(self, connection_path): """Test the 'from_json' method and 'to_json' work correctly.""" f = open(connection_path) original_json = yaml.safe_load(f) expected_config = ConnectionConfig.from_json(original_json) assert isinstance(expected_config, ConnectionConfig) expected_json = expected_config.json actual_config = ConnectionConfig.from_json(expected_json) actual_json = actual_config.json assert expected_json == actual_json
def test_from_json_and_to_json(self, connection_path): """Test the 'from_json' method and 'to_json' work correctly.""" f = open(connection_path) original_json = yaml.safe_load(f) original_json["build_directory"] = "some" expected_config = ConnectionConfig.from_json(original_json) assert isinstance(expected_config, ConnectionConfig) assert isinstance(expected_config.package_dependencies, set) assert not expected_config.is_abstract_component expected_json = expected_config.json actual_config = ConnectionConfig.from_json(expected_json) actual_json = actual_config.json assert expected_json == actual_json
def test_from_json_and_to_json(self): """Test the 'from_json' method and 'to_json' work correctly.""" f = open( os.path.join(CUR_PATH, "data", "dummy_connection", "connection.yaml")) expected_json = yaml.safe_load(f) config = ConnectionConfig.from_json(expected_json) assert isinstance(config, ConnectionConfig) actual_json = config.json assert expected_json == actual_json
def ipfs_hashing( package_hashes: Dict[str, str], target_dir: str, package_type: str, package_name: str, ipfs_hash_only: IPFSHashOnly, ): """Hashes a package and its components.""" print("Processing package {} of type {}".format(package_name, package_type)) # load config file to get ignore patterns, dump again immediately to impose ordering if package_type == "agents": config = AgentConfig.from_json( yaml.safe_load(open(Path(target_dir, DEFAULT_AEA_CONFIG_FILE)))) yaml_dump(config.json, open(Path(target_dir, DEFAULT_AEA_CONFIG_FILE), "w")) elif package_type == "connections": config = ConnectionConfig.from_json( yaml.safe_load( open(Path(target_dir, DEFAULT_CONNECTION_CONFIG_FILE)))) yaml_dump(config.json, open(Path(target_dir, DEFAULT_CONNECTION_CONFIG_FILE), "w")) elif package_type == "contracts": config = ContractConfig.from_json( yaml.safe_load(open(Path(target_dir, DEFAULT_CONTRACT_CONFIG_FILE)))) yaml_dump(config.json, open(Path(target_dir, DEFAULT_CONTRACT_CONFIG_FILE), "w")) elif package_type == "protocols": config = ProtocolConfig.from_json( yaml.safe_load(open(Path(target_dir, DEFAULT_PROTOCOL_CONFIG_FILE)))) yaml_dump(config.json, open(Path(target_dir, DEFAULT_PROTOCOL_CONFIG_FILE), "w")) elif package_type == "skills": config = SkillConfig.from_json( yaml.safe_load(open(Path(target_dir, DEFAULT_SKILL_CONFIG_FILE)))) yaml_dump(config.json, open(Path(target_dir, DEFAULT_SKILL_CONFIG_FILE), "w")) config = yaml.safe_load(next(Path(target_dir).glob("*.yaml")).open()) ignore_patterns = config.get("fingerprint_ignore_patterns", []) if package_type != "agents": # hash inner components fingerprints_dict = _compute_fingerprint(Path(target_dir), ignore_patterns) # confirm ipfs only generates same hash: for file_name, ipfs_hash in fingerprints_dict.items(): path = os.path.join(target_dir, file_name) ipfsho_hash = ipfs_hash_only.get(path) if ipfsho_hash != ipfs_hash: print("WARNING, hashes don't match for: {}".format(path)) # update fingerprints file_name = package_type[:-1] + ".yaml" yaml_path = os.path.join(target_dir, file_name) file = open(yaml_path, mode="r") # read all lines at once whole_file = file.read() # close the file file.close() file = open(yaml_path, mode="r") # find and replace # TODO this can be simplified after https://github.com/fetchai/agents-aea/issues/932 existing = "" fingerprint_block = False for line in file: if line.find("fingerprint:") == 0: existing += line fingerprint_block = True elif fingerprint_block: if line.find(" ") == 0: # still inside fingerprint block existing += line else: # fingerprint block has ended break if len(fingerprints_dict) > 0: replacement = "fingerprint:\n" ordered_fingerprints_dict = collections.OrderedDict( sorted(fingerprints_dict.items())) for file_name, ipfs_hash in ordered_fingerprints_dict.items(): replacement += " " + file_name + ": " + ipfs_hash + "\n" else: replacement = "fingerprint: {}\n" whole_file = whole_file.replace(existing, replacement) # close the file file.close() # update fingerprints with open(yaml_path, "w") as f: f.write(whole_file) # hash again to get outer hash (this time all files): # TODO we still need to ignore some files result_list = client.add(target_dir) for result_dict in result_list: if package_name == result_dict["Name"]: key = os.path.join(AUTHOR, package_type, package_name) package_hashes[key] = result_dict["Hash"]