PyAutomationIO 2.0.7__tar.gz → 2.0.9__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 (183) hide show
  1. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/PKG-INFO +1 -1
  2. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/PyAutomationIO.egg-info/PKG-INFO +1 -1
  3. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/PyAutomationIO.egg-info/SOURCES.txt +2 -1
  4. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/core.py +82 -2
  5. pyautomationio-2.0.7/automation/hmi/assets/index-Bx0fMYcl.js → pyautomationio-2.0.9/automation/hmi/assets/index-BfMTD6T9.js +169 -169
  6. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/index.html +1 -1
  7. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/managers/opcua_client.py +241 -7
  8. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/opcua/resources/clients.py +101 -2
  9. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/opcua/models.py +443 -1
  10. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/state_machine.py +16 -6
  11. pyautomationio-2.0.9/automation/tests/test_opcua_serialization.py +43 -0
  12. pyautomationio-2.0.9/version.py +2 -0
  13. pyautomationio-2.0.7/version.py +0 -2
  14. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/LICENSE +0 -0
  15. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/MANIFEST.in +0 -0
  16. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/PyAutomationIO.egg-info/dependency_links.txt +0 -0
  17. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/PyAutomationIO.egg-info/requires.txt +0 -0
  18. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/PyAutomationIO.egg-info/top_level.txt +0 -0
  19. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/README.md +0 -0
  20. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/__init__.py +0 -0
  21. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/alarms/__init__.py +0 -0
  22. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/alarms/states.py +0 -0
  23. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/alarms/trigger.py +0 -0
  24. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/buffer.py +0 -0
  25. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/dbmodels/__init__.py +0 -0
  26. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/dbmodels/alarms.py +0 -0
  27. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/dbmodels/core.py +0 -0
  28. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/dbmodels/events.py +0 -0
  29. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/dbmodels/logs.py +0 -0
  30. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/dbmodels/machines.py +0 -0
  31. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/dbmodels/opcua.py +0 -0
  32. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/dbmodels/opcua_server.py +0 -0
  33. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/dbmodels/tags.py +0 -0
  34. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/dbmodels/users.py +0 -0
  35. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/extensions/__init__.py +0 -0
  36. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/extensions/api.py +0 -0
  37. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/extensions/cors.py +0 -0
  38. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/filter/__init__.py +0 -0
  39. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/assets/bootstrap-icons-BeopsB42.woff +0 -0
  40. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/assets/bootstrap-icons-mSm7cUeB.woff2 +0 -0
  41. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/assets/fa-brands-400-D1LuMI3I.ttf +0 -0
  42. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/assets/fa-brands-400-D_cYUPeE.woff2 +0 -0
  43. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/assets/fa-regular-400-BjRzuEpd.woff2 +0 -0
  44. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/assets/fa-regular-400-DZaxPHgR.ttf +0 -0
  45. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/assets/fa-solid-900-CTAAxXor.woff2 +0 -0
  46. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/assets/fa-solid-900-D0aA9rwL.ttf +0 -0
  47. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/assets/fa-v4compatibility-C9RhG_FT.woff2 +0 -0
  48. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/assets/fa-v4compatibility-CCth-dXg.ttf +0 -0
  49. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/assets/index-fe9Q2n8A.css +0 -0
  50. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/industrial_pallete_icons/90/302/260 curve 2.svg" +0 -0
  51. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/industrial_pallete_icons/Analog gauge.svg +0 -0
  52. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/industrial_pallete_icons/Cool pump.svg +0 -0
  53. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/industrial_pallete_icons/Hand valve 4.svg +0 -0
  54. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/industrial_pallete_icons/Mass flowmeter.svg +0 -0
  55. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/industrial_pallete_icons/Short horizontal pipe.svg +0 -0
  56. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/hmi/industrial_pallete_icons/Tank 16.svg +0 -0
  57. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/iad/__init__.py +0 -0
  58. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/iad/frozen_data.py +0 -0
  59. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/iad/out_of_range.py +0 -0
  60. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/iad/outliers.py +0 -0
  61. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/logger/__init__.py +0 -0
  62. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/logger/alarms.py +0 -0
  63. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/logger/core.py +0 -0
  64. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/logger/datalogger.py +0 -0
  65. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/logger/events.py +0 -0
  66. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/logger/logdict.py +0 -0
  67. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/logger/logs.py +0 -0
  68. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/logger/machines.py +0 -0
  69. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/logger/opcua_server.py +0 -0
  70. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/logger/users.py +0 -0
  71. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/managers/__init__.py +0 -0
  72. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/managers/alarms.py +0 -0
  73. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/managers/db.py +0 -0
  74. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/managers/state_machine.py +0 -0
  75. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/models.py +0 -0
  76. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/__init__.py +0 -0
  77. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/alarms/__init__.py +0 -0
  78. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/alarms/resources/__init__.py +0 -0
  79. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/alarms/resources/alarms.py +0 -0
  80. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/alarms/resources/summary.py +0 -0
  81. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/database/__init__.py +0 -0
  82. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/database/resources/__init__.py +0 -0
  83. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/database/resources/database.py +0 -0
  84. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/events/__init__.py +0 -0
  85. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/events/resources/__init__.py +0 -0
  86. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/events/resources/events.py +0 -0
  87. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/events/resources/logs.py +0 -0
  88. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/health/__init__.py +0 -0
  89. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/health/resources/__init__.py +0 -0
  90. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/health/resources/health.py +0 -0
  91. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/machines/__init__.py +0 -0
  92. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/machines/resources/__init__.py +0 -0
  93. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/machines/resources/machines.py +0 -0
  94. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/opcua/__init__.py +0 -0
  95. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/opcua/resources/__init__.py +0 -0
  96. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/opcua/resources/server.py +0 -0
  97. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/settings/__init__.py +0 -0
  98. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/settings/resources/__init__.py +0 -0
  99. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/settings/resources/settings.py +0 -0
  100. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/tags/__init__.py +0 -0
  101. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/tags/resources/__init__.py +0 -0
  102. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/tags/resources/tags.py +0 -0
  103. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/users/__init__.py +0 -0
  104. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/users/resources/__init__.py +0 -0
  105. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/users/resources/models/__init__.py +0 -0
  106. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/users/resources/models/roles.py +0 -0
  107. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/users/resources/models/users.py +0 -0
  108. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/users/resources/roles.py +0 -0
  109. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/users/resources/users.py +0 -0
  110. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/users/roles.py +0 -0
  111. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/modules/users/users.py +0 -0
  112. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/opcua/__init__.py +0 -0
  113. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/opcua/subscription.py +0 -0
  114. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/__init__.py +0 -0
  115. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/alarms.py +0 -0
  116. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/alarms_history.py +0 -0
  117. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/assets/styles.css +0 -0
  118. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/callbacks/__init__.py +0 -0
  119. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/callbacks/alarms.py +0 -0
  120. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/callbacks/alarms_summary.py +0 -0
  121. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/callbacks/db.py +0 -0
  122. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/callbacks/filter.py +0 -0
  123. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/callbacks/machines.py +0 -0
  124. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/callbacks/machines_detailed.py +0 -0
  125. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/callbacks/opcua.py +0 -0
  126. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/callbacks/opcua_server.py +0 -0
  127. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/callbacks/tags.py +0 -0
  128. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/callbacks/trends.py +0 -0
  129. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/communications.py +0 -0
  130. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/components/__init__.py +0 -0
  131. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/components/alarms.py +0 -0
  132. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/components/alarms_summary.py +0 -0
  133. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/components/database.py +0 -0
  134. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/components/gaussian_filter.py +0 -0
  135. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/components/machines.py +0 -0
  136. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/components/opcua.py +0 -0
  137. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/components/opcua_server.py +0 -0
  138. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/components/tags.py +0 -0
  139. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/components/trends.py +0 -0
  140. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/database.py +0 -0
  141. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/filter.py +0 -0
  142. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/machines.py +0 -0
  143. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/machines_detailed.py +0 -0
  144. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/main.py +0 -0
  145. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/opcua_server.py +0 -0
  146. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/tags.py +0 -0
  147. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/pages/trends.py +0 -0
  148. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/singleton.py +0 -0
  149. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/tags/__init__.py +0 -0
  150. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/tags/cvt.py +0 -0
  151. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/tags/filter.py +0 -0
  152. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/tags/tag.py +0 -0
  153. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/tests/__init__.py +0 -0
  154. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/tests/test_alarms.py +0 -0
  155. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/tests/test_core.py +0 -0
  156. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/tests/test_unit.py +0 -0
  157. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/tests/test_user.py +0 -0
  158. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/utils/__init__.py +0 -0
  159. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/utils/decorators.py +0 -0
  160. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/utils/observer.py +0 -0
  161. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/utils/units.py +0 -0
  162. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/__init__.py +0 -0
  163. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/adimentional.py +0 -0
  164. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/current.py +0 -0
  165. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/density.py +0 -0
  166. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/eng_time.py +0 -0
  167. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/force.py +0 -0
  168. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/length.py +0 -0
  169. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/mass.py +0 -0
  170. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/mass_flow.py +0 -0
  171. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/percentage.py +0 -0
  172. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/power.py +0 -0
  173. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/pressure.py +0 -0
  174. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/temperature.py +0 -0
  175. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/volume.py +0 -0
  176. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/variables/volumetric_flow.py +0 -0
  177. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/workers/__init__.py +0 -0
  178. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/workers/logger.py +0 -0
  179. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/workers/state_machine.py +0 -0
  180. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/automation/workers/worker.py +0 -0
  181. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/requirements.txt +0 -0
  182. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/setup.cfg +0 -0
  183. {pyautomationio-2.0.7 → pyautomationio-2.0.9}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyAutomationIO
