apigatewaycl


Nameapigatewaycl JSON
Version 5.0.0 PyPI version JSON
download
home_pagehttps://github.com/apigatewaycl/apigateway-api-client-python
SummaryCliente para realizar la integración con los servicios web de API Gateway desde Python.
upload_time2024-11-11 16:50:27
maintainerNone
docs_urlNone
authorAPI Gateway
requires_pythonNone
licenseLGPL
keywords sii chile
VCS
bugtrack_url
requirements alabaster Babel certifi charset-normalizer docutils idna imagesize importlib-metadata jaraco.classes Jinja2 keyring markdown-it-py MarkupSafe mdurl more-itertools nh3 packaging pkginfo Pygments python-dotenv readme-renderer requests requests-toolbelt rfc3986 rich snowballstemmer Sphinx sphinx-rtd-theme sphinxcontrib-applehelp sphinxcontrib-devhelp sphinxcontrib-htmlhelp sphinxcontrib-jquery sphinxcontrib-jsmath sphinxcontrib-qthelp sphinxcontrib-serializinghtml twine urllib3 zipp
Travis-CI No Travis.
coveralls test coverage No coveralls.
            
API Gateway: Cliente de API en Python
=====================================

.. image:: https://badge.fury.io/py/apigatewaycl.svg
    :target: https://pypi.org/project/apigatewaycl
.. image:: https://img.shields.io/pypi/status/apigatewaycl.svg
    :target: https://pypi.org/project/apigatewaycl
.. image:: https://img.shields.io/pypi/pyversions/apigatewaycl.svg
    :target: https://pypi.org/project/apigatewaycl
.. image:: https://img.shields.io/pypi/l/apigatewaycl.svg
    :target: https://raw.githubusercontent.com/apigatewaycl/apigateway-api-client-python/master/COPYING

Cliente para realizar la integración con los servicios web de `API Gateway <https://www.apigateway.cl>`_ desde Python.

Instalación y actualización
---------------------------

Instalar usando un entorno virtual y PIP con:

.. code:: shell

    python3 -m venv venv
    source venv/bin/activate
    pip install apigatewaycl

Actualizar usando PIP con:

.. code:: shell

    pip install apigatewaycl --upgrade

Cliente genérico vs clientes específicos
----------------------------------------

Este cliente de API Gateway tiene 2 formas de acceder a los recursos de la API:

1.  Cliente genérico: es un cliente que permite consumir de manera sencilla cualquier
    recurso de la API. Que actualmente exista o sea añadido en el futuro. Esto se logra
    porque el cliente recibe los nombres de los recursos, la parte de la URL que permite
    acceder al servicio web solicitado. Se proveen métodos que sólo sirven para acceder
    a la API de manera genérica, pero no para hacer acciones específicas ni obtener los
    datos en un formato específico. Este cliente es el que entrega mayor flexibilidad, ya
    que cada programador decide qué recursos desea consumir y cómo desea obtener los datos.

2.  Clientes específicos: son clases que permiten acceder de forma más natural a los
    recursos de la API. Al instanciar la clase, se tendrán métodos sencillos con parámetros
    para consumir la API. Sin ser necesario preocuparse de recordar o buscar en la
    documentación el nombre de los recursos que se deben consumir. Además de entregar los
    datos ya "listos" para ser usados en vez de tener que preocuparse de qué método del
    cliente genérico usar para obtenerlos en el formato requerido.

Autenticación en API Gateway
----------------------------

Lo más simple, y recomendado, es usar una variable de entorno con el
`token del usuario <https://apigateway.cl/dashboard#api-auth>`_, la cual será
reconocida automáticamente por el cliente:

.. code:: shell

    export APIGATEWAY_API_TOKEN="aquí-tu-token-de-usuario"

Si no se desea usar una variable de entorno, al instanciar los objetos se
deberá indicar el token del usuario. Ejemplo con el cliente genérico:

.. code:: python

    import apigatewaycl
    APIGATEWAY_API_TOKEN = "aquí-tu-token-de-usuario"
    client = apigatewaycl.api_client.ApiClient(APIGATEWAY_API_TOKEN)

