python-esios 2.0.2__tar.gz → 2.1.0__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.
- python_esios-2.0.2/.github/workflows/publish.yml → python_esios-2.1.0/.github/workflows/release-please.yml +18 -4
- {python_esios-2.0.2 → python_esios-2.1.0}/.gitignore +6 -0
- python_esios-2.1.0/.release-please-manifest.json +3 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/CHANGELOG.md +21 -0
- python_esios-2.1.0/CLAUDE.md +21 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/PKG-INFO +8 -2
- {python_esios-2.0.2 → python_esios-2.1.0}/pyproject.toml +8 -2
- python_esios-2.1.0/release-please-config.json +19 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/tests/test_managers.py +9 -2
- {python_esios-2.0.2 → python_esios-2.1.0}/LICENSE +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/README.md +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/.gitignore +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/01_Quickstart/01_Setup and First Query.ipynb +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/02_Indicators/01_Search Indicators.ipynb +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/02_Indicators/02_Historical Data.ipynb +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/02_Indicators/03_Multi-Geography Indicators.ipynb +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/02_Indicators/04_Compare Indicators.ipynb +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/02_Indicators/05_Market Prices.ipynb +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/02_Indicators/06_Generation and Demand.ipynb +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/03_Archives/01_Download Archives.ipynb +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/03_Archives/02_I90 Settlement Files.ipynb +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/04_Caching/01_Cache Management.ipynb +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/05_Advanced/01_Ad-hoc Pandas Expressions.ipynb +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/05_Advanced/02_Async Client.ipynb +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/01_Quickstart/01_Setup and First Query.yaml +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/02_Indicators/01_Search Indicators.yaml +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/02_Indicators/02_Historical Data.yaml +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/02_Indicators/03_Multi-Geography Indicators.yaml +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/02_Indicators/04_Compare Indicators.yaml +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/02_Indicators/05_Market Prices.yaml +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/02_Indicators/06_Generation and Demand.yaml +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/03_Archives/01_Download Archives.yaml +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/03_Archives/02_I90 Settlement Files.yaml +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/04_Caching/01_Cache Management.yaml +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/05_Advanced/01_Ad-hoc Pandas Expressions.yaml +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/05_Advanced/02_Async Client.yaml +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/examples/generate.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/.agents/skills/esios/SKILL.md +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/__init__.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/async_client.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/cache.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/cli/__init__.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/cli/app.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/cli/archives.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/cli/cache_cmd.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/cli/config.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/cli/config_cmd.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/cli/exec_cmd.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/cli/indicators.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/client.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/constants.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/data/__init__.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/data/catalogs/__init__.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/data/catalogs/archives/__init__.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/data/catalogs/archives/catalog.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/data/catalogs/archives/refresh.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/exceptions.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/managers/__init__.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/managers/archives.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/managers/base.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/managers/indicators.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/managers/offer_indicators.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/models/__init__.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/models/archive.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/models/indicator.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/models/offer_indicator.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/processing/__init__.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/processing/dataframes.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/processing/i90.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/src/esios/processing/zip.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/tests/__init__.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/tests/conftest.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/tests/test_cache.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/tests/test_client.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/tests/test_dataframes.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/tests/test_exceptions.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/tests/test_i90.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/tests/test_models.py +0 -0
- {python_esios-2.0.2 → python_esios-2.1.0}/tests/test_zip.py +0 -0
|
@@ -1,14 +1,30 @@
|
|
|
1
|
-
name:
|
|
1
|
+
name: Release Please
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
push:
|
|
5
5
|
branches: [main]
|
|
6
6
|
|
|
7
|
+
permissions:
|
|
8
|
+
contents: write
|
|
9
|
+
pull-requests: write
|
|
10
|
+
|
|
7
11
|
jobs:
|
|
12
|
+
release-please:
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
outputs:
|
|
15
|
+
release_created: ${{ steps.release.outputs.release_created }}
|
|
16
|
+
steps:
|
|
17
|
+
- uses: googleapis/release-please-action@v4
|
|
18
|
+
id: release
|
|
19
|
+
with:
|
|
20
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
21
|
+
|
|
8
22
|
publish:
|
|
23
|
+
needs: release-please
|
|
24
|
+
if: needs.release-please.outputs.release_created == 'true'
|
|
9
25
|
runs-on: ubuntu-latest
|
|
10
26
|
permissions:
|
|
11
|
-
id-token: write
|
|
27
|
+
id-token: write
|
|
12
28
|
steps:
|
|
13
29
|
- uses: actions/checkout@v4
|
|
14
30
|
|
|
@@ -24,5 +40,3 @@ jobs:
|
|
|
24
40
|
|
|
25
41
|
- name: Publish to PyPI
|
|
26
42
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
27
|
-
with:
|
|
28
|
-
skip-existing: true
|
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.1.0](https://github.com/datons/python-esios/compare/python-esios-v2.0.2...python-esios-v2.1.0) (2026-03-04)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* add archives sheets and exec CLI commands for I90 processing ([b54f94a](https://github.com/datons/python-esios/commit/b54f94adfa56ee2150fc85f92055b002b0d3e9bb))
|
|
9
|
+
* add static archives catalog (153 archives) and improve download API ([22e6095](https://github.com/datons/python-esios/commit/22e60953fb3d5314452c03807be3e12595b88fd4))
|
|
10
|
+
* replace manual PyPI workflow with release-please ([3c0dcb3](https://github.com/datons/python-esios/commit/3c0dcb35b01a47ea489d5a1ecb891d6805486356))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* correct author email to datons.com ([8e17132](https://github.com/datons/python-esios/commit/8e1713248a56928ba61898b5b84b0b4689798ce3))
|
|
16
|
+
* rename release-please config to expected non-dotted filename ([2f53b76](https://github.com/datons/python-esios/commit/2f53b7658c3f3e02e53dcbb3a2fe149b8f16ad7c))
|
|
17
|
+
* update archives test to match static catalog default ([9bbd98b](https://github.com/datons/python-esios/commit/9bbd98b56dee2ae1cfbed24537ad989f5214ae76))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Performance
|
|
21
|
+
|
|
22
|
+
* lazy sheet loading in I90Book — only read sheets on demand ([2dfe941](https://github.com/datons/python-esios/commit/2dfe941bf71c74bb0bd07c72c90e92b61a0d3059))
|
|
23
|
+
|
|
3
24
|
## [2.0.0] - 2026-02-27
|
|
4
25
|
|
|
5
26
|
Complete rewrite of the library with a new architecture, CLI, and caching system.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# python-esios
|
|
2
|
+
|
|
3
|
+
## Releasing
|
|
4
|
+
|
|
5
|
+
This project uses [release-please](https://github.com/googleapis/release-please) for automated versioning and publishing.
|
|
6
|
+
|
|
7
|
+
**How it works:**
|
|
8
|
+
|
|
9
|
+
1. Write conventional commits (`feat:`, `fix:`, `chore:`, etc.)
|
|
10
|
+
2. On push to `main`, release-please auto-opens/updates a **Release PR** with version bump + CHANGELOG
|
|
11
|
+
3. Merge the Release PR → GitHub Release + tag created → PyPI publish via trusted publishing
|
|
12
|
+
|
|
13
|
+
**Key files:**
|
|
14
|
+
|
|
15
|
+
- `.release-please-config.json` — release-please configuration (package type, changelog sections)
|
|
16
|
+
- `.release-please-manifest.json` — tracks current version
|
|
17
|
+
- `.github/workflows/release-please.yml` — workflow (release PR management + PyPI publish)
|
|
18
|
+
|
|
19
|
+
**Version is tracked in** `pyproject.toml` (`project.version`). Release-please bumps it automatically based on commit types (`feat:` → minor, `fix:` → patch).
|
|
20
|
+
|
|
21
|
+
**Never bump the version manually** — let release-please handle it via the Release PR.
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-esios
|
|
3
|
-
Version: 2.0
|
|
3
|
+
Version: 2.1.0
|
|
4
4
|
Summary: A Python wrapper for the ESIOS API (Spanish electricity market)
|
|
5
5
|
Project-URL: Homepage, https://github.com/datons/python-esios
|
|
6
6
|
Project-URL: Repository, https://github.com/datons/python-esios
|
|
7
|
-
|
|
7
|
+
Project-URL: Issues, https://github.com/datons/python-esios/issues
|
|
8
|
+
Project-URL: Changelog, https://github.com/datons/python-esios/releases
|
|
9
|
+
Author-email: Jesús López <jesus.lopez@datons.com>
|
|
8
10
|
License-Expression: GPL-3.0-only
|
|
9
11
|
License-File: LICENSE
|
|
12
|
+
Keywords: api,electricity,energy,esios,ree,spain
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
10
15
|
Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
|
|
11
16
|
Classifier: Operating System :: OS Independent
|
|
12
17
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -14,6 +19,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
14
19
|
Classifier: Programming Language :: Python :: 3.11
|
|
15
20
|
Classifier: Programming Language :: Python :: 3.12
|
|
16
21
|
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering
|
|
17
23
|
Requires-Python: >=3.10
|
|
18
24
|
Requires-Dist: beautifulsoup4>=4.12
|
|
19
25
|
Requires-Dist: httpx>=0.27
|
|
@@ -4,15 +4,18 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "python-esios"
|
|
7
|
-
version = "2.0
|
|
7
|
+
version = "2.1.0"
|
|
8
8
|
description = "A Python wrapper for the ESIOS API (Spanish electricity market)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "GPL-3.0-only"
|
|
11
11
|
requires-python = ">=3.10"
|
|
12
12
|
authors = [
|
|
13
|
-
{ name = "Jesús López", email = "jesus.lopez@datons.
|
|
13
|
+
{ name = "Jesús López", email = "jesus.lopez@datons.com" },
|
|
14
14
|
]
|
|
15
|
+
keywords = ["esios", "ree", "energy", "electricity", "spain", "api"]
|
|
15
16
|
classifiers = [
|
|
17
|
+
"Development Status :: 5 - Production/Stable",
|
|
18
|
+
"Intended Audience :: Science/Research",
|
|
16
19
|
"Programming Language :: Python :: 3",
|
|
17
20
|
"Programming Language :: Python :: 3.10",
|
|
18
21
|
"Programming Language :: Python :: 3.11",
|
|
@@ -20,6 +23,7 @@ classifiers = [
|
|
|
20
23
|
"Programming Language :: Python :: 3.13",
|
|
21
24
|
"License :: OSI Approved :: GNU General Public License v3 (GPLv3)",
|
|
22
25
|
"Operating System :: OS Independent",
|
|
26
|
+
"Topic :: Scientific/Engineering",
|
|
23
27
|
]
|
|
24
28
|
dependencies = [
|
|
25
29
|
"httpx>=0.27",
|
|
@@ -39,6 +43,8 @@ esios = "esios.cli:app"
|
|
|
39
43
|
[project.urls]
|
|
40
44
|
Homepage = "https://github.com/datons/python-esios"
|
|
41
45
|
Repository = "https://github.com/datons/python-esios"
|
|
46
|
+
Issues = "https://github.com/datons/python-esios/issues"
|
|
47
|
+
Changelog = "https://github.com/datons/python-esios/releases"
|
|
42
48
|
|
|
43
49
|
[tool.hatch.build.targets.wheel]
|
|
44
50
|
packages = ["src/esios"]
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"packages": {
|
|
3
|
+
".": {
|
|
4
|
+
"release-type": "python",
|
|
5
|
+
"package-name": "python-esios",
|
|
6
|
+
"extra-files": [
|
|
7
|
+
"pyproject.toml"
|
|
8
|
+
],
|
|
9
|
+
"changelog-sections": [
|
|
10
|
+
{ "type": "feat", "section": "Features" },
|
|
11
|
+
{ "type": "fix", "section": "Bug Fixes" },
|
|
12
|
+
{ "type": "perf", "section": "Performance" },
|
|
13
|
+
{ "type": "docs", "section": "Documentation", "hidden": true },
|
|
14
|
+
{ "type": "chore", "section": "Miscellaneous", "hidden": true }
|
|
15
|
+
]
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json"
|
|
19
|
+
}
|
|
@@ -58,13 +58,20 @@ class TestIndicatorsManager:
|
|
|
58
58
|
|
|
59
59
|
|
|
60
60
|
class TestArchivesManager:
|
|
61
|
-
def
|
|
61
|
+
def test_list_local(self, client):
|
|
62
|
+
"""Default list() returns static catalog (153 archives)."""
|
|
63
|
+
df = client.archives.list()
|
|
64
|
+
assert isinstance(df, pd.DataFrame)
|
|
65
|
+
assert len(df) == 153
|
|
66
|
+
|
|
67
|
+
def test_list_api(self, client, mock_httpx, sample_archives_list_response):
|
|
68
|
+
"""list(source='api') queries the ESIOS API."""
|
|
62
69
|
response = MagicMock()
|
|
63
70
|
response.status_code = 200
|
|
64
71
|
response.json.return_value = sample_archives_list_response
|
|
65
72
|
mock_httpx.get.return_value = response
|
|
66
73
|
|
|
67
|
-
df = client.archives.list()
|
|
74
|
+
df = client.archives.list(source="api")
|
|
68
75
|
assert isinstance(df, pd.DataFrame)
|
|
69
76
|
assert len(df) == 2
|
|
70
77
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_esios-2.0.2 → python_esios-2.1.0}/examples/01_Quickstart/01_Setup and First Query.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_esios-2.0.2 → python_esios-2.1.0}/examples/02_Indicators/03_Multi-Geography Indicators.ipynb
RENAMED
|
File without changes
|
{python_esios-2.0.2 → python_esios-2.1.0}/examples/02_Indicators/04_Compare Indicators.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
{python_esios-2.0.2 → python_esios-2.1.0}/examples/02_Indicators/06_Generation and Demand.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
{python_esios-2.0.2 → python_esios-2.1.0}/examples/03_Archives/02_I90 Settlement Files.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
{python_esios-2.0.2 → python_esios-2.1.0}/examples/05_Advanced/01_Ad-hoc Pandas Expressions.ipynb
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/02_Indicators/01_Search Indicators.yaml
RENAMED
|
File without changes
|
{python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/02_Indicators/02_Historical Data.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/02_Indicators/04_Compare Indicators.yaml
RENAMED
|
File without changes
|
{python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/02_Indicators/05_Market Prices.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/03_Archives/01_Download Archives.yaml
RENAMED
|
File without changes
|
{python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/03_Archives/02_I90 Settlement Files.yaml
RENAMED
|
File without changes
|
{python_esios-2.0.2 → python_esios-2.1.0}/examples/_specs/04_Caching/01_Cache Management.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|