thorcast_api_client 0.2.0__tar.gz → 0.2.1__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.
- thorcast_api_client-0.2.1/PKG-INFO +115 -0
- thorcast_api_client-0.2.1/README.md +92 -0
- thorcast_api_client-0.2.1/pyproject.toml +20 -0
- thorcast_api_client-0.2.0/PKG-INFO +0 -17
- thorcast_api_client-0.2.0/pyproject.toml +0 -13
- {thorcast_api_client-0.2.0 → thorcast_api_client-0.2.1}/thorcast_api_client/__init__.py +0 -0
- {thorcast_api_client-0.2.0 → thorcast_api_client-0.2.1}/thorcast_api_client/auth.py +0 -0
- {thorcast_api_client-0.2.0 → thorcast_api_client-0.2.1}/thorcast_api_client/client.py +0 -0
- {thorcast_api_client-0.2.0 → thorcast_api_client-0.2.1}/thorcast_api_client/config.py +0 -0
- {thorcast_api_client-0.2.0 → thorcast_api_client-0.2.1}/thorcast_api_client/exceptions.py +0 -0
- {thorcast_api_client-0.2.0 → thorcast_api_client-0.2.1}/thorcast_api_client/rate_limit.py +0 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: thorcast_api_client
|
|
3
|
+
Version: 0.2.1
|
|
4
|
+
Summary: Client Python de l'API ThorCast (Holmium) : courbes de charge LT, historiques et catalogues, avec respect du quota de requêtes
|
|
5
|
+
Keywords: thorcast,holmium,api,electricity,load-curves
|
|
6
|
+
Author: JBCAYRE
|
|
7
|
+
Author-email: jcayre@mint.eco
|
|
8
|
+
Requires-Python: >=3.8,<4.0
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
20
|
+
Requires-Dist: requests (>=2.26.0,<3.0.0)
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
|
|
23
|
+
# ThorCast API Client V0.2
|
|
24
|
+
|
|
25
|
+
## 📌 Description (je suis nul en Markdown , j'espère que ce sera lisible)
|
|
26
|
+
|
|
27
|
+
`thorcast_api_client` est un client Python permettant d'interagir avec l'API **ThorCast** mise en place par Holmium pour MINT.
|
|
28
|
+
|
|
29
|
+
Il prend en charge (normalement) :
|
|
30
|
+
- L'**authentification JWT**
|
|
31
|
+
- La récupération des **courbes de charge prévues**
|
|
32
|
+
- La récupération des **courbes de charge historiques**
|
|
33
|
+
- La gestion des **erreurs API**
|
|
34
|
+
- Le respect du **quota de requêtes** (depuis la 0.2.0)
|
|
35
|
+
|
|
36
|
+
## 🚀 Installation
|
|
37
|
+
|
|
38
|
+
### Via `pip`
|
|
39
|
+
```sh
|
|
40
|
+
pip install thorcast_api_client
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Via `poetry` pour les amateurs de Baudelaire
|
|
44
|
+
```sh
|
|
45
|
+
poetry add thorcast_api_client
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## 📜 Utilisation
|
|
49
|
+
|
|
50
|
+
### 🔒 Authentification :
|
|
51
|
+
|
|
52
|
+
L'authentification passe par la requête d'un token JWS en injectant un MDP/Username :
|
|
53
|
+
|
|
54
|
+
```sh
|
|
55
|
+
from thorcast_api_client.client import ThorCastClient
|
|
56
|
+
|
|
57
|
+
client = ThorCastClient("mon_user", "mon_mdp")
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### ⏱️ Quota de requêtes (0.2.0)
|
|
61
|
+
|
|
62
|
+
L'API limite à **60 requêtes par minute glissante** et renvoie `429 Too Many Requests` au-delà, avec un en-tête `Retry-After` (documentation Holmium v1.8, §5). Le client :
|
|
63
|
+
- **attend une place libre** avant chaque appel (limiteur partagé entre threads), plafonné par défaut au quota de l'API ;
|
|
64
|
+
- sur un 429, **attend le délai `Retry-After`** (60 s s'il est absent) puis retente, jusqu'à `max_retries` fois ; ensuite `RateLimitExceeded` est levée, avec le délai dans `exc.retry_after`.
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
client = ThorCastClient(
|
|
68
|
+
"mon_user", "mon_mdp",
|
|
69
|
+
max_requests_per_minute=50, # sous le quota si d'autres applications partagent le compte ; None = pas de limite
|
|
70
|
+
max_retries=3, # nouvelles tentatives sur 429
|
|
71
|
+
timeout=120, # timeout HTTP en secondes (None par défaut)
|
|
72
|
+
)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Rappel : 50 PRM au maximum par requête (`413` au-delà).
|
|
76
|
+
#### Lister les versions disponibles pour une ou plusieurs courbes LT
|
|
77
|
+
|
|
78
|
+
```sh
|
|
79
|
+
versions = client.get_lt_curves_versions(["prm1", "prm2"])
|
|
80
|
+
print(versions)
|
|
81
|
+
```
|
|
82
|
+
#### Récupérer les courbes de charge LT
|
|
83
|
+
|
|
84
|
+
```sh
|
|
85
|
+
courbes = client.get_lt_curves(["prm1", "prm2"], "2023-01-01T00:00:00Z", "2025-01-01T00:00:00Z")
|
|
86
|
+
print(courbes)
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### Récupérer les versions des courbes de catalogue 🤷 (rien compris à ce que ça remonte)
|
|
90
|
+
|
|
91
|
+
```sh
|
|
92
|
+
version_catalogues = client.get_catalog_versions(["catalogue1", "catalogue2"], "2023-01-01T00:00:00Z", "2025-01-01T00:00:00Z")
|
|
93
|
+
print(version_catalogues)
|
|
94
|
+
```
|
|
95
|
+
#### Récupérer les courbes de charge historiques
|
|
96
|
+
|
|
97
|
+
```sh
|
|
98
|
+
courbes_catalogue = client.get_catalog_curves(["id_catalogue1", "id_catalogue2"])
|
|
99
|
+
print(courbes_catalogue)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## 🗂️ Historique des versions
|
|
103
|
+
|
|
104
|
+
| Version | Date | Changements |
|
|
105
|
+
| --- | --- | --- |
|
|
106
|
+
| 0.2.1 | 2026-11-09 | Métadonnées PyPI uniquement : description, README affiché sur la page du projet, historique des versions. Code identique à la 0.2.0. |
|
|
107
|
+
| 0.2.0 | 2026-11-09 | Respect du quota de l'API (60 requêtes par minute glissante, limiteur partagé entre threads, paramètre `max_requests_per_minute`). Sur un `429`, attente du délai `Retry-After` puis nouvelle tentative (`max_retries`) ; `RateLimitExceeded` porte le délai dans `retry_after`. Paramètre `timeout` optionnel. Tests sans appel réseau. |
|
|
108
|
+
| 0.1.4.2 | 2025-07-25 | Retrait des affichages de débogage de l'authentification (URL et contenu de la requête). |
|
|
109
|
+
| 0.1.4.1 | 2025-07-25 | Retour à l'URL `profilage-api.holmium-consulting.com` et à l'identification par `email`. |
|
|
110
|
+
| 0.1.3 | 2025-06-19 | Passage à l'URL `api.thorcast.com` ; paramètre `username` au lieu de `identifier`. |
|
|
111
|
+
| 0.1.2 | 2025-02-18 | Première version publiée : authentification JWT, courbes LT et versions, courbes historiques, catalogues. |
|
|
112
|
+
|
|
113
|
+
Montée de version : incrémenter `version` dans `pyproject.toml`, ajouter une ligne à ce tableau, puis `python -m build` et `python -m twine upload dist/*`.
|
|
114
|
+
|
|
115
|
+
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# ThorCast API Client V0.2
|
|
2
|
+
|
|
3
|
+
## 📌 Description (je suis nul en Markdown , j'espère que ce sera lisible)
|
|
4
|
+
|
|
5
|
+
`thorcast_api_client` est un client Python permettant d'interagir avec l'API **ThorCast** mise en place par Holmium pour MINT.
|
|
6
|
+
|
|
7
|
+
Il prend en charge (normalement) :
|
|
8
|
+
- L'**authentification JWT**
|
|
9
|
+
- La récupération des **courbes de charge prévues**
|
|
10
|
+
- La récupération des **courbes de charge historiques**
|
|
11
|
+
- La gestion des **erreurs API**
|
|
12
|
+
- Le respect du **quota de requêtes** (depuis la 0.2.0)
|
|
13
|
+
|
|
14
|
+
## 🚀 Installation
|
|
15
|
+
|
|
16
|
+
### Via `pip`
|
|
17
|
+
```sh
|
|
18
|
+
pip install thorcast_api_client
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Via `poetry` pour les amateurs de Baudelaire
|
|
22
|
+
```sh
|
|
23
|
+
poetry add thorcast_api_client
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 📜 Utilisation
|
|
27
|
+
|
|
28
|
+
### 🔒 Authentification :
|
|
29
|
+
|
|
30
|
+
L'authentification passe par la requête d'un token JWS en injectant un MDP/Username :
|
|
31
|
+
|
|
32
|
+
```sh
|
|
33
|
+
from thorcast_api_client.client import ThorCastClient
|
|
34
|
+
|
|
35
|
+
client = ThorCastClient("mon_user", "mon_mdp")
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### ⏱️ Quota de requêtes (0.2.0)
|
|
39
|
+
|
|
40
|
+
L'API limite à **60 requêtes par minute glissante** et renvoie `429 Too Many Requests` au-delà, avec un en-tête `Retry-After` (documentation Holmium v1.8, §5). Le client :
|
|
41
|
+
- **attend une place libre** avant chaque appel (limiteur partagé entre threads), plafonné par défaut au quota de l'API ;
|
|
42
|
+
- sur un 429, **attend le délai `Retry-After`** (60 s s'il est absent) puis retente, jusqu'à `max_retries` fois ; ensuite `RateLimitExceeded` est levée, avec le délai dans `exc.retry_after`.
|
|
43
|
+
|
|
44
|
+
```sh
|
|
45
|
+
client = ThorCastClient(
|
|
46
|
+
"mon_user", "mon_mdp",
|
|
47
|
+
max_requests_per_minute=50, # sous le quota si d'autres applications partagent le compte ; None = pas de limite
|
|
48
|
+
max_retries=3, # nouvelles tentatives sur 429
|
|
49
|
+
timeout=120, # timeout HTTP en secondes (None par défaut)
|
|
50
|
+
)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Rappel : 50 PRM au maximum par requête (`413` au-delà).
|
|
54
|
+
#### Lister les versions disponibles pour une ou plusieurs courbes LT
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
versions = client.get_lt_curves_versions(["prm1", "prm2"])
|
|
58
|
+
print(versions)
|
|
59
|
+
```
|
|
60
|
+
#### Récupérer les courbes de charge LT
|
|
61
|
+
|
|
62
|
+
```sh
|
|
63
|
+
courbes = client.get_lt_curves(["prm1", "prm2"], "2023-01-01T00:00:00Z", "2025-01-01T00:00:00Z")
|
|
64
|
+
print(courbes)
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
#### Récupérer les versions des courbes de catalogue 🤷 (rien compris à ce que ça remonte)
|
|
68
|
+
|
|
69
|
+
```sh
|
|
70
|
+
version_catalogues = client.get_catalog_versions(["catalogue1", "catalogue2"], "2023-01-01T00:00:00Z", "2025-01-01T00:00:00Z")
|
|
71
|
+
print(version_catalogues)
|
|
72
|
+
```
|
|
73
|
+
#### Récupérer les courbes de charge historiques
|
|
74
|
+
|
|
75
|
+
```sh
|
|
76
|
+
courbes_catalogue = client.get_catalog_curves(["id_catalogue1", "id_catalogue2"])
|
|
77
|
+
print(courbes_catalogue)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## 🗂️ Historique des versions
|
|
81
|
+
|
|
82
|
+
| Version | Date | Changements |
|
|
83
|
+
| --- | --- | --- |
|
|
84
|
+
| 0.2.1 | 2026-11-09 | Métadonnées PyPI uniquement : description, README affiché sur la page du projet, historique des versions. Code identique à la 0.2.0. |
|
|
85
|
+
| 0.2.0 | 2026-11-09 | Respect du quota de l'API (60 requêtes par minute glissante, limiteur partagé entre threads, paramètre `max_requests_per_minute`). Sur un `429`, attente du délai `Retry-After` puis nouvelle tentative (`max_retries`) ; `RateLimitExceeded` porte le délai dans `retry_after`. Paramètre `timeout` optionnel. Tests sans appel réseau. |
|
|
86
|
+
| 0.1.4.2 | 2025-07-25 | Retrait des affichages de débogage de l'authentification (URL et contenu de la requête). |
|
|
87
|
+
| 0.1.4.1 | 2025-07-25 | Retour à l'URL `profilage-api.holmium-consulting.com` et à l'identification par `email`. |
|
|
88
|
+
| 0.1.3 | 2025-06-19 | Passage à l'URL `api.thorcast.com` ; paramètre `username` au lieu de `identifier`. |
|
|
89
|
+
| 0.1.2 | 2025-02-18 | Première version publiée : authentification JWT, courbes LT et versions, courbes historiques, catalogues. |
|
|
90
|
+
|
|
91
|
+
Montée de version : incrémenter `version` dans `pyproject.toml`, ajouter une ligne à ce tableau, puis `python -m build` et `python -m twine upload dist/*`.
|
|
92
|
+
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
[tool.poetry]
|
|
2
|
+
name = "thorcast_api_client"
|
|
3
|
+
version = "0.2.1"
|
|
4
|
+
description = "Client Python de l'API ThorCast (Holmium) : courbes de charge LT, historiques et catalogues, avec respect du quota de requêtes"
|
|
5
|
+
authors = ["JBCAYRE <jcayre@mint.eco>"]
|
|
6
|
+
readme = "README.md"
|
|
7
|
+
keywords = ["thorcast", "holmium", "api", "electricity", "load-curves"]
|
|
8
|
+
classifiers = [
|
|
9
|
+
"Programming Language :: Python :: 3",
|
|
10
|
+
"Operating System :: OS Independent",
|
|
11
|
+
"Intended Audience :: Developers",
|
|
12
|
+
]
|
|
13
|
+
|
|
14
|
+
[tool.poetry.dependencies]
|
|
15
|
+
python = "^3.8"
|
|
16
|
+
requests = "^2.26.0"
|
|
17
|
+
|
|
18
|
+
[build-system]
|
|
19
|
+
requires = ["poetry-core>=1.0.0"]
|
|
20
|
+
build-backend = "poetry.core.masonry.api"
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: thorcast_api_client
|
|
3
|
-
Version: 0.2.0
|
|
4
|
-
Summary: Un client Python pour interagir avec l'API ThorCast
|
|
5
|
-
Author: JBCAYRE
|
|
6
|
-
Author-email: jcayre@mint.eco
|
|
7
|
-
Requires-Python: >=3.8,<4.0
|
|
8
|
-
Classifier: Programming Language :: Python :: 3
|
|
9
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
10
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
-
Classifier: Programming Language :: Python :: 3.15
|
|
17
|
-
Requires-Dist: requests (>=2.26.0,<3.0.0)
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
[tool.poetry]
|
|
2
|
-
name = "thorcast_api_client"
|
|
3
|
-
version = "0.2.0"
|
|
4
|
-
description = "Un client Python pour interagir avec l'API ThorCast"
|
|
5
|
-
authors = ["JBCAYRE <jcayre@mint.eco>"]
|
|
6
|
-
|
|
7
|
-
[tool.poetry.dependencies]
|
|
8
|
-
python = "^3.8"
|
|
9
|
-
requests = "^2.26.0"
|
|
10
|
-
|
|
11
|
-
[build-system]
|
|
12
|
-
requires = ["poetry-core>=1.0.0"]
|
|
13
|
-
build-backend = "poetry.core.masonry.api"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|