def verify_or_create_private_keys_ctx( ctx: Context, aea_project_path: Path = ROOT, exit_on_error: bool = False, ) -> None: """ Verify or create private keys with ctx provided. :param ctx: Context """ try: AgentConfigManager.verify_or_create_private_keys( aea_project_path, private_key_helper=private_key_verify_or_create, substitude_env_vars=False, ).dump_config() agent_config = AgentConfigManager.verify_or_create_private_keys( aea_project_path, private_key_helper=private_key_verify_or_create).agent_config if ctx is not None: ctx.agent_config = agent_config except ValueError as e: # pragma: nocover if exit_on_error: sys.exit(1) raise click.ClickException(str(e))
def test_envvars_preserved(*mocks): """Test env vars not modified on config update.""" dct = deepcopy(agent_config_data) new_cosmos_key_value = "cosmons_key_updated" with patch.object(AgentConfigManager, "_load_config_data", return_value=[dct]): os.environ["DISABLE_LOGS"] = "true" agent_config_manager = AgentConfigManager.load(".", substitude_env_vars=False) assert ( agent_config_manager.json["logging_config"]["disable_existing_loggers"] == dct["logging_config"]["disable_existing_loggers"] ) with patch.object(AgentConfigManager, "_load_config_data", return_value=[dct]): os.environ["DISABLE_LOGS"] = "true" agent_config_manager = AgentConfigManager.load(".", substitude_env_vars=False) assert ( agent_config_manager.json["private_key_paths"]["cosmos"] != new_cosmos_key_value ) agent_config_manager.update_config( {"private_key_paths": {"cosmos": new_cosmos_key_value}} ) assert ( agent_config_manager.json["logging_config"]["disable_existing_loggers"] == dct["logging_config"]["disable_existing_loggers"] ) assert ( agent_config_manager.json["private_key_paths"]["cosmos"] == new_cosmos_key_value )
def test_agent_attribute_get_set(): """Test agent config manager get set variables.""" dct = deepcopy(agent_config_data) with patch.object(AgentConfigManager, "_load_config_data", return_value=[dct]): os.environ["DISABLE_LOGS"] = "true" agent_config_manager = AgentConfigManager.load( DUMMY_AEA, substitude_env_vars=False ) assert ( agent_config_manager.get_variable("agent.default_ledger") == dct["default_ledger"] ) assert ( agent_config_manager.get_variable("vendor.fetchai.skills.error.name") == "error" ) assert ( agent_config_manager.get_variable( "vendor.fetchai.connections.local.is_abstract" ) is False ) agent_config_manager.set_variable( "vendor.fetchai.connections.local.is_abstract", True ) assert ( agent_config_manager.get_variable( "vendor.fetchai.connections.local.is_abstract" ) is True ) agent_config_manager.set_variable("agent.default_ledger", "fetchai") assert agent_config_manager.get_variable("agent.default_ledger") == "fetchai" assert ( agent_config_manager.json["component_configurations"][0]["is_abstract"] is True ) agent_config_manager = AgentConfigManager.load(DUMMY_AEA, substitude_env_vars=False) agent_config_manager.set_variable( "vendor.fetchai.connections.p2p_libp2p.config.delegate_uri", "some_url" ) assert ( agent_config_manager.get_variable( "vendor.fetchai.connections.p2p_libp2p.config.delegate_uri" ) == "some_url" ) with pytest.raises( ValueError, match="Attribute `does_not_exist` for AgentConfig does not exist" ): agent_config_manager.get_variable("agent.does_not_exist") agent_config_manager.validate_current_config() agent_config_manager.verify_or_create_private_keys(DUMMY_AEA, lambda x, y, z: None)
def _get_cert_requests(project_directory: str, manager: AgentConfigManager, connection_id: PublicId) -> List[CertRequest]: """ Get certificate requests, taking the overrides into account. :param project_directory: aea project directory. :param manager: AgentConfigManager :param connection_id: the connection id. :return: the list of cert requests. """ path = get_dotted_package_path_unified(project_directory, manager.agent_config, CONNECTION, connection_id) path_to_cert_requests = f"{path}.cert_requests" try: cert_requests = manager.get_variable(path_to_cert_requests) except VariableDoesNotExist: return [] cert_requests = cast(List[Dict], cert_requests) return [ CertRequest.from_json(cert_request_json) for cert_request_json in cert_requests ]
def set_command( ctx: Context, json_path: str, value: str, type_: Optional[str], ): """Set a field.""" try: agent_config_manager = AgentConfigManager.load(ctx.cwd) current_value = None with contextlib.suppress(VariableDoesNotExist): current_value = agent_config_manager.get_variable(json_path) # type was not specified, tried to auto determine if type_ is None: # apply str as default type converted_value = convert_value_str_to_type(value, "str") if current_value is not None: # try to convert to original value's type with contextlib.suppress(Exception): converted_value = convert_value_str_to_type( value, type(current_value).__name__ ) else: # convert to type specified by user converted_value = convert_value_str_to_type(value, cast(str, type_)) agent_config_manager.set_variable(json_path, converted_value) agent_config_manager.dump_config() except ExtraPropertiesError as e: # pragma: nocover raise ClickException(f"Attribute `{e.args[0][0]}` is not allowed to change!") except (ValueError, AEAException) as e: raise ClickException(*e.args)
def test_dump_config(): """Test AgentConfigManager.dump_config.""" agent_config_manager = AgentConfigManager.load(DUMMY_AEA, substitude_env_vars=False) with patch("aea.configurations.manager.open_file", mock_open()), patch( "aea.configurations.loader.ConfigLoader.dump" ) as dump_mock: agent_config_manager.dump_config() dump_mock.assert_called_once()
def get_balance(self) -> int: """Get balance for current agent.""" with cd(self._get_cwd()): agent_config = AgentConfigManager.verify_or_create_private_keys( Path("."), substitude_env_vars=False, private_key_helper=private_key_verify_or_create, ).agent_config wallet = get_wallet_from_agent_config(agent_config) return int(try_get_balance(agent_config, wallet, self.LEDGER_ID))
def get(ctx: Context, json_path: str): """Get a field.""" try: agent_config_manager = AgentConfigManager.load(ctx.cwd) value = agent_config_manager.get_variable(json_path) except (ValueError, AEAException) as e: raise ClickException(*e.args) if isinstance(value, dict): # turn it to json compatible string, not dict str representation value = json.dumps(value, sort_keys=True) click.echo(value)
def test_agent_attribute_get_and_apply_overridables(): """Test AgentConfigManager.get_overridables and apply it.""" agent_config_manager = AgentConfigManager.load(DUMMY_AEA, substitude_env_vars=False) initial_agent_config_json = agent_config_manager.json agent_overrides, component_overrides = agent_config_manager.get_overridables() agent_config_manager.update_config(agent_overrides) assert initial_agent_config_json == agent_config_manager.json agent_overrides["component_configurations"] = component_overrides agent_config_manager.update_config(agent_overrides) assert agent_config_manager._filter_overrides(agent_overrides) == SAME_MARK agent_overrides["execution_timeout"] = 12 assert agent_config_manager._filter_overrides(agent_overrides) == { "execution_timeout": 12 }
def issue_certificates(click_context: click.Context) -> None: """Issue certificates for connections that require them.""" ctx = cast(Context, click_context.obj) agent_config_manager = AgentConfigManager.load(ctx.cwd) issue_certificates_(ctx.cwd, agent_config_manager)
def issue_certificates(click_context): """Issue certificates for connections that require them.""" ctx = cast(Context, click_context.obj) agent_config_manager = AgentConfigManager.load(ctx.cwd) issue_certificates_(ctx.cwd, agent_config_manager) click.echo("All certificates have been issued.")
def test_envvars_applied(): """Test env vars replaced with values.""" dct = deepcopy(agent_config_data) with patch.object(AgentConfigManager, "_load_config_data", return_value=[dct]): os.environ["DISABLE_LOGS"] = "true" agent_config_manager = AgentConfigManager.load(".", substitude_env_vars=True) assert ( agent_config_manager.json["logging_config"]["disable_existing_loggers"] is True ) with patch.object(AgentConfigManager, "_load_config_data", return_value=[dct]): os.environ["DISABLE_LOGS"] = "false" agent_config_manager = AgentConfigManager.load(".", substitude_env_vars=True) assert ( agent_config_manager.json["logging_config"]["disable_existing_loggers"] is False ) # no env! no default value os.environ.pop("DISABLE_LOGS") with pytest.raises( ValueError, match="`DISABLE_LOGS` not found in env variables and no default value set!", ): with patch.object(AgentConfigManager, "_load_config_data", return_value=[dct]): agent_config_manager = AgentConfigManager.load( ".", substitude_env_vars=True ) assert ( agent_config_manager.json["logging_config"]["disable_existing_loggers"] is False ) # check default value specified dct["logging_config"]["disable_existing_loggers"] = "${DISABLE_LOGS:bool:true}" with patch.object(AgentConfigManager, "_load_config_data", return_value=[dct]): agent_config_manager = AgentConfigManager.load(".", substitude_env_vars=True) assert ( agent_config_manager.json["logging_config"]["disable_existing_loggers"] is True ) # check incorrect data type dct["logging_config"]["disable_existing_loggers"] = "${DISABLE_LOGS:int:true}" with pytest.raises(ValueError, match="Cannot convert string `true` to type `int`"): with patch.object(AgentConfigManager, "_load_config_data", return_value=[dct]): agent_config_manager = AgentConfigManager.load( ".", substitude_env_vars=True ) assert ( agent_config_manager.json["logging_config"]["disable_existing_loggers"] is True ) # not applied dct = deepcopy(agent_config_data) with patch.object(AgentConfigManager, "_load_config_data", return_value=[dct]): os.environ["DISABLE_LOGS"] = "true" agent_config_manager = AgentConfigManager.load(".", substitude_env_vars=False) assert ( agent_config_manager.json["logging_config"]["disable_existing_loggers"] == dct["logging_config"]["disable_existing_loggers"] )
def test_agent_attribute_get_overridables(): """Test AgentConfigManager.get_overridables.""" agent_config_manager = AgentConfigManager.load(DUMMY_AEA, substitude_env_vars=False) agent_overrides, component_overrides = agent_config_manager.get_overridables() assert "default_ledger" in agent_overrides assert "is_abstract" in list(component_overrides.values())[0]
def agent_config_manager(self) -> AgentConfigManager: """Get agent configuration manager instance for the config.""" return AgentConfigManager(self.agent_config, self.project.path)