El siguiente es un ejemplo con el cliente específico de Rcv. Primero se pasan
los datos obligatorios de RUT y clave del usuario. Luego además se pasa el token
delusuario de la API.

.. code:: python

    import apigatewaycl
    APIGATEWAY_API_TOKEN = "aquí-tu-token-de-usuario"
    SII_USUARIO_RUT = ""
    SII_USUARIO_CLAVE = ""
    rcv_client = Rcv(SII_USUARIO_RUT, SII_USUARIO_CLAVE, api_token = APIGATEWAY_API_TOKEN)

Si se usan variables de entorno, en ambos ejemplos se puede omitir el argumento `api_token`.

Pruebas
-------

Las pruebas utilizan un archivo llamado `test.env`, que sirve para definir todas las variables de entorno
necesarias para ejecutar estas pruebas.

Estas pruebas utilizan `unittest`, se ejecutan con el archivo `run.py`, y dependiendo de cómo se configure
`test.env`, se pueden omitir ciertas pruebas. Asegúrate de definir las siguientes variables en `test.env`,
o no podrás efectuar la mayoría de las pruebas:

 - `APIGATEWAY_API_URL`
 - `APIGATEWAY_API_TOKEN`
 - `TEST_CONTRIBUYENTE_IDENTIFICADOR`
 - `TEST_CONTRIBUYENTE_CLAVE`
 - `TEST_USUARIO_IDENTIFICADOR`
 - `TEST_USUARIO_CLAVE`
 - `TEST_PORTAL_MIPYME_CONTRIBUYENTE_RUT`

Para ejecutar las pruebas unitarias, debes ejecutar el siguiente código en consola desde la raíz del proyecto:

.. code:: shell

    python tests/run.py

Si quieres ejecutar una prueba específica, deberás especificar el nombre y ruta:

.. code:: shell

    python tests/run.py sii.test_actividades_economicas.TestSiiActividadesEconomicas.test_listado

Para ejecutar otros ejemplos, deberás reemplazar desde `test_actividades_economicas` para adelante por el nombre
y ruta de alguna de las otras pruebas descritas posteriormente.

A continuación se pondrán instrucciones de cómo probar el cliente de API de Python:

* `test_actividades_economicas`:
    * `test_listado()`:
        - Prueba que permite obtener un listado de todas las Actividades económicas del SII por omisión.
        - Ruta completa: `sii.test_actividades_economicas.TestSiiActividadesEconomicas.test_listado`
        - Variables necesarias: `Ninguna`
        - Variable de ejecución: `Ninguna`
    * `test_listado_primera_categoria()`:
        - Prueba que permite obtener un listado de todas las Actividades económicas de primera categoría del SII.
        - Ruta completa: `sii.test_actividades_economicas.TestSiiActividadesEconomicas.test_listado_primera_categoria`
        - Variables necesarias: `Ninguna`
        - Variable de ejecución: `Ninguna`
    * `test_listado_segunda_categoria()`:
        - Prueba que permite obtener un listado de todas las Actividades económicas de segunda categoría del SII.
        - Ruta completa: `sii.test_actividades_economicas.TestSiiActividadesEconomicas.test_listado_segunda_categoria`
        - Variables necesarias: `Ninguna`
        - Variable de ejecución: `Ninguna`
