e-data 1.2.22__tar.gz → 2.0.0b1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. e_data-2.0.0b1/.python-version +1 -0
  2. e_data-2.0.0b1/MANIFEST.in +22 -0
  3. e_data-2.0.0b1/Makefile +51 -0
  4. e_data-2.0.0b1/PKG-INFO +214 -0
  5. e_data-2.0.0b1/README.md +166 -0
  6. e_data-2.0.0b1/e_data.egg-info/SOURCES.txt +22 -0
  7. e_data-2.0.0b1/edata/const.py +56 -0
  8. e_data-2.0.0b1/edata/helpers.py +312 -0
  9. e_data-2.0.0b1/edata/tests/connectors/test_datadis_connector.py +178 -0
  10. e_data-2.0.0b1/edata/tests/connectors/test_redata_connector.py +29 -0
  11. e_data-2.0.0b1/edata/tests/services/__init__.py +0 -0
  12. e_data-2.0.0b1/edata/tests/services/test_billing_service.py +1169 -0
  13. e_data-2.0.0b1/edata/tests/services/test_consumption_service.py +955 -0
  14. e_data-2.0.0b1/edata/tests/services/test_contract_service.py +216 -0
  15. e_data-2.0.0b1/edata/tests/services/test_database_service.py +415 -0
  16. e_data-2.0.0b1/edata/tests/services/test_maximeter_service.py +83 -0
  17. e_data-2.0.0b1/edata/tests/services/test_supply_service.py +251 -0
  18. e_data-2.0.0b1/edata/tests/test_helpers.py +612 -0
  19. {e_data-1.2.22/edata/processors → e_data-2.0.0b1/edata}/utils.py +72 -56
  20. e_data-2.0.0b1/pyproject.toml +99 -0
  21. {e_data-1.2.22 → e_data-2.0.0b1}/setup.cfg +0 -2
  22. e_data-1.2.22/MANIFEST.in +0 -13
  23. e_data-1.2.22/PKG-INFO +0 -136
  24. e_data-1.2.22/README.md +0 -106
  25. e_data-1.2.22/e_data.egg-info/PKG-INFO +0 -136
  26. e_data-1.2.22/e_data.egg-info/SOURCES.txt +0 -24
  27. e_data-1.2.22/e_data.egg-info/dependency_links.txt +0 -1
  28. e_data-1.2.22/e_data.egg-info/requires.txt +0 -8
  29. e_data-1.2.22/e_data.egg-info/top_level.txt +0 -1
  30. e_data-1.2.22/edata/connectors/datadis.py +0 -528
  31. e_data-1.2.22/edata/connectors/redata.py +0 -70
  32. e_data-1.2.22/edata/const.py +0 -3
  33. e_data-1.2.22/edata/definitions.py +0 -329
  34. e_data-1.2.22/edata/helpers.py +0 -769
  35. e_data-1.2.22/edata/processors/base.py +0 -27
  36. e_data-1.2.22/edata/processors/billing.py +0 -215
  37. e_data-1.2.22/edata/processors/consumption.py +0 -139
  38. e_data-1.2.22/edata/processors/maximeter.py +0 -56
  39. e_data-1.2.22/edata/storage.py +0 -46
  40. e_data-1.2.22/setup.py +0 -142
  41. {e_data-1.2.22 → e_data-2.0.0b1}/LICENSE +0 -0
  42. {e_data-1.2.22 → e_data-2.0.0b1}/edata/__init__.py +0 -0
  43. {e_data-1.2.22/edata/connectors → e_data-2.0.0b1/edata/tests}/__init__.py +0 -0
  44. {e_data-1.2.22/edata/processors → e_data-2.0.0b1/edata/tests/connectors}/__init__.py +0 -0
