DLMS-SPODES-client 0.19.28__tar.gz → 0.19.30__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 (80) hide show
  1. dlms_spodes_client-0.19.30/.vscode/launch.json +24 -0
  2. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/PKG-INFO +1 -1
  3. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/pyproject.toml +1 -1
  4. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/task.py +39 -2
  5. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client.egg-info/PKG-INFO +1 -1
  6. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client.egg-info/SOURCES.txt +2 -0
  7. dlms_spodes_client-0.19.30/test/__init__.py +0 -0
  8. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/test/test_Client.py +12 -2
  9. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/.github/workflows/publish.yaml +0 -0
  10. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/.gitignore +0 -0
  11. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/README.md +0 -0
  12. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/setup.cfg +0 -0
  13. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/FCS16.py +0 -0
  14. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/__init__.py +0 -0
  15. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/client.py +0 -0
  16. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_common/enums/TraceLevel.py +0 -0
  17. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_common/enums/__init__.py +0 -0
  18. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/AesGcmParameter.py +0 -0
  19. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/CountType.py +0 -0
  20. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/GXByteBuffer.py +0 -0
  21. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/GXCiphering.py +0 -0
  22. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/GXDLMS.py +0 -0
  23. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSChippering.py +0 -0
  24. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSChipperingStream.py +0 -0
  25. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSConfirmedServiceError.py +0 -0
  26. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSException.py +0 -0
  27. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSLNParameters.py +0 -0
  28. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSSNParameters.py +0 -0
  29. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSSettings.py +0 -0
  30. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/GXReplyData.py +0 -0
  31. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/HdlcControlFrame.py +0 -0
  32. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/MBusCommand.py +0 -0
  33. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/MBusEncryptionMode.py +0 -0
  34. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/ResponseType.py +0 -0
  35. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/SetResponseType.py +0 -0
  36. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/_HDLCInfo.py +0 -0
  37. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/__init__.py +0 -0
  38. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/Access.py +0 -0
  39. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/ApplicationReference.py +0 -0
  40. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/Authentication.py +0 -0
  41. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/BerType.py +0 -0
  42. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/Command.py +0 -0
  43. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/Definition.py +0 -0
  44. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/ErrorCode.py +0 -0
  45. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/ExceptionServiceError.py +0 -0
  46. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/HardwareResource.py +0 -0
  47. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/HdlcFrameType.py +0 -0
  48. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/Initiate.py +0 -0
  49. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/LoadDataSet.py +0 -0
  50. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/ObjectType.py +0 -0
  51. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/Priority.py +0 -0
  52. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/RequestTypes.py +0 -0
  53. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/Security.py +0 -0
  54. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/Service.py +0 -0
  55. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/ServiceClass.py +0 -0
  56. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/ServiceError.py +0 -0
  57. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/Standard.py +0 -0
  58. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/StateError.py +0 -0
  59. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/Task.py +0 -0
  60. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/VdeStateError.py +0 -0
  61. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/enums/__init__.py +0 -0
  62. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/gurux_dlms/internal/_GXCommon.py +0 -0
  63. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/logger.py +0 -0
  64. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/py.typed +0 -0
  65. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/services.py +0 -0
  66. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/session.py +0 -0
  67. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client/settings.py +0 -0
  68. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client.egg-info/dependency_links.txt +0 -0
  69. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client.egg-info/entry_points.txt +0 -0
  70. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client.egg-info/requires.txt +0 -0
  71. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/src/DLMS_SPODES_client.egg-info/top_level.txt +0 -0
  72. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/test/Firmwares/firmwares.dat +0 -0
  73. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/test/Firmwares/firmwares_1_2_11.dat +0 -0
  74. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/test/Firmwares/firmwares_1_7_2.dat +0 -0
  75. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/test/client_log.txt +0 -0
  76. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/test/config.toml +0 -0
  77. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/test/name2.csv +0 -0
  78. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/test/test_logger.py +0 -0
  79. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/test/test_services.py +0 -0
  80. {dlms_spodes_client-0.19.28 → dlms_spodes_client-0.19.30}/test//320/272/320/276/320/275/321/204/320/270/320/263/321/203/321/200/320/260/321/206/320/270/321/217 GSM.csv" +0 -0
