pygazpar 1.2.7__py312-none-any.whl → 1.3.0a11__py312-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 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
 
@@ -166,8 +166,16 @@ 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
+
169
177
  try:
170
- self.__downloadFile(self._session, downloadUrl, self.__tmpDirectory)
178
+ self.__downloadFile(session, downloadUrl, self.__tmpDirectory)
171
179
  break
172
180
  except Exception as e:
173
181
 
@@ -203,7 +211,7 @@ class ExcelWebDataSource(WebDataSource):
203
211
 
204
212
  response = session.get(url)
205
213
 
206
- if "text/html" in response.headers.get("Content-Type"): # type: ignore
214
+ if "text/html" in response.headers.get("Content-Type"):
207
215
  raise Exception("An error occurred while loading data. Please check your credentials.")
208
216
 
209
217
  if response.status_code != 200:
@@ -259,7 +267,7 @@ class JsonWebDataSource(WebDataSource):
259
267
 
260
268
  super().__init__(username, password)
261
269
 
262
- def _loadFromSession(self, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
270
+ def _loadFromSession(self, auth_token: str, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
263
271
 
264
272
  res = {}
265
273
 
@@ -278,10 +286,18 @@ class JsonWebDataSource(WebDataSource):
278
286
  retry = 10
279
287
  while retry > 0:
280
288
 
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
+
281
297
  try:
282
- response = self._session.get(downloadUrl)
298
+ response = session.get(downloadUrl)
283
299
 
284
- if "text/html" in response.headers.get("Content-Type"): # type: ignore
300
+ if "text/html" in response.headers.get("Content-Type"):
285
301
  raise Exception("An error occurred while loading data. Please check your credentials.")
286
302
 
287
303
  if response.status_code != 200:
@@ -305,7 +321,7 @@ class JsonWebDataSource(WebDataSource):
305
321
  temperaturesUrl = JsonWebDataSource.TEMPERATURES_URL.format(pceIdentifier, endDate.strftime(JsonWebDataSource.INPUT_DATE_FORMAT), days)
306
322
 
307
323
  # Get weather data.
308
- temperatures = self._session.get(temperaturesUrl).text
324
+ temperatures = session.get(temperaturesUrl).text
309
325
 
310
326
  # Transform all the data into the target structure.
311
327
  daily = JsonParser.parse(data, temperatures, pceIdentifier)
@@ -450,7 +466,7 @@ class FrequencyConverter:
450
466
  df = df.sort_values(by=['first_day_of_week'])
451
467
 
452
468
  # 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]])
469
+ df = pd.concat([df[(df["count"] >= 7)], df.tail(1)[df["count"] < 7]])
454
470
 
455
471
  # Select target columns.
456
472
  df = df[["time_period", "start_index_m3", "end_index_m3", "volume_m3", "energy_kwh", "timestamp"]]
@@ -478,7 +494,7 @@ class FrequencyConverter:
478
494
  df = df.sort_values(by=['first_day_of_month'])
479
495
 
480
496
  # 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]])
497
+ df = pd.concat([df[(df["count"] >= 28)], df.tail(1)[df["count"] < 28]])
482
498
 
483
499
  # Rename columns for their target names.
484
500
  df = df.rename(columns={"month_year": "time_period"})
@@ -509,7 +525,7 @@ class FrequencyConverter:
509
525
  df = df.sort_values(by=['year'])
510
526
 
511
527
  # 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]])
528
+ df = pd.concat([df[(df["count"] >= 360)], df.tail(1)[df["count"] < 360]])
513
529
 
514
530
  # Rename columns for their target names.
515
531
  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.0a11"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pygazpar
3
- Version: 1.2.7
3
+ Version: 1.3.0a11
4
4
  Summary: Retrieve gas consumption from GrDF web site (French Gas Company)
5
5
  Home-page: https://github.com/ssenart/pygazpar
6
6
  Download-URL: https://github.com/ssenart/pygazpar/releases
@@ -32,7 +32,9 @@ Requires-Dist: pandas
32
32
 
33
33
  # PyGazpar
34
34
 
35
- ## $\text{\color{green}{!!! This library is working again. CAPTCHA has been removed !!!}}$
35
+ ## <span style="color:green">!!! This library is working again. CAPTCHA has been removed !!!</span>
36
+
37
+ ## <span style="color:red">~~!!! This library is broken since CAPTCHA is mandatory on GrDF site !!!~~</span>
36
38
 
37
39
  PyGazpar is a Python library for getting natural gas consumption from GrDF French provider.
38
40
 
@@ -218,26 +220,6 @@ All notable changes to this project will be documented in this file.
218
220
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
219
221
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
220
222
 
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
-
231
- ## [1.2.5](https://github.com/ssenart/PyGazpar/compare/1.2.5...1.2.4) - 2024-12-21
232
-
233
- ### Fixed
234
- - [#75](https://github.com/ssenart/PyGazpar/issues/75): Fix an error when no temperature data is available.
235
-
236
- ## [1.2.4](https://github.com/ssenart/PyGazpar/compare/1.2.4...1.2.3) - 2024-10-09
237
-
238
- ### Fixed
239
- - [#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]])".
240
-
241
223
  ## [1.2.3](https://github.com/ssenart/PyGazpar/compare/1.2.3...1.2.1) - 2024-10-05
242
224
 
243
225
  ### Added
@@ -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=nlIWxZ6SNSHf09BVBFIChSHf4dN05lC3LCxUUDRTylg,21470
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=_dBppxmPi6eC2EiB3BcrYBcY9pm4iNlyhbySqBY4Y0Y,25
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=DVGGubMPMM56LvQW-4_pCouvG9qTCbVZVPoRTBGuCU4,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=VULYhqTVeudSeCcyBxU_jg4un4FdS7N7ydLHc7cwtr8,19249
24
- pygazpar-1.2.7.dist-info/WHEEL,sha256=f6NuRykhyx7vCtlEy-mvf2B8vPSsWyYD7mCW_EY45Cc,93
25
- pygazpar-1.2.7.dist-info/entry_points.txt,sha256=dNJjC6RYY3FeJIe0hZL9Kcr6vKEx1qkZ71e6Slocb7I,52
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=Fkn9BOGVKITAgrx9XipR1_ykT7rdvPyt_PAg3ftjfSU,5983
22
+ pygazpar-1.3.0a11.dist-info/LICENSE.md,sha256=XsCJx_7_BC9tvmE0ZxS1cTNR7ekurog_ea9ybdZ-8tc,1073
23
+ pygazpar-1.3.0a11.dist-info/METADATA,sha256=FhQCrz6r71ney7e9JmwTvJ-jnzVwIKSCbWk-3YqdL-Y,18417
24
+ pygazpar-1.3.0a11.dist-info/WHEEL,sha256=GbltxxgeSWIHDBy2twIuAtfZcwJlnEbPI_BIuEuGCR4,93
25
+ pygazpar-1.3.0a11.dist-info/entry_points.txt,sha256=dNJjC6RYY3FeJIe0hZL9Kcr6vKEx1qkZ71e6Slocb7I,52
26
+ pygazpar-1.3.0a11.dist-info/top_level.txt,sha256=P7qn-XtanDPBLQsTvjvLV71wH8RK0DYbx8tzN_rDS70,23
27
+ pygazpar-1.3.0a11.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.7.0)
2
+ Generator: setuptools (75.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py312-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]) >= 11 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]) >= 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)