* `test_bhe_emitidas`:
    * `test_documentos()`
        - Prueba que permite obtener todas las BHE emitidas por un contribuyente.
        - Ruta completa: `sii.test_bhe_emitidas.TestSiiBheEmitidas.test_documentos`
        - Variables necesarias: `Ninguna`
        - Variable de ejecución: `Ninguna`
    * `test_pdf()`
        - Prueba que permite obtener el PDF de una BHE emitida.
        - Ruta completa: `sii.test_bhe_emitidas.TestSiiBheEmitidas.test_pdf`
        - Variables necesarias: `TEST_PERIODO`
        - Variable de ejecución: `len(documentos)`
    * `test_emitir()`
        - Prueba que permite emitir una BHE.
        - Ruta completa: `sii.test_bhe_emitidas.TestSiiBheEmitidas.test_emitir`
        - Variables necesarias: `TEST_BHE_EMITIDAS_RECEPTOR_RUT`, `TEST_BHE_EMITIDAS_FECHA_EMISION`
        - Variable de ejecución: `TEST_BHE_EMITIDAS_RECEPTOR_RUT`
    * `test_email()`
        - Prueba que permite enviar un email a un destinatario con su BHE emitida.
        - Ruta completa: `sii.test_bhe_emitidas.TestSiiBheEmitidas.test_email`
        - Variables necesarias: `TEST_BHE_EMITIDAS_BOLETA_CODIGO`, `TEST_BHE_EMITIDAS_RECEPTOR_EMAIL`
        - Variable de ejecución: `TEST_BHE_EMITIDAS_BOLETA_CODIGO`, `TEST_BHE_EMITIDAS_RECEPTOR_EMAIL`
    * `test_anular()`
        - Prueba que permite anular una BHE emitida.
        - Ruta completa: `sii.test_bhe_emitidas.TestSiiBheEmitidas.test_anular`
        - Variables necesarias: `TEST_BHE_EMITIDAS_BOLETA_NUMERO`
        - Variable de ejecución: `TEST_BHE_EMITIDAS_BOLETA_NUMERO`

Licencia
--------

Este programa es software libre: usted puede redistribuirlo y/o modificarlo
bajo los términos de la GNU Lesser General Public License (LGPL) publicada
por la Fundación para el Software Libre, ya sea la versión 3 de la Licencia,
o (a su elección) cualquier versión posterior de la misma.

Este programa se distribuye con la esperanza de que sea útil, pero SIN
GARANTÍA ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD
PARA UN PROPÓSITO DETERMINADO. Consulte los detalles de la GNU Lesser General
Public License (LGPL) para obtener una información más detallada.

Debería haber recibido una copia de la GNU Lesser General Public License
(LGPL) junto a este programa. En caso contrario, consulte
`GNU Lesser General Public License <http://www.gnu.org/licenses/lgpl.html>`_.

Enlaces
-------

