DLMS-SPODES 0.87.2__tar.gz → 0.87.3__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 (174) hide show
  1. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/PKG-INFO +1 -1
  2. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/pyproject.toml +1 -1
  3. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/parameters.py +73 -2
  4. dlms_spodes-0.87.3/src/DLMS_SPODES/cosem_interface_classes/reports.py +70 -0
  5. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES.egg-info/PKG-INFO +1 -1
  6. dlms_spodes-0.87.2/src/DLMS_SPODES/cosem_interface_classes/reports.py +0 -72
  7. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/.gitignore +0 -0
  8. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/README.md +0 -0
  9. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/config.toml +0 -0
  10. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/setup.cfg +0 -0
  11. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/Values/EN/__init__.py +0 -0
  12. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/Values/EN/actors.py +0 -0
  13. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/Values/EN/relation_to_obis_names.py +0 -0
  14. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/Values/RU/__init__.py +0 -0
  15. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/Values/RU/actors.py +0 -0
  16. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/Values/RU/relation_to_obis_names.py +0 -0
  17. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/Values/__init__.py +0 -0
  18. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/__init__.py +0 -0
  19. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/configEN.ini +0 -0
  20. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/config_parser.py +0 -0
  21. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/__class_init__.py +0 -0
  22. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/__init__.py +0 -0
  23. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/a_parameter.py +0 -0
  24. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/activity_calendar.py +0 -0
  25. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/arbitrator.py +0 -0
  26. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/association_ln/__init__.py +0 -0
  27. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/association_ln/abstract.py +0 -0
  28. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/association_ln/authentication_mechanism_name.py +0 -0
  29. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/association_ln/mechanism_id.py +0 -0
  30. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/association_ln/method.py +0 -0
  31. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/association_ln/ver0.py +0 -0
  32. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/association_ln/ver1.py +0 -0
  33. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/association_ln/ver2.py +0 -0
  34. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/association_ln/ver3.py +0 -0
  35. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/association_sn/__init__.py +0 -0
  36. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/association_sn/ver0.py +0 -0
  37. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/attr_indexes.py +0 -0
  38. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/clock.py +0 -0
  39. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/collection.py +0 -0
  40. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/cosem_interface_class.py +0 -0
  41. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/data.py +0 -0
  42. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/demand_register/__init__.py +0 -0
  43. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/demand_register/ver0.py +0 -0
  44. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/disconnect_control.py +0 -0
  45. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/extended_register.py +0 -0
  46. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/gprs_modem_setup.py +0 -0
  47. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/gsm_diagnostic/__init__.py +0 -0
  48. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/gsm_diagnostic/ver0.py +0 -0
  49. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/gsm_diagnostic/ver1.py +0 -0
  50. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/gsm_diagnostic/ver2.py +0 -0
  51. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/iec_hdlc_setup/__init__.py +0 -0
  52. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/iec_hdlc_setup/ver0.py +0 -0
  53. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/iec_hdlc_setup/ver1.py +0 -0
  54. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/iec_local_port_setup.py +0 -0
  55. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/image_transfer/__init__.py +0 -0
  56. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/image_transfer/image_transfer_status.py +0 -0
  57. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/image_transfer/ver0.py +0 -0
  58. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/implementations/__init__.py +0 -0
  59. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/implementations/arbitrator.py +0 -0
  60. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/implementations/data.py +0 -0
  61. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/implementations/profile_generic.py +0 -0
  62. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/ipv4_setup.py +0 -0
  63. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/limiter.py +0 -0
  64. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/ln_pattern.py +0 -0
  65. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/modem_configuration/__init__.py +0 -0
  66. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/modem_configuration/ver0.py +0 -0
  67. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/modem_configuration/ver1.py +0 -0
  68. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/ntp_setup/__init__.py +0 -0
  69. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/ntp_setup/ver0.py +0 -0
  70. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/obis.py +0 -0
  71. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/overview.py +0 -0
  72. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/parameter.py +0 -0
  73. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/profile_generic/__init__.py +0 -0
  74. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/profile_generic/ver0.py +0 -0
  75. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/profile_generic/ver1.py +0 -0
  76. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/push_setup/__init__.py +0 -0
  77. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/push_setup/ver0.py +0 -0
  78. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/push_setup/ver1.py +0 -0
  79. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/push_setup/ver2.py +0 -0
  80. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/register.py +0 -0
  81. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/register_activation/__init__.py +0 -0
  82. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/register_activation/ver0.py +0 -0
  83. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/register_monitor.py +0 -0
  84. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/schedule.py +0 -0
  85. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/script_table.py +0 -0
  86. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/security_setup/__init__.py +0 -0
  87. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/security_setup/__pycache__/__init__.cpython-311.pyc +0 -0
  88. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/security_setup/ver0.py +0 -0
  89. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/security_setup/ver1.py +0 -0
  90. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/single_action_schedule.py +0 -0
  91. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/special_days_table.py +0 -0
  92. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_interface_classes/tcp_udp_setup.py +0 -0
  93. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/cosem_pdu.py +0 -0
  94. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/enums.py +0 -0
  95. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/exceptions.py +0 -0
  96. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/firmwares.py +0 -0
  97. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/hdlc/__init__.py +0 -0
  98. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/hdlc/frame.py +0 -0
  99. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/hdlc/sub_layer.py +0 -0
  100. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/literals.py +0 -0
  101. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/obis/__init__.py +0 -0
  102. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/obis/abstract_objects.py +0 -0
  103. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/obis/media_id.py +0 -0
  104. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/pardata.py +0 -0
  105. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/pdu_enums.py +0 -0
  106. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/py.typed +0 -0
  107. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/relation_to_OBIS.py +0 -0
  108. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/settings.py +0 -0
  109. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/__init__.py +0 -0
  110. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/choices.py +0 -0
  111. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/common_data_types.py +0 -0
  112. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/cosem_service_types.py +0 -0
  113. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/implementations/__init__.py +0 -0
  114. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/implementations/arrays.py +0 -0
  115. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/implementations/bitstrings.py +0 -0
  116. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/implementations/double_long_usingneds.py +0 -0
  117. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/implementations/enums.py +0 -0
  118. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/implementations/integers.py +0 -0
  119. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/implementations/long_unsigneds.py +0 -0
  120. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/implementations/octet_string.py +0 -0
  121. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/implementations/structs.py +0 -0
  122. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES/types/useful_types.py +0 -0
  123. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES.egg-info/SOURCES.txt +0 -0
  124. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES.egg-info/dependency_links.txt +0 -0
  125. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES.egg-info/requires.txt +0 -0
  126. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/DLMS_SPODES.egg-info/top_level.txt +0 -0
  127. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/src/__init__.py +0 -0
  128. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/__init__.py +0 -0
  129. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/collection_init.py +0 -0
  130. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/config.toml +0 -0
  131. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/config.zip +0 -0
  132. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/init_collection.py +0 -0
  133. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test.typ +0 -0
  134. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test.xml +0 -0
  135. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_ActivityCalendar.py +0 -0
  136. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_AssociationLN.py +0 -0
  137. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_COSEMInterfaceClass.py +0 -0
  138. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_Data.py +0 -0
  139. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_DemandRegister.py +0 -0
  140. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_DisconnectControl.py +0 -0
  141. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_DisplayReadoutProfile.py +0 -0
  142. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_GSMDiagnostic.py +0 -0
  143. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_IC.py +0 -0
  144. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_ImageTransfer.py +0 -0
  145. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_KPZ.py +0 -0
  146. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_LNPatterns.py +0 -0
  147. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_Limiter.py +0 -0
  148. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_NTPSetup.py +0 -0
  149. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_Parameter.py +0 -0
  150. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_ProfileGeneric.py +0 -0
  151. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_Register.py +0 -0
  152. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_RegisterActivation.py +0 -0
  153. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_RegisterMonitor.py +0 -0
  154. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_ScalerUnitType.py +0 -0
  155. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_Schedule.py +0 -0
  156. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_Structures.py +0 -0
  157. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_a_param.py +0 -0
  158. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_benchmark_create_obj.py +0 -0
  159. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_cdt.py +0 -0
  160. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_collection.py +0 -0
  161. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_config.py +0 -0
  162. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_electric_obj.py +0 -0
  163. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_enums.py +0 -0
  164. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_hdlc.py +0 -0
  165. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_overview.py +0 -0
  166. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_pars.py +0 -0
  167. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_report.py +0 -0
  168. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_save_type.typ +0 -0
  169. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_settings.py +0 -0
  170. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_to_xml.xml +0 -0
  171. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_to_xml2.xml +0 -0
  172. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_to_xml3.xml +0 -0
  173. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_to_xml4.xml +0 -0
  174. {dlms_spodes-0.87.2 → dlms_spodes-0.87.3}/test/test_userfulType.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: DLMS_SPODES
