DLMS-SPODES-client 0.19.18__py3-none-any.whl → 0.19.20__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.
@@ -1356,25 +1356,65 @@ class Execute2(SimpleCopy, OK):
1356
1356
  return result.Error.from_e(e)
1357
1357
 
1358
1358
 
1359
- class WriteTime(SimpleCopy, Base):
1360
- msg: str = "write Clock.time depend from transfer time"
1359
+ @dataclass
1360
+ class GetTimeDelta(SimpleCopy, Simple[float]):
1361
+ """Read and return <time delta> in second: """
1362
+ msg: str = "Read Clock.time"
1361
1363
 
1362
- async def exchange(self, c: Client):
1363
- try:
1364
- obj = c._objects.clock
1365
- c.get_get_request_normal(obj.get_attr_descriptor(3))
1366
- if isinstance(res_pdu := await c.read_data_block(), result.Error):
1367
- return res_pdu
1368
- tz = obj.get_attr_element(3).DATA_TYPE(res_pdu.value)
1369
- res = await WriteAttribute(
1370
- ln=obj.logical_name,
1371
- index=2,
1372
- value=(datetime.datetime.utcnow() + datetime.timedelta(minutes=int(tz)) + c.last_transfer_time)
1373
- ).exchange(c)
1374
- return res
1375
- except Exception as e:
1376
- # logger.info(F'ERROR: write Clock: attribute 2 {e}')
1377
- return result.Error.from_e(exc.DLMSException(F"write time: {e}"))
1364
+ async def exchange(self, c: Client) -> result.SimpleOrError[float]:
1365
+ acc = result.ErrorAccumulator()
1366
+ obj = c._objects.clock
1367
+ if isinstance(
1368
+ res_read_tz := await ReadObjAttr(
1369
+ obj=obj,
1370
+ index=3
1371
+ ).exchange(c),
1372
+ result.Error):
1373
+ return res_read_tz
1374
+ tz = datetime.timezone(datetime.timedelta(minutes=int(res_read_tz.value)))
1375
+ if isinstance(
1376
+ res_read := await ReadObjAttr(
1377
+ obj=obj,
1378
+ index=2
1379
+ ).exchange(c),
1380
+ result.Error):
1381
+ return res_read
1382
+ value = datetime.datetime.now(tz=tz)
1383
+ value2 = res_read.value.to_datetime().replace(tzinfo=tz)
1384
+ return result.Simple((value2 - value).total_seconds()).append_err(acc.err)
1385
+
1386
+
1387
+
1388
+ @dataclass
1389
+ class WriteTime(SimpleCopy, Simple[float]):
1390
+ """Write and return <record time> in second: """
1391
+ limit: float = 5.0
1392
+ number_of_retries: int = 10
1393
+ msg: str = "write Clock.time"
1394
+
1395
+ async def exchange(self, c: Client) -> result.SimpleOrError[float]:
1396
+ acc = result.ErrorAccumulator()
1397
+ obj = c._objects.clock
1398
+ c.get_get_request_normal(obj.get_attr_descriptor(3))
1399
+ if isinstance(res_pdu := await c.read_data_block(), result.Error):
1400
+ return res_pdu
1401
+ tz = obj.get_attr_element(3).DATA_TYPE(res_pdu.value)
1402
+ for i in range(self.number_of_retries):
1403
+ pre_time = time.time()
1404
+ if isinstance(
1405
+ res_write := await WriteAttribute(
1406
+ ln=obj.logical_name,
1407
+ index=2,
1408
+ value=(datetime.datetime.utcnow() + datetime.timedelta(minutes=int(tz)))).exchange(c),
1409
+ result.Error):
1410
+ return res_write
1411
+ rec_time = time.time() - pre_time
1412
+ if rec_time < self.limit:
1413
+ break
1414
+ acc.append_e(TimeoutError(f"can't write in {i} attemp in time"))
1415
+ else:
1416
+ return result.Error.from_e(TimeoutError(f"can't write time for limit: {self.limit} second"))
1417
+ return result.Simple(rec_time).append_err(acc.err)
1378
1418
 