3
- Version: 2.0.7
3
+ Version: 2.0.9
4
4
  Summary: A python framework to develop automation industrial processes applications and Artificial Intelligence applications for the industrial field
5
5
  Home-page: https://github.com/know-ai/PyAutomation
6
6
  Author: KnowAI
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: PyAutomationIO
3
- Version: 2.0.7
3
+ Version: 2.0.9
4
4
  Summary: A python framework to develop automation industrial processes applications and Artificial Intelligence applications for the industrial field
5
5
  Home-page: https://github.com/know-ai/PyAutomation
6
6
  Author: KnowAI
@@ -43,7 +43,7 @@ automation/hmi/assets/fa-solid-900-CTAAxXor.woff2
43
43
  automation/hmi/assets/fa-solid-900-D0aA9rwL.ttf
44
44
  automation/hmi/assets/fa-v4compatibility-C9RhG_FT.woff2
45
45
  automation/hmi/assets/fa-v4compatibility-CCth-dXg.ttf
46
- automation/hmi/assets/index-Bx0fMYcl.js
46
+ automation/hmi/assets/index-BfMTD6T9.js
47
47
  automation/hmi/assets/index-fe9Q2n8A.css
48
48
  automation/hmi/industrial_pallete_icons/90° curve 2.svg
49
49
  automation/hmi/industrial_pallete_icons/Analog gauge.svg
