homeconnect-watcher 0.0.12.dev1__tar.gz → 0.0.12.dev2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/PKG-INFO +1 -1
  2. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/_version.py +2 -2
  3. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/client/appliance.py +7 -8
  4. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/client/client.py +8 -6
  5. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/exporter/postgres.py +6 -0
  6. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher.egg-info/PKG-INFO +1 -1
  7. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/.github/workflows/ci.yaml +0 -0
  8. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/.github/workflows/publish.yaml +0 -0
  9. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/.gitignore +0 -0
  10. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/.pre-commit-config.yaml +0 -0
  11. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/LICENSE +0 -0
  12. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/README.md +0 -0
  13. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/pyproject.toml +0 -0
  14. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/setup.cfg +0 -0
  15. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/__init__.py +0 -0
  16. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/api.py +0 -0
  17. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/cli.py +0 -0
  18. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/client/__init__.py +0 -0
  19. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/db/__init__.py +0 -0
  20. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/db/client.py +0 -0
  21. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/db/utils.py +0 -0
  22. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/db/view.py +0 -0
  23. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/event.py +0 -0
  24. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/exceptions.py +0 -0
  25. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/exporter/__init__.py +0 -0
  26. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/exporter/base.py +0 -0
  27. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/exporter/file.py +0 -0
  28. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/read.py +0 -0
  29. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/sql/0_appliances.sql +0 -0
  30. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/sql/1_events.sql +0 -0
  31. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/sql/2_raw_events_active.sql +0 -0
  32. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/sql/3_raw_events_with_session_id.sql +0 -0
  33. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/sql/4_sessions.sql +0 -0
  34. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/trigger.py +0 -0
  35. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/utils/__init__.py +0 -0
  36. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/utils/logging.py +0 -0
  37. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/utils/metrics.py +0 -0
  38. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/utils/retry.py +0 -0
  39. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher/utils/timeout.py +0 -0
  40. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher.egg-info/SOURCES.txt +0 -0
  41. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher.egg-info/dependency_links.txt +0 -0
  42. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher.egg-info/entry_points.txt +0 -0
  43. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher.egg-info/requires.txt +0 -0
  44. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/src/homeconnect_watcher.egg-info/top_level.txt +0 -0
  45. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/tests/client/test_client.py +0 -0
  46. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/tests/conftest.py +0 -0
  47. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/tests/db/test_db_client.py +0 -0
  48. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/tests/db/test_views.py +0 -0
  49. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/tests/db/views/conftest.py +0 -0
  50. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/tests/db/views/test_view_appliances.py +0 -0
  51. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/tests/db/views/test_view_events.py +0 -0
  52. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/tests/db/views/test_view_session.py +0 -0
  53. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/tests/exporter/test_file.py +0 -0
  54. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/tests/exporter/test_postgres.py +0 -0
  55. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/tests/test_event.py +0 -0
  56. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/tests/utils/test_retry.py +0 -0
  57. {homeconnect_watcher-0.0.12.dev1 → homeconnect_watcher-0.0.12.dev2}/tests/utils/test_timeout.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: homeconnect-watcher
3
- Version: 0.0.12.dev1
3
+ Version: 0.0.12.dev2
4
4
  Summary: Python service that listens to HomeConnect event and logs them.
5
5
  Author-email: Rogier van der Geer <rogier@vander-geer.nl>
6
6
  License: MIT
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.0.12.dev1'
16
- __version_tuple__ = version_tuple = (0, 0, 12, 'dev1')
15
+ __version__ = version = '0.0.12.dev2'
16
+ __version_tuple__ = version_tuple = (0, 0, 12, 'dev2')
@@ -14,14 +14,13 @@ class HomeConnectAppliance:
14
14
  self.appliance_id = appliance_id
15
15
  self.appliance_type = appliance_type
16
16
  self._available_programs: list[str] | None = None
17
- self._last_update: float = time()
17
+ self._last_update: dict[str, float] = dict()
18
18
 
19
19
  def __repr__(self) -> str:
20
20
  return f"HomeConnect{self.appliance_type}(ha_id={repr(self.appliance_id)})"
21
21
 