@@ -0,0 +1 @@
1
+ 3.11
@@ -0,0 +1,22 @@
1
+ # Configuration files
2
+ include pyproject.toml
3
+ include Makefile
4
+ include .python-version
5
+
6
+ # Documentation
7
+ include *.md
8
+
9
+ # License
10
+ include LICENSE
11
+
12
+ # Include tests (setuptools auto-includes package files)
13
+ recursive-include edata/tests *.py
14
+
15
+ # Exclude compiled files and caches
16
+ global-exclude *.pyc
17
+ global-exclude *.pyo
18
+ global-exclude __pycache__
19
+ global-exclude .DS_Store
20
+ prune build
21
+ prune dist
22
+ prune *.egg-info
@@ -0,0 +1,51 @@
1
+ .PHONY: help install install-dev test lint format build clean publish publish-test
2
+
3
+ help: ## Show this help message
4
+ @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
5
+
6
+ install: ## Install the package in development mode
7
+ pip install -e .
8
+
9
+ install-dev: ## Install with development dependencies
10
+ pip install -e ".[dev,test]"
11
+
12
+ test: ## Run tests
13
+ pytest
14
+
15
+ test-cov: ## Run tests with coverage
16
+ pytest --cov=edata --cov-report=html --cov-report=term
17
+
18
+ lint: ## Run linting checks
19
+ flake8 edata/
20
+ mypy edata/
21
+
22
+ format: ## Format code with black
23
+ black edata/
24
+
25
+ format-check: ## Check if code is formatted
26
+ black --check edata/
27
+
28
+ clean: ## Clean build artifacts
29
+ rm -rf build/
30
+ rm -rf dist/
31
+ rm -rf *.egg-info/
32
+ find . -type d -name __pycache__ -exec rm -rf {} +
33
+ find . -type f -name "*.pyc" -delete
34
+
35
+ build: ## Build the package
36
+ python -m build
37
+
38
+ publish-test: ## Publish to TestPyPI
39
+ python -m twine upload --repository testpypi dist/*
40
+
41
+ publish: ## Publish to PyPI
42
+ python -m twine upload dist/*
43
+
44
+ # Combined workflow commands
45
+ dev-setup: install-dev ## Setup development environment
46
+
47
+ pre-commit: format lint test ## Run all pre-commit checks
48
+
49
+ release: clean build publish ## Build and publish to PyPI
50
+
51
+ release-test: clean build publish-test ## Build and publish to TestPyPI
@@ -0,0 +1,214 @@
1
+ Metadata-Version: 2.4
2
+ Name: e-data
3
+ Version: 2.0.0b1
4
+ Summary: Python library for managing spanish energy data from various web providers
5
+ Author-email: VMG <vmayorg@outlook.es>
6
+ License: GPL-3.0-or-later
7
+ Project-URL: Homepage, https://github.com/uvejota/python-edata
8
+ Project-URL: Repository, https://github.com/uvejota/python-edata
9
+ Project-URL: Issues, https://github.com/uvejota/python-edata/issues
10
+ Keywords: energy,data,spain,electricity,consumption
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.8
14
+ Classifier: Programming Language :: Python :: 3.9
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: Implementation :: CPython
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Classifier: Topic :: Utilities
21
+ Requires-Python: >=3.8
22
+ Description-Content-Type: text/markdown
23
+ License-File: LICENSE
24
+ Requires-Dist: dateparser>=1.1.2
25
+ Requires-Dist: holidays>=0.14.2
26
+ Requires-Dist: python-dateutil>=2.8.2
27
+ Requires-Dist: requests>=2.28.1
28
+ Requires-Dist: voluptuous>=0.13.1
29
+ Requires-Dist: Jinja2>=3.1.2
30
+ Requires-Dist: pydantic>=2.0.0
31
+ Requires-Dist: sqlmodel>=0.0.24
32
+ Requires-Dist: aiosqlite>=0.20.0
33
+ Requires-Dist: sqlalchemy[asyncio]>=2.0.0
34
+ Provides-Extra: dev
35
+ Requires-Dist: pytest>=7.1.2; extra == "dev"
36
+ Requires-Dist: freezegun>=1.2.1; extra == "dev"
37
+ Requires-Dist: twine>=4.0.0; extra == "dev"
38
+ Requires-Dist: build>=0.10.0; extra == "dev"
39
+ Requires-Dist: black>=22.0.0; extra == "dev"
40
+ Requires-Dist: flake8>=5.0.0; extra == "dev"
41
+ Requires-Dist: mypy>=1.0.0; extra == "dev"
42
+ Provides-Extra: test
43
+ Requires-Dist: pytest>=7.1.2; extra == "test"
44
+ Requires-Dist: freezegun>=1.2.1; extra == "test"
45
+ Requires-Dist: pytest-cov>=4.0.0; extra == "test"
46
+ Requires-Dist: pytest-asyncio>=0.20.0; extra == "test"
47
+ Dynamic: license-file
48
+
49
+ [![Downloads](https://pepy.tech/badge/e-data)](https://pepy.tech/project/e-data)
50
+ [![Downloads](https://pepy.tech/badge/e-data/month)](https://pepy.tech/project/e-data)
51
+ [![Downloads](https://pepy.tech/badge/e-data/week)](https://pepy.tech/project/e-data)
52
+
53
+ # python-edata
54
+
55
+ Este paquete proporciona herramientas para la descarga de tus datos de consumo eléctrico (desde Datadis.es) y su posterior procesado. La motivación principal es que conocer el consumo puede ayudarnos a reducirlo, e incluso a elegir una tarifa que mejor se adapte a nuestras necesidades. A día de hoy sus capacidades de facturación (€) son limitadas, soporta PVPC (según disponibilidad de datos de REData) y tarificación fija por tramos. Es el corazón de la integración [homeassistant-edata](https://github.com/uvejota/homeassistant-edata).
56
+
57
+ _**Esta herramienta no mantiene ningún tipo de vinculación con los proveedores de datos anteriormente mencionados, simplemente consulta la información disponible y facilita su posterior análisis.**_
58
+
59
+ ## Instalación
60
+
61
+ Puedes instalar la última versión estable mediante:
62
+
63
+ ``` bash
64
+ pip install e-data
65
+ ```
66
+
67
+ Si quieres probar la versión `dev` o contribuir a su desarrollo, clona este repositorio e instala manualmente las dependencias:
68
+
69
+ ``` bash
70
+ make install-dev
71
+ ```
72
+
73
+ ## Estructura
74
+
75
+ El paquete utiliza una **arquitectura basada en servicios** con los siguientes módulos:
76
+
77
+ * **Conectores** (módulo `connectors`), para definir los métodos de consulta a los diferentes proveedores: Datadis y REData.
78
+ * **Modelos** (módulo `models`), que definen las estructuras de datos usando Pydantic v2 para validación robusta. Incluye modelos para suministros, contratos, consumos, maxímetro, precios y base de datos.
79
+ * **Servicios** (módulo `services`), que implementan la lógica de negocio para cada dominio: gestión de suministros, contratos, consumos, maxímetro, facturación y base de datos SQLite.
80
+ * **Helper principal** (`helpers.py`), que orquesta todos los servicios y proporciona una interfaz simplificada. El `EdataHelper` permite descargar y procesar datos automáticamente, calculando más de 40 atributos de resumen.
81
+
82
+ Estos módulos corresponden a la siguiente estructura del paquete:
83
+
84
+ ```
85
+ edata/
86
+ · __init__.py
87
+ · const.py # Constantes y definiciones de atributos
88
+ · utils.py # Utilidades generales
89
+ · helpers.py # Helper principal (EdataHelper)
90
+ · connectors/
91
+ · __init__.py
92
+ · datadis.py # Conector API Datadis
93
+ · redata.py # Conector API REData (PVPC)
94
+ · models/
95
+ · __init__.py
96
+ · base.py # Modelos base con Pydantic
97
+ · supply.py # Modelo de suministros
98
+ · contract.py # Modelo de contratos
99
+ · consumption.py # Modelo de consumos
100
+ · maximeter.py # Modelo de maxímetro
101
+ · pricing.py # Modelo de reglas de precios
102
+ · database.py # Modelos para SQLite
103
+ · services/
104
+ · __init__.py
105
+ · database.py # Servicio de base de datos SQLite
106
+ · supply.py # Gestión de suministros
107
+ · contract.py # Gestión de contratos
108
+ · consumption.py # Gestión de consumos
109
+ · maximeter.py # Gestión de maxímetro
110
+ · billing.py # Gestión de facturación
111
+ · scripts/
112
+ · __init__.py
113
+ · dump.py # Script interactivo de descarga
114
+ ```
115
+
116
+ ## Script interactivo
117
+
118
+ El paquete incluye un script interactivo que facilita la descarga inicial de datos:
119
+
120
+ ```bash
121
+ # Ejecutar el script interactivo
122
+ python -m edata.scripts.dump
123
+
124
+ # Con directorio personalizado
125
+ python -m edata.scripts.dump --storage-dir /ruta/personalizada
126
+ ```
127
+
128
+ Este script te guiará paso a paso para:
129
+ 1. Configurar credenciales de Datadis
130
+ 2. Seleccionar el suministro a procesar
131
+ 3. Definir el rango de fechas
132
+ 4. Descargar y almacenar todos los datos
133
+
134
+ ## Ejemplo de uso
135
+
136
+ Partimos de que tenemos credenciales en Datadis.es. Algunas aclaraciones:
137
+ * No es necesario solicitar API pública en el registro (se utilizará la API privada habilitada por defecto)
138
+ * El username suele ser el NIF del titular
139
+ * Copie el CUPS de la web de Datadis, algunas comercializadoras adhieren caracteres adicionales en el CUPS mostrado en su factura.
140
+ * La herramienta acepta el uso de NIF autorizado para consultar el suministro de otro titular.
141
+
142
+ ``` python
143
+ import asyncio
144
+ from datetime import datetime
145
+ import json
146
+
147
+ # importamos el modelo de reglas de tarificación
148
+ from edata.models.pricing import PricingRules
149
+ # importamos el helper principal
150
+ from edata.helpers import EdataHelper
151
+ # importamos utilidades para serialización
152
+ from edata import utils
153
+
154
+ # Preparar reglas de tarificación (si se quiere)
155
+ PRICING_RULES_PVPC = PricingRules(
156
+ p1_kw_year_eur=30.67266,
157
+ p2_kw_year_eur=1.4243591,
158
+ meter_month_eur=0.81,
159
+ market_kw_year_eur=3.113,
160
+ electricity_tax=1.0511300560,
161
+ iva_tax=1.05,
162
+ # podemos rellenar los siguientes campos si quisiéramos precio fijo (y no pvpc)
163
+ p1_kwh_eur=None,
164
+ p2_kwh_eur=None,
165
+ p3_kwh_eur=None,
166
+ )
167
+
168
+ async def main():
169
+ # Instanciar el helper
170
+ # 'datadis_authorized_nif' permite indicar el NIF de la persona que nos autoriza a consultar su CUPS.
171
+ # 'storage_dir_path' permite especificar dónde almacenar la base de datos local
172
+ edata = EdataHelper(
173
+ "datadis_user",
174
+ "datadis_password",
175
+ "cups",
176
+ datadis_authorized_nif=None,
177
+ pricing_rules=PRICING_RULES_PVPC, # si se le pasa None, no aplica tarificación
178
+ storage_dir_path=None, # por defecto usa ./edata.storage/
179
+ )
180
+
181
+ # Solicitar actualización de todo el histórico (los datos se almacenan en SQLite)
182
+ success = await edata.update(date_from=datetime(1970, 1, 1), date_to=datetime.today())
183
+
184
+ if success:
185
+ # Imprimir atributos resumen calculados
186
+ print("Atributos calculados:")
187
+ for key, value in edata.attributes.items():
188
+ if value is not None:
189
+ print(f" {key}: {value}")
190
+
191
+ # Los datos se almacenan automáticamente en la base de datos SQLite
192
+ # ubicada en edata.storage/edata.db (por defecto)
193
+ print(f"\nDatos almacenados en la base de datos local")
194
+ else:
195
+ print("Error durante la actualización de datos")
196
+
197
+ # Ejecutar el ejemplo
198
+ if __name__ == "__main__":
199
+ asyncio.run(main())
200
+ ```
201
+
202
+ ## Contribuir
203
+
204
+ Este proyecto está en desarrollo activo. Las contribuciones son bienvenidas:
205
+
206
+ 1. Fork del repositorio
207
+ 2. Crear una rama para tu feature: `git checkout -b feature/nueva-funcionalidad`
208
+ 3. Commit de tus cambios: `git commit -am 'Añadir nueva funcionalidad'`
209
+ 4. Push a la rama: `git push origin feature/nueva-funcionalidad`
210
+ 5. Crear un Pull Request
211
+
212
+ ## Licencia
213
+
214
+ Este proyecto está licenciado bajo GPLv3. Ver el archivo [LICENSE](LICENSE) para más detalles.
@@ -0,0 +1,166 @@
1
+ [![Downloads](https://pepy.tech/badge/e-data)](https://pepy.tech/project/e-data)
2
+ [![Downloads](https://pepy.tech/badge/e-data/month)](https://pepy.tech/project/e-data)
3
+ [![Downloads](https://pepy.tech/badge/e-data/week)](https://pepy.tech/project/e-data)
4
+
5
+ # python-edata
6
+
7
+ Este paquete proporciona herramientas para la descarga de tus datos de consumo eléctrico (desde Datadis.es) y su posterior procesado. La motivación principal es que conocer el consumo puede ayudarnos a reducirlo, e incluso a elegir una tarifa que mejor se adapte a nuestras necesidades. A día de hoy sus capacidades de facturación (€) son limitadas, soporta PVPC (según disponibilidad de datos de REData) y tarificación fija por tramos. Es el corazón de la integración [homeassistant-edata](https://github.com/uvejota/homeassistant-edata).
8
+
9
+ _**Esta herramienta no mantiene ningún tipo de vinculación con los proveedores de datos anteriormente mencionados, simplemente consulta la información disponible y facilita su posterior análisis.**_
10
+
11
+ ## Instalación
12
+
13
+ Puedes instalar la última versión estable mediante:
14
+
15
+ ``` bash
16
+ pip install e-data
17
+ ```
18
+
19
+ Si quieres probar la versión `dev` o contribuir a su desarrollo, clona este repositorio e instala manualmente las dependencias:
20
+
21
+ ``` bash
22
+ make install-dev
23
+ ```
24
+
25
+ ## Estructura
26
+
27
+ El paquete utiliza una **arquitectura basada en servicios** con los siguientes módulos:
28
+
29
+ * **Conectores** (módulo `connectors`), para definir los métodos de consulta a los diferentes proveedores: Datadis y REData.
30
+ * **Modelos** (módulo `models`), que definen las estructuras de datos usando Pydantic v2 para validación robusta. Incluye modelos para suministros, contratos, consumos, maxímetro, precios y base de datos.
31
+ * **Servicios** (módulo `services`), que implementan la lógica de negocio para cada dominio: gestión de suministros, contratos, consumos, maxímetro, facturación y base de datos SQLite.
32
+ * **Helper principal** (`helpers.py`), que orquesta todos los servicios y proporciona una interfaz simplificada. El `EdataHelper` permite descargar y procesar datos automáticamente, calculando más de 40 atributos de resumen.
33
+
34
+ Estos módulos corresponden a la siguiente estructura del paquete:
35
+
36
+ ```
37
+ edata/
38
+ · __init__.py
39
+ · const.py # Constantes y definiciones de atributos
40
+ · utils.py # Utilidades generales
41
+ · helpers.py # Helper principal (EdataHelper)
42
+ · connectors/
43
+ · __init__.py
44
+ · datadis.py # Conector API Datadis
45
+ · redata.py # Conector API REData (PVPC)
46
+ · models/
47
+ · __init__.py
48
+ · base.py # Modelos base con Pydantic
49
+ · supply.py # Modelo de suministros
50
+ · contract.py # Modelo de contratos
51
+ · consumption.py # Modelo de consumos
52
+ · maximeter.py # Modelo de maxímetro
53
+ · pricing.py # Modelo de reglas de precios
54
+ · database.py # Modelos para SQLite
55
+ · services/
56
+ · __init__.py
57
+ · database.py # Servicio de base de datos SQLite
58
+ · supply.py # Gestión de suministros
59
+ · contract.py # Gestión de contratos
60
+ · consumption.py # Gestión de consumos
61
+ · maximeter.py # Gestión de maxímetro
62
+ · billing.py # Gestión de facturación
63
+ · scripts/
64
+ · __init__.py
65
+ · dump.py # Script interactivo de descarga
66
+ ```
67
+
68
+ ## Script interactivo
69
+
70
+ El paquete incluye un script interactivo que facilita la descarga inicial de datos:
71
+
72
+ ```bash
73
+ # Ejecutar el script interactivo
74
+ python -m edata.scripts.dump
75
+
76
+ # Con directorio personalizado
77
+ python -m edata.scripts.dump --storage-dir /ruta/personalizada
78
+ ```
79
+
80
+ Este script te guiará paso a paso para:
81
+ 1. Configurar credenciales de Datadis
82
+ 2. Seleccionar el suministro a procesar
83
+ 3. Definir el rango de fechas
84
+ 4. Descargar y almacenar todos los datos
85
+
86
+ ## Ejemplo de uso
87
+
88
+ Partimos de que tenemos credenciales en Datadis.es. Algunas aclaraciones:
89
+ * No es necesario solicitar API pública en el registro (se utilizará la API privada habilitada por defecto)
90
+ * El username suele ser el NIF del titular
91
+ * Copie el CUPS de la web de Datadis, algunas comercializadoras adhieren caracteres adicionales en el CUPS mostrado en su factura.
92
+ * La herramienta acepta el uso de NIF autorizado para consultar el suministro de otro titular.
93
+
94
+ ``` python
95
+ import asyncio
96
+ from datetime import datetime
97
+ import json
98
+
99
+ # importamos el modelo de reglas de tarificación
100
+ from edata.models.pricing import PricingRules
101
+ # importamos el helper principal
102
+ from edata.helpers import EdataHelper
103
+ # importamos utilidades para serialización
104
+ from edata import utils
105
+
106
+ # Preparar reglas de tarificación (si se quiere)
107
+ PRICING_RULES_PVPC = PricingRules(
108
+ p1_kw_year_eur=30.67266,
109
+ p2_kw_year_eur=1.4243591,
110
+ meter_month_eur=0.81,
111
+ market_kw_year_eur=3.113,
112
+ electricity_tax=1.0511300560,
113
+ iva_tax=1.05,
114
+ # podemos rellenar los siguientes campos si quisiéramos precio fijo (y no pvpc)
115
+ p1_kwh_eur=None,
116
+ p2_kwh_eur=None,
117
+ p3_kwh_eur=None,
118
+ )
119
+
120
+ async def main():
121
+ # Instanciar el helper
122
+ # 'datadis_authorized_nif' permite indicar el NIF de la persona que nos autoriza a consultar su CUPS.
123
+ # 'storage_dir_path' permite especificar dónde almacenar la base de datos local
124
+ edata = EdataHelper(
125
+ "datadis_user",
126
+ "datadis_password",
127
+ "cups",
128
+ datadis_authorized_nif=None,
129
+ pricing_rules=PRICING_RULES_PVPC, # si se le pasa None, no aplica tarificación
130
+ storage_dir_path=None, # por defecto usa ./edata.storage/
131
+ )
132
+
133
+ # Solicitar actualización de todo el histórico (los datos se almacenan en SQLite)
134
+ success = await edata.update(date_from=datetime(1970, 1, 1), date_to=datetime.today())
135
+
136
+ if success:
137
+ # Imprimir atributos resumen calculados
138
+ print("Atributos calculados:")
139
+ for key, value in edata.attributes.items():
140
+ if value is not None:
141
+ print(f" {key}: {value}")
142
+
143
+ # Los datos se almacenan automáticamente en la base de datos SQLite
144
+ # ubicada en edata.storage/edata.db (por defecto)
145
+ print(f"\nDatos almacenados en la base de datos local")
146
+ else:
147
+ print("Error durante la actualización de datos")
148
+
149
+ # Ejecutar el ejemplo
150
+ if __name__ == "__main__":
151
+ asyncio.run(main())
152
+ ```
153
+
154
+ ## Contribuir
155
+
156
+ Este proyecto está en desarrollo activo. Las contribuciones son bienvenidas:
157
+
158
+ 1. Fork del repositorio
159
+ 2. Crear una rama para tu feature: `git checkout -b feature/nueva-funcionalidad`
160
+ 3. Commit de tus cambios: `git commit -am 'Añadir nueva funcionalidad'`
161
+ 4. Push a la rama: `git push origin feature/nueva-funcionalidad`
162
+ 5. Crear un Pull Request
163
+
164
+ ## Licencia
165
+
166
+ Este proyecto está licenciado bajo GPLv3. Ver el archivo [LICENSE](LICENSE) para más detalles.
@@ -0,0 +1,22 @@
1
+ .python-version
2
+ LICENSE
3
+ MANIFEST.in
4
+ Makefile
5
+ README.md
6
+ pyproject.toml
7
+ edata/__init__.py
8
+ edata/const.py
9
+ edata/helpers.py
10
+ edata/utils.py
11
+ edata/tests/__init__.py
12
+ edata/tests/test_helpers.py
13
+ edata/tests/connectors/__init__.py
14
+ edata/tests/connectors/test_datadis_connector.py
15
+ edata/tests/connectors/test_redata_connector.py
16
+ edata/tests/services/__init__.py
17
+ edata/tests/services/test_billing_service.py
18
+ edata/tests/services/test_consumption_service.py
19
+ edata/tests/services/test_contract_service.py
20
+ edata/tests/services/test_database_service.py
21
+ edata/tests/services/test_maximeter_service.py
22
+ edata/tests/services/test_supply_service.py
@@ -0,0 +1,56 @@
1
+ """Constants file."""
2
+
3
+ PROG_NAME = "edata"
4
+ DEFAULT_STORAGE_DIR = "edata.storage"
5
+
6
+ # Attributes definition for backward compatibility
7
+ ATTRIBUTES = {
8
+ "cups": None,
9
+ "contract_p1_kW": "kW",
10
+ "contract_p2_kW": "kW",
11
+ "yesterday_kWh": "kWh",
12
+ "yesterday_hours": "h",
13
+ "yesterday_p1_kWh": "kWh",
14
+ "yesterday_p2_kWh": "kWh",
15
+ "yesterday_p3_kWh": "kWh",
16
+ "yesterday_surplus_kWh": "kWh",
17
+ "yesterday_surplus_p1_kWh": "kWh",
18
+ "yesterday_surplus_p2_kWh": "kWh",
19
+ "yesterday_surplus_p3_kWh": "kWh",
20
+ "last_registered_date": None,
21
+ "last_registered_day_kWh": "kWh",
22
+ "last_registered_day_hours": "h",
23
+ "last_registered_day_p1_kWh": "kWh",
24
+ "last_registered_day_p2_kWh": "kWh",
25
+ "last_registered_day_p3_kWh": "kWh",
26
+ "last_registered_day_surplus_kWh": "kWh",
27
+ "last_registered_day_surplus_p1_kWh": "kWh",
28
+ "last_registered_day_surplus_p2_kWh": "kWh",
29
+ "last_registered_day_surplus_p3_kWh": "kWh",
30
+ "month_kWh": "kWh",
31
+ "month_daily_kWh": "kWh",
32
+ "month_days": "d",
33
+ "month_p1_kWh": "kWh",
34
+ "month_p2_kWh": "kWh",
35
+ "month_p3_kWh": "kWh",
36
+ "month_surplus_kWh": "kWh",
37
+ "month_surplus_p1_kWh": "kWh",
38
+ "month_surplus_p2_kWh": "kWh",
39
+ "month_surplus_p3_kWh": "kWh",
40
+ "month_€": "€",
41
+ "last_month_kWh": "kWh",
42
+ "last_month_daily_kWh": "kWh",
43
+ "last_month_days": "d",
44
+ "last_month_p1_kWh": "kWh",
45
+ "last_month_p2_kWh": "kWh",
46
+ "last_month_p3_kWh": "kWh",
47
+ "last_month_surplus_kWh": "kWh",
48
+ "last_month_surplus_p1_kWh": "kWh",
49
+ "last_month_surplus_p2_kWh": "kWh",
50
+ "last_month_surplus_p3_kWh": "kWh",
51
+ "last_month_€": "€",
52
+ "max_power_kW": "kW",
53
+ "max_power_date": None,
54
+ "max_power_mean_kW": "kW",
55
+ "max_power_90perc_kW": "kW",
56
+ }