pygazpar 1.3.0a12__py311-none-any.whl → 1.3.0a14__py311-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
- auth_token = self._login(self.__username, self.__password)
62
+ self._login(self.__username, self.__password) # We ignore the return value.
63
63
 
64
- res = self._loadFromSession(auth_token, pceIdentifier, startDate, endDate, frequencies)
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
- session = Session()
92
- session.headers.update({"Content-Type": "application/json"})
93
- session.headers.update({"X-Requested-With": "XMLHttpRequest"})
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 = session.get(AUTH_TOKEN_URL, params=params, allow_redirects=True, cookies=jar) # type: ignore
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 = session.cookies.get("auth_token", domain="monespace.grdf.fr")
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, auth_token: str, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
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, auth_token: str, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
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(session, downloadUrl, self.__tmpDirectory)
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, auth_token: str, pceIdentifier: str, startDate: date, endDate: date, frequencies: Optional[List[Frequency]] = None) -> MeterReadingsByFrequency:
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 = session.get(downloadUrl)
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 = session.get(temperaturesUrl).text
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/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:
32
+ if temperature is None and temperatures is not None and len(temperatures) > 0:
33
33
  temperature = temperatures.get(releve['journeeGaziere'])
34
34
 
35
35
  item = {}
pygazpar/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "1.3.0a12"
1
+ __version__ = "1.3.0a14"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pygazpar
3
- Version: 1.3.0a12
3
+ Version: 1.3.0a14
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
@@ -220,6 +220,16 @@ All notable changes to this project will be documented in this file.
220
220
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
221
221
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
222
222
 
223
+ ## [1.2.6](https://github.com/ssenart/PyGazpar/compare/1.2.6...1.2.5) - 2025-01-03
224
+
225
+ ### Fixed
226
+ - [#77](https://github.com/ssenart/PyGazpar/issues/77): Some error may occur while requesting data from GrDF API.
227
+
228
+ ## [1.2.5](https://github.com/ssenart/PyGazpar/compare/1.2.5...1.2.4) - 2024-12-21
229
+
230
+ ### Fixed
231
+ - [#75](https://github.com/ssenart/PyGazpar/issues/75): Fix an error when no temperature data is available.
232
+
223
233
  ## [1.2.4](https://github.com/ssenart/PyGazpar/compare/1.2.4...1.2.3) - 2024-10-09
224
234
 
225
235
  ### 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=N9OVdJr4BwtA0W8DvKe4PEE4kLKbSEH2wxAYGNk-iIU,21558
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
- pygazpar/jsonparser.py,sha256=AWdU3h7UohsOov8HpeP8GNuqcnDmM4r3I7-CI_crDvA,1804
8
- pygazpar/version.py,sha256=NYLHmRgRpna4gqXDsWvEWKVyypmZM3RBiuJ43vesebY,25
7
+ pygazpar/jsonparser.py,sha256=OrRdMZNBi7rI4dRGoRW7gjyFwJFk-IvtkRZ_t1XVFrI,1859
8
+ pygazpar/version.py,sha256=PmDAmw10ADg9AEzlwKqIjkV015azg3jlJE14KxjkD10,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=DVGGubMPMM56LvQW-4_pCouvG9qTCbVZVPoRTBGuCU4,5111
19
+ tests/test_client.py,sha256=UiJCqy_Nctl_YDSVpdaYfrbUEzuu9Td22a4WxNnIhJw,5606
20
20
  tests/test_datafileparser.py,sha256=nAeUpOHtelblMpmbrrnf-2GuMjK5ai65veDoymceprE,818
21
21
  tests/test_datasource.py,sha256=Fkn9BOGVKITAgrx9XipR1_ykT7rdvPyt_PAg3ftjfSU,5983
22
- pygazpar-1.3.0a12.dist-info/LICENSE.md,sha256=XsCJx_7_BC9tvmE0ZxS1cTNR7ekurog_ea9ybdZ-8tc,1073
23
- pygazpar-1.3.0a12.dist-info/METADATA,sha256=NuwxgC5w4f_2V6xuEaEtZJCq6KsZsPOf3g9P_QZGoJI,18744
24
- pygazpar-1.3.0a12.dist-info/WHEEL,sha256=ddUgEVTfDeUbT0ItkaS95LmKPb9e_DpzUkQwFnNilG4,94
25
- pygazpar-1.3.0a12.dist-info/entry_points.txt,sha256=dNJjC6RYY3FeJIe0hZL9Kcr6vKEx1qkZ71e6Slocb7I,52
26
- pygazpar-1.3.0a12.dist-info/top_level.txt,sha256=P7qn-XtanDPBLQsTvjvLV71wH8RK0DYbx8tzN_rDS70,23
27
- pygazpar-1.3.0a12.dist-info/RECORD,,
22
+ pygazpar-1.3.0a14.dist-info/LICENSE.md,sha256=XsCJx_7_BC9tvmE0ZxS1cTNR7ekurog_ea9ybdZ-8tc,1073
23
+ pygazpar-1.3.0a14.dist-info/METADATA,sha256=rsknEaRsdxc7fkASSIhBDRgv34CORVDnodZyCs_mZSk,19156
24
+ pygazpar-1.3.0a14.dist-info/WHEEL,sha256=2aRSX09k7pmd4gPs96VOQ860h0v0t30ka6JGHtpC3BY,94
25
+ pygazpar-1.3.0a14.dist-info/entry_points.txt,sha256=dNJjC6RYY3FeJIe0hZL9Kcr6vKEx1qkZ71e6Slocb7I,52
26
+ pygazpar-1.3.0a14.dist-info/top_level.txt,sha256=P7qn-XtanDPBLQsTvjvLV71wH8RK0DYbx8tzN_rDS70,23
27
+ pygazpar-1.3.0a14.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.44.0)
2
+ Generator: bdist_wheel (0.45.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py311-none-any
5
5
 
tests/test_client.py CHANGED
@@ -52,6 +52,20 @@ class TestClient:
52
52
 
53
53
  assert (len(data[Frequency.HOURLY.value]) == 0)
54
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
+
55
69
  # @pytest.mark.skip(reason="Requires live data")
56
70
  def test_daily_jsonweb(self):
57
71
  client = Client(JsonWebDataSource(self.__username, self.__password))