pygazpar 1.2.5__py39-none-any.whl → 1.2.7__py39-none-any.whl
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.
- pygazpar/datasource.py +13 -29
- pygazpar/version.py +1 -1
- {pygazpar-1.2.5.dist-info → pygazpar-1.2.7.dist-info}/METADATA +11 -1
- {pygazpar-1.2.5.dist-info → pygazpar-1.2.7.dist-info}/RECORD +10 -10
- tests/test_client.py +159 -159
- tests/test_datasource.py +166 -166
- {pygazpar-1.2.5.dist-info → pygazpar-1.2.7.dist-info}/LICENSE.md +0 -0
- {pygazpar-1.2.5.dist-info → pygazpar-1.2.7.dist-info}/WHEEL +0 -0
- {pygazpar-1.2.5.dist-info → pygazpar-1.2.7.dist-info}/entry_points.txt +0 -0
- {pygazpar-1.2.5.dist-info → pygazpar-1.2.7.dist-info}/top_level.txt +0 -0
pygazpar/datasource.py
CHANGED
@@ -59,9 +59,9 @@ class WebDataSource(IDataSource):
|
|
59
59
|
# ------------------------------------------------------
|
60
60
|
def load(self, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
|
61
61
|
|
62
|
-
|
62
|
+
self._login(self.__username, self.__password) # We ignore the return value.
|
63
63
|
|
64
|
-
res = self._loadFromSession(
|
64
|
+
res = self._loadFromSession(pceIdentifier, startDate, endDate, frequencies)
|
65
65
|
|
66
66
|
Logger.debug("The data update terminates normally")
|
67
67
|
|
@@ -88,23 +88,23 @@ class WebDataSource(IDataSource):
|
|
88
88
|
|
89
89
|
jar = http.cookiejar.CookieJar()
|
90
90
|
|
91
|
-
|
92
|
-
|
93
|
-
|
91
|
+
self._session = Session()
|
92
|
+
self._session.headers.update({"Content-Type": "application/json"})
|
93
|
+
self._session.headers.update({"X-Requested-With": "XMLHttpRequest"})
|
94
94
|
|
95
95
|
params = json.loads(AUTH_TOKEN_PARAMS.format(session_token))
|
96
96
|
|
97
|
-
response =
|
97
|
+
response = self._session.get(AUTH_TOKEN_URL, params=params, allow_redirects=True, cookies=jar) # type: ignore
|
98
98
|
|
99
99
|
if response.status_code != 200:
|
100
100
|
raise Exception(f"An error occurred while getting the auth token. Status code: {response.status_code} - {response.text}")
|
101
101
|
|
102
|
-
auth_token =
|
102
|
+
auth_token = self._session.cookies.get("auth_token", domain="monespace.grdf.fr")
|
103
103
|
|
104
104
|
return auth_token # type: ignore
|
105
105
|
|
106
106
|
@abstractmethod
|
107
|
-
def _loadFromSession(self,
|
107
|
+
def _loadFromSession(self, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
|
108
108
|
pass
|
109
109
|
|
110
110
|
|
@@ -133,7 +133,7 @@ class ExcelWebDataSource(WebDataSource):
|
|
133
133
|
self.__tmpDirectory = tmpDirectory
|
134
134
|
|
135
135
|
# ------------------------------------------------------
|
136
|
-
def _loadFromSession(self,
|
136
|
+
def _loadFromSession(self, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
|
137
137
|
|
138
138
|
res = {}
|
139
139
|
|
@@ -166,16 +166,8 @@ class ExcelWebDataSource(WebDataSource):
|
|
166
166
|
retry = 10
|
167
167
|
while retry > 0:
|
168
168
|
|
169
|
-
# Create a session.
|
170
|
-
session = Session()
|
171
|
-
session.headers.update({"Host": "monespace.grdf.fr"})
|
172
|
-
session.headers.update({"Domain": "grdf.fr"})
|
173
|
-
session.headers.update({"X-Requested-With": "XMLHttpRequest"})
|
174
|
-
session.headers.update({"Accept": "application/json"})
|
175
|
-
session.cookies.set("auth_token", auth_token, domain="monespace.grdf.fr")
|
176
|
-
|
177
169
|
try:
|
178
|
-
self.__downloadFile(
|
170
|
+
self.__downloadFile(self._session, downloadUrl, self.__tmpDirectory)
|
179
171
|
break
|
180
172
|
except Exception as e:
|
181
173
|
|
@@ -267,7 +259,7 @@ class JsonWebDataSource(WebDataSource):
|
|
267
259
|
|
268
260
|
super().__init__(username, password)
|
269
261
|
|
270
|
-
def _loadFromSession(self,
|
262
|
+
def _loadFromSession(self, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
|
271
263
|
|
272
264
|
res = {}
|
273
265
|
|
@@ -286,16 +278,8 @@ class JsonWebDataSource(WebDataSource):
|
|
286
278
|
retry = 10
|
287
279
|
while retry > 0:
|
288
280
|
|
289
|
-
# Create a session.
|
290
|
-
session = Session()
|
291
|
-
session.headers.update({"Host": "monespace.grdf.fr"})
|
292
|
-
session.headers.update({"Domain": "grdf.fr"})
|
293
|
-
session.headers.update({"X-Requested-With": "XMLHttpRequest"})
|
294
|
-
session.headers.update({"Accept": "application/json"})
|
295
|
-
session.cookies.set("auth_token", auth_token, domain="monespace.grdf.fr")
|
296
|
-
|
297
281
|
try:
|
298
|
-
response =
|
282
|
+
response = self._session.get(downloadUrl)
|
299
283
|
|
300
284
|
if "text/html" in response.headers.get("Content-Type"): # type: ignore
|
301
285
|
raise Exception("An error occurred while loading data. Please check your credentials.")
|
@@ -321,7 +305,7 @@ class JsonWebDataSource(WebDataSource):
|
|
321
305
|
temperaturesUrl = JsonWebDataSource.TEMPERATURES_URL.format(pceIdentifier, endDate.strftime(JsonWebDataSource.INPUT_DATE_FORMAT), days)
|
322
306
|
|
323
307
|
# Get weather data.
|
324
|
-
temperatures =
|
308
|
+
temperatures = self._session.get(temperaturesUrl).text
|
325
309
|
|
326
310
|
# Transform all the data into the target structure.
|
327
311
|
daily = JsonParser.parse(data, temperatures, pceIdentifier)
|
pygazpar/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "1.2.
|
1
|
+
__version__ = "1.2.7"
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: pygazpar
|
3
|
-
Version: 1.2.
|
3
|
+
Version: 1.2.7
|
4
4
|
Summary: Retrieve gas consumption from GrDF web site (French Gas Company)
|
5
5
|
Home-page: https://github.com/ssenart/pygazpar
|
6
6
|
Author: Stephane Senart
|
@@ -218,6 +218,16 @@ All notable changes to this project will be documented in this file.
|
|
218
218
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
219
219
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
220
220
|
|
221
|
+
## [1.2.7](https://github.com/ssenart/PyGazpar/compare/1.2.7...1.2.6) - 2025-01-06
|
222
|
+
|
223
|
+
### Fixed
|
224
|
+
- [#79](https://github.com/ssenart/PyGazpar/issues/79): Fix some unittests that wrongly failed because of the new year.
|
225
|
+
|
226
|
+
## [1.2.6](https://github.com/ssenart/PyGazpar/compare/1.2.6...1.2.5) - 2025-01-03
|
227
|
+
|
228
|
+
### Fixed
|
229
|
+
- [#77](https://github.com/ssenart/PyGazpar/issues/77): Some error may occur while requesting data from GrDF API.
|
230
|
+
|
221
231
|
## [1.2.5](https://github.com/ssenart/PyGazpar/compare/1.2.5...1.2.4) - 2024-12-21
|
222
232
|
|
223
233
|
### Fixed
|
@@ -1,11 +1,11 @@
|
|
1
1
|
pygazpar/__init__.py,sha256=qshO_XZbDA2Wrt80ABDs0MoScqJytClAuIJjAnILglk,309
|
2
2
|
pygazpar/__main__.py,sha256=Pt3PInX7QiWcs0aBKZN90NTaU8KFnrQiZ5Hsow1eR5U,3177
|
3
3
|
pygazpar/client.py,sha256=JdVm0jZbeibwtTumcRbUSFadfXnCUClPMjL95_J6p5Y,2595
|
4
|
-
pygazpar/datasource.py,sha256=
|
4
|
+
pygazpar/datasource.py,sha256=D6VBy4ngQDECQfPVi9ZGhKuuOxNDUHjK-9gTDJlATPI,20699
|
5
5
|
pygazpar/enum.py,sha256=3ZCk4SziXF6pxgP3MuQ1qxYfqB3X5DOV8Rtd0GHsK9w,898
|
6
6
|
pygazpar/excelparser.py,sha256=QNFIErXNgMjGGjsGjdnRxAbNpfVagdYmZQtXRub3_Xc,5931
|
7
7
|
pygazpar/jsonparser.py,sha256=OrRdMZNBi7rI4dRGoRW7gjyFwJFk-IvtkRZ_t1XVFrI,1859
|
8
|
-
pygazpar/version.py,sha256=
|
8
|
+
pygazpar/version.py,sha256=49prCLbE3fFzLfxem5rd2dr1iV4_L-bN0N4J7jxU5yA,22
|
9
9
|
pygazpar/resources/daily_data_sample.json,sha256=YJovtrNUMs257magTfyxiewLmecySFypcelbGFUUeT8,199583
|
10
10
|
pygazpar/resources/hourly_data_sample.json,sha256=N1F-Xz3GaBn2H1p7uKzhkhKCQV8QVR0t76XD6wmFtXA,3
|
11
11
|
pygazpar/resources/monthly_data_sample.json,sha256=yrr4SqrB2MubeVU2HX_FRDZKHIhC0LXCqkO1iqnFWcg,3351
|
@@ -16,12 +16,12 @@ samples/excelSample.py,sha256=ltAl-bBz9-U9YI802JpcIswra-vDS7tR_KL5VNdxJ5c,765
|
|
16
16
|
samples/jsonSample.py,sha256=sYAIusdEJhZdwDAMgHqoWcwDR0FA2eWhSt_2gL_mJRk,736
|
17
17
|
samples/testSample.py,sha256=UeirdEtezHwfZDv_75oxul17YzGWn5yZuHfJYTF3Ez0,387
|
18
18
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
19
|
-
tests/test_client.py,sha256=
|
19
|
+
tests/test_client.py,sha256=BFLz0GNk8qEP4d2-7cAaIcLWpkSnDZo3wRb0AlXBNOQ,5765
|
20
20
|
tests/test_datafileparser.py,sha256=nAeUpOHtelblMpmbrrnf-2GuMjK5ai65veDoymceprE,818
|
21
|
-
tests/test_datasource.py,sha256=
|
22
|
-
pygazpar-1.2.
|
23
|
-
pygazpar-1.2.
|
24
|
-
pygazpar-1.2.
|
25
|
-
pygazpar-1.2.
|
26
|
-
pygazpar-1.2.
|
27
|
-
pygazpar-1.2.
|
21
|
+
tests/test_datasource.py,sha256=NTeD3yQEi4fTw8ZWz2cuUUdeFC8QVjChBMw5jyqia40,6149
|
22
|
+
pygazpar-1.2.7.dist-info/LICENSE.md,sha256=XsCJx_7_BC9tvmE0ZxS1cTNR7ekurog_ea9ybdZ-8tc,1073
|
23
|
+
pygazpar-1.2.7.dist-info/METADATA,sha256=zrS5U_76Ad5CdYiixgHJbO-_UZ7amdpp-kwM5Qeus3g,19251
|
24
|
+
pygazpar-1.2.7.dist-info/WHEEL,sha256=E6NuJA_MIt2CDvbuRmqVFG99302DhLXEpOp5wbsbDeU,93
|
25
|
+
pygazpar-1.2.7.dist-info/entry_points.txt,sha256=c_FMZPYlRv1w9EqfgWhlkdJOoje7FcglI0UMm2oRLoI,53
|
26
|
+
pygazpar-1.2.7.dist-info/top_level.txt,sha256=P7qn-XtanDPBLQsTvjvLV71wH8RK0DYbx8tzN_rDS70,23
|
27
|
+
pygazpar-1.2.7.dist-info/RECORD,,
|
tests/test_client.py
CHANGED
@@ -1,159 +1,159 @@
|
|
1
|
-
from pygazpar.enum import Frequency
|
2
|
-
from pygazpar.client import Client
|
3
|
-
from pygazpar.datasource import JsonWebDataSource, TestDataSource, ExcelWebDataSource
|
4
|
-
import os
|
5
|
-
import pytest
|
6
|
-
|
7
|
-
|
8
|
-
class TestClient:
|
9
|
-
|
10
|
-
@classmethod
|
11
|
-
def setup_class(cls):
|
12
|
-
""" setup any state specific to the execution of the given class (which
|
13
|
-
usually contains tests).
|
14
|
-
"""
|
15
|
-
|
16
|
-
@classmethod
|
17
|
-
def teardown_class(cls):
|
18
|
-
""" teardown any state that was previously setup with a call to
|
19
|
-
setup_class.
|
20
|
-
"""
|
21
|
-
|
22
|
-
def setup_method(self):
|
23
|
-
""" setup any state tied to the execution of the given method in a
|
24
|
-
class. setup_method is invoked for every test method of a class.
|
25
|
-
"""
|
26
|
-
tmpdir = os.path.normpath(f"{os.getcwd()}/tmp")
|
27
|
-
|
28
|
-
# We create the tmp directory if not already exists.
|
29
|
-
if not os.path.exists(tmpdir):
|
30
|
-
os.mkdir(tmpdir)
|
31
|
-
|
32
|
-
self.__username = os.environ["GRDF_USERNAME"]
|
33
|
-
self.__password = os.environ["GRDF_PASSWORD"]
|
34
|
-
self.__pceIdentifier = os.environ["PCE_IDENTIFIER"]
|
35
|
-
self.__tmp_directory = tmpdir
|
36
|
-
|
37
|
-
def teardown_method(self):
|
38
|
-
""" teardown any state that was previously setup with a setup_method
|
39
|
-
call.
|
40
|
-
"""
|
41
|
-
|
42
|
-
def test_login_error(self):
|
43
|
-
client = Client(JsonWebDataSource("WrongUsername", "WrongPassword"))
|
44
|
-
|
45
|
-
with pytest.raises(Exception):
|
46
|
-
client.loadSince(self.__pceIdentifier, 365, [Frequency.DAILY])
|
47
|
-
|
48
|
-
def test_hourly_live(self):
|
49
|
-
client = Client(JsonWebDataSource(self.__username, self.__password))
|
50
|
-
|
51
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.HOURLY])
|
52
|
-
|
53
|
-
assert (len(data[Frequency.HOURLY.value]) == 0)
|
54
|
-
|
55
|
-
def test_one_day_jsonweb(self):
|
56
|
-
client = Client(JsonWebDataSource(self.__username, self.__password))
|
57
|
-
|
58
|
-
data = client.loadSince(self.__pceIdentifier, 1, [Frequency.DAILY])
|
59
|
-
|
60
|
-
assert (len(data[Frequency.DAILY.value]) <= 1)
|
61
|
-
|
62
|
-
def test_two_days_jsonweb(self):
|
63
|
-
client = Client(JsonWebDataSource(self.__username, self.__password))
|
64
|
-
|
65
|
-
data = client.loadSince(self.__pceIdentifier, 2, [Frequency.DAILY])
|
66
|
-
|
67
|
-
assert (len(data[Frequency.DAILY.value]) <= 2)
|
68
|
-
|
69
|
-
# @pytest.mark.skip(reason="Requires live data")
|
70
|
-
def test_daily_jsonweb(self):
|
71
|
-
client = Client(JsonWebDataSource(self.__username, self.__password))
|
72
|
-
|
73
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.DAILY])
|
74
|
-
|
75
|
-
assert (len(data[Frequency.DAILY.value]) > 0)
|
76
|
-
|
77
|
-
def test_weekly_jsonweb(self):
|
78
|
-
client = Client(JsonWebDataSource(self.__username, self.__password))
|
79
|
-
|
80
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.WEEKLY])
|
81
|
-
|
82
|
-
assert (len(data[Frequency.WEEKLY.value]) >= 51 and len(data[Frequency.WEEKLY.value]) <= 54)
|
83
|
-
|
84
|
-
def test_monthly_jsonweb(self):
|
85
|
-
client = Client(JsonWebDataSource(self.__username, self.__password))
|
86
|
-
|
87
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.MONTHLY])
|
88
|
-
|
89
|
-
assert (len(data[Frequency.MONTHLY.value]) >= 11 and len(data[Frequency.MONTHLY.value]) <= 13)
|
90
|
-
|
91
|
-
def test_yearly_jsonweb(self):
|
92
|
-
client = Client(JsonWebDataSource(self.__username, self.__password))
|
93
|
-
|
94
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.YEARLY])
|
95
|
-
|
96
|
-
assert (len(data[Frequency.YEARLY.value])
|
97
|
-
|
98
|
-
def test_daily_excelweb(self):
|
99
|
-
client = Client(ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory))
|
100
|
-
|
101
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.DAILY])
|
102
|
-
|
103
|
-
assert (len(data[Frequency.DAILY.value]) > 0)
|
104
|
-
|
105
|
-
def test_weekly_excelweb(self):
|
106
|
-
client = Client(ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory))
|
107
|
-
|
108
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.WEEKLY])
|
109
|
-
|
110
|
-
assert (len(data[Frequency.WEEKLY.value]) >= 51 and len(data[Frequency.WEEKLY.value]) <= 54)
|
111
|
-
|
112
|
-
def test_monthly_excelweb(self):
|
113
|
-
client = Client(ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory))
|
114
|
-
|
115
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.MONTHLY])
|
116
|
-
|
117
|
-
assert (len(data[Frequency.MONTHLY.value]) >= 12 and len(data[Frequency.MONTHLY.value]) <= 13)
|
118
|
-
|
119
|
-
def test_yearly_excelweb(self):
|
120
|
-
client = Client(ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory))
|
121
|
-
|
122
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.YEARLY])
|
123
|
-
|
124
|
-
assert (len(data[Frequency.YEARLY.value])
|
125
|
-
|
126
|
-
def test_hourly_sample(self):
|
127
|
-
client = Client(TestDataSource())
|
128
|
-
|
129
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.HOURLY])
|
130
|
-
|
131
|
-
assert (len(data[Frequency.HOURLY.value]) == 0)
|
132
|
-
|
133
|
-
def test_daily_sample(self):
|
134
|
-
client = Client(TestDataSource())
|
135
|
-
|
136
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.DAILY])
|
137
|
-
|
138
|
-
assert (len(data[Frequency.DAILY.value]) == 711)
|
139
|
-
|
140
|
-
def test_weekly_sample(self):
|
141
|
-
client = Client(TestDataSource())
|
142
|
-
|
143
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.WEEKLY])
|
144
|
-
|
145
|
-
assert (len(data[Frequency.WEEKLY.value]) > 0)
|
146
|
-
|
147
|
-
def test_monthly_sample(self):
|
148
|
-
client = Client(TestDataSource())
|
149
|
-
|
150
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.MONTHLY])
|
151
|
-
|
152
|
-
assert (len(data[Frequency.MONTHLY.value]) > 0)
|
153
|
-
|
154
|
-
def test_yearly_sample(self):
|
155
|
-
client = Client(TestDataSource())
|
156
|
-
|
157
|
-
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.YEARLY])
|
158
|
-
|
159
|
-
assert (len(data[Frequency.YEARLY.value]) == 2)
|
1
|
+
from pygazpar.enum import Frequency
|
2
|
+
from pygazpar.client import Client
|
3
|
+
from pygazpar.datasource import JsonWebDataSource, TestDataSource, ExcelWebDataSource
|
4
|
+
import os
|
5
|
+
import pytest
|
6
|
+
|
7
|
+
|
8
|
+
class TestClient:
|
9
|
+
|
10
|
+
@classmethod
|
11
|
+
def setup_class(cls):
|
12
|
+
""" setup any state specific to the execution of the given class (which
|
13
|
+
usually contains tests).
|
14
|
+
"""
|
15
|
+
|
16
|
+
@classmethod
|
17
|
+
def teardown_class(cls):
|
18
|
+
""" teardown any state that was previously setup with a call to
|
19
|
+
setup_class.
|
20
|
+
"""
|
21
|
+
|
22
|
+
def setup_method(self):
|
23
|
+
""" setup any state tied to the execution of the given method in a
|
24
|
+
class. setup_method is invoked for every test method of a class.
|
25
|
+
"""
|
26
|
+
tmpdir = os.path.normpath(f"{os.getcwd()}/tmp")
|
27
|
+
|
28
|
+
# We create the tmp directory if not already exists.
|
29
|
+
if not os.path.exists(tmpdir):
|
30
|
+
os.mkdir(tmpdir)
|
31
|
+
|
32
|
+
self.__username = os.environ["GRDF_USERNAME"]
|
33
|
+
self.__password = os.environ["GRDF_PASSWORD"]
|
34
|
+
self.__pceIdentifier = os.environ["PCE_IDENTIFIER"]
|
35
|
+
self.__tmp_directory = tmpdir
|
36
|
+
|
37
|
+
def teardown_method(self):
|
38
|
+
""" teardown any state that was previously setup with a setup_method
|
39
|
+
call.
|
40
|
+
"""
|
41
|
+
|
42
|
+
def test_login_error(self):
|
43
|
+
client = Client(JsonWebDataSource("WrongUsername", "WrongPassword"))
|
44
|
+
|
45
|
+
with pytest.raises(Exception):
|
46
|
+
client.loadSince(self.__pceIdentifier, 365, [Frequency.DAILY])
|
47
|
+
|
48
|
+
def test_hourly_live(self):
|
49
|
+
client = Client(JsonWebDataSource(self.__username, self.__password))
|
50
|
+
|
51
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.HOURLY])
|
52
|
+
|
53
|
+
assert (len(data[Frequency.HOURLY.value]) == 0)
|
54
|
+
|
55
|
+
def test_one_day_jsonweb(self):
|
56
|
+
client = Client(JsonWebDataSource(self.__username, self.__password))
|
57
|
+
|
58
|
+
data = client.loadSince(self.__pceIdentifier, 1, [Frequency.DAILY])
|
59
|
+
|
60
|
+
assert (len(data[Frequency.DAILY.value]) <= 1)
|
61
|
+
|
62
|
+
def test_two_days_jsonweb(self):
|
63
|
+
client = Client(JsonWebDataSource(self.__username, self.__password))
|
64
|
+
|
65
|
+
data = client.loadSince(self.__pceIdentifier, 2, [Frequency.DAILY])
|
66
|
+
|
67
|
+
assert (len(data[Frequency.DAILY.value]) <= 2)
|
68
|
+
|
69
|
+
# @pytest.mark.skip(reason="Requires live data")
|
70
|
+
def test_daily_jsonweb(self):
|
71
|
+
client = Client(JsonWebDataSource(self.__username, self.__password))
|
72
|
+
|
73
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.DAILY])
|
74
|
+
|
75
|
+
assert (len(data[Frequency.DAILY.value]) > 0)
|
76
|
+
|
77
|
+
def test_weekly_jsonweb(self):
|
78
|
+
client = Client(JsonWebDataSource(self.__username, self.__password))
|
79
|
+
|
80
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.WEEKLY])
|
81
|
+
|
82
|
+
assert (len(data[Frequency.WEEKLY.value]) >= 51 and len(data[Frequency.WEEKLY.value]) <= 54)
|
83
|
+
|
84
|
+
def test_monthly_jsonweb(self):
|
85
|
+
client = Client(JsonWebDataSource(self.__username, self.__password))
|
86
|
+
|
87
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.MONTHLY])
|
88
|
+
|
89
|
+
assert (len(data[Frequency.MONTHLY.value]) >= 11 and len(data[Frequency.MONTHLY.value]) <= 13)
|
90
|
+
|
91
|
+
def test_yearly_jsonweb(self):
|
92
|
+
client = Client(JsonWebDataSource(self.__username, self.__password))
|
93
|
+
|
94
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.YEARLY])
|
95
|
+
|
96
|
+
assert (len(data[Frequency.YEARLY.value]) >= 1)
|
97
|
+
|
98
|
+
def test_daily_excelweb(self):
|
99
|
+
client = Client(ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory))
|
100
|
+
|
101
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.DAILY])
|
102
|
+
|
103
|
+
assert (len(data[Frequency.DAILY.value]) > 0)
|
104
|
+
|
105
|
+
def test_weekly_excelweb(self):
|
106
|
+
client = Client(ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory))
|
107
|
+
|
108
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.WEEKLY])
|
109
|
+
|
110
|
+
assert (len(data[Frequency.WEEKLY.value]) >= 51 and len(data[Frequency.WEEKLY.value]) <= 54)
|
111
|
+
|
112
|
+
def test_monthly_excelweb(self):
|
113
|
+
client = Client(ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory))
|
114
|
+
|
115
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.MONTHLY])
|
116
|
+
|
117
|
+
assert (len(data[Frequency.MONTHLY.value]) >= 12 and len(data[Frequency.MONTHLY.value]) <= 13)
|
118
|
+
|
119
|
+
def test_yearly_excelweb(self):
|
120
|
+
client = Client(ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory))
|
121
|
+
|
122
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.YEARLY])
|
123
|
+
|
124
|
+
assert (len(data[Frequency.YEARLY.value]) >= 1)
|
125
|
+
|
126
|
+
def test_hourly_sample(self):
|
127
|
+
client = Client(TestDataSource())
|
128
|
+
|
129
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.HOURLY])
|
130
|
+
|
131
|
+
assert (len(data[Frequency.HOURLY.value]) == 0)
|
132
|
+
|
133
|
+
def test_daily_sample(self):
|
134
|
+
client = Client(TestDataSource())
|
135
|
+
|
136
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.DAILY])
|
137
|
+
|
138
|
+
assert (len(data[Frequency.DAILY.value]) == 711)
|
139
|
+
|
140
|
+
def test_weekly_sample(self):
|
141
|
+
client = Client(TestDataSource())
|
142
|
+
|
143
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.WEEKLY])
|
144
|
+
|
145
|
+
assert (len(data[Frequency.WEEKLY.value]) > 0)
|
146
|
+
|
147
|
+
def test_monthly_sample(self):
|
148
|
+
client = Client(TestDataSource())
|
149
|
+
|
150
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.MONTHLY])
|
151
|
+
|
152
|
+
assert (len(data[Frequency.MONTHLY.value]) > 0)
|
153
|
+
|
154
|
+
def test_yearly_sample(self):
|
155
|
+
client = Client(TestDataSource())
|
156
|
+
|
157
|
+
data = client.loadSince(self.__pceIdentifier, 365, [Frequency.YEARLY])
|
158
|
+
|
159
|
+
assert (len(data[Frequency.YEARLY.value]) == 2)
|
tests/test_datasource.py
CHANGED
@@ -1,166 +1,166 @@
|
|
1
|
-
import os
|
2
|
-
from pygazpar.datasource import TestDataSource, JsonFileDataSource, ExcelFileDataSource, JsonWebDataSource, ExcelWebDataSource
|
3
|
-
from pygazpar.enum import Frequency
|
4
|
-
from datetime import date, timedelta
|
5
|
-
from dotenv import load_dotenv
|
6
|
-
|
7
|
-
|
8
|
-
class TestAllDataSource:
|
9
|
-
|
10
|
-
# ------------------------------------------------------
|
11
|
-
@classmethod
|
12
|
-
def setup_class(cls):
|
13
|
-
""" setup any state specific to the execution of the given class (which
|
14
|
-
usually contains tests).
|
15
|
-
"""
|
16
|
-
|
17
|
-
# ------------------------------------------------------
|
18
|
-
@classmethod
|
19
|
-
def teardown_class(cls):
|
20
|
-
""" teardown any state that was previously setup with a call to
|
21
|
-
setup_class.
|
22
|
-
"""
|
23
|
-
|
24
|
-
# ------------------------------------------------------
|
25
|
-
def setup_method(self):
|
26
|
-
""" setup any state tied to the execution of the given method in a
|
27
|
-
class. setup_method is invoked for every test method of a class.
|
28
|
-
"""
|
29
|
-
tmpdir = os.path.normpath(f"{os.getcwd()}/tmp")
|
30
|
-
|
31
|
-
# We create the tmp directory if not already exists.
|
32
|
-
if not os.path.exists(tmpdir):
|
33
|
-
os.mkdir(tmpdir)
|
34
|
-
|
35
|
-
load_dotenv()
|
36
|
-
|
37
|
-
self.__username = os.environ["GRDF_USERNAME"]
|
38
|
-
self.__password = os.environ["GRDF_PASSWORD"]
|
39
|
-
self.__pceIdentifier = os.environ["PCE_IDENTIFIER"]
|
40
|
-
self.__tmp_directory = tmpdir
|
41
|
-
|
42
|
-
# ------------------------------------------------------
|
43
|
-
def teardown_method(self):
|
44
|
-
""" teardown any state that was previously setup with a setup_method
|
45
|
-
call.
|
46
|
-
"""
|
47
|
-
|
48
|
-
# ------------------------------------------------------
|
49
|
-
def test_sample(self):
|
50
|
-
|
51
|
-
dataSource = TestDataSource()
|
52
|
-
|
53
|
-
endDate = date.today()
|
54
|
-
startDate = endDate + timedelta(days=-365)
|
55
|
-
|
56
|
-
data = dataSource.load(self.__pceIdentifier, startDate, endDate)
|
57
|
-
|
58
|
-
assert (len(data[Frequency.DAILY.value]) == 711)
|
59
|
-
|
60
|
-
assert (len(data[Frequency.WEEKLY.value]) == 102)
|
61
|
-
|
62
|
-
assert (len(data[Frequency.MONTHLY.value]) == 24)
|
63
|
-
|
64
|
-
assert (len(data[Frequency.YEARLY.value]) == 2)
|
65
|
-
|
66
|
-
# ------------------------------------------------------
|
67
|
-
def test_jsonfile_sample(self):
|
68
|
-
|
69
|
-
dataSource = JsonFileDataSource("tests/resources/donnees_informatives.json", "tests/resources/temperatures.json")
|
70
|
-
|
71
|
-
endDate = date.today()
|
72
|
-
startDate = endDate + timedelta(days=-365)
|
73
|
-
|
74
|
-
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.DAILY, Frequency.WEEKLY, Frequency.MONTHLY, Frequency.YEARLY])
|
75
|
-
|
76
|
-
assert (len(data[Frequency.DAILY.value]) == 1096)
|
77
|
-
|
78
|
-
assert (len(data[Frequency.WEEKLY.value]) == 155)
|
79
|
-
|
80
|
-
assert (len(data[Frequency.MONTHLY.value]) == 36)
|
81
|
-
|
82
|
-
assert (len(data[Frequency.YEARLY.value]) == 3)
|
83
|
-
|
84
|
-
# ------------------------------------------------------
|
85
|
-
def test_daily_excelfile_sample(self):
|
86
|
-
|
87
|
-
dataSource = ExcelFileDataSource("tests/resources/Donnees_informatives_PCE_DAILY.xlsx")
|
88
|
-
|
89
|
-
endDate = date.today()
|
90
|
-
startDate = endDate + timedelta(days=-365)
|
91
|
-
|
92
|
-
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.DAILY])
|
93
|
-
|
94
|
-
assert (len(data[Frequency.DAILY.value]) == 363)
|
95
|
-
|
96
|
-
# ------------------------------------------------------
|
97
|
-
def test_weekly_excelfile_sample(self):
|
98
|
-
|
99
|
-
dataSource = ExcelFileDataSource("tests/resources/Donnees_informatives_PCE_WEEKLY.xlsx")
|
100
|
-
|
101
|
-
endDate = date.today()
|
102
|
-
startDate = endDate + timedelta(days=-365)
|
103
|
-
|
104
|
-
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.WEEKLY])
|
105
|
-
|
106
|
-
assert (len(data[Frequency.WEEKLY.value]) == 53)
|
107
|
-
|
108
|
-
# ------------------------------------------------------
|
109
|
-
def test_monthly_excelfile_sample(self):
|
110
|
-
|
111
|
-
dataSource = ExcelFileDataSource("tests/resources/Donnees_informatives_PCE_MONTHLY.xlsx")
|
112
|
-
|
113
|
-
endDate = date.today()
|
114
|
-
startDate = endDate + timedelta(days=-365)
|
115
|
-
|
116
|
-
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.MONTHLY])
|
117
|
-
|
118
|
-
assert (len(data[Frequency.MONTHLY.value]) == 13)
|
119
|
-
|
120
|
-
# ------------------------------------------------------
|
121
|
-
def test_yearly_excelfile_sample(self):
|
122
|
-
|
123
|
-
dataSource = ExcelFileDataSource("tests/resources/Donnees_informatives_PCE_DAILY.xlsx")
|
124
|
-
|
125
|
-
endDate = date.today()
|
126
|
-
startDate = endDate + timedelta(days=-365)
|
127
|
-
|
128
|
-
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.YEARLY])
|
129
|
-
|
130
|
-
assert (len(data[Frequency.YEARLY.value]) == 1)
|
131
|
-
|
132
|
-
# ------------------------------------------------------
|
133
|
-
def test_jsonweb(self):
|
134
|
-
|
135
|
-
dataSource = JsonWebDataSource(self.__username, self.__password)
|
136
|
-
|
137
|
-
endDate = date.today()
|
138
|
-
startDate = endDate + timedelta(days=-365)
|
139
|
-
|
140
|
-
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.DAILY, Frequency.WEEKLY, Frequency.MONTHLY, Frequency.YEARLY])
|
141
|
-
|
142
|
-
assert (len(data[Frequency.DAILY.value]) > 0)
|
143
|
-
|
144
|
-
assert (len(data[Frequency.WEEKLY.value]) >= 51 and len(data[Frequency.WEEKLY.value]) <= 54)
|
145
|
-
|
146
|
-
assert (len(data[Frequency.MONTHLY.value]) >= 11 and len(data[Frequency.MONTHLY.value]) <= 13)
|
147
|
-
|
148
|
-
assert (len(data[Frequency.YEARLY.value])
|
149
|
-
|
150
|
-
# ------------------------------------------------------
|
151
|
-
def test_excelweb(self):
|
152
|
-
|
153
|
-
dataSource = ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory)
|
154
|
-
|
155
|
-
endDate = date.today()
|
156
|
-
startDate = endDate + timedelta(days=-365)
|
157
|
-
|
158
|
-
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.DAILY, Frequency.WEEKLY, Frequency.MONTHLY, Frequency.YEARLY])
|
159
|
-
|
160
|
-
assert (len(data[Frequency.DAILY.value]) > 0)
|
161
|
-
|
162
|
-
assert (len(data[Frequency.WEEKLY.value]) >= 51 and len(data[Frequency.WEEKLY.value]) <= 54)
|
163
|
-
|
164
|
-
assert (len(data[Frequency.MONTHLY.value]) >= 12 and len(data[Frequency.MONTHLY.value]) <= 13)
|
165
|
-
|
166
|
-
assert (len(data[Frequency.YEARLY.value])
|
1
|
+
import os
|
2
|
+
from pygazpar.datasource import TestDataSource, JsonFileDataSource, ExcelFileDataSource, JsonWebDataSource, ExcelWebDataSource
|
3
|
+
from pygazpar.enum import Frequency
|
4
|
+
from datetime import date, timedelta
|
5
|
+
from dotenv import load_dotenv
|
6
|
+
|
7
|
+
|
8
|
+
class TestAllDataSource:
|
9
|
+
|
10
|
+
# ------------------------------------------------------
|
11
|
+
@classmethod
|
12
|
+
def setup_class(cls):
|
13
|
+
""" setup any state specific to the execution of the given class (which
|
14
|
+
usually contains tests).
|
15
|
+
"""
|
16
|
+
|
17
|
+
# ------------------------------------------------------
|
18
|
+
@classmethod
|
19
|
+
def teardown_class(cls):
|
20
|
+
""" teardown any state that was previously setup with a call to
|
21
|
+
setup_class.
|
22
|
+
"""
|
23
|
+
|
24
|
+
# ------------------------------------------------------
|
25
|
+
def setup_method(self):
|
26
|
+
""" setup any state tied to the execution of the given method in a
|
27
|
+
class. setup_method is invoked for every test method of a class.
|
28
|
+
"""
|
29
|
+
tmpdir = os.path.normpath(f"{os.getcwd()}/tmp")
|
30
|
+
|
31
|
+
# We create the tmp directory if not already exists.
|
32
|
+
if not os.path.exists(tmpdir):
|
33
|
+
os.mkdir(tmpdir)
|
34
|
+
|
35
|
+
load_dotenv()
|
36
|
+
|
37
|
+
self.__username = os.environ["GRDF_USERNAME"]
|
38
|
+
self.__password = os.environ["GRDF_PASSWORD"]
|
39
|
+
self.__pceIdentifier = os.environ["PCE_IDENTIFIER"]
|
40
|
+
self.__tmp_directory = tmpdir
|
41
|
+
|
42
|
+
# ------------------------------------------------------
|
43
|
+
def teardown_method(self):
|
44
|
+
""" teardown any state that was previously setup with a setup_method
|
45
|
+
call.
|
46
|
+
"""
|
47
|
+
|
48
|
+
# ------------------------------------------------------
|
49
|
+
def test_sample(self):
|
50
|
+
|
51
|
+
dataSource = TestDataSource()
|
52
|
+
|
53
|
+
endDate = date.today()
|
54
|
+
startDate = endDate + timedelta(days=-365)
|
55
|
+
|
56
|
+
data = dataSource.load(self.__pceIdentifier, startDate, endDate)
|
57
|
+
|
58
|
+
assert (len(data[Frequency.DAILY.value]) == 711)
|
59
|
+
|
60
|
+
assert (len(data[Frequency.WEEKLY.value]) == 102)
|
61
|
+
|
62
|
+
assert (len(data[Frequency.MONTHLY.value]) == 24)
|
63
|
+
|
64
|
+
assert (len(data[Frequency.YEARLY.value]) == 2)
|
65
|
+
|
66
|
+
# ------------------------------------------------------
|
67
|
+
def test_jsonfile_sample(self):
|
68
|
+
|
69
|
+
dataSource = JsonFileDataSource("tests/resources/donnees_informatives.json", "tests/resources/temperatures.json")
|
70
|
+
|
71
|
+
endDate = date.today()
|
72
|
+
startDate = endDate + timedelta(days=-365)
|
73
|
+
|
74
|
+
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.DAILY, Frequency.WEEKLY, Frequency.MONTHLY, Frequency.YEARLY])
|
75
|
+
|
76
|
+
assert (len(data[Frequency.DAILY.value]) == 1096)
|
77
|
+
|
78
|
+
assert (len(data[Frequency.WEEKLY.value]) == 155)
|
79
|
+
|
80
|
+
assert (len(data[Frequency.MONTHLY.value]) == 36)
|
81
|
+
|
82
|
+
assert (len(data[Frequency.YEARLY.value]) == 3)
|
83
|
+
|
84
|
+
# ------------------------------------------------------
|
85
|
+
def test_daily_excelfile_sample(self):
|
86
|
+
|
87
|
+
dataSource = ExcelFileDataSource("tests/resources/Donnees_informatives_PCE_DAILY.xlsx")
|
88
|
+
|
89
|
+
endDate = date.today()
|
90
|
+
startDate = endDate + timedelta(days=-365)
|
91
|
+
|
92
|
+
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.DAILY])
|
93
|
+
|
94
|
+
assert (len(data[Frequency.DAILY.value]) == 363)
|
95
|
+
|
96
|
+
# ------------------------------------------------------
|
97
|
+
def test_weekly_excelfile_sample(self):
|
98
|
+
|
99
|
+
dataSource = ExcelFileDataSource("tests/resources/Donnees_informatives_PCE_WEEKLY.xlsx")
|
100
|
+
|
101
|
+
endDate = date.today()
|
102
|
+
startDate = endDate + timedelta(days=-365)
|
103
|
+
|
104
|
+
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.WEEKLY])
|
105
|
+
|
106
|
+
assert (len(data[Frequency.WEEKLY.value]) == 53)
|
107
|
+
|
108
|
+
# ------------------------------------------------------
|
109
|
+
def test_monthly_excelfile_sample(self):
|
110
|
+
|
111
|
+
dataSource = ExcelFileDataSource("tests/resources/Donnees_informatives_PCE_MONTHLY.xlsx")
|
112
|
+
|
113
|
+
endDate = date.today()
|
114
|
+
startDate = endDate + timedelta(days=-365)
|
115
|
+
|
116
|
+
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.MONTHLY])
|
117
|
+
|
118
|
+
assert (len(data[Frequency.MONTHLY.value]) == 13)
|
119
|
+
|
120
|
+
# ------------------------------------------------------
|
121
|
+
def test_yearly_excelfile_sample(self):
|
122
|
+
|
123
|
+
dataSource = ExcelFileDataSource("tests/resources/Donnees_informatives_PCE_DAILY.xlsx")
|
124
|
+
|
125
|
+
endDate = date.today()
|
126
|
+
startDate = endDate + timedelta(days=-365)
|
127
|
+
|
128
|
+
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.YEARLY])
|
129
|
+
|
130
|
+
assert (len(data[Frequency.YEARLY.value]) == 1)
|
131
|
+
|
132
|
+
# ------------------------------------------------------
|
133
|
+
def test_jsonweb(self):
|
134
|
+
|
135
|
+
dataSource = JsonWebDataSource(self.__username, self.__password)
|
136
|
+
|
137
|
+
endDate = date.today()
|
138
|
+
startDate = endDate + timedelta(days=-365)
|
139
|
+
|
140
|
+
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.DAILY, Frequency.WEEKLY, Frequency.MONTHLY, Frequency.YEARLY])
|
141
|
+
|
142
|
+
assert (len(data[Frequency.DAILY.value]) > 0)
|
143
|
+
|
144
|
+
assert (len(data[Frequency.WEEKLY.value]) >= 51 and len(data[Frequency.WEEKLY.value]) <= 54)
|
145
|
+
|
146
|
+
assert (len(data[Frequency.MONTHLY.value]) >= 11 and len(data[Frequency.MONTHLY.value]) <= 13)
|
147
|
+
|
148
|
+
assert (len(data[Frequency.YEARLY.value]) >= 1)
|
149
|
+
|
150
|
+
# ------------------------------------------------------
|
151
|
+
def test_excelweb(self):
|
152
|
+
|
153
|
+
dataSource = ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory)
|
154
|
+
|
155
|
+
endDate = date.today()
|
156
|
+
startDate = endDate + timedelta(days=-365)
|
157
|
+
|
158
|
+
data = dataSource.load(self.__pceIdentifier, startDate, endDate, [Frequency.DAILY, Frequency.WEEKLY, Frequency.MONTHLY, Frequency.YEARLY])
|
159
|
+
|
160
|
+
assert (len(data[Frequency.DAILY.value]) > 0)
|
161
|
+
|
162
|
+
assert (len(data[Frequency.WEEKLY.value]) >= 51 and len(data[Frequency.WEEKLY.value]) <= 54)
|
163
|
+
|
164
|
+
assert (len(data[Frequency.MONTHLY.value]) >= 12 and len(data[Frequency.MONTHLY.value]) <= 13)
|
165
|
+
|
166
|
+
assert (len(data[Frequency.YEARLY.value]) >= 1)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|