espark-core 0.5.4__py3-none-any.whl → 0.5.6__py3-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.

Potentially problematic release.


This version of espark-core might be problematic. Click here for more details.

@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: espark-core
3
- Version: 0.5.4
3
+ Version: 0.5.6
4
4
  Summary: The core module of the Espark ESP32-based IoT device management framework.
5
5
  License: MIT
6
6
  Requires-Python: >=3.10
7
7
  Description-Content-Type: text/markdown
8
8
  License-File: LICENSE
9
- Requires-Dist: aiomqtt>=2.4.0
9
+ Requires-Dist: aiomqtt>=2.5.0
10
10
  Requires-Dist: apscheduler>=3.11.2
11
11
  Requires-Dist: fastapi>=0.128.0
12
12
  Requires-Dist: packaging>=25.0
@@ -1,4 +1,4 @@
1
- espark_core-0.5.4.dist-info/licenses/LICENSE,sha256=wkIXJHYIspOGVvn_ajKyLucpIyw9_pO3QExFcNTCY78,1065
1
+ espark_core-0.5.6.dist-info/licenses/LICENSE,sha256=wkIXJHYIspOGVvn_ajKyLucpIyw9_pO3QExFcNTCY78,1065
2
2
  esparkcore/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
3
  esparkcore/constants.py,sha256=2Bmx62j4kykkPhcQ9ygEJ08uyVlykXMNFhpO26-Czlg,417
4
4
  esparkcore/data/__init__.py,sha256=abMOPq6jC5qOQCl9j7iPDv8iyjzDF-oVd_gW0la5kL4,45
@@ -32,10 +32,10 @@ esparkcore/schedules/__init__.py,sha256=v5Wy3Cbt2AnudGMGXv_Cyaa10s6NAmP66rDjcMSv
32
32
  esparkcore/schedules/outbox.py,sha256=GGANvjkI7w1BdmmVRgKog498ASD_xRN0g8bG6yC_SN4,811
33
33
  esparkcore/schedules/scheduler.py,sha256=aYQXImLZ4tW-hRavn3ObuV3lYjmOZD813YkeG1NsYfY,170
34
34
  esparkcore/services/__init__.py,sha256=RIZOHBfkWn3HsApdA5rH9EZbbXGq0NfiGoOWDO_JX1k,30
35
- esparkcore/services/mqtt.py,sha256=5h_mhXhFt11TyhGwNhaY08Y4tttvSTPkiR3veTqpb3A,8972
35
+ esparkcore/services/mqtt.py,sha256=iZ1vULPhuVcfMsJ40NA-vpVaDs_kUzrxR35NZWMiVig,9078
36
36
  esparkcore/utils/__init__.py,sha256=rzuCJUAaQl-yPhM1vcWB_1zVXqtA71ChYP2aM_3UfKk,42
37
37
  esparkcore/utils/logging.py,sha256=sRO8uOcPkFH-DwepqLOTS2qGaopXpMdVOjzZL6RpGs4,257
38
- espark_core-0.5.4.dist-info/METADATA,sha256=XrE-QAk_K75Ij1iy13zQ8xkR3TJUU2Yf6QB-YdWN9Z0,6330
39
- espark_core-0.5.4.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
- espark_core-0.5.4.dist-info/top_level.txt,sha256=hXVyhIPB4aGskFm5queWALxDPhcDkrN7_8vcjwA1iE4,11
41
- espark_core-0.5.4.dist-info/RECORD,,
38
+ espark_core-0.5.6.dist-info/METADATA,sha256=i2pOiS6Iwi9ibFKpPRP8o7gIuNWbY5T-LoErdNaRoFE,6330
39
+ espark_core-0.5.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
40
+ espark_core-0.5.6.dist-info/top_level.txt,sha256=hXVyhIPB4aGskFm5queWALxDPhcDkrN7_8vcjwA1iE4,11
41
+ espark_core-0.5.6.dist-info/RECORD,,
@@ -35,8 +35,6 @@ class MQTTManager:
35
35
  async with async_session() as session:
36
36
  device = await self.device_repo.get(session, Device.id == device_id)
37
37
  if device:
38
- device.last_seen = datetime.now(timezone.utc)
39
-
40
38
  await self.device_repo.update(session, device, last_seen=datetime.now(timezone.utc))
41
39
  else:
42
40
  device = Device()
@@ -127,34 +125,37 @@ class MQTTManager:
127
125
 
128
126
  async def _process_queue(self) -> None:
129
127
  while True:
130
- topic, payload = await self.queue.get()
131
-
132
- topic_parts: list[str] = str(topic).split('/')
133
- if len(topic_parts) != 3:
134
- log_error(Exception('Invalid topic format, skipping message'))
135
- continue
136
-
137
- app_type, message_type, device_id = topic_parts
138
- if app_type != 'espark':
139
- log_debug('Invalid app type, skipping message')
140
- continue
141
-
142
128
  try:
143
- payload = loads(payload.decode())
144
- except JSONDecodeError as e:
129
+ topic, payload = await self.queue.get()
130
+
131
+ topic_parts: list[str] = str(topic).split('/')
132
+ if len(topic_parts) != 3:
133
+ log_error(Exception('Invalid topic format, skipping message'))
134
+ continue
135
+
136
+ app_type, message_type, device_id = topic_parts
137
+ if app_type != 'espark':
138
+ log_debug('Invalid app type, skipping message')
139
+ continue
140
+
141
+ try:
142
+ payload = loads(payload.decode())
143
+ except JSONDecodeError as e:
144
+ log_error(e)
145
+ continue
146
+
147
+ if message_type == TOPIC_REGISTRATION.split('/')[1]:
148
+ await self._handle_registration(device_id, payload)
149
+ elif message_type == TOPIC_TELEMETRY.split('/')[1]:
150
+ await self._handle_telemetry(device_id, payload)
151
+ elif message_type == TOPIC_CRASH.split('/')[1]:
152
+ log_debug(f'Received crash report from device {device_id}: {payload}')
153
+ else:
154
+ log_debug(f'Unknown message type "{message_type}", skipping message')
155
+
156
+ self.queue.task_done()
157
+ except Exception as e:
145
158
  log_error(e)
146
- continue
147
-
148
- if message_type == TOPIC_REGISTRATION.split('/')[1]:
149
- await self._handle_registration(device_id, payload)
150
- elif message_type == TOPIC_TELEMETRY.split('/')[1]:
151
- await self._handle_telemetry(device_id, payload)
152
- elif message_type == TOPIC_CRASH.split('/')[1]:
153
- log_debug(f'Received crash report from device {device_id}: {payload}')
154
- else:
155
- log_debug(f'Unknown message type "{message_type}", skipping message')
156
-
157
- self.queue.task_done()
158
159
 
159
160
  async def _process_messages(self) -> None:
160
161
  while True: