DLMS-SPODES-client 0.19.36__tar.gz → 0.19.37__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 (81) hide show
  1. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/.github/workflows/publish.yaml +43 -39
  2. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/.gitignore +8 -8
  3. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/.vscode/launch.json +23 -23
  4. {dlms_spodes_client-0.19.36/src/DLMS_SPODES_client.egg-info → dlms_spodes_client-0.19.37}/PKG-INFO +29 -29
  5. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/pyproject.toml +93 -93
  6. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/setup.cfg +4 -4
  7. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/FCS16.py +39 -39
  8. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/__init__.py +12 -12
  9. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/client.py +2093 -2093
  10. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_common/enums/TraceLevel.py +21 -21
  11. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/AesGcmParameter.py +37 -37
  12. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/CountType.py +16 -16
  13. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/GXByteBuffer.py +545 -545
  14. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/GXCiphering.py +196 -196
  15. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/GXDLMS.py +426 -426
  16. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSChippering.py +237 -237
  17. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSChipperingStream.py +977 -977
  18. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSConfirmedServiceError.py +90 -90
  19. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSException.py +139 -139
  20. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSLNParameters.py +33 -33
  21. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSSNParameters.py +21 -21
  22. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/GXDLMSSettings.py +254 -254
  23. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/GXReplyData.py +87 -87
  24. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/HdlcControlFrame.py +9 -9
  25. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/MBusCommand.py +8 -8
  26. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/MBusEncryptionMode.py +27 -27
  27. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/ResponseType.py +8 -8
  28. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/SetResponseType.py +29 -29
  29. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/_HDLCInfo.py +9 -9
  30. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/__init__.py +75 -75
  31. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/Access.py +12 -12
  32. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/ApplicationReference.py +14 -14
  33. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/Authentication.py +41 -41
  34. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/BerType.py +35 -35
  35. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/Command.py +285 -285
  36. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/Definition.py +9 -9
  37. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/ErrorCode.py +46 -46
  38. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/ExceptionServiceError.py +12 -12
  39. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/HardwareResource.py +10 -10
  40. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/HdlcFrameType.py +9 -9
  41. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/Initiate.py +10 -10
  42. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/LoadDataSet.py +13 -13
  43. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/ObjectType.py +306 -306
  44. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/Priority.py +7 -7
  45. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/RequestTypes.py +9 -9
  46. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/Security.py +14 -14
  47. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/Service.py +16 -16
  48. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/ServiceClass.py +9 -9
  49. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/ServiceError.py +8 -8
  50. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/Standard.py +18 -18
  51. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/StateError.py +7 -7
  52. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/Task.py +10 -10
  53. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/VdeStateError.py +10 -10
  54. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/enums/__init__.py +33 -33
  55. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_dlms/internal/_GXCommon.py +1673 -1673
  56. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/logger.py +56 -56
  57. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/services.py +90 -90
  58. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/session.py +363 -363
  59. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/settings.py +48 -48
  60. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/task.py +1884 -1884
  61. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37/src/DLMS_SPODES_client.egg-info}/PKG-INFO +29 -29
  62. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/test/client_log.txt +44588 -44588
  63. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/test/config.toml +1955 -1955
  64. dlms_spodes_client-0.19.37/test/name2.csv +2 -0
  65. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/test/test_Client.py +722 -722
  66. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/test/test_logger.py +6 -6
  67. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/test/test_services.py +10 -10
  68. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/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" +4 -4
  69. dlms_spodes_client-0.19.36/test/name2.csv +0 -2
  70. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/README.md +0 -0
  71. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/gurux_common/enums/__init__.py +0 -0
  72. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client/py.typed +0 -0
  73. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client.egg-info/SOURCES.txt +0 -0
  74. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client.egg-info/dependency_links.txt +0 -0
  75. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client.egg-info/entry_points.txt +0 -0
  76. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client.egg-info/requires.txt +0 -0
  77. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/src/DLMS_SPODES_client.egg-info/top_level.txt +0 -0
  78. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/test/Firmwares/firmwares.dat +0 -0
  79. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/test/Firmwares/firmwares_1_2_11.dat +0 -0
  80. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/test/Firmwares/firmwares_1_7_2.dat +0 -0
  81. {dlms_spodes_client-0.19.36 → dlms_spodes_client-0.19.37}/test/__init__.py +0 -0