3
- Version: 0.87.2
3
+ Version: 0.87.3
4
4
  Summary: dlms-spodes
5
5
  Author-email: Serj Kotilevski <youserj@outlook.com>
6
6
  Project-URL: Source, https://github.com/youserj/DlmsSPODES-project
@@ -14,7 +14,7 @@ exclude = ["test","KPZ"]
14
14
 
15
15
  [project]
16
16
  name = "DLMS_SPODES"
17
- version = "0.87.2"
17
+ version = "0.87.3"
18
18
  authors = [
19
19
  {name="Serj Kotilevski", email="youserj@outlook.com"}
20
20
  ]
@@ -14,11 +14,11 @@ class Data(Parameter):
14
14
  class ActiveFirmwareIdentifier(Data):
15
15
 
16
16
  @classmethod
17
- def from_b(cls, b: int) -> "ActiveFirmwareIdentifier":
17
+ def from_b(cls, b: int = 0) -> "ActiveFirmwareIdentifier":
18
18
  return cls.parse(f"0.{b}.0.2.0.255")
19
19
 
20
20
 
21
- ACTIVE_FIRMWARE_IDENTIFIER_0 = ActiveFirmwareIdentifier.from_b(0)
21
+ ACTIVE_FIRMWARE_IDENTIFIER_0 = ActiveFirmwareIdentifier.from_b()
22
22
 