@@ -0,0 +1,24 @@
1
+ {
2
+ // Use IntelliSense to learn about possible attributes.
3
+ // Hover to view descriptions of existing attributes.
4
+ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5
+ "version": "0.2.0",
6
+ "configurations": [
7
+ {
8
+ "name": "Debug test_SetBits",
9
+ "type": "debugpy",
10
+ "request": "launch",
11
+ "program": "-m",
12
+ "args": [
13
+ "unittest",
14
+ "test.test_Client.TestType.test_Session",
15
+ "-v"
16
+ ],
17
+ "console": "integratedTerminal",
18
+ "justMyCode": false,
19
+ "env": {
20
+ "PYTHONPATH": "${workspaceFolder}"
21
+ }
22
+ },
23
+ ]
24
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: DLMS_SPODES_client
3
- Version: 0.19.28
3
+ Version: 0.19.30
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
@@ -15,7 +15,7 @@ exclude = ["Types"]
15
15
 
16
16
  [project]
17
17
  name = "DLMS_SPODES_client"
18
- version = "0.19.28"
18
+ version = "0.19.30"
19
19
  requires-python = ">= 3.12"
20
20
  authors = [
21
21
  {name="Serj Kotilevski", email="youserj@outlook.com"}
@@ -928,7 +928,7 @@ class NonInit:
928
928
  class MapTypeCreator:
929
929
  adapter: Adapter
930
930
  lock: asyncio.Lock
931
- con: dict[[IDSAP], CreateType]
931
+ con: dict[IDSAP, CreateType]
932
932
 
933
933
  def __init__(self, adapter: Adapter):
934
934
  self.adapter = adapter
@@ -961,7 +961,7 @@ class MapTypeCreator:
961
961
  self.adapter.set_collection(res.value)
962
962
  res.value, err = res.value.copy().unpack()
963
963
  if err is not None:
964
- res.extend_err(err)
964
+ res.append_err(err)
965
965
  return res
966
966
 
967
967
 
@@ -1240,6 +1240,43 @@ class Write2(SimpleCopy, OK):
1240
1240
  return result.OK
1241
1241
 
1242
1242
 
1243
+ @dataclass(frozen=True)
1244
+ class SetBits(SimpleCopy, OK):
1245
+ """set bits by pattern"""
1246
+ par: Parameter
1247
+ pattern: dict[int, int]
1248
+ msg: str = "set bits"
1249
+
1250
+ async def exchange(self, c: Client) -> result.Ok | result.Error:
1251
+ if isinstance(res_obj := c.objects.par2obj(self.par), result.Error):
1252
+ return res_obj
1253
+ if isinstance(res_read := await Par2Data[cdt.Digital | cdt.BitString](self.par.attr).exchange(c), result.Error):
1254
+ return res_read
1255
+ data = res_read.value
1256
+ for el in self.par.elements():
1257
+ data = data[el]
1258
+ if isinstance(data, cdt.Digital):
1259
+ data_int = int(data)
1260
+ for pos, val in self.pattern.items():
1261
+ data_int = (data_int | (1 << pos)) if val else (data_int & ~(1 << pos))
1262
+ data.set(data_int)
1263
+ elif isinstance(data, cdt.BitString):
1264
+ for pos, val in self.pattern.items():
1265
+ try:
1266
+ data[pos] = val
1267
+ except IndexError as e:
1268
+ return result.Error.from_e(ValueError(f"can't set bit {pos} in {self.par}"))
1269
+ else:
1270
+ return result.Error.from_e(TypeError(f"{self.par} not available SetBits"))
1271
+ c.get_set_request_normal(
1272
+ obj=res_obj.value,
1273
+ attr_index=self.par.i,
1274
+ value=res_read.value.encoding)
1275
+ if isinstance(res_pdu := await c.read_data_block(), result.Error):
1276
+ return res_pdu
1277
+ return result.OK
1278
+
1279
+
1243
1280
  @dataclass
1244
1281
  @deprecated("use <WriteTranscript>")
1245
1282
  class WriteParValue(SimpleCopy, OK):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: DLMS_SPODES_client
3
- Version: 0.19.28
3
+ Version: 0.19.30
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
@@ -2,6 +2,7 @@
2
2
  README.md
3
3
  pyproject.toml
4
4
  .github/workflows/publish.yaml
5
+ .vscode/launch.json
5
6
  src/DLMS_SPODES_client/FCS16.py
6
7
  src/DLMS_SPODES_client/__init__.py
7
8
  src/DLMS_SPODES_client/client.py
@@ -64,6 +65,7 @@ src/DLMS_SPODES_client/gurux_dlms/enums/Task.py
64
65
  src/DLMS_SPODES_client/gurux_dlms/enums/VdeStateError.py
65
66
  src/DLMS_SPODES_client/gurux_dlms/enums/__init__.py
66
67
  src/DLMS_SPODES_client/gurux_dlms/internal/_GXCommon.py
68
+ test/__init__.py
67
69
  test/client_log.txt
68
70
  test/config.toml
69
71
  test/name2.csv
File without changes
@@ -20,8 +20,8 @@ from src.DLMS_SPODES_client import task
20
20
  task.get_adapter(adapter := xml50)
21
21
 
22
22
 
23
- port1 = "COM6"
24
- port2 = "COM5"
23
+ port1 = "COM5"
24
+ port2 = "COM6"
25
25
  # mac = "A0:6C:65:53:7D:86"
26
26
  mac = "5C:53:10:5A:E2:4B"
27
27
 
@@ -132,6 +132,16 @@ class TestType(unittest.TestCase):
132
132
  ))
133
133
  print(sess)
134
134
 
135
+ def test_SetBits(self):
136
+ self.start_coro(sess := Session(
137
+ c=c_Serial_HIGH,
138
+ tsk=task.SetBits(
139
+ par=Parameter.parse("0.0.96.3.20.255:3").append(0),
140
+ pattern={1: 1, 0: 0}
141
+ )
142
+ ))
143
+ print(sess)
144
+
135
145
  def test_WriteTime(self):
136
146
  self.start_coro(sess := Session(
137
147
  c=c_Serial_HIGH,