@@ -1,39 +1,43 @@
1
- name: Publish Python Package to PyPI
2
-
3
- on:
4
- release:
5
- types: [published]
6
-
7
- jobs:
8
- deploy:
9
- runs-on: ubuntu-latest
10
- environment:
11
- name: pypi
12
- url: https://pypi.org/p/DLMS_SPODES_client
13
-
14
- permissions:
15
- id-token: write # Важно для Trusted Publishing
16
- contents: read
17
-
18
- steps:
19
- - uses: actions/checkout@v4
20
- with:
21
- submodules: true
22
- fetch-depth: 0 # Важно для setuptools-scm
23
-
24
- - name: Set up Python
25
- uses: actions/setup-python@v4
26
- with:
27
- python-version: "3.12"
28
-
29
- - name: Install dependencies
30
- run: |
31
- python -m pip install --upgrade pip
32
- pip install build setuptools wheel
33
-
34
- - name: Build package
35
- run: |
36
- python -m build
37
-
38
- - name: Publish to PyPI
39
- uses: pypa/gh-action-pypi-publish@release/v1
1
+ name: Publish Python Package to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ jobs:
9
+ deploy:
10
+ runs-on: ubuntu-latest
11
+ environment:
12
+ name: pypi
13
+ url: https://pypi.org/p/DLMS_SPODES_client
14
+
15
+ permissions:
16
+ id-token: write # Важно для Trusted Publishing
17
+ contents: read
18
+
19
+ steps:
20
+ - uses: actions/checkout@v4
21
+ with:
22
+ submodules: true
23
+ fetch-depth: 0 # Важно для setuptools-scm
24
+
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v4
27
+ with:
28
+ python-version: "3.12"
29
+
30
+ - name: Install dependencies
31
+ run: |
32
+ python -m pip install --upgrade pip
33
+ pip install build setuptools wheel
34
+
35
+ - name: Build package
36
+ run: |
37
+ python -m build
38
+
39
+ - name: Publish to PyPI
40
+ uses: pypa/gh-action-pypi-publish@release/v1
41
+ with:
42
+ attestations: true
43
+ verbose: true
@@ -1,8 +1,8 @@
1
- venv/
2
- build/
3
- dist/
4
- .idea/
5
- *.pyc
6
- *.egg-info
7
- client_log.txt
8
- Types/
1
+ venv/
2
+ build/
3
+ dist/
4
+ .idea/
5
+ *.pyc
6
+ *.egg-info
7
+ client_log.txt
8
+ Types/
@@ -1,24 +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
- ]
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
24
  }