23
23
 
24
24
  @dataclass(frozen=True)
@@ -28,6 +28,77 @@ class Register(Data):
28
28
  return self.get_attr(3)
29
29
 
30
30
 
31
+ @dataclass(frozen=True)
32
+ class Clock(Parameter):
33
+ @classmethod
34
+ def from_be(cls, b: int = 0, e: int = 0) -> "Clock":
35
+ return cls.parse(f"0.{b}.1.0.{e}.255")
36
+
37
+ @property
38
+ def time(self) -> "Clock":
39
+ return self.get_attr(2)
40
+
41
+ @property
42
+ def time_zone(self) -> "Clock":
43
+ return self.get_attr(3)
44
+
45
+ @property
46
+ def status(self) -> "Clock":
47
+ return self.get_attr(4)
48
+
49
+ @property
50
+ def time_zone(self) -> "Clock":
51
+ return self.get_attr(3)
52
+
53
+ @property
54
+ def status(self) -> "Clock":
55
+ return self.get_attr(4)
56
+
57
+ @property
58
+ def daylight_savings_begin(self) -> "Clock":
59
+ return self.get_attr(5)
60
+
61
+ @property
62
+ def daylight_savings_end(self) -> "Clock":
63
+ return self.get_attr(6)
64
+
65
+ @property
66
+ def daylight_savings_deviation(self) -> "Clock":
67
+ return self.get_attr(7)
68
+
69
+ @property
70
+ def daylight_savings_enabled(self) -> "Clock":
71
+ return self.get_attr(8)
72
+
73
+ @property
74
+ def clock_base(self) -> "Clock":
75
+ return self.get_attr(9)
76
+
77
+ @property
78
+ def adjust_to_quarter(self) -> "Clock":
79
+ return self.get_meth(1)
80
+
81
+ @property
82
+ def adjust_to_measuring_period(self) -> "Clock":
83
+ return self.get_meth(2)
84
+
85
+ @property
86
+ def adjust_to_minute(self) -> "Clock":
87
+ return self.get_meth(3)
88
+
89
+ @property
90
+ def adjust_to_preset_time(self) -> "Clock":
91
+ return self.get_meth(4)
92
+
93
+ @property
94
+ def preset_adjusting_time(self) -> "Clock":
95
+ return self.get_meth(5)
96
+
97
+ @property
98
+ def shift_time(self) -> "Clock":
99
+ return self.get_meth(6)
100
+
101
+
31
102
  @dataclass(frozen=True)
32
103
  class DisconnectControl(Parameter):
33
104
 
