Saltar a contenido

ApiClient

Cliente para interactuar con la API de Flow.

Attributes:

Name Type Description
api_url str

URL base de la API de Flow. Por defecto es "https://www.flow.cl/api".

api_key str

Clave de la API de Flow.

api_secret str

Secreto de la API de Flow.

Source code in pyflowcl/Clients.py
Python
@dataclass
class ApiClient:
    """
    Cliente para interactuar con la API de Flow.

    Attributes:
        api_url (str): URL base de la API de Flow. Por defecto es "https://www.flow.cl/api".
        api_key (str): Clave de la API de Flow.
        api_secret (str): Secreto de la API de Flow.
    """

    api_url: str = "https://www.flow.cl/api"
    api_key: str = ""
    api_secret: str = ""

    def make_signature(self, params: dict[str, Any]) -> str:
        """
        Genera una firma HMAC-SHA256 para los parámetros dados.

        Args:
            params (dict[str, Any]): Diccionario de parámetros para firmar.

        Returns:
            str: Firma hexadecimal generada.
        """
        string = ""
        for k, d in params.items():
            if d is not None:
                string = string + f"{k}{d}"
        hash_string = hmac.new(self.api_secret.encode(), string.encode(), hashlib.sha256).hexdigest()

        return hash_string

    def get(self, url: str, query_string: dict[str, Any]) -> dict[str, Any]:
        """
        Realiza una solicitud GET a la API de Flow.

        Args:
            url (str): URL relativa para la solicitud.
            query_string (dict[str, Any]): Parámetros de consulta para la solicitud.

        Returns:
            dict[str, Any]: Respuesta de la API como un diccionario.
        """
        return requests.get(url, params=query_string)

    def post(self, url: str, post_data: dict[str, Any]) -> dict[str, Any]:
        """
        Realiza una solicitud POST a la API de Flow.

        Args:
            url (str): URL relativa para la solicitud.
            post_data (dict[str, Any]): Datos a enviar en el cuerpo de la solicitud.

        Returns:
            dict[str, Any]: Respuesta de la API como un diccionario.
        """
        return requests.post(url, data=post_data)

get(url, query_string)

Realiza una solicitud GET a la API de Flow.

Parameters:

Name Type Description Default
url str

URL relativa para la solicitud.

required
query_string dict[str, Any]

Parámetros de consulta para la solicitud.

required

Returns:

Type Description
dict[str, Any]

dict[str, Any]: Respuesta de la API como un diccionario.

Source code in pyflowcl/Clients.py
Python
def get(self, url: str, query_string: dict[str, Any]) -> dict[str, Any]:
    """
    Realiza una solicitud GET a la API de Flow.

    Args:
        url (str): URL relativa para la solicitud.
        query_string (dict[str, Any]): Parámetros de consulta para la solicitud.

    Returns:
        dict[str, Any]: Respuesta de la API como un diccionario.
    """
    return requests.get(url, params=query_string)

make_signature(params)

Genera una firma HMAC-SHA256 para los parámetros dados.

Parameters:

Name Type Description Default
params dict[str, Any]

Diccionario de parámetros para firmar.

required

Returns:

Name Type Description
str str

Firma hexadecimal generada.

Source code in pyflowcl/Clients.py
Python
def make_signature(self, params: dict[str, Any]) -> str:
    """
    Genera una firma HMAC-SHA256 para los parámetros dados.

    Args:
        params (dict[str, Any]): Diccionario de parámetros para firmar.

    Returns:
        str: Firma hexadecimal generada.
    """
    string = ""
    for k, d in params.items():
        if d is not None:
            string = string + f"{k}{d}"
    hash_string = hmac.new(self.api_secret.encode(), string.encode(), hashlib.sha256).hexdigest()

    return hash_string

post(url, post_data)

Realiza una solicitud POST a la API de Flow.

Parameters:

Name Type Description Default
url str

URL relativa para la solicitud.

required
post_data dict[str, Any]

Datos a enviar en el cuerpo de la solicitud.

required

Returns:

Type Description
dict[str, Any]

dict[str, Any]: Respuesta de la API como un diccionario.

Source code in pyflowcl/Clients.py
Python
def post(self, url: str, post_data: dict[str, Any]) -> dict[str, Any]:
    """
    Realiza una solicitud POST a la API de Flow.

    Args:
        url (str): URL relativa para la solicitud.
        post_data (dict[str, Any]): Datos a enviar en el cuerpo de la solicitud.

    Returns:
        dict[str, Any]: Respuesta de la API como un diccionario.
    """
    return requests.post(url, data=post_data)