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))
Beispiel #2
0
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
    )
Beispiel #3
0
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)
Beispiel #4
0
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
    ]
Beispiel #5
0
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)
Beispiel #6
0
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()
Beispiel #7
0
 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))
Beispiel #8
0
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)
Beispiel #9
0
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
    }
Beispiel #10
0
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.")
Beispiel #12
0
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"]
    )
Beispiel #13
0
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]
Beispiel #14
0
 def agent_config_manager(self) -> AgentConfigManager:
     """Get agent configuration manager instance for the config."""
     return AgentConfigManager(self.agent_config, self.project.path)