@@ -1,29 +1,29 @@
1
- Metadata-Version: 2.4
2
- Name: DLMS_SPODES_client
3
- Version: 0.19.36
4
- Summary: dlms-spodes
5
- Author-email: Serj Kotilevski <youserj@outlook.com>
6
- Project-URL: Source, https://github.com/youserj/SPODESclient_prj
7
- Keywords: dlms,spodes,client
8
- Classifier: Programming Language :: Python :: 3
9
- Classifier: License :: OSI Approved :: MIT License
10
- Classifier: Operating System :: OS Independent
11
- Requires-Python: >=3.12
12
- Description-Content-Type: text/markdown
13
- Requires-Dist: pydantic>=2.11
14
- Requires-Dist: pycryptodomex>=3.22.0
15
- Requires-Dist: semver>=3.0
16
- Requires-Dist: StructResult<0.10,>=0.9.2
17
- Requires-Dist: DLMS-SPODES-communications<1.6,>=1.5.10
18
- Requires-Dist: DLMS_SPODES<0.88,>=0.87.12
19
- Requires-Dist: DLMSadapter<0.8,>=0.7.6
20
- Requires-Dist: DLMSCommunicationProfile<0.2,>=0.1.11
21
- Requires-Dist: numpy>=2.3.2
22
- Provides-Extra: dev
23
- Requires-Dist: mypy>=1.5.0; extra == "dev"
24
- Requires-Dist: ruff>=0.11; extra == "dev"
25
- Requires-Dist: types-requests; extra == "dev"
26
- Requires-Dist: build; extra == "dev"
27
- Requires-Dist: twine; extra == "dev"
28
-
29
- # SPODES-client
1
+ Metadata-Version: 2.4
2
+ Name: DLMS_SPODES_client
3
+ Version: 0.19.37
4
+ Summary: dlms-spodes
5
+ Author-email: Serj Kotilevski <youserj@outlook.com>
6
+ Project-URL: Source, https://github.com/youserj/SPODESclient_prj
7
+ Keywords: dlms,spodes,client
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: License :: OSI Approved :: MIT License
10
+ Classifier: Operating System :: OS Independent
11
+ Requires-Python: >=3.12
12
+ Description-Content-Type: text/markdown
13
+ Requires-Dist: pydantic>=2.11
14
+ Requires-Dist: pycryptodomex>=3.22.0
15
+ Requires-Dist: semver>=3.0
16
+ Requires-Dist: StructResult<0.10,>=0.9.2
17
+ Requires-Dist: DLMS-SPODES-communications<1.6,>=1.5.10
18
+ Requires-Dist: DLMS_SPODES<0.88,>=0.87.12
19
+ Requires-Dist: DLMSadapter<0.8,>=0.7.6
20
+ Requires-Dist: DLMSCommunicationProfile<0.2,>=0.1.11
21
+ Requires-Dist: numpy>=2.3.2
22
+ Provides-Extra: dev
23
+ Requires-Dist: mypy>=1.5.0; extra == "dev"
24
+ Requires-Dist: ruff>=0.11; extra == "dev"
25
+ Requires-Dist: types-requests; extra == "dev"
26
+ Requires-Dist: build; extra == "dev"
27
+ Requires-Dist: twine; extra == "dev"
28
+
29
+ # SPODES-client
@@ -1,93 +1,93 @@
1
- [build-system]
2
- #requires = ["hatchling"]
3
- #build-backend = "hatchling.build"
4
- requires = [
5
- "setuptools",
6
- "setuptools-scm"]
7
- build-backend = "setuptools.build_meta"
8
-
9
- [tool.setuptools]
10
- license-files = []
11
-
12
- [tool.setuptools.packages.find]
13
- where = ["src"]
14
- exclude = ["Types"]
15
-
16
- [project]
17
- name = "DLMS_SPODES_client"
18
- version = "0.19.36"
19
- requires-python = ">= 3.12"
20
- authors = [
21
- {name="Serj Kotilevski", email="youserj@outlook.com"}
22
- ]
23
- dependencies = [
24
- "pydantic>=2.11",
25
- "pycryptodomex >= 3.22.0",
26
- "semver >= 3.0",
27
- "StructResult >= 0.9.2, <0.10",
28
- "DLMS-SPODES-communications >= 1.5.10, <1.6",
29
- "DLMS_SPODES >= 0.87.12, < 0.88",
30
- "DLMSadapter >= 0.7.6, < 0.8",
31
- "DLMSCommunicationProfile >= 0.1.11, < 0.2",
32
- "numpy >= 2.3.2"
33
- ]
34
- description="dlms-spodes"
35
- readme = "README.md"
36
- keywords=['dlms', 'spodes', 'client']
37
- classifiers = [
38
- "Programming Language :: Python :: 3",
39
- "License :: OSI Approved :: MIT License",
40
- "Operating System :: OS Independent",
41
- ]
42
- [project.urls]
43
- Source = "https://github.com/youserj/SPODESclient_prj"
44
-
45
- [project.scripts]
46
- DLMS_SPODES_client = "DLMS_SPODES_client:call_script"
47
-
48
- [project.optional-dependencies]
49
- dev = [
50
- "mypy>=1.5.0",
51
- "ruff>=0.11",
52
- "types-requests",
53
- "build",
54
- "twine"
55
- ]
56
-
57
- [tool.mypy]
58
- exclude = [
59
- "build/*",
60
- ]
61
- strict = true
62
- ignore_missing_imports = true
63
- disallow_any_generics = true
64
- explicit_package_bases = true
65
- disallow_subclassing_any = true
66
-
67
- [tool.ruff]
68
- src = ["src"]
69
- line-length = 150
70
- preview = true
71
- exclude = [
72
- ".git",
73
- ".mypy_cache",
74
- ".tox",
75
- ".venv",
76
- "__pycache__",
77
- "build",
78
- "dist",
79
- "node_modules",
80
- "venv",
81
- ]
82
- include = [
83
- "src/*/*.py",
84
- "test/test_*.py"
85
- ]
86
-
87
- [tool.ruff.lint]
88
- ignore = ["SIM108"] # ternary
89
- select = [
90
- "E", "F", "W", "C", "Q", "ANN", "ARG", "DTZ", "FBT", "NPY", "PGH", "PIE", "SIM", "RET", "TYP", "TCH", "YTT",
91
- # "TRY",
92
- ]
93
- #extend-select = ["D"]
1
+ [build-system]
2
+ #requires = ["hatchling"]
3
+ #build-backend = "hatchling.build"
4
+ requires = [
5
+ "setuptools",
6
+ "setuptools-scm"]
7
+ build-backend = "setuptools.build_meta"
8
+
9
+ [tool.setuptools]
10
+ license-files = []
11
+
12
+ [tool.setuptools.packages.find]
13
+ where = ["src"]
14
+ exclude = ["Types"]
15
+
16
+ [project]
17
+ name = "DLMS_SPODES_client"
18
+ version = "0.19.37"
19
+ requires-python = ">= 3.12"
20
+ authors = [
21
+ {name="Serj Kotilevski", email="youserj@outlook.com"}
22
+ ]
23
+ dependencies = [
24
+ "pydantic>=2.11",
25
+ "pycryptodomex >= 3.22.0",
26
+ "semver >= 3.0",
27
+ "StructResult >= 0.9.2, <0.10",
28
+ "DLMS-SPODES-communications >= 1.5.10, <1.6",
29
+ "DLMS_SPODES >= 0.87.12, < 0.88",
30
+ "DLMSadapter >= 0.7.6, < 0.8",
31
+ "DLMSCommunicationProfile >= 0.1.11, < 0.2",
32
+ "numpy >= 2.3.2"
33
+ ]
34
+ description="dlms-spodes"
35
+ readme = "README.md"
36
+ keywords=['dlms', 'spodes', 'client']
37
+ classifiers = [
38
+ "Programming Language :: Python :: 3",
39
+ "License :: OSI Approved :: MIT License",
40
+ "Operating System :: OS Independent",
41
+ ]
42
+ [project.urls]
43
+ Source = "https://github.com/youserj/SPODESclient_prj"
44
+
45
+ [project.scripts]
46
+ DLMS_SPODES_client = "DLMS_SPODES_client:call_script"
47
+
48
+ [project.optional-dependencies]
49
+ dev = [
50
+ "mypy>=1.5.0",
51
+ "ruff>=0.11",
52
+ "types-requests",
53
+ "build",
54
+ "twine"
55
+ ]
56
+
57
+ [tool.mypy]
58
+ exclude = [
59
+ "build/*",
60
+ ]
61
+ strict = true
62
+ ignore_missing_imports = true
63
+ disallow_any_generics = true
64
+ explicit_package_bases = true
65
+ disallow_subclassing_any = true
66
+
67
+ [tool.ruff]
68
+ src = ["src"]
69
+ line-length = 150
70
+ preview = true
71
+ exclude = [
72
+ ".git",
73
+ ".mypy_cache",
74
+ ".tox",
75
+ ".venv",
76
+ "__pycache__",
77
+ "build",
78
+ "dist",
79
+ "node_modules",
80
+ "venv",
81
+ ]
82
+ include = [
83
+ "src/*/*.py",
84
+ "test/test_*.py"
85
+ ]
86
+
87
+ [tool.ruff.lint]
88
+ ignore = ["SIM108"] # ternary
89
+ select = [
90
+ "E", "F", "W", "C", "Q", "ANN", "ARG", "DTZ", "FBT", "NPY", "PGH", "PIE", "SIM", "RET", "TYP", "TCH", "YTT",
91
+ # "TRY",
92
+ ]
93
+ #extend-select = ["D"]
@@ -1,4 +1,4 @@
1
- [egg_info]
2
- tag_build =
3
- tag_date = 0
4
-
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -1,39 +1,39 @@
1
- from struct import pack
2
-
3
-
4
- __fcs16Table = (
5
- 0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF, 0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7,
6
- 0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E, 0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF, 0xE876,
7
- 0x2102, 0x308B, 0x0210, 0x1399, 0x6726, 0x76AF, 0x4434, 0x55BD, 0xAD4A, 0xBCC3, 0x8E58, 0x9FD1, 0xEB6E, 0xFAE7, 0xC87C, 0xD9F5,
8
- 0x3183, 0x200A, 0x1291, 0x0318, 0x77A7, 0x662E, 0x54B5, 0x453C, 0xBDCB, 0xAC42, 0x9ED9, 0x8F50, 0xFBEF, 0xEA66, 0xD8FD, 0xC974,
9
- 0x4204, 0x538D, 0x6116, 0x709F, 0x0420, 0x15A9, 0x2732, 0x36BB, 0xCE4C, 0xDFC5, 0xED5E, 0xFCD7, 0x8868, 0x99E1, 0xAB7A, 0xBAF3,
10
- 0x5285, 0x430C, 0x7197, 0x601E, 0x14A1, 0x0528, 0x37B3, 0x263A, 0xDECD, 0xCF44, 0xFDDF, 0xEC56, 0x98E9, 0x8960, 0xBBFB, 0xAA72,
11
- 0x6306, 0x728F, 0x4014, 0x519D, 0x2522, 0x34AB, 0x0630, 0x17B9, 0xEF4E, 0xFEC7, 0xCC5C, 0xDDD5, 0xA96A, 0xB8E3, 0x8A78, 0x9BF1,
12
- 0x7387, 0x620E, 0x5095, 0x411C, 0x35A3, 0x242A, 0x16B1, 0x0738, 0xFFCF, 0xEE46, 0xDCDD, 0xCD54, 0xB9EB, 0xA862, 0x9AF9, 0x8B70,
13
- 0x8408, 0x9581, 0xA71A, 0xB693, 0xC22C, 0xD3A5, 0xE13E, 0xF0B7, 0x0840, 0x19C9, 0x2B52, 0x3ADB, 0x4E64, 0x5FED, 0x6D76, 0x7CFF,
14
- 0x9489, 0x8500, 0xB79B, 0xA612, 0xD2AD, 0xC324, 0xF1BF, 0xE036, 0x18C1, 0x0948, 0x3BD3, 0x2A5A, 0x5EE5, 0x4F6C, 0x7DF7, 0x6C7E,
15
- 0xA50A, 0xB483, 0x8618, 0x9791, 0xE32E, 0xF2A7, 0xC03C, 0xD1B5, 0x2942, 0x38CB, 0x0A50, 0x1BD9, 0x6F66, 0x7EEF, 0x4C74, 0x5DFD,
16
- 0xB58B, 0xA402, 0x9699, 0x8710, 0xF3AF, 0xE226, 0xD0BD, 0xC134, 0x39C3, 0x284A, 0x1AD1, 0x0B58, 0x7FE7, 0x6E6E, 0x5CF5, 0x4D7C,
17
- 0xC60C, 0xD785, 0xE51E, 0xF497, 0x8028, 0x91A1, 0xA33A, 0xB2B3, 0x4A44, 0x5BCD, 0x6956, 0x78DF, 0x0C60, 0x1DE9, 0x2F72, 0x3EFB,
18
- 0xD68D, 0xC704, 0xF59F, 0xE416, 0x90A9, 0x8120, 0xB3BB, 0xA232, 0x5AC5, 0x4B4C, 0x79D7, 0x685E, 0x1CE1, 0x0D68, 0x3FF3, 0x2E7A,
19
- 0xE70E, 0xF687, 0xC41C, 0xD595, 0xA12A, 0xB0A3, 0x8238, 0x93B1, 0x6B46, 0x7ACF, 0x4854, 0x59DD, 0x2D62, 0x3CEB, 0x0E70, 0x1FF9,
20
- 0xF78F, 0xE606, 0xD49D, 0xC514, 0xB1AB, 0xA022, 0x92B9, 0x8330, 0x7BC7, 0x6A4E, 0x58D5, 0x495C, 0x3DE3, 0x2C6A, 0x1EF1, 0x0F78
21
- )
22
-
23
-
24
- def get_fcs16(buff, offset: int, count: int):
25
- fcs16 = 0xFFFF
26
- pos = offset
27
- while pos < offset + count:
28
- fcs16 = int((((fcs16 >> 8) ^ __fcs16Table[(fcs16 ^ buff[pos]) & 0xFF]) & 0xFFFF))
29
- pos += 1
30
- fcs16 = ~fcs16
31
- fcs16 = ((fcs16 >> 8) & 0xFF) | (fcs16 << 8)
32
- return fcs16 & 0xFFFF
33
-
34
-
35
- def get_fcs16ver2(buff: bytes):
36
- fcs16 = 0xFFFF
37
- for i in buff:
38
- fcs16 = ((fcs16 >> 8) ^ __fcs16Table[(fcs16 ^ i) & 0xFF]) & 0xFFFF
39
- return pack('H', ~fcs16 & 0xFFFF)
1
+ from struct import pack
2
+
3
+
4
+ __fcs16Table = (
5
+ 0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF, 0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7,
6
+ 0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E, 0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF, 0xE876,
7
+ 0x2102, 0x308B, 0x0210, 0x1399, 0x6726, 0x76AF, 0x4434, 0x55BD, 0xAD4A, 0xBCC3, 0x8E58, 0x9FD1, 0xEB6E, 0xFAE7, 0xC87C, 0xD9F5,
8
+ 0x3183, 0x200A, 0x1291, 0x0318, 0x77A7, 0x662E, 0x54B5, 0x453C, 0xBDCB, 0xAC42, 0x9ED9, 0x8F50, 0xFBEF, 0xEA66, 0xD8FD, 0xC974,
9
+ 0x4204, 0x538D, 0x6116, 0x709F, 0x0420, 0x15A9, 0x2732, 0x36BB, 0xCE4C, 0xDFC5, 0xED5E, 0xFCD7, 0x8868, 0x99E1, 0xAB7A, 0xBAF3,
10
+ 0x5285, 0x430C, 0x7197, 0x601E, 0x14A1, 0x0528, 0x37B3, 0x263A, 0xDECD, 0xCF44, 0xFDDF, 0xEC56, 0x98E9, 0x8960, 0xBBFB, 0xAA72,
11
+ 0x6306, 0x728F, 0x4014, 0x519D, 0x2522, 0x34AB, 0x0630, 0x17B9, 0xEF4E, 0xFEC7, 0xCC5C, 0xDDD5, 0xA96A, 0xB8E3, 0x8A78, 0x9BF1,
12
+ 0x7387, 0x620E, 0x5095, 0x411C, 0x35A3, 0x242A, 0x16B1, 0x0738, 0xFFCF, 0xEE46, 0xDCDD, 0xCD54, 0xB9EB, 0xA862, 0x9AF9, 0x8B70,
13
+ 0x8408, 0x9581, 0xA71A, 0xB693, 0xC22C, 0xD3A5, 0xE13E, 0xF0B7, 0x0840, 0x19C9, 0x2B52, 0x3ADB, 0x4E64, 0x5FED, 0x6D76, 0x7CFF,
14
+ 0x9489, 0x8500, 0xB79B, 0xA612, 0xD2AD, 0xC324, 0xF1BF, 0xE036, 0x18C1, 0x0948, 0x3BD3, 0x2A5A, 0x5EE5, 0x4F6C, 0x7DF7, 0x6C7E,
15
+ 0xA50A, 0xB483, 0x8618, 0x9791, 0xE32E, 0xF2A7, 0xC03C, 0xD1B5, 0x2942, 0x38CB, 0x0A50, 0x1BD9, 0x6F66, 0x7EEF, 0x4C74, 0x5DFD,
16
+ 0xB58B, 0xA402, 0x9699, 0x8710, 0xF3AF, 0xE226, 0xD0BD, 0xC134, 0x39C3, 0x284A, 0x1AD1, 0x0B58, 0x7FE7, 0x6E6E, 0x5CF5, 0x4D7C,
17
+ 0xC60C, 0xD785, 0xE51E, 0xF497, 0x8028, 0x91A1, 0xA33A, 0xB2B3, 0x4A44, 0x5BCD, 0x6956, 0x78DF, 0x0C60, 0x1DE9, 0x2F72, 0x3EFB,
18
+ 0xD68D, 0xC704, 0xF59F, 0xE416, 0x90A9, 0x8120, 0xB3BB, 0xA232, 0x5AC5, 0x4B4C, 0x79D7, 0x685E, 0x1CE1, 0x0D68, 0x3FF3, 0x2E7A,
19
+ 0xE70E, 0xF687, 0xC41C, 0xD595, 0xA12A, 0xB0A3, 0x8238, 0x93B1, 0x6B46, 0x7ACF, 0x4854, 0x59DD, 0x2D62, 0x3CEB, 0x0E70, 0x1FF9,
20
+ 0xF78F, 0xE606, 0xD49D, 0xC514, 0xB1AB, 0xA022, 0x92B9, 0x8330, 0x7BC7, 0x6A4E, 0x58D5, 0x495C, 0x3DE3, 0x2C6A, 0x1EF1, 0x0F78
21
+ )
22
+
23
+
24
+ def get_fcs16(buff, offset: int, count: int):
25
+ fcs16 = 0xFFFF
26
+ pos = offset
27
+ while pos < offset + count:
28
+ fcs16 = int((((fcs16 >> 8) ^ __fcs16Table[(fcs16 ^ buff[pos]) & 0xFF]) & 0xFFFF))
29
+ pos += 1
30
+ fcs16 = ~fcs16
31
+ fcs16 = ((fcs16 >> 8) & 0xFF) | (fcs16 << 8)
32
+ return fcs16 & 0xFFFF
33
+
34
+
35
+ def get_fcs16ver2(buff: bytes):
36
+ fcs16 = 0xFFFF
37
+ for i in buff:
38
+ fcs16 = ((fcs16 >> 8) ^ __fcs16Table[(fcs16 ^ i) & 0xFF]) & 0xFFFF
39
+ return pack('H', ~fcs16 & 0xFFFF)
@@ -1,12 +1,12 @@
1
- # import argparse
2
- import sys
3
-
4
-
5
- def call_script(args=sys.argv):
6
- for i, arg in enumerate(args):
7
- print(f'Arg #{i}: {arg}')
8
- # parser = argparse.ArgumentParser(description="hello")
9
- # parser.add_argument('target', type=str, help='the name of the target')
10
- # parser.add_argument('--end', dest='end', default="!",
11
- # help='sum the integers (default: find the max)')
12
- # args = parser.parse_args()
1
+ # import argparse
2
+ import sys
3
+
4
+
5
+ def call_script(args=sys.argv):
6
+ for i, arg in enumerate(args):
7
+ print(f'Arg #{i}: {arg}')
8
+ # parser = argparse.ArgumentParser(description="hello")
9
+ # parser.add_argument('target', type=str, help='the name of the target')
10
+ # parser.add_argument('--end', dest='end', default="!",
11
+ # help='sum the integers (default: find the max)')
12
+ # args = parser.parse_args()