- `Sitio web API Gateway <https://www.apigateway.cl>`_.
- `Código fuente en GitHub <https://github.com/apigatewaycl/apigateway-api-client-python>`_.
- `Paquete en PyPI <https://pypi.org/project/apigatewaycl>`_.
- `Documentación en Read the Docs <https://apigatewaycl.readthedocs.io/es/latest>`_.



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/apigatewaycl/apigateway-api-client-python",
    "name": "apigatewaycl",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": "sii chile",
    "author": "API Gateway",
    "author_email": "dev@apigateway.cl",
    "download_url": "https://files.pythonhosted.org/packages/f0/f8/df76aad42b5845959f10b455488fbca9a294b4fddb24c0d07b5f5eecc108/apigatewaycl-5.0.0.tar.gz",
    "platform": null,
    "description": "\nAPI Gateway: Cliente de API en Python\n=====================================\n\n.. image:: https://badge.fury.io/py/apigatewaycl.svg\n    :target: https://pypi.org/project/apigatewaycl\n.. image:: https://img.shields.io/pypi/status/apigatewaycl.svg\n    :target: https://pypi.org/project/apigatewaycl\n.. image:: https://img.shields.io/pypi/pyversions/apigatewaycl.svg\n    :target: https://pypi.org/project/apigatewaycl\n.. image:: https://img.shields.io/pypi/l/apigatewaycl.svg\n    :target: https://raw.githubusercontent.com/apigatewaycl/apigateway-api-client-python/master/COPYING\n\nCliente para realizar la integraci\u00f3n con los servicios web de `API Gateway <https://www.apigateway.cl>`_ desde Python.\n\nInstalaci\u00f3n y actualizaci\u00f3n\n---------------------------\n\nInstalar usando un entorno virtual y PIP con:\n\n.. code:: shell\n\n    python3 -m venv venv\n    source venv/bin/activate\n    pip install apigatewaycl\n\nActualizar usando PIP con:\n\n.. code:: shell\n\n    pip install apigatewaycl --upgrade\n\nCliente gen\u00e9rico vs clientes espec\u00edficos\n----------------------------------------\n\nEste cliente de API Gateway tiene 2 formas de acceder a los recursos de la API:\n\n1.  Cliente gen\u00e9rico: es un cliente que permite consumir de manera sencilla cualquier\n    recurso de la API. Que actualmente exista o sea a\u00f1adido en el futuro. Esto se logra\n    porque el cliente recibe los nombres de los recursos, la parte de la URL que permite\n    acceder al servicio web solicitado. Se proveen m\u00e9todos que s\u00f3lo sirven para acceder\n    a la API de manera gen\u00e9rica, pero no para hacer acciones espec\u00edficas ni obtener los\n    datos en un formato espec\u00edfico. Este cliente es el que entrega mayor flexibilidad, ya\n    que cada programador decide qu\u00e9 recursos desea consumir y c\u00f3mo desea obtener los datos.\n\n2.  Clientes espec\u00edficos: son clases que permiten acceder de forma m\u00e1s natural a los\n    recursos de la API. Al instanciar la clase, se tendr\u00e1n m\u00e9todos sencillos con par\u00e1metros\n    para consumir la API. Sin ser necesario preocuparse de recordar o buscar en la\n    documentaci\u00f3n el nombre de los recursos que se deben consumir. Adem\u00e1s de entregar los\n    datos ya \"listos\" para ser usados en vez de tener que preocuparse de qu\u00e9 m\u00e9todo del\n    cliente gen\u00e9rico usar para obtenerlos en el formato requerido.\n\nAutenticaci\u00f3n en API Gateway\n----------------------------\n\nLo m\u00e1s simple, y recomendado, es usar una variable de entorno con el\n`token del usuario <https://apigateway.cl/dashboard#api-auth>`_, la cual ser\u00e1\nreconocida autom\u00e1ticamente por el cliente:\n\n.. code:: shell\n\n    export APIGATEWAY_API_TOKEN=\"aqu\u00ed-tu-token-de-usuario\"\n\nSi no se desea usar una variable de entorno, al instanciar los objetos se\ndeber\u00e1 indicar el token del usuario. Ejemplo con el cliente gen\u00e9rico:\n\n.. code:: python\n\n    import apigatewaycl\n    APIGATEWAY_API_TOKEN = \"aqu\u00ed-tu-token-de-usuario\"\n    client = apigatewaycl.api_client.ApiClient(APIGATEWAY_API_TOKEN)\n\nEl siguiente es un ejemplo con el cliente espec\u00edfico de Rcv. Primero se pasan\nlos datos obligatorios de RUT y clave del usuario. Luego adem\u00e1s se pasa el token\ndelusuario de la API.\n\n.. code:: python\n\n    import apigatewaycl\n    APIGATEWAY_API_TOKEN = \"aqu\u00ed-tu-token-de-usuario\"\n    SII_USUARIO_RUT = \"\"\n    SII_USUARIO_CLAVE = \"\"\n    rcv_client = Rcv(SII_USUARIO_RUT, SII_USUARIO_CLAVE, api_token = APIGATEWAY_API_TOKEN)\n\nSi se usan variables de entorno, en ambos ejemplos se puede omitir el argumento `api_token`.\n\nPruebas\n-------\n\nLas pruebas utilizan un archivo llamado `test.env`, que sirve para definir todas las variables de entorno\nnecesarias para ejecutar estas pruebas.\n\nEstas pruebas utilizan `unittest`, se ejecutan con el archivo `run.py`, y dependiendo de c\u00f3mo se configure\n`test.env`, se pueden omitir ciertas pruebas. Aseg\u00farate de definir las siguientes variables en `test.env`,\no no podr\u00e1s efectuar la mayor\u00eda de las pruebas:\n\n - `APIGATEWAY_API_URL`\n - `APIGATEWAY_API_TOKEN`\n - `TEST_CONTRIBUYENTE_IDENTIFICADOR`\n - `TEST_CONTRIBUYENTE_CLAVE`\n - `TEST_USUARIO_IDENTIFICADOR`\n - `TEST_USUARIO_CLAVE`\n - `TEST_PORTAL_MIPYME_CONTRIBUYENTE_RUT`\n\nPara ejecutar las pruebas unitarias, debes ejecutar el siguiente c\u00f3digo en consola desde la ra\u00edz del proyecto:\n\n.. code:: shell\n\n    python tests/run.py\n\nSi quieres ejecutar una prueba espec\u00edfica, deber\u00e1s especificar el nombre y ruta:\n\n.. code:: shell\n\n    python tests/run.py sii.test_actividades_economicas.TestSiiActividadesEconomicas.test_listado\n\nPara ejecutar otros ejemplos, deber\u00e1s reemplazar desde `test_actividades_economicas` para adelante por el nombre\ny ruta de alguna de las otras pruebas descritas posteriormente.\n\nA continuaci\u00f3n se pondr\u00e1n instrucciones de c\u00f3mo probar el cliente de API de Python:\n\n* `test_actividades_economicas`:\n    * `test_listado()`:\n        - Prueba que permite obtener un listado de todas las Actividades econ\u00f3micas del SII por omisi\u00f3n.\n        - Ruta completa: `sii.test_actividades_economicas.TestSiiActividadesEconomicas.test_listado`\n        - Variables necesarias: `Ninguna`\n        - Variable de ejecuci\u00f3n: `Ninguna`\n    * `test_listado_primera_categoria()`:\n        - Prueba que permite obtener un listado de todas las Actividades econ\u00f3micas de primera categor\u00eda del SII.\n        - Ruta completa: `sii.test_actividades_economicas.TestSiiActividadesEconomicas.test_listado_primera_categoria`\n        - Variables necesarias: `Ninguna`\n        - Variable de ejecuci\u00f3n: `Ninguna`\n    * `test_listado_segunda_categoria()`:\n        - Prueba que permite obtener un listado de todas las Actividades econ\u00f3micas de segunda categor\u00eda del SII.\n        - Ruta completa: `sii.test_actividades_economicas.TestSiiActividadesEconomicas.test_listado_segunda_categoria`\n        - Variables necesarias: `Ninguna`\n        - Variable de ejecuci\u00f3n: `Ninguna`\n* `test_bhe_emitidas`:\n    * `test_documentos()`\n        - Prueba que permite obtener todas las BHE emitidas por un contribuyente.\n        - Ruta completa: `sii.test_bhe_emitidas.TestSiiBheEmitidas.test_documentos`\n        - Variables necesarias: `Ninguna`\n        - Variable de ejecuci\u00f3n: `Ninguna`\n    * `test_pdf()`\n        - Prueba que permite obtener el PDF de una BHE emitida.\n        - Ruta completa: `sii.test_bhe_emitidas.TestSiiBheEmitidas.test_pdf`\n        - Variables necesarias: `TEST_PERIODO`\n        - Variable de ejecuci\u00f3n: `len(documentos)`\n    * `test_emitir()`\n        - Prueba que permite emitir una BHE.\n        - Ruta completa: `sii.test_bhe_emitidas.TestSiiBheEmitidas.test_emitir`\n        - Variables necesarias: `TEST_BHE_EMITIDAS_RECEPTOR_RUT`, `TEST_BHE_EMITIDAS_FECHA_EMISION`\n        - Variable de ejecuci\u00f3n: `TEST_BHE_EMITIDAS_RECEPTOR_RUT`\n    * `test_email()`\n        - Prueba que permite enviar un email a un destinatario con su BHE emitida.\n        - Ruta completa: `sii.test_bhe_emitidas.TestSiiBheEmitidas.test_email`\n        - Variables necesarias: `TEST_BHE_EMITIDAS_BOLETA_CODIGO`, `TEST_BHE_EMITIDAS_RECEPTOR_EMAIL`\n        - Variable de ejecuci\u00f3n: `TEST_BHE_EMITIDAS_BOLETA_CODIGO`, `TEST_BHE_EMITIDAS_RECEPTOR_EMAIL`\n    * `test_anular()`\n        - Prueba que permite anular una BHE emitida.\n        - Ruta completa: `sii.test_bhe_emitidas.TestSiiBheEmitidas.test_anular`\n        - Variables necesarias: `TEST_BHE_EMITIDAS_BOLETA_NUMERO`\n        - Variable de ejecuci\u00f3n: `TEST_BHE_EMITIDAS_BOLETA_NUMERO`\n\nLicencia\n--------\n\nEste programa es software libre: usted puede redistribuirlo y/o modificarlo\nbajo los t\u00e9rminos de la GNU Lesser General Public License (LGPL) publicada\npor la Fundaci\u00f3n para el Software Libre, ya sea la versi\u00f3n 3 de la Licencia,\no (a su elecci\u00f3n) cualquier versi\u00f3n posterior de la misma.\n\nEste programa se distribuye con la esperanza de que sea \u00fatil, pero SIN\nGARANT\u00cdA ALGUNA; ni siquiera la garant\u00eda impl\u00edcita MERCANTIL o de APTITUD\nPARA UN PROP\u00d3SITO DETERMINADO. Consulte los detalles de la GNU Lesser General\nPublic License (LGPL) para obtener una informaci\u00f3n m\u00e1s detallada.\n\nDeber\u00eda haber recibido una copia de la GNU Lesser General Public License\n(LGPL) junto a este programa. En caso contrario, consulte\n`GNU Lesser General Public License <http://www.gnu.org/licenses/lgpl.html>`_.\n\nEnlaces\n-------\n\n- `Sitio web API Gateway <https://www.apigateway.cl>`_.\n- `C\u00f3digo fuente en GitHub <https://github.com/apigatewaycl/apigateway-api-client-python>`_.\n- `Paquete en PyPI <https://pypi.org/project/apigatewaycl>`_.\n- `Documentaci\u00f3n en Read the Docs <https://apigatewaycl.readthedocs.io/es/latest>`_.\n\n\n",
    "bugtrack_url": null,
    "license": "LGPL",
    "summary": "Cliente para realizar la integraci\u00f3n con los servicios web de API Gateway desde Python.",
    "version": "5.0.0",
    "project_urls": {
        "Homepage": "https://github.com/apigatewaycl/apigateway-api-client-python"
    },
    "split_keywords": [
        "sii",
        "chile"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f0f8df76aad42b5845959f10b455488fbca9a294b4fddb24c0d07b5f5eecc108",
                "md5": "00a79767f5bbb58ef602e3f4fffc8436",
                "sha256": "97d1a5b00588f62943935faa24250a15688889cb5a319af86d3cf282efa4afd3"
            },
            "downloads": -1,
            "filename": "apigatewaycl-5.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "00a79767f5bbb58ef602e3f4fffc8436",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 19237,
            "upload_time": "2024-11-11T16:50:27",
            "upload_time_iso_8601": "2024-11-11T16:50:27.165432Z",
            "url": "https://files.pythonhosted.org/packages/f0/f8/df76aad42b5845959f10b455488fbca9a294b4fddb24c0d07b5f5eecc108/apigatewaycl-5.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-11 16:50:27",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "apigatewaycl",
    "github_project": "apigateway-api-client-python",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "alabaster",
            "specs": [
                [
                    "==",
                    "0.7.15"
                ]
            ]
        },
        {
            "name": "Babel",
            "specs": [
                [
                    "==",
                    "2.14.0"
                ]
            ]
        },
        {
            "name": "certifi",
            "specs": [
                [
                    "==",
                    "2023.11.17"
                ]
            ]
        },
        {
            "name": "charset-normalizer",
            "specs": [
                [
                    "==",
                    "3.3.2"
                ]
            ]
        },
        {
            "name": "docutils",
            "specs": [
                [
                    "==",
                    "0.20.1"
                ]
            ]
        },
        {
            "name": "idna",
            "specs": [
                [
                    "==",
                    "3.6"
                ]
            ]
        },
        {
            "name": "imagesize",
            "specs": [
                [
                    "==",
                    "1.4.1"
                ]
            ]
        },
        {
            "name": "importlib-metadata",
            "specs": [
                [
                    "==",
                    "7.0.1"
                ]
            ]
        },
        {
            "name": "jaraco.classes",
            "specs": [
                [
                    "==",
                    "3.3.0"
                ]
            ]
        },
        {
            "name": "Jinja2",
            "specs": [
                [
                    "==",
                    "3.1.2"
                ]
            ]
        },
        {
            "name": "keyring",
            "specs": [
                [
                    "==",
                    "24.3.0"
                ]
            ]
        },
        {
            "name": "markdown-it-py",
            "specs": [
                [
                    "==",
                    "3.0.0"
                ]
            ]
        },
        {
            "name": "MarkupSafe",
            "specs": [
                [
                    "==",
                    "2.1.3"
                ]
            ]
        },
        {
            "name": "mdurl",
            "specs": [
                [
                    "==",
                    "0.1.2"
                ]
            ]
        },
        {
            "name": "more-itertools",
            "specs": [
                [
                    "==",
                    "10.2.0"
                ]
            ]
        },
        {
            "name": "nh3",
            "specs": [
                [
                    "==",
                    "0.2.15"
                ]
            ]
        },
        {
            "name": "packaging",
            "specs": [
                [
                    "==",
                    "23.2"
                ]
            ]
        },
        {
            "name": "pkginfo",
            "specs": [
                [
                    "==",
                    "1.9.6"
                ]
            ]
        },
        {
            "name": "Pygments",
            "specs": [
                [
                    "==",
                    "2.17.2"
                ]
            ]
        },
        {
            "name": "python-dotenv",
            "specs": [
                [
                    "==",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "readme-renderer",
            "specs": [
                [
                    "==",
                    "42.0"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    "==",
                    "2.31.0"
                ]
            ]
        },
        {
            "name": "requests-toolbelt",
            "specs": [
                [
                    "==",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "rfc3986",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "rich",
            "specs": [
                [
                    "==",
                    "13.7.0"
                ]
            ]
        },
        {
            "name": "snowballstemmer",
            "specs": [
                [
                    "==",
                    "2.2.0"
                ]
            ]
        },
        {
            "name": "Sphinx",
            "specs": [
                [
                    "==",
                    "7.2.6"
                ]
            ]
        },
        {
            "name": "sphinx-rtd-theme",
            "specs": [
                [
                    "==",
                    "2.0.0"
                ]
            ]
        },
        {
            "name": "sphinxcontrib-applehelp",
            "specs": [
                [
                    "==",
                    "1.0.7"
                ]
            ]
        },
        {
            "name": "sphinxcontrib-devhelp",
            "specs": [
                [
                    "==",
                    "1.0.5"
                ]
            ]
        },
        {
            "name": "sphinxcontrib-htmlhelp",
            "specs": [
                [
                    "==",
                    "2.0.4"
                ]
            ]
        },
        {
            "name": "sphinxcontrib-jquery",
            "specs": [
                [
                    "==",
                    "4.1"
                ]
            ]
        },
        {
            "name": "sphinxcontrib-jsmath",
            "specs": [
                [
                    "==",
                    "1.0.1"
                ]
            ]
        },
        {
            "name": "sphinxcontrib-qthelp",
            "specs": [
                [
                    "==",
                    "1.0.6"
                ]
            ]
        },
        {
            "name": "sphinxcontrib-serializinghtml",
            "specs": [
                [
                    "==",
                    "1.1.9"
                ]
            ]
        },
        {
            "name": "twine",
            "specs": [
                [
                    "==",
                    "4.0.2"
                ]
            ]
        },
        {
            "name": "urllib3",
            "specs": [
                [
                    "==",
                    "2.1.0"
                ]
            ]
        },
        {
            "name": "zipp",
            "specs": [
                [
                    "==",
                    "3.17.0"
                ]
            ]
        }
    ],
    "lcname": "apigatewaycl"
}
        
Elapsed time: 7.60938s