myelectricaldatapy 2.4.8__tar.gz → 2.4.9__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.
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/PKG-INFO +1 -1
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy/api.py +6 -1
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy.egg-info/PKG-INFO +1 -1
- myelectricaldatapy-2.4.9/myelectricaldatapy.egg-info/scm_version.json +8 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/test_load_data.py +36 -0
- myelectricaldatapy-2.4.8/myelectricaldatapy.egg-info/scm_version.json +0 -8
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/.devcontainer/devcontainer-lock.json +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/.devcontainer/devcontainer.json +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/.github/dependabot.yml +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/.github/workflows/auto-approve.yml +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/.github/workflows/python-lint.yml +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/.github/workflows/python-publish.yml +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/.github/workflows/release.yml +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/.gitignore +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/.pre-commit-config.yaml +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/.vscode/settings.json +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/LICENSE +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/README.md +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/_secrets.yaml +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/example.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy/__init__.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy/analytics.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy/auth.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy/const.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy/exceptions.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy/mypdl.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy/py.typed +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy/types.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy/tz.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy.egg-info/SOURCES.txt +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy.egg-info/dependency_links.txt +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy.egg-info/requires.txt +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy.egg-info/scm_file_list.json +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy.egg-info/top_level.txt +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/pyproject.toml +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/setup.cfg +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/__init__.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/conftest.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/consts.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/fixtures/access.json +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/fixtures/address.json +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/fixtures/contract.json +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/fixtures/daily.json +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/fixtures/detail.json +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/fixtures/ecowatt.json +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/fixtures/identity.json +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/fixtures/invalid_access.json +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/fixtures/tempo.json +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/test_analytics.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/tests/test_auth.py +0 -0
- {myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/uv.lock +0 -0
|
@@ -11,7 +11,7 @@ from pydantic import BaseModel, ValidationError
|
|
|
11
11
|
|
|
12
12
|
from .auth import EnedisAuth
|
|
13
13
|
from .const import DAILY_CONSUM, DAILY_PROD, DETAIL_CONSUM, DETAIL_PROD
|
|
14
|
-
from .exceptions import EnedisException, PayloadError
|
|
14
|
+
from .exceptions import EnedisException, LimitReached, PayloadError
|
|
15
15
|
from .types import (
|
|
16
16
|
AccessResponse,
|
|
17
17
|
Contract,
|
|
@@ -275,6 +275,11 @@ class Enedis:
|
|
|
275
275
|
DataCollect,
|
|
276
276
|
await self.async_fetch_datas(service, pdl, start, end),
|
|
277
277
|
)
|
|
278
|
+
except LimitReached:
|
|
279
|
+
# Quota/throttling errors apply to every remaining chunk too,
|
|
280
|
+
# so let the caller see them (e.g. to back off until
|
|
281
|
+
# ThrottlingError.next_access_time) instead of swallowing them.
|
|
282
|
+
raise
|
|
278
283
|
except EnedisException as error:
|
|
279
284
|
raise_error = True
|
|
280
285
|
logger.error(error)
|
|
@@ -16,6 +16,7 @@ from myelectricaldatapy import (
|
|
|
16
16
|
EnedisException,
|
|
17
17
|
LimitReached,
|
|
18
18
|
Subscription,
|
|
19
|
+
ThrottlingError,
|
|
19
20
|
)
|
|
20
21
|
from myelectricaldatapy.tz import LOCAL_TIMEZONE
|
|
21
22
|
|
|
@@ -249,3 +250,38 @@ async def test_exception(
|
|
|
249
250
|
pass
|
|
250
251
|
assert api.last_access is not None
|
|
251
252
|
assert api.access.valid is True
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
async def test_details_throttling_propagates(
|
|
256
|
+
mock_access,
|
|
257
|
+
session,
|
|
258
|
+
) -> None:
|
|
259
|
+
"""A ThrottlingError raised while fetching a details chunk must reach the caller.
|
|
260
|
+
|
|
261
|
+
Regression test: ``Enedis._async_get_details`` used to catch every
|
|
262
|
+
``EnedisException`` per 7-day chunk and only log it, so callers (and
|
|
263
|
+
their ``next_access_time`` back-off logic) never saw the throttling.
|
|
264
|
+
Deliberately bypasses the ``mock_enedis`` fixture, which stubs
|
|
265
|
+
``async_get_details_consumption`` wholesale and would skip the internal
|
|
266
|
+
per-chunk loop this test targets.
|
|
267
|
+
"""
|
|
268
|
+
throttling = ThrottlingError(
|
|
269
|
+
"Throttled", next_access_time="2026-Sep-05 16:00:00+0000 UTC"
|
|
270
|
+
)
|
|
271
|
+
with (
|
|
272
|
+
patch.object(
|
|
273
|
+
myelectricaldatapy.Enedis,
|
|
274
|
+
"async_valid_access",
|
|
275
|
+
return_value=mock_access,
|
|
276
|
+
),
|
|
277
|
+
patch.object(
|
|
278
|
+
myelectricaldatapy.Enedis,
|
|
279
|
+
"async_fetch_datas",
|
|
280
|
+
side_effect=throttling,
|
|
281
|
+
),
|
|
282
|
+
):
|
|
283
|
+
api = EnedisByPDL(pdl=PDL, token=TOKEN, session=session)
|
|
284
|
+
api.set_data_fetch(DETAIL_CONSUM)
|
|
285
|
+
with pytest.raises(ThrottlingError) as exc_info:
|
|
286
|
+
await api.async_update()
|
|
287
|
+
assert exc_info.value.next_access_time == "2026-Sep-05 16:00:00+0000 UTC"
|
|
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
|
{myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy.egg-info/requires.txt
RENAMED
|
File without changes
|
{myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy.egg-info/scm_file_list.json
RENAMED
|
File without changes
|
{myelectricaldatapy-2.4.8 → myelectricaldatapy-2.4.9}/myelectricaldatapy.egg-info/top_level.txt
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
|