@@ -0,0 +1,70 @@
1
+ from typing import Any, Iterable
2
+ from StructResult import result
3
+ from . import cosem_interface_class as ic
4
+ from ..types import cdt
5
+ from .parameter import Parameter
6
+ from ..cosem_interface_classes import collection
7
+ from ..config_parser import get_values
8
+ from ..settings import settings
9
+
10
+
11
+ def from_obj(
12
+ col: collection.Collection,
13
+ obj: ic.COSEMInterfaceClasses,
14
+ attr_index_par: tuple[int, ...]
15
+ ) -> result.SimpleOrError[str]:
16
+ if not hasattr(from_obj, "struct_pattern"):
17
+ from_obj.struct_pattern = dict(settings.report.struct)
18
+ ret: str = F"[{collection.get_name(obj.logical_name)}]\n"
19
+ for i in attr_index_par:
20
+ par = Parameter(obj.logical_name.contents).set_i(i)
21
+ if isinstance(res_data := col.par2data(par), result.Error):
22
+ return res_data
23
+ a_data = res_data.value
24
+ if isinstance(a_data, cdt.SimpleDataType):
25
+ rep = col.par2rep(par, a_data)
26
+ ret += F" {obj.get_attr_element(i)}: {rep.msg}{f" {rep.unit}" if rep.unit else ""}\n"
27
+ elif isinstance(a_data, cdt.ComplexDataType):
28
+ ret += F" [{obj.get_attr_element(i)}]\n"
29
+ stack: list[tuple[Any, Any]] = [("", iter(a_data))]
30
+ while stack:
31
+ name, value_it = stack[-1]
32
+ indent = F"{' ' * (len(stack) + 1)}"
33
+ data = next(value_it, None)
34
+ if data:
35
+ if not isinstance(name, str):
36
+ name = str(next(name))
37
+ if isinstance(data, cdt.Array):
38
+ ret += F"{indent}[{name}]\n"
39
+ stack.append(("*", iter(data)))
40
+ elif isinstance(data, cdt.Structure):
41
+ if (pattern := from_obj.struct_pattern.get(data.__class__.__name__)):
42
+ val = list(pattern)
43
+ val.reverse()
44
+ result_ = str()
45
+ while val:
46
+ match val.pop():
47
+ case "%":
48
+ par_ = val.pop()
49
+ index = int(val.pop() + val.pop())
50
+ match par_:
51
+ case "n":
52
+ result_ += str(data.ELEMENTS[index])
53
+ case "v":
54
+ result_ += str(data[index])
55
+ case err:
56
+ raise ValueError(F"unknown macros &{err}{index}")
57
+ case symbol:
58
+ result_ += symbol
59
+ ret += F"{indent}{result_}\n"
60
+ else:
61
+ if name=="":
62
+ ret += "\n"
63
+ else:
64
+ ret += F"{indent}[{name}]\n"
65
+ stack.append((iter(data.ELEMENTS), iter(data)))
66
+ else:
67
+ ret += F"{indent}{name}: {data}\n"
68
+ else:
69
+ stack.pop()
70
+ return result.Simple(ret)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: DLMS_SPODES
3
- Version: 0.87.2
3
+ Version: 0.87.3
4
4
  Summary: dlms-spodes
5
5
  Author-email: Serj Kotilevski <youserj@outlook.com>
6
6
  Project-URL: Source, https://github.com/youserj/DlmsSPODES-project
@@ -1,72 +0,0 @@
1
- from typing import Any
2
- from .collection import ic, cdt
3
- from ..cosem_interface_classes import collection
4
- from ..config_parser import get_values
5
-
6
-
7
- def get_obj_report(
8
- obj: ic.COSEMInterfaceClasses,
9
- attr_index_par: tuple[int | Any, ...]) -> str:
10
- struct_report: dict | None = get_values("DLMS", "report", "struct")
11
- ret = str()
12
- ret += F"[{collection.get_name(obj.logical_name)}]\n"
13
- for i in attr_index_par:
14
- if isinstance(i, int):
15
- pass
16
- else:
17
- i, par = i[0], i[1:]
18
- value = obj.get_attr(i)
19
- if isinstance(value, cdt.SimpleDataType):
20
- match obj, i:
21
- case collection.impl.data.DLMSDeviceIDObject(), 2: value = value.to_str()
22
- case _: pass
23
- if isinstance(value, cdt.OctetString):
24
- pass
25
- if hasattr(value, "report"):
26
- value = value.report
27
- ret += F" {obj.get_attr_element(i)}: {value}\n"
28
- elif isinstance(value, cdt.ComplexDataType):
29
- ret += F" [{obj.get_attr_element(i)}]\n"
30
- stack: list = [("", iter(value))]
31
- while stack:
32
- name, value_it = stack[-1]
33
- indent = F"{' '*(len(stack) + 1)}"
34
- value = next(value_it, None)
35
- if value:
36
- if not isinstance(name, str):
37
- name = next(name).NAME
38
- if isinstance(value, cdt.Array):
39
- ret += F"{indent}[{name}]\n"
40
- stack.append(("*", iter(value)))
41
- elif isinstance(value, cdt.Structure):
42
- if struct_report and (pattern := struct_report.get(value.__class__.__name__)):
43
- val = list(pattern)
44
- val.reverse()
45
- result = str()
46
- while val:
47
- i = val.pop()
48
- match i:
49
- case "%":
50
- par = val.pop()
51
- index = int(val.pop() + val.pop())
52
- match par:
53
- case "n":
54
- result += value.ELEMENTS[index].NAME
55
- case "v":
56
- result += str(value[index])
57
- case err:
58
- raise ValueError(F"unknown macros &{err}{index}")
59
- case symbol:
60
- result += symbol
61
- ret += F"{indent}{result}\n"
62
- else:
63
- if name == "":
64
- ret += "\n"
65
- else:
66
- ret += F"{indent}[{name}]\n"
67
- stack.append((iter(value.ELEMENTS), iter(value)))
68
- else:
69
- ret += F"{indent}{name}: {value}\n"
70
- else:
71
- stack.pop()
72
- return ret
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes