Source code for gps_tracker.client.config

"""Definition of Client configuration."""

from __future__ import annotations

import urllib.parse

try:
    import attrs
except ModuleNotFoundError:
    # Handle attrs<21.3.0
    import attr as attrs  # type: ignore[no-redef]


def _api_url_converter(val: str) -> str:
    """
    Convert the API URL to expected format.

    Hostname must contain only the connection scheme and FQDN
    without trailing slash.

    :param val: user-defined input value for the API URL
    :type val: str

    :return: properly formatted API URL
    :rtype: str
    """
    val_parsed = urllib.parse.urlparse(val)
    return f"{val_parsed.scheme}://{val_parsed.netloc}"


def _password_repr(val: str) -> str:
    """Change representation of password to hide its content."""
    del val
    return "'********'"


[docs] @attrs.define(auto_attribs=True) class Config: # pylint: disable=too-few-public-methods """Configuration for API Clients.""" username: str = attrs.field(validator=attrs.validators.instance_of(str)) """Username used as credentials on Invoxia account.""" password: str = attrs.field( validator=attrs.validators.instance_of(str), repr=_password_repr ) """Password used as credentials on Invoxia account.""" api_url: str = attrs.field( converter=_api_url_converter, default="https://labs.invoxia.io" ) """Invoxia API URL."""
[docs] @classmethod def default_api_url(cls) -> str: """Return the default API URL.""" return attrs.fields(cls).api_url.default