1379
1419
 
1380
1420
  @dataclass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: DLMS_SPODES_client
3
- Version: 0.19.18
3
+ Version: 0.19.20
4
4
  Summary: dlms-spodes
5
5
  Author-email: Serj Kotilevski <youserj@outlook.com>
6
6
  Project-URL: Source, https://github.com/youserj/SPODESclient_prj
@@ -6,7 +6,7 @@ DLMS_SPODES_client/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  DLMS_SPODES_client/services.py,sha256=xM_-h322V1bGBcw9cJh7XOSUMTL3_E-GX89-z3YwIYw,3909
7
7
  DLMS_SPODES_client/session.py,sha256=nPzXujpmGSTFFvhyZRjgH_RLX1DS9moRddUEZuf-QEE,12760
8
8
  DLMS_SPODES_client/settings.py,sha256=6mitGe9UYeEgL61sf933MJ-S5N-ReoxvXqiI3agBGYE,1623
9
- DLMS_SPODES_client/task.py,sha256=K2GyX4_DMV5_vYk2QhCwNkXK4gEqd9UmmcjHa46I49c,76378
9
+ DLMS_SPODES_client/task.py,sha256=wJEYw4Ld8cBAi2eMzvNvNAc69DaCV33Vjssv7f8smlA,77844
10
10
  DLMS_SPODES_client/gurux_common/enums/TraceLevel.py,sha256=Ne0Rn3c9ACqQjmde_ksbiQxIUv6nXsPQRnhkGwIv3QI,521
11
11
  DLMS_SPODES_client/gurux_common/enums/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
12
  DLMS_SPODES_client/gurux_dlms/AesGcmParameter.py,sha256=HJt0uvxtkqKEkvfiqXTMNsiayN15AgPJa9_iMSSFZsQ,1429
@@ -54,8 +54,8 @@ DLMS_SPODES_client/gurux_dlms/enums/Task.py,sha256=chuOL6-IMxBvABUZtoFcaYaQQB4GZ
54
54
  DLMS_SPODES_client/gurux_dlms/enums/VdeStateError.py,sha256=qT87LMbIYEs3TYPIp3N-dR2Tcg9KhKyiELwhVl5U-tw,233
55
55
  DLMS_SPODES_client/gurux_dlms/enums/__init__.py,sha256=F_sgGwNmmdpbKvP1klJQUNiLXxU2BtZ-LgEI9e6xP8g,1314
56
56
  DLMS_SPODES_client/gurux_dlms/internal/_GXCommon.py,sha256=7D9EYcfiZxwbk8sfpHv7s2nYqrbmGf-Tbwv2T-gqmgk,53226
57
- dlms_spodes_client-0.19.18.dist-info/METADATA,sha256=hYlGdBkjzcYlM28DJTQnpUQ-lF83f9ozF7i2z1C1L_s,986
58
- dlms_spodes_client-0.19.18.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
59
- dlms_spodes_client-0.19.18.dist-info/entry_points.txt,sha256=Z6UTeQjjCf2k1Y3Bjs0s7yr-UYSWb-TvJMuG2K2MApw,70
60
- dlms_spodes_client-0.19.18.dist-info/top_level.txt,sha256=rh_3Uig5bc6J_lKni01btol7dX_IgIJulNtGjGehmBE,19
61
- dlms_spodes_client-0.19.18.dist-info/RECORD,,
57
+ dlms_spodes_client-0.19.20.dist-info/METADATA,sha256=o-1ik4JJ14TuhPbklYvCiHTxj6JxlKMrlM3eliI_ypY,986
58
+ dlms_spodes_client-0.19.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
59
+ dlms_spodes_client-0.19.20.dist-info/entry_points.txt,sha256=Z6UTeQjjCf2k1Y3Bjs0s7yr-UYSWb-TvJMuG2K2MApw,70
60
+ dlms_spodes_client-0.19.20.dist-info/top_level.txt,sha256=rh_3Uig5bc6J_lKni01btol7dX_IgIJulNtGjGehmBE,19
61
+ dlms_spodes_client-0.19.20.dist-info/RECORD,,