# ctr-datadis
[](https://badge.fury.io/py/ctr-datadis)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
[](https://ctr-datadis.readthedocs.io/en/latest/?badge=latest)
[](https://github.com/TacoronteRiveroCristian/ctr-datadis/actions)
**Un SDK completo de Python para interactuar con la API oficial de Datadis** (plataforma española de datos de suministro eléctrico).
**Datadis** es la plataforma oficial del gobierno español que proporciona acceso a los datos de consumo eléctrico para los consumidores españoles. Este SDK facilita el acceso a tus datos eléctricos de forma programática.
## Características
- **Dos Versiones de Cliente** - V1 (básico) y V2 (recomendado con manejo avanzado de errores)
- **Autenticación Automática** - Autenticación basada en tokens con renovación automática
- **Cobertura Completa de API** - Acceso a todos los endpoints de la API de Datadis
- **Manejo Robusto de Errores** - V2 incluye manejo específico de errores por distribuidor
- **Parámetros Flexibles** - Acepta tipos Python nativos (datetime, int, float) además de strings
- **Seguridad de Tipos** - Type hints completos y modelos Pydantic para validación de datos
- **Context Managers** - Gestión automática de recursos con declaraciones `with`
- **Python 3.9+** - Compatible con versiones modernas de Python
- **Normalización de Texto** - Manejo automático de acentos españoles y caracteres especiales
- **Datos de Energía Reactiva** - Acceso exclusivo en V2 para análisis energético avanzado
## Instalación
```bash
pip install ctr-datadis
```
## Inicio Rápido
### Cliente V1 (Básico)
```python
from datadis_python.client.v1.simple_client import SimpleDatadisClientV1
# Usar context manager (recomendado)
with SimpleDatadisClientV1(username="12345678A", password="tu_password") as client:
# Obtener puntos de suministro
supplies = client.get_supplies()
print(f"Encontrados {len(supplies)} puntos de suministro")
if supplies:
# Obtener consumo anual (formato mensual OBLIGATORIO)
consumption = client.get_consumption(
cups=supplies[0].cups,
distributor_code=supplies[0].distributorCode,
date_from="2024/01", # Enero 2024
date_to="2024/12" # Diciembre 2024
)
total_kwh = sum(c.consumptionKWh for c in consumption if c.consumptionKWh)
print(f"Consumo total 2024: {total_kwh:.2f} kWh")
```
### Cliente V2 (Recomendado - con manejo de errores mejorado)
```python
from datadis_python.client.v2.simple_client import SimpleDatadisClientV2
with SimpleDatadisClientV2(username="12345678A", password="tu_password") as client:
# Obtener suministros con manejo de errores
supplies_response = client.get_supplies()
print(f"Suministros obtenidos: {len(supplies_response.supplies)}")
# Verificar errores por distribuidor (exclusivo V2)
if supplies_response.distributor_error:
for error in supplies_response.distributor_error:
print(f"Error en {error.distributorName}: {error.errorDescription}")
if supplies_response.supplies:
supply = supplies_response.supplies[0]
# Obtener consumo con manejo robusto de errores
consumption_response = client.get_consumption(
cups=supply.cups,
distributor_code=supply.distributorCode,
date_from="2024/01",
date_to="2024/12"
)
if consumption_response.time_curve:
total_kwh = sum(c.consumptionKWh for c in consumption_response.time_curve
if c.consumptionKWh)
print(f"Consumo total 2024: {total_kwh:.2f} kWh")
# Funcionalidad exclusiva V2: Energía reactiva
reactive_data = client.get_reactive_data(
cups=supply.cups,
distributor_code=supply.distributorCode,
date_from="2024/01",
date_to="2024/12"
)
print(f"Datos de energía reactiva: {len(reactive_data)} registros")
```
## Métodos Disponibles
### Información de Suministro
```python
# Obtener todos los puntos de suministro
supplies = client.get_supplies()
# Obtener detalles del contrato para un CUPS específico
contract = client.get_contract_detail(cups="ES1234...", distributor_code="2")
```
### Datos de Consumo
```python
from datetime import datetime, date
# Obtener datos de consumo con fechas mensuales (OBLIGATORIO)
consumption = client.get_consumption(
cups="ES1234000000000001JN0F",
distributor_code=2, # int o string
date_from=datetime(2024, 1, 1), # datetime (solo primer día), date o string YYYY/MM
date_to=datetime(2024, 2, 1), # datetime (solo primer día), date o string YYYY/MM
measurement_type=0, # int, float o string
point_type=1 # int, float o string (opcional)
)
# Obtener datos de potencia máxima
max_power = client.get_max_power(
cups="ES1234000000000001JN0F",
distributor_code=2, # int o string
date_from=datetime(2024, 1, 1), # datetime (solo primer día), date o string YYYY/MM
date_to=datetime(2024, 2, 1) # datetime (solo primer día), date o string YYYY/MM
)
```
### Información de Distribuidoras
```python
# Obtener distribuidoras disponibles
distributors = client.get_distributors()
```
## Tipos de Parámetros Flexibles
El SDK acepta múltiples tipos de parámetros para mayor comodidad, manteniendo 100% de compatibilidad hacia atrás:
### Fechas (IMPORTANTE: Solo formato mensual)
La API de Datadis **SOLO acepta fechas mensuales**. No es posible especificar días específicos.
```python
# ESTAS YA NO SON VÁLIDAS (contienen días específicos):
# date_from = "2024/01/15" # RECHAZADO: contiene día específico
# date_from = datetime(2024, 1, 15) # RECHAZADO: contiene día específico
# date_from = date(2024, 1, 15) # RECHAZADO: contiene día específico
# SOLO ESTAS SON VÁLIDAS (formato mensual):
date_from = "2024/01" # String YYYY/MM (RECOMENDADO)
date_from = datetime(2024, 1, 1) # datetime primer día del mes (se convierte a 2024/01)
date_from = date(2024, 1, 1) # date primer día del mes (se convierte a 2024/01)
```
### Números
```python
# Measurement type, point type, etc.:
measurement_type = "0" # String tradicional
measurement_type = 0 # int
measurement_type = 0.0 # float
# Distributor code:
distributor_code = "2" # String tradicional
distributor_code = 2 # int
```
### Conversión Automática
- Las fechas `datetime`/`date` se convierten automáticamente al formato API mensual (YYYY/MM)
- **IMPORTANTE**: Solo se aceptan `datetime`/`date` del primer día del mes (día 1)
- Los números `int`/`float` se convierten a strings
- Los strings se validan para asegurar formato mensual correcto (YYYY/MM)
- **Validación estricta** - fechas con días específicos serán rechazadas
## Modelos de Datos
El SDK incluye modelos Pydantic para manejo seguro de tipos:
- `SupplyData` - Información de puntos de suministro
- `ConsumptionData` - Registros de consumo energético
- `ContractData` - Detalles del contrato
- `MaxPowerData` - Datos de demanda de potencia máxima
## Manejo de Errores
```python
from datadis_python.exceptions import DatadisError, AuthenticationError, APIError
try:
supplies = client.get_supplies()
except AuthenticationError:
print("Credenciales inválidas")
except APIError as e:
print(f"Error de API: {e}")
except DatadisError as e:
print(f"Error de Datadis: {e}")
```
## Requisitos
- Python 3.9 o superior
- Credenciales válidas de cuenta Datadis
- Conexión a internet
## Limitaciones de la API
- Los datos están disponibles solo para los últimos 2 años
- **CRÍTICO**: El formato de fecha DEBE ser YYYY/MM (solo datos mensuales, NO diarios)
- Fechas con días específicos (ej: "2024/01/15") serán rechazadas automáticamente
- La plataforma Datadis aplica limitación de velocidad (rate limiting)
- La mayoría de operaciones requieren un código de distribuidora
## Documentación
- **Documentación Completa**: [https://ctr-datadis.readthedocs.io](https://ctr-datadis.readthedocs.io)
- **Referencia de API**: Documentación detallada de la API con ejemplos
- **Ejemplos**: Tutoriales paso a paso y casos de uso
- **Solución de Problemas**: Problemas comunes y soluciones
## Comparación de Versiones
| Característica | Cliente V1 | Cliente V2 |
|----------------|------------|------------|
| **Datos de Consumo** | ✓ | ✓ |
| **Información de Suministro** | ✓ | ✓ |
| **Detalles del Contrato** | ✓ | ✓ |
| **Datos de Potencia Máxima** | ✓ | ✓ |
| **Datos de Energía Reactiva** | ✗ | ✓ |
| **Manejo de Errores por Distribuidor** | ✗ | ✓ |
| **Respuestas Estructuradas** | ✗ | ✓ |
| **Información de Errores Detallada** | ✗ | ✓ |
| **Soporte para NIFs Autorizados** | Limitado | ✓ |
| **Tipo de Respuesta** | Lista simple | Objeto estructurado |
### ¿Cuál elegir?
**Usa Cliente V1 cuando:**
- Migres código existente
- Necesites respuestas simples (listas directas)
- Implementes scripts básicos
- Solo requieras datos de consumo estándar
**Usa Cliente V2 cuando:** (Recomendado)
- Desarrolles aplicaciones de producción
- Necesites manejo robusto de errores
- Quieras acceso a energía reactiva
- Requieras información detallada de fallos
- Trabajes con múltiples distribuidores
## Contribuciones
Las contribuciones son bienvenidas! No dudes en enviar un Pull Request.
## Licencia
Este proyecto está licenciado bajo la Licencia MIT - consulta el archivo [LICENSE](LICENSE) para más detalles.
## Descargo de Responsabilidad
Este es un SDK no oficial para la API de Datadis. No está afiliado ni respaldado por Datadis o el gobierno español.
Raw data
{
"_id": null,
"home_page": null,
"name": "ctr-datadis",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.9",
"maintainer_email": null,
"keywords": "datadis, api, sdk, energia, consumo, electricidad, espa\u00f1a, cups, distribuidora",
"author": "CristianTacoronteRivero",
"author_email": "tacoronteriverocristian@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/41/3f/7b590f441ea1a31cd0d23e3bbf19bed901450f1f01776a4cd11426f9cd6f/ctr_datadis-0.4.5.tar.gz",
"platform": null,
"description": "# ctr-datadis\n\n[](https://badge.fury.io/py/ctr-datadis)\n[](https://www.python.org/downloads/)\n[](https://opensource.org/licenses/MIT)\n[](https://ctr-datadis.readthedocs.io/en/latest/?badge=latest)\n[](https://github.com/TacoronteRiveroCristian/ctr-datadis/actions)\n\n**Un SDK completo de Python para interactuar con la API oficial de Datadis** (plataforma espa\u00f1ola de datos de suministro el\u00e9ctrico).\n\n**Datadis** es la plataforma oficial del gobierno espa\u00f1ol que proporciona acceso a los datos de consumo el\u00e9ctrico para los consumidores espa\u00f1oles. Este SDK facilita el acceso a tus datos el\u00e9ctricos de forma program\u00e1tica.\n\n## Caracter\u00edsticas\n\n- **Dos Versiones de Cliente** - V1 (b\u00e1sico) y V2 (recomendado con manejo avanzado de errores)\n- **Autenticaci\u00f3n Autom\u00e1tica** - Autenticaci\u00f3n basada en tokens con renovaci\u00f3n autom\u00e1tica\n- **Cobertura Completa de API** - Acceso a todos los endpoints de la API de Datadis\n- **Manejo Robusto de Errores** - V2 incluye manejo espec\u00edfico de errores por distribuidor\n- **Par\u00e1metros Flexibles** - Acepta tipos Python nativos (datetime, int, float) adem\u00e1s de strings\n- **Seguridad de Tipos** - Type hints completos y modelos Pydantic para validaci\u00f3n de datos\n- **Context Managers** - Gesti\u00f3n autom\u00e1tica de recursos con declaraciones `with`\n- **Python 3.9+** - Compatible con versiones modernas de Python\n- **Normalizaci\u00f3n de Texto** - Manejo autom\u00e1tico de acentos espa\u00f1oles y caracteres especiales\n- **Datos de Energ\u00eda Reactiva** - Acceso exclusivo en V2 para an\u00e1lisis energ\u00e9tico avanzado\n\n## Instalaci\u00f3n\n\n```bash\npip install ctr-datadis\n```\n\n## Inicio R\u00e1pido\n\n### Cliente V1 (B\u00e1sico)\n\n```python\nfrom datadis_python.client.v1.simple_client import SimpleDatadisClientV1\n\n# Usar context manager (recomendado)\nwith SimpleDatadisClientV1(username=\"12345678A\", password=\"tu_password\") as client:\n # Obtener puntos de suministro\n supplies = client.get_supplies()\n print(f\"Encontrados {len(supplies)} puntos de suministro\")\n\n if supplies:\n # Obtener consumo anual (formato mensual OBLIGATORIO)\n consumption = client.get_consumption(\n cups=supplies[0].cups,\n distributor_code=supplies[0].distributorCode,\n date_from=\"2024/01\", # Enero 2024\n date_to=\"2024/12\" # Diciembre 2024\n )\n\n total_kwh = sum(c.consumptionKWh for c in consumption if c.consumptionKWh)\n print(f\"Consumo total 2024: {total_kwh:.2f} kWh\")\n```\n\n### Cliente V2 (Recomendado - con manejo de errores mejorado)\n\n```python\nfrom datadis_python.client.v2.simple_client import SimpleDatadisClientV2\n\nwith SimpleDatadisClientV2(username=\"12345678A\", password=\"tu_password\") as client:\n # Obtener suministros con manejo de errores\n supplies_response = client.get_supplies()\n\n print(f\"Suministros obtenidos: {len(supplies_response.supplies)}\")\n\n # Verificar errores por distribuidor (exclusivo V2)\n if supplies_response.distributor_error:\n for error in supplies_response.distributor_error:\n print(f\"Error en {error.distributorName}: {error.errorDescription}\")\n\n if supplies_response.supplies:\n supply = supplies_response.supplies[0]\n\n # Obtener consumo con manejo robusto de errores\n consumption_response = client.get_consumption(\n cups=supply.cups,\n distributor_code=supply.distributorCode,\n date_from=\"2024/01\",\n date_to=\"2024/12\"\n )\n\n if consumption_response.time_curve:\n total_kwh = sum(c.consumptionKWh for c in consumption_response.time_curve\n if c.consumptionKWh)\n print(f\"Consumo total 2024: {total_kwh:.2f} kWh\")\n\n # Funcionalidad exclusiva V2: Energ\u00eda reactiva\n reactive_data = client.get_reactive_data(\n cups=supply.cups,\n distributor_code=supply.distributorCode,\n date_from=\"2024/01\",\n date_to=\"2024/12\"\n )\n print(f\"Datos de energ\u00eda reactiva: {len(reactive_data)} registros\")\n```\n\n## M\u00e9todos Disponibles\n\n### Informaci\u00f3n de Suministro\n```python\n# Obtener todos los puntos de suministro\nsupplies = client.get_supplies()\n\n# Obtener detalles del contrato para un CUPS espec\u00edfico\ncontract = client.get_contract_detail(cups=\"ES1234...\", distributor_code=\"2\")\n```\n\n### Datos de Consumo\n```python\nfrom datetime import datetime, date\n\n# Obtener datos de consumo con fechas mensuales (OBLIGATORIO)\nconsumption = client.get_consumption(\n cups=\"ES1234000000000001JN0F\",\n distributor_code=2, # int o string\n date_from=datetime(2024, 1, 1), # datetime (solo primer d\u00eda), date o string YYYY/MM\n date_to=datetime(2024, 2, 1), # datetime (solo primer d\u00eda), date o string YYYY/MM\n measurement_type=0, # int, float o string\n point_type=1 # int, float o string (opcional)\n)\n\n# Obtener datos de potencia m\u00e1xima\nmax_power = client.get_max_power(\n cups=\"ES1234000000000001JN0F\",\n distributor_code=2, # int o string\n date_from=datetime(2024, 1, 1), # datetime (solo primer d\u00eda), date o string YYYY/MM\n date_to=datetime(2024, 2, 1) # datetime (solo primer d\u00eda), date o string YYYY/MM\n)\n```\n\n### Informaci\u00f3n de Distribuidoras\n```python\n# Obtener distribuidoras disponibles\ndistributors = client.get_distributors()\n```\n\n## Tipos de Par\u00e1metros Flexibles\n\nEl SDK acepta m\u00faltiples tipos de par\u00e1metros para mayor comodidad, manteniendo 100% de compatibilidad hacia atr\u00e1s:\n\n### Fechas (IMPORTANTE: Solo formato mensual)\n\nLa API de Datadis **SOLO acepta fechas mensuales**. No es posible especificar d\u00edas espec\u00edficos.\n\n```python\n# ESTAS YA NO SON V\u00c1LIDAS (contienen d\u00edas espec\u00edficos):\n# date_from = \"2024/01/15\" # RECHAZADO: contiene d\u00eda espec\u00edfico\n# date_from = datetime(2024, 1, 15) # RECHAZADO: contiene d\u00eda espec\u00edfico\n# date_from = date(2024, 1, 15) # RECHAZADO: contiene d\u00eda espec\u00edfico\n\n# SOLO ESTAS SON V\u00c1LIDAS (formato mensual):\ndate_from = \"2024/01\" # String YYYY/MM (RECOMENDADO)\ndate_from = datetime(2024, 1, 1) # datetime primer d\u00eda del mes (se convierte a 2024/01)\ndate_from = date(2024, 1, 1) # date primer d\u00eda del mes (se convierte a 2024/01)\n```\n\n### N\u00fameros\n```python\n# Measurement type, point type, etc.:\nmeasurement_type = \"0\" # String tradicional\nmeasurement_type = 0 # int\nmeasurement_type = 0.0 # float\n\n# Distributor code:\ndistributor_code = \"2\" # String tradicional\ndistributor_code = 2 # int\n```\n\n### Conversi\u00f3n Autom\u00e1tica\n- Las fechas `datetime`/`date` se convierten autom\u00e1ticamente al formato API mensual (YYYY/MM)\n- **IMPORTANTE**: Solo se aceptan `datetime`/`date` del primer d\u00eda del mes (d\u00eda 1)\n- Los n\u00fameros `int`/`float` se convierten a strings\n- Los strings se validan para asegurar formato mensual correcto (YYYY/MM)\n- **Validaci\u00f3n estricta** - fechas con d\u00edas espec\u00edficos ser\u00e1n rechazadas\n\n## Modelos de Datos\n\nEl SDK incluye modelos Pydantic para manejo seguro de tipos:\n\n- `SupplyData` - Informaci\u00f3n de puntos de suministro\n- `ConsumptionData` - Registros de consumo energ\u00e9tico\n- `ContractData` - Detalles del contrato\n- `MaxPowerData` - Datos de demanda de potencia m\u00e1xima\n\n## Manejo de Errores\n\n```python\nfrom datadis_python.exceptions import DatadisError, AuthenticationError, APIError\n\ntry:\n supplies = client.get_supplies()\nexcept AuthenticationError:\n print(\"Credenciales inv\u00e1lidas\")\nexcept APIError as e:\n print(f\"Error de API: {e}\")\nexcept DatadisError as e:\n print(f\"Error de Datadis: {e}\")\n```\n\n## Requisitos\n\n- Python 3.9 o superior\n- Credenciales v\u00e1lidas de cuenta Datadis\n- Conexi\u00f3n a internet\n\n## Limitaciones de la API\n\n- Los datos est\u00e1n disponibles solo para los \u00faltimos 2 a\u00f1os\n- **CR\u00cdTICO**: El formato de fecha DEBE ser YYYY/MM (solo datos mensuales, NO diarios)\n- Fechas con d\u00edas espec\u00edficos (ej: \"2024/01/15\") ser\u00e1n rechazadas autom\u00e1ticamente\n- La plataforma Datadis aplica limitaci\u00f3n de velocidad (rate limiting)\n- La mayor\u00eda de operaciones requieren un c\u00f3digo de distribuidora\n\n## Documentaci\u00f3n\n\n- **Documentaci\u00f3n Completa**: [https://ctr-datadis.readthedocs.io](https://ctr-datadis.readthedocs.io)\n- **Referencia de API**: Documentaci\u00f3n detallada de la API con ejemplos\n- **Ejemplos**: Tutoriales paso a paso y casos de uso\n- **Soluci\u00f3n de Problemas**: Problemas comunes y soluciones\n\n## Comparaci\u00f3n de Versiones\n\n| Caracter\u00edstica | Cliente V1 | Cliente V2 |\n|----------------|------------|------------|\n| **Datos de Consumo** | \u2713 | \u2713 |\n| **Informaci\u00f3n de Suministro** | \u2713 | \u2713 |\n| **Detalles del Contrato** | \u2713 | \u2713 |\n| **Datos de Potencia M\u00e1xima** | \u2713 | \u2713 |\n| **Datos de Energ\u00eda Reactiva** | \u2717 | \u2713 |\n| **Manejo de Errores por Distribuidor** | \u2717 | \u2713 |\n| **Respuestas Estructuradas** | \u2717 | \u2713 |\n| **Informaci\u00f3n de Errores Detallada** | \u2717 | \u2713 |\n| **Soporte para NIFs Autorizados** | Limitado | \u2713 |\n| **Tipo de Respuesta** | Lista simple | Objeto estructurado |\n\n### \u00bfCu\u00e1l elegir?\n\n**Usa Cliente V1 cuando:**\n- Migres c\u00f3digo existente\n- Necesites respuestas simples (listas directas)\n- Implementes scripts b\u00e1sicos\n- Solo requieras datos de consumo est\u00e1ndar\n\n**Usa Cliente V2 cuando:** (Recomendado)\n- Desarrolles aplicaciones de producci\u00f3n\n- Necesites manejo robusto de errores\n- Quieras acceso a energ\u00eda reactiva\n- Requieras informaci\u00f3n detallada de fallos\n- Trabajes con m\u00faltiples distribuidores\n\n## Contribuciones\n\nLas contribuciones son bienvenidas! No dudes en enviar un Pull Request.\n\n## Licencia\n\nEste proyecto est\u00e1 licenciado bajo la Licencia MIT - consulta el archivo [LICENSE](LICENSE) para m\u00e1s detalles.\n\n## Descargo de Responsabilidad\n\nEste es un SDK no oficial para la API de Datadis. No est\u00e1 afiliado ni respaldado por Datadis o el gobierno espa\u00f1ol.\n\n",
"bugtrack_url": null,
"license": null,
"summary": "SDK completo de Python para la API oficial de Datadis - Acceso program\u00e1tico a datos de consumo el\u00e9ctrico espa\u00f1ol",
"version": "0.4.5",
"project_urls": {
"Documentation": "https://ctr-datadis.readthedocs.io",
"Homepage": "https://github.com/TacoronteRiveroCristian/ctr-datadis",
"Repository": "https://github.com/TacoronteRiveroCristian/ctr-datadis"
},
"split_keywords": [
"datadis",
" api",
" sdk",
" energia",
" consumo",
" electricidad",
" espa\u00f1a",
" cups",
" distribuidora"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "def7f9db3cc1f1ba7e01e15548125f7ef1a0f2599849d52ff15497d2b86a0e2b",
"md5": "a638c4a9d8fec841ceb739ba6f011a74",
"sha256": "06a2cfc6d1011ef9dd8b2289719b31ef36d7c0cee7fa6b4448bf1c7f9cb3f191"
},
"downloads": -1,
"filename": "ctr_datadis-0.4.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a638c4a9d8fec841ceb739ba6f011a74",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.9",
"size": 114001,
"upload_time": "2025-10-24T12:49:15",
"upload_time_iso_8601": "2025-10-24T12:49:15.346450Z",
"url": "https://files.pythonhosted.org/packages/de/f7/f9db3cc1f1ba7e01e15548125f7ef1a0f2599849d52ff15497d2b86a0e2b/ctr_datadis-0.4.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "413f7b590f441ea1a31cd0d23e3bbf19bed901450f1f01776a4cd11426f9cd6f",
"md5": "2c53f0f58b3a043803f355cdd2020fc9",
"sha256": "17634f2079656d6388557f85706edb64f0d66271153995ac987f141ea903cbbb"
},
"downloads": -1,
"filename": "ctr_datadis-0.4.5.tar.gz",
"has_sig": false,
"md5_digest": "2c53f0f58b3a043803f355cdd2020fc9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.9",
"size": 94602,
"upload_time": "2025-10-24T12:49:16",
"upload_time_iso_8601": "2025-10-24T12:49:16.364501Z",
"url": "https://files.pythonhosted.org/packages/41/3f/7b590f441ea1a31cd0d23e3bbf19bed901450f1f01776a4cd11426f9cd6f/ctr_datadis-0.4.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-24 12:49:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "TacoronteRiveroCristian",
"github_project": "ctr-datadis",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "ctr-datadis"
}