pygazpar 1.2.7__py38-none-any.whl → 1.3.0a6__py38-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
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
- self._login(self.__username, self.__password) # We ignore the return value.
62
+ auth_token = self._login(self.__username, self.__password)
63
63
 
64
- res = self._loadFromSession(pceIdentifier, startDate, endDate, frequencies)
64
+ res = self._loadFromSession(auth_token, 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
- self._session = Session()
92
- self._session.headers.update({"Content-Type": "application/json"})
93
- self._session.headers.update({"X-Requested-With": "XMLHttpRequest"})
91
+ session = Session()
92
+ session.headers.update({"Content-Type": "application/json"})
93
+ session.headers.update({"X-Requested-With": "XMLHttpRequest"})
94
94
 
95
95
  params = json.loads(AUTH_TOKEN_PARAMS.format(session_token))
96
96
 
97
- response = self._session.get(AUTH_TOKEN_URL, params=params, allow_redirects=True, cookies=jar) # type: ignore
97
+ response = session.get(AUTH_TOKEN_URL, params=params, allow_redirects=True, cookies=jar)
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 = self._session.cookies.get("auth_token", domain="monespace.grdf.fr")
102
+ auth_token = session.cookies.get("auth_token", domain="monespace.grdf.fr")
103
103
 
104
- return auth_token # type: ignore
104
+ return auth_token
105
105
 
106
106
  @abstractmethod
107
- def _loadFromSession(self, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
107
+ def _loadFromSession(self, auth_token: str, 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, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
136
+ def _loadFromSession(self, auth_token: str, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
137
137
 
138
138
  res = {}
139
139
 
@@ -144,10 +144,7 @@ class ExcelWebDataSource(WebDataSource):
144
144
  file_list = glob.glob(data_file_path_pattern)
145
145
  for filename in file_list:
146
146
  if os.path.isfile(filename):
147
- try:
148
- os.remove(filename)
149
- except PermissionError:
150
- pass
147
+ os.remove(filename)
151
148
 
152
149
  if frequencies is None:
153
150
  # Transform Enum in List.
@@ -166,8 +163,16 @@ class ExcelWebDataSource(WebDataSource):
166
163
  retry = 10
167
164
  while retry > 0:
168
165
 
166
+ # Create a session.
167
+ session = Session()
168
+ session.headers.update({"Host": "monespace.grdf.fr"})
169
+ session.headers.update({"Domain": "grdf.fr"})
170
+ session.headers.update({"X-Requested-With": "XMLHttpRequest"})
171
+ session.headers.update({"Accept": "application/json"})
172
+ session.cookies.set("auth_token", auth_token, domain="monespace.grdf.fr")
173
+
169
174
  try:
170
- self.__downloadFile(self._session, downloadUrl, self.__tmpDirectory)
175
+ self.__downloadFile(session, downloadUrl, self.__tmpDirectory)
171
176
  break
172
177
  except Exception as e:
173
178
 
@@ -189,7 +194,7 @@ class ExcelWebDataSource(WebDataSource):
189
194
  try:
190
195
  # openpyxl does not close the file properly.
191
196
  os.remove(filename)
192
- except PermissionError:
197
+ except Exception:
193
198
  pass
194
199
 
195
200
  # We compute yearly from daily data.
@@ -203,7 +208,7 @@ class ExcelWebDataSource(WebDataSource):
203
208
 
204
209
  response = session.get(url)
205
210
 
206
- if "text/html" in response.headers.get("Content-Type"): # type: ignore
211
+ if "text/html" in response.headers.get("Content-Type"):
207
212
  raise Exception("An error occurred while loading data. Please check your credentials.")
208
213
 
209
214
  if response.status_code != 200:
@@ -259,7 +264,7 @@ class JsonWebDataSource(WebDataSource):
259
264
 
260
265
  super().__init__(username, password)
261
266
 
262
- def _loadFromSession(self, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
267
+ def _loadFromSession(self, auth_token: str, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
263
268
 
264
269
  res = {}
265
270
 
@@ -278,10 +283,18 @@ class JsonWebDataSource(WebDataSource):
278
283
  retry = 10
279
284
  while retry > 0:
280
285
 
286
+ # Create a session.
287
+ session = Session()
288
+ session.headers.update({"Host": "monespace.grdf.fr"})
289
+ session.headers.update({"Domain": "grdf.fr"})
290
+ session.headers.update({"X-Requested-With": "XMLHttpRequest"})
291
+ session.headers.update({"Accept": "application/json"})
292
+ session.cookies.set("auth_token", auth_token, domain="monespace.grdf.fr")
293
+
281
294
  try:
282
- response = self._session.get(downloadUrl)
295
+ response = session.get(downloadUrl)
283
296
 
284
- if "text/html" in response.headers.get("Content-Type"): # type: ignore
297
+ if "text/html" in response.headers.get("Content-Type"):
285
298
  raise Exception("An error occurred while loading data. Please check your credentials.")
286
299
 
287
300
  if response.status_code != 200:
@@ -305,7 +318,7 @@ class JsonWebDataSource(WebDataSource):
305
318
  temperaturesUrl = JsonWebDataSource.TEMPERATURES_URL.format(pceIdentifier, endDate.strftime(JsonWebDataSource.INPUT_DATE_FORMAT), days)
306
319
 
307
320
  # Get weather data.
308
- temperatures = self._session.get(temperaturesUrl).text
321
+ temperatures = session.get(temperaturesUrl).text
309
322
 
310
323
  # Transform all the data into the target structure.
311
324
  daily = JsonParser.parse(data, temperatures, pceIdentifier)
@@ -450,7 +463,7 @@ class FrequencyConverter:
450
463
  df = df.sort_values(by=['first_day_of_week'])
451
464
 
452
465
  # Select rows where we have a full week (7 days) except for the current week.
453
- df = pd.concat([df[(df["count"] >= 7)], df.tail(1)[df.tail(1)["count"] < 7]])
466
+ df = pd.concat([df[(df["count"] >= 7)], df.tail(1)[df["count"] < 7]])
454
467
 
455
468
  # Select target columns.
456
469
  df = df[["time_period", "start_index_m3", "end_index_m3", "volume_m3", "energy_kwh", "timestamp"]]
@@ -478,7 +491,7 @@ class FrequencyConverter:
478
491
  df = df.sort_values(by=['first_day_of_month'])
479
492
 
480
493
  # Select rows where we have a full month (more than 27 days) except for the current month.
481
- df = pd.concat([df[(df["count"] >= 28)], df.tail(1)[df.tail(1)["count"] < 28]])
494
+ df = pd.concat([df[(df["count"] >= 28)], df.tail(1)[df["count"] < 28]])
482
495
 
483
496
  # Rename columns for their target names.
484
497
  df = df.rename(columns={"month_year": "time_period"})
@@ -509,7 +522,7 @@ class FrequencyConverter:
509
522
  df = df.sort_values(by=['year'])
510
523
 
511
524
  # Select rows where we have almost a full year (more than 360) except for the current year.
512
- df = pd.concat([df[(df["count"] >= 360)], df.tail(1)[df.tail(1)["count"] < 360]])
525
+ df = pd.concat([df[(df["count"] >= 360)], df.tail(1)[df["count"] < 360]])
513
526
 
514
527
  # Rename columns for their target names.
515
528
  df = df.rename(columns={"year": "time_period"})
pygazpar/excelparser.py CHANGED
@@ -33,7 +33,7 @@ class ExcelParser:
33
33
 
34
34
  worksheet = workbook.active
35
35
 
36
- res = parseByFrequency[dataReadingFrequency](worksheet) # type: ignore
36
+ res = parseByFrequency[dataReadingFrequency](worksheet)
37
37
 
38
38
  workbook.close()
39
39
 
pygazpar/jsonparser.py CHANGED
@@ -29,7 +29,7 @@ class JsonParser:
29
29
 
30
30
  for releve in data[pceIdentifier]['releves']:
31
31
  temperature = releve['temperature']
32
- if temperature is None and temperatures is not None and len(temperatures) > 0:
32
+ if temperature is None:
33
33
  temperature = temperatures.get(releve['journeeGaziere'])
34
34
 
35
35
  item = {}
pygazpar/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "1.2.7"
1
+ __version__ = "1.3.0a6"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pygazpar
3
- Version: 1.2.7
3
+ Version: 1.3.0a6
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
@@ -22,17 +22,13 @@ Classifier: Programming Language :: Python :: 3.8
22
22
  Classifier: Programming Language :: Python :: 3.9
23
23
  Classifier: Programming Language :: Python :: 3.10
24
24
  Classifier: Programming Language :: Python :: 3.11
25
- Classifier: Programming Language :: Python :: 3.12
26
25
  Requires-Python: >=3.7
27
26
  Description-Content-Type: text/markdown
28
- Requires-Dist: openpyxl>=2.6.3
29
- Requires-Dist: requests>=2.26.0
27
+ Requires-Dist: openpyxl >=2.6.3
28
+ Requires-Dist: requests >=2.26.0
30
29
  Requires-Dist: pandas
31
30
 
32
31
  # PyGazpar
33
-
34
- ## $\text{\color{green}{!!! This library is working again. CAPTCHA has been removed !!!}}$
35
-
36
32
  PyGazpar is a Python library for getting natural gas consumption from GrDF French provider.
37
33
 
38
34
  Their natural gas meter is called Gazpar. It is wireless and transmit the gas consumption once per day.
@@ -217,35 +213,6 @@ All notable changes to this project will be documented in this file.
217
213
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
218
214
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
219
215
 
220
- ## [1.2.7](https://github.com/ssenart/PyGazpar/compare/1.2.7...1.2.6) - 2025-01-06
221
-
222
- ### Fixed
223
- - [#79](https://github.com/ssenart/PyGazpar/issues/79): Fix some unittests that wrongly failed because of the new year.
224
-
225
- ## [1.2.6](https://github.com/ssenart/PyGazpar/compare/1.2.6...1.2.5) - 2025-01-03
226
-
227
- ### Fixed
228
- - [#77](https://github.com/ssenart/PyGazpar/issues/77): Some error may occur while requesting data from GrDF API.
229
-
230
- ## [1.2.5](https://github.com/ssenart/PyGazpar/compare/1.2.5...1.2.4) - 2024-12-21
231
-
232
- ### Fixed
233
- - [#75](https://github.com/ssenart/PyGazpar/issues/75): Fix an error when no temperature data is available.
234
-
235
- ## [1.2.4](https://github.com/ssenart/PyGazpar/compare/1.2.4...1.2.3) - 2024-10-09
236
-
237
- ### Fixed
238
- - [#72](https://github.com/ssenart/PyGazpar/issues/72): Remove the warning message "UserWarning: Boolean Series key will be reindexed to match DataFrame index. df = pd.concat([df[(df["count"] >= 7)], df.tail(1)[df["count"] < 7]])".
239
-
240
- ## [1.2.3](https://github.com/ssenart/PyGazpar/compare/1.2.3...1.2.1) - 2024-10-05
241
-
242
- ### Added
243
- - [#70](https://github.com/ssenart/PyGazpar/issues/70): Add Python 3.12 support.
244
-
245
- ## [1.2.2](https://github.com/ssenart/PyGazpar/compare/1.2.1...1.2.2) - 2024-05-08
246
-
247
- ### Fixed
248
- - [#65](https://github.com/ssenart/PyGazpar/issues/65): [Bug] PermissionError happens when loading data from Excel file.
249
216
 
250
217
  ## [1.2.1](https://github.com/ssenart/PyGazpar/compare/1.2.0...1.2.1) - 2024-05-04
251
218
 
@@ -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=D6VBy4ngQDECQfPVi9ZGhKuuOxNDUHjK-9gTDJlATPI,20699
4
+ pygazpar/datasource.py,sha256=gqOREo9OQaBmqWgaDIgShJrP1dZNVFJoIxUu9Rfxmec,21374
5
5
  pygazpar/enum.py,sha256=3ZCk4SziXF6pxgP3MuQ1qxYfqB3X5DOV8Rtd0GHsK9w,898
6
- pygazpar/excelparser.py,sha256=QNFIErXNgMjGGjsGjdnRxAbNpfVagdYmZQtXRub3_Xc,5931
7
- pygazpar/jsonparser.py,sha256=OrRdMZNBi7rI4dRGoRW7gjyFwJFk-IvtkRZ_t1XVFrI,1859
8
- pygazpar/version.py,sha256=49prCLbE3fFzLfxem5rd2dr1iV4_L-bN0N4J7jxU5yA,22
6
+ pygazpar/excelparser.py,sha256=glWlbj22pxYjHGKurOFmhzcVAoWCvfOHn7_Y6GgHUPo,5915
7
+ pygazpar/jsonparser.py,sha256=AWdU3h7UohsOov8HpeP8GNuqcnDmM4r3I7-CI_crDvA,1804
8
+ pygazpar/version.py,sha256=rcyBYFWxUArZ5y56YkLypabOiwSZfCl48nXHK0ebB20,24
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=BFLz0GNk8qEP4d2-7cAaIcLWpkSnDZo3wRb0AlXBNOQ,5765
19
+ tests/test_client.py,sha256=OwYBeNC66WiykU1IUEf4eZacAU49xQJXsFQY6kYiXCQ,5111
20
20
  tests/test_datafileparser.py,sha256=nAeUpOHtelblMpmbrrnf-2GuMjK5ai65veDoymceprE,818
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=2EYNnKzCnOJz6gzawkwptmVtDPexL3_rj3jGvMGlwqU,19226
24
- pygazpar-1.2.7.dist-info/WHEEL,sha256=bkapPWmaLinkcP210NpibBONXH5ryQB77NZphDx-h5Y,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,,
21
+ tests/test_datasource.py,sha256=2BCrnUh9ZbR_dAdvKT9498u5a-jGnC4aZafP7V9iZn8,5983
22
+ pygazpar-1.3.0a6.dist-info/LICENSE.md,sha256=XsCJx_7_BC9tvmE0ZxS1cTNR7ekurog_ea9ybdZ-8tc,1073
23
+ pygazpar-1.3.0a6.dist-info/METADATA,sha256=rAa2dhtTBrI7Bqo53G1ZPN1NgAIBGu7SsWfE0EmUW34,17741
24
+ pygazpar-1.3.0a6.dist-info/WHEEL,sha256=tYIwCB1hVBJgdoQ6yUeZawdeOAGZpZULrUWUiRSsSKs,93
25
+ pygazpar-1.3.0a6.dist-info/entry_points.txt,sha256=c_FMZPYlRv1w9EqfgWhlkdJOoje7FcglI0UMm2oRLoI,53
26
+ pygazpar-1.3.0a6.dist-info/top_level.txt,sha256=P7qn-XtanDPBLQsTvjvLV71wH8RK0DYbx8tzN_rDS70,23
27
+ pygazpar-1.3.0a6.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.45.1)
2
+ Generator: bdist_wheel (0.43.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py38-none-any
5
5
 
tests/test_client.py CHANGED
@@ -1,159 +1,145 @@
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)
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
+ # @pytest.mark.skip(reason="Requires live data")
56
+ def test_daily_jsonweb(self):
57
+ client = Client(JsonWebDataSource(self.__username, self.__password))
58
+
59
+ data = client.loadSince(self.__pceIdentifier, 365, [Frequency.DAILY])
60
+
61
+ assert (len(data[Frequency.DAILY.value]) > 0)
62
+
63
+ def test_weekly_jsonweb(self):
64
+ client = Client(JsonWebDataSource(self.__username, self.__password))
65
+
66
+ data = client.loadSince(self.__pceIdentifier, 365, [Frequency.WEEKLY])
67
+
68
+ assert (len(data[Frequency.WEEKLY.value]) >= 51 and len(data[Frequency.WEEKLY.value]) <= 54)
69
+
70
+ def test_monthly_jsonweb(self):
71
+ client = Client(JsonWebDataSource(self.__username, self.__password))
72
+
73
+ data = client.loadSince(self.__pceIdentifier, 365, [Frequency.MONTHLY])
74
+
75
+ assert (len(data[Frequency.MONTHLY.value]) >= 12 and len(data[Frequency.MONTHLY.value]) <= 13)
76
+
77
+ def test_yearly_jsonweb(self):
78
+ client = Client(JsonWebDataSource(self.__username, self.__password))
79
+
80
+ data = client.loadSince(self.__pceIdentifier, 365, [Frequency.YEARLY])
81
+
82
+ assert (len(data[Frequency.YEARLY.value]) == 1)
83
+
84
+ def test_daily_excelweb(self):
85
+ client = Client(ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory))
86
+
87
+ data = client.loadSince(self.__pceIdentifier, 365, [Frequency.DAILY])
88
+
89
+ assert (len(data[Frequency.DAILY.value]) > 0)
90
+
91
+ def test_weekly_excelweb(self):
92
+ client = Client(ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory))
93
+
94
+ data = client.loadSince(self.__pceIdentifier, 365, [Frequency.WEEKLY])
95
+
96
+ assert (len(data[Frequency.WEEKLY.value]) >= 51 and len(data[Frequency.WEEKLY.value]) <= 54)
97
+
98
+ def test_monthly_excelweb(self):
99
+ client = Client(ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory))
100
+
101
+ data = client.loadSince(self.__pceIdentifier, 365, [Frequency.MONTHLY])
102
+
103
+ assert (len(data[Frequency.MONTHLY.value]) >= 12 and len(data[Frequency.MONTHLY.value]) <= 13)
104
+
105
+ def test_yearly_excelweb(self):
106
+ client = Client(ExcelWebDataSource(self.__username, self.__password, self.__tmp_directory))
107
+
108
+ data = client.loadSince(self.__pceIdentifier, 365, [Frequency.YEARLY])
109
+
110
+ assert (len(data[Frequency.YEARLY.value]) == 1)
111
+
112
+ def test_hourly_sample(self):
113
+ client = Client(TestDataSource())
114
+
115
+ data = client.loadSince(self.__pceIdentifier, 365, [Frequency.HOURLY])
116
+
117
+ assert (len(data[Frequency.HOURLY.value]) == 0)
118
+
119
+ def test_daily_sample(self):
120
+ client = Client(TestDataSource())
121
+
122
+ data = client.loadSince(self.__pceIdentifier, 365, [Frequency.DAILY])
123
+
124
+ assert (len(data[Frequency.DAILY.value]) == 711)
125
+
126
+ def test_weekly_sample(self):
127
+ client = Client(TestDataSource())
128
+
129
+ data = client.loadSince(self.__pceIdentifier, 365, [Frequency.WEEKLY])
130
+
131
+ assert (len(data[Frequency.WEEKLY.value]) > 0)
132
+
133
+ def test_monthly_sample(self):
134
+ client = Client(TestDataSource())
135
+
136
+ data = client.loadSince(self.__pceIdentifier, 365, [Frequency.MONTHLY])
137
+
138
+ assert (len(data[Frequency.MONTHLY.value]) > 0)
139
+
140
+ def test_yearly_sample(self):
141
+ client = Client(TestDataSource())
142
+
143
+ data = client.loadSince(self.__pceIdentifier, 365, [Frequency.YEARLY])
144
+
145
+ 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]) >= 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)
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]) >= 12 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)