@@ -152,6 +152,7 @@ automation/tags/tag.py
152
152
  automation/tests/__init__.py
153
153
  automation/tests/test_alarms.py
154
154
  automation/tests/test_core.py
155
+ automation/tests/test_opcua_serialization.py
155
156
  automation/tests/test_unit.py
156
157
  automation/tests/test_user.py
157
158
  automation/utils/__init__.py
@@ -1,4 +1,5 @@
1
1
  import sys, logging, json, os, jwt, requests, urllib3, secrets
2
+ import builtins as _builtins
2
3
  from logging.handlers import RotatingFileHandler
3
4
  from math import ceil
4
5
  from datetime import datetime, timezone
@@ -39,6 +40,22 @@ from flask import Flask
39
40
  # from .pages.callbacks import init_callbacks
40
41
  # import dash_bootstrap_components as dbc
41
42
 
43
+ # ---------------------------------------------------------------------------
44
+ # NOTE (tests/doctests):
45
+ # Este módulo imprime mensajes coloreados con `print(...)` en varios métodos
46
+ # (p.ej. connect_to_db/safe_start/load_opcua_clients_from_db). Eso es útil
47
+ # en ejecución interactiva, pero rompe doctests porque el output no es
48
+ # determinista (timestamps) y muchos ejemplos "Expected nothing".
49
+ #
50
+ # Para poder silenciar el output en tests, se permite deshabilitar TODO print
51
+ # de este módulo con:
52
+ # AUTOMATION_CONSOLE_LOGS=0
53
+ # ---------------------------------------------------------------------------
54
+ def print(*args, **kwargs): # type: ignore[override]
55
+ if str(os.environ.get("AUTOMATION_CONSOLE_LOGS", "1")).lower() in ("0", "false", "no", "off"):
56
+ return None
57
+ return _builtins.print(*args, **kwargs)
58
+
42
59
 