22
- @property
23
- def time_since_update(self) -> float:
24
- return time() - self._last_update
22
+ def time_since_update(self, request_type: str) -> float:
23
+ return time() - self._last_update.get(request_type, 0)
25
24
 
26
25
  async def get_available_programs(self) -> list[str] | None:
27
26
  if self._available_programs is None:
@@ -43,24 +42,24 @@ class HomeConnectAppliance:
43
42
  return self._available_programs if len(self._available_programs) else None
44
43
 
45
44
  async def get_status(self) -> HomeConnectEvent:
46
- self._last_update: float = time()
45
+ self._last_update["status"] = time()
47
46
  response = await self.client._get(f"/{self.appliance_id}/status")
48
47
  return HomeConnectEvent.from_request(request="STATUS", appliance_id=self.appliance_id, response=response)
49
48
 
50
49
  async def get_settings(self) -> HomeConnectEvent:
51
- self._last_update: float = time()
50
+ self._last_update["settings"] = time()
52
51
  response = await self.client._get(f"/{self.appliance_id}/settings")
53
52
  return HomeConnectEvent.from_request(request="SETTINGS", appliance_id=self.appliance_id, response=response)
54
53
 
55
54
  async def get_active_program(self) -> HomeConnectEvent:
56
- self._last_update: float = time()
55
+ self._last_update["active_program"] = time()
57
56
  response = await self.client._get(f"/{self.appliance_id}/programs/active")
58
57
  return HomeConnectEvent.from_request(
59
58
  request="ACTIVE-PROGRAM", appliance_id=self.appliance_id, response=response
60
59
  )
61
60
 
62
61
  async def get_selected_program(self) -> HomeConnectEvent:
63
- self._last_update: float = time()
62
+ self._last_update["selected_program"] = time()
64
63
  response = await self.client._get(f"/{self.appliance_id}/programs/selected")
65
64
  return HomeConnectEvent.from_request(
66
65
  request="SELECTED-PROGRAM", appliance_id=self.appliance_id, response=response
@@ -192,17 +192,19 @@ class HomeConnectClient:
192
192
  if trigger is None:
193
193
  return
194
194
  appliance = await self.get_appliance(trigger.appliance_id)
195
- if trigger.interval and appliance.time_since_update < 300:
196
- return # If the trigger is an interval trigger, only do requests if last requests were 5 minutes ago.
197
195
  if trigger.status:
198
- yield await appliance.get_status()
196
+ if not trigger.interval or appliance.time_since_update("status") >= 300:
197
+ yield await appliance.get_status()
199
198
  if trigger.settings:
200
- yield await appliance.get_settings()
199
+ if not trigger.interval or appliance.time_since_update("settings") >= 300:
200
+ yield await appliance.get_settings()
201
201
  if await appliance.get_available_programs(): # Only if the appliance supports programs.
202
202
  if trigger.active_program:
203
- yield await appliance.get_active_program()
203
+ if not trigger.interval or appliance.time_since_update("active_program") >= 300:
204
+ yield await appliance.get_active_program()
204
205
  if trigger.selected_program:
205
- yield await appliance.get_selected_program()
206
+ if not trigger.interval or appliance.time_since_update("selected_program") >= 300:
207
+ yield await appliance.get_selected_program()
206
208
 
207
209
  def _load_token(self) -> OAuth2Token | None:
208
210
  """Load the OAuth token from file."""
@@ -24,3 +24,9 @@ class PGExporter(BaseExporter, WatcherDBClient):
24
24
  if datetime.now() > self._next_refresh:
25
25
  self.refresh_views()
26
26
  self._next_refresh: datetime = datetime.now() + self.refresh_interval
27
+
28
+ def bulk_export(self, events: list[HomeConnectEvent]) -> None:
29
+ self.write_events(events)
30
+ if datetime.now() > self._next_refresh:
31
+ self.refresh_views()
32
+ self._next_refresh: datetime = datetime.now() + self.refresh_interval
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: homeconnect-watcher
3
- Version: 0.0.12.dev1
3
+ Version: 0.0.12.dev2
4
4
  Summary: Python service that listens to HomeConnect event and logs them.
5
5
  Author-email: Rogier van der Geer <rogier@vander-geer.nl>
6
6
  License: MIT