43
60
  class PyAutomation(Singleton):
44
61
  r"""
@@ -1963,7 +1980,16 @@ class PyAutomation(Singleton):
1963
1980
  return self.opcua_client_manager.get_node_attributes(client_name=client_name, namespaces=namespaces)
1964
1981
 
1965
1982
  @logging_error_handler
1966
- def get_opcua_tree(self, client_name:str):
1983
+ def get_opcua_tree(
1984
+ self,
1985
+ client_name: str,
1986
+ *,
1987
+ mode: str = "generic",
1988
+ max_depth: int = 10,
1989
+ max_nodes: int = 50_000,
1990
+ include_properties: bool = True,
1991
+ include_property_values: bool = False,
1992
+ ):
1967
1993
  r"""
1968
1994
  Retrieves the hierarchical node tree structure from a connected OPC UA server.
1969
1995
 
@@ -1987,7 +2013,61 @@ class PyAutomation(Singleton):
1987
2013
 
1988
2014
  ```
1989
2015
  """
1990
- return self.opcua_client_manager.get_opcua_tree(client_name=client_name)
2016
+ return self.opcua_client_manager.get_opcua_tree(
2017
+ client_name=client_name,
2018
+ mode=mode,
2019
+ max_depth=max_depth,
2020
+ max_nodes=max_nodes,
2021
+ include_properties=include_properties,
2022
+ include_property_values=include_property_values,
2023
+ )
2024
+
2025
+ @logging_error_handler
2026
+ def get_opcua_tree_children(
2027
+ self,
2028
+ client_name: str,
2029
+ node_id: str,
2030
+ *,
2031
+ mode: str = "generic",
2032
+ max_nodes: int = 5_000,
2033
+ include_properties: bool = True,
2034
+ include_property_values: bool = False,
2035
+ fallback_to_legacy: bool = True,
2036
+ ):
2037
+ """
2038
+ Devuelve los hijos directos de un NodeId (lazy-loading), para expandir carpetas profundas
2039
+ desde el HMI sin pedir todo el árbol.
2040
+ """
2041
+ return self.opcua_client_manager.get_opcua_tree_children(
2042
+ client_name=client_name,
2043
+ node_id=node_id,
2044
+ mode=mode,
2045
+ max_nodes=max_nodes,
2046
+ include_properties=include_properties,
2047
+ include_property_values=include_property_values,
2048
+ fallback_to_legacy=fallback_to_legacy,
2049
+ )
2050
+
2051
+ @logging_error_handler
2052
+ def get_opcua_variables(
2053
+ self,
2054
+ client_name: str,
2055
+ *,
2056
+ mode: str = "generic",
2057
+ max_depth: int = 20,
2058
+ max_nodes: int = 50_000,
2059
+ fallback_to_legacy: bool = True,
2060
+ ):
2061
+ """
2062
+ Devuelve SOLO Variables del servidor OPC UA (para dropdowns de Tags).
2063
+ """
2064
+ return self.opcua_client_manager.get_opcua_variables(
2065
+ client_name=client_name,
2066
+ mode=mode,
2067
+ max_depth=max_depth,
2068
+ max_nodes=max_nodes,
2069
+ fallback_to_legacy=fallback_to_legacy,
2070
+ )
1991
2071
 
1992
2072
  @logging_error_handler
1993
2073
  @validate_types(client_name=str, host=str|type(None), port=int|type(None), output=(bool, str|dict))