onvif-python 0.4.1__tar.gz → 0.4.2__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 (155) hide show
  1. {onvif_python-0.4.1/onvif_python.egg-info → onvif_python-0.4.2}/PKG-INFO +5 -2
  2. {onvif_python-0.4.1 → onvif_python-0.4.2}/README.md +1 -1
  3. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/cli/helpers/discovery.py +1 -1
  4. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/cli/helpers/messages.py +1 -1
  5. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/cli/helpers/products.py +1 -1
  6. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/cli/interactive.py +33 -27
  7. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/cli/utils.py +1 -1
  8. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/db/products.db +1 -1
  9. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/meta.py +1 -1
  10. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/utils/wsdl.py +4 -1
  11. {onvif_python-0.4.1 → onvif_python-0.4.2/onvif_python.egg-info}/PKG-INFO +5 -2
  12. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif_python.egg-info/SOURCES.txt +0 -1
  13. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif_python.egg-info/requires.txt +3 -0
  14. {onvif_python-0.4.1 → onvif_python-0.4.2}/pyproject.toml +4 -2
  15. {onvif_python-0.4.1 → onvif_python-0.4.2}/tests/test_core.py +2 -4
  16. onvif_python-0.4.1/setup.py +0 -5
  17. {onvif_python-0.4.1 → onvif_python-0.4.2}/LICENSE.md +0 -0
  18. {onvif_python-0.4.1 → onvif_python-0.4.2}/MANIFEST.in +0 -0
  19. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/__init__.py +0 -0
  20. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/cli/__init__.py +0 -0
  21. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/cli/__main__.py +0 -0
  22. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/cli/helpers/__init__.py +0 -0
  23. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/cli/helpers/execution.py +0 -0
  24. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/cli/helpers/files.py +0 -0
  25. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/cli/helpers/wsdl_parser.py +0 -0
  26. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/cli/main.py +0 -0
  27. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/client.py +0 -0
  28. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/db/companies.db +0 -0
  29. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/operator.py +0 -0
  30. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/__init__.py +0 -0
  31. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/accesscontrol.py +0 -0
  32. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/accessrules.py +0 -0
  33. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/actionengine.py +0 -0
  34. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/analytics/__init__.py +0 -0
  35. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/analytics/analytics.py +0 -0
  36. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/analytics/ruleengine.py +0 -0
  37. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/analyticsdevice.py +0 -0
  38. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/appmgmt.py +0 -0
  39. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/authenticationbehavior.py +0 -0
  40. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/credential.py +0 -0
  41. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/deviceio.py +0 -0
  42. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/devicemgmt.py +0 -0
  43. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/display.py +0 -0
  44. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/doorcontrol.py +0 -0
  45. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/events/__init__.py +0 -0
  46. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/events/events.py +0 -0
  47. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/events/notification.py +0 -0
  48. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/events/pausable_subscription.py +0 -0
  49. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/events/pullpoint.py +0 -0
  50. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/events/subscription.py +0 -0
  51. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/imaging.py +0 -0
  52. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/media.py +0 -0
  53. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/media2.py +0 -0
  54. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/provisioning.py +0 -0
  55. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/ptz.py +0 -0
  56. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/receiver.py +0 -0
  57. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/recording.py +0 -0
  58. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/replay.py +0 -0
  59. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/schedule.py +0 -0
  60. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/search.py +0 -0
  61. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/security/__init__.py +0 -0
  62. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/security/advancedsecurity.py +0 -0
  63. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/security/authorizationserver.py +0 -0
  64. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/security/dot1x.py +0 -0
  65. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/security/jwt.py +0 -0
  66. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/security/keystore.py +0 -0
  67. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/security/mediasigning.py +0 -0
  68. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/security/tlsserver.py +0 -0
  69. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/thermal.py +0 -0
  70. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/services/uplink.py +0 -0
  71. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/utils/__init__.py +0 -0
  72. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/utils/discovery.py +0 -0
  73. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/utils/error_handlers.py +0 -0
  74. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/utils/exceptions.py +0 -0
  75. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/utils/plugins.py +0 -0
  76. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/utils/service.py +0 -0
  77. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/utils/zeep.py +0 -0
  78. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/LICENSE.md +0 -0
  79. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/schema/common/b-2.xsd +0 -0
  80. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/schema/common/bf-2.xsd +0 -0
  81. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/schema/common/bw-2.wsdl +0 -0
  82. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/schema/common/include +0 -0
  83. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/schema/common/mpqf.xsd +0 -0
  84. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/schema/common/r-2.xsd +0 -0
  85. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/schema/common/rw-2.wsdl +0 -0
  86. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/schema/common/soap-envelope +0 -0
  87. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/schema/common/t-1.xsd +0 -0
  88. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/schema/common/ws-addr.xsd +0 -0
  89. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/schema/common/xml.xsd +0 -0
  90. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/schema/common/xmlmime +0 -0
  91. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/accesscontrol/wsdl/index.html +0 -0
  92. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/accessrules/wsdl/accessrules.wsdl +0 -0
  93. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/accessrules/wsdl/index.html +0 -0
  94. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/actionengine.wsdl +0 -0
  95. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl +0 -0
  96. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/advancedsecurity/wsdl/index.html +0 -0
  97. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/analyticsdevice.wsdl +0 -0
  98. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl +0 -0
  99. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/appmgmt/wsdl/index.html +0 -0
  100. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/authenticationbehavior/wsdl/authenticationbehavior.wsdl +0 -0
  101. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/authenticationbehavior/wsdl/index.html +0 -0
  102. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/credential/wsdl/credential.wsdl +0 -0
  103. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/credential/wsdl/index.html +0 -0
  104. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/device/wsdl/devicemgmt.wsdl +0 -0
  105. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/deviceio.wsdl +0 -0
  106. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/display/display.wsdl +0 -0
  107. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/display/wsdl/index.htm +0 -0
  108. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/display.wsdl +0 -0
  109. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/doorcontrol/wsdl/index.html +0 -0
  110. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/events/wsdl/bw-2-vs-mod.wsdl +0 -0
  111. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/events/wsdl/event-vs.wsdl +0 -0
  112. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/events/wsdl/event.wsdl +0 -0
  113. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/events/wsdl/index.html +0 -0
  114. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/federatedsearch.wsdl +0 -0
  115. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/media/wsdl/media.wsdl +0 -0
  116. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/pacs/accesscontrol.wsdl +0 -0
  117. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/pacs/doorcontrol.wsdl +0 -0
  118. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/pacs/types.xsd +0 -0
  119. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/provisioning/wsdl/provisioning.wsdl +0 -0
  120. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/receiver.wsdl +0 -0
  121. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/recording.wsdl +0 -0
  122. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/replay.wsdl +0 -0
  123. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/schedule/wsdl/index.html +0 -0
  124. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/schedule/wsdl/schedule.wsdl +0 -0
  125. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/schema/common.xsd +0 -0
  126. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/schema/metadatastream.xsd +0 -0
  127. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/schema/onvif.xsd +0 -0
  128. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/search.wsdl +0 -0
  129. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/thermal/wsdl/index.html +0 -0
  130. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/thermal/wsdl/thermal.wsdl +0 -0
  131. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/topics/topicns.xml +0 -0
  132. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/uplink/wsdl/index.html +0 -0
  133. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver10/uplink/wsdl/uplink.wsdl +0 -0
  134. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/analytics/humanbody.xsd +0 -0
  135. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/analytics/humanface.xsd +0 -0
  136. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/analytics/index.html +0 -0
  137. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/analytics/radiometry.xsd +0 -0
  138. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/analytics/rules.xsd +0 -0
  139. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/analytics/wsdl/analytics.wsdl +0 -0
  140. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/analytics/wsdl/index.html +0 -0
  141. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/imaging/wsdl/imaging.wsdl +0 -0
  142. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/media/wsdl/index.html +0 -0
  143. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/media/wsdl/media.wsdl +0 -0
  144. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/ptz/wsdl/ptz.wsdl +0 -0
  145. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/util/federated_search_documentation.html +0 -0
  146. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/util/fedsearch-docu-viewer.xsl +0 -0
  147. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/util/onvif-wsdl-viewer.xsl +0 -0
  148. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif/wsdl/ver20/util/operationIndex.html +0 -0
  149. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif_python.egg-info/dependency_links.txt +0 -0
  150. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif_python.egg-info/entry_points.txt +0 -0
  151. {onvif_python-0.4.1 → onvif_python-0.4.2}/onvif_python.egg-info/top_level.txt +0 -0
  152. {onvif_python-0.4.1 → onvif_python-0.4.2}/setup.cfg +0 -0
  153. {onvif_python-0.4.1 → onvif_python-0.4.2}/tests/test_client.py +0 -0
  154. {onvif_python-0.4.1 → onvif_python-0.4.2}/tests/test_error_handlers.py +0 -0
  155. {onvif_python-0.4.1 → onvif_python-0.4.2}/tests/test_exceptions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: onvif-python
3
- Version: 0.4.1
3
+ Version: 0.4.2
4
4
  Summary: A modern Python library for ONVIF-compliant devices
5
5
  Author-email: Nirsimetri Technologies® <open@nirsimetri.com>
6
6
  Maintainer: Kaburagi
@@ -42,6 +42,9 @@ Requires-Dist: mypy; extra == "dev"
42
42
  Requires-Dist: isort; extra == "dev"
43
43
  Requires-Dist: pylint; extra == "dev"
44
44
  Requires-Dist: docformatter; extra == "dev"
45
+ Requires-Dist: lxml-stubs; extra == "dev"
46
+ Requires-Dist: types-setuptools; extra == "dev"
47
+ Requires-Dist: types-requests; extra == "dev"
45
48
  Provides-Extra: docs
46
49
  Requires-Dist: mkdocs-material; extra == "docs"
47
50
  Requires-Dist: mkdocstrings[python]; extra == "docs"
@@ -52,7 +55,7 @@ Dynamic: license-file
52
55
 
53
56
  <div align="center">
54
57
  <a href="https://app.codacy.com/gh/nirsimetri/onvif-python/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade"><img src="https://img.shields.io/codacy/grade/bff08a94e4d447b690cea49c6594826d?style=plastic&logo=codacy&label=Code%20Quality"/></a>
55
- <a href="https://pypi.org/project/onvif-python/"><img alt="PyPI Version" src="https://img.shields.io/badge/Version-0.4.1-orange?logo=python&logoColor=white&color=yellow&style=plastic"></a>
58
+ <a href="https://pypi.org/project/onvif-python/"><img alt="PyPI Version" src="https://img.shields.io/badge/Version-0.4.2-orange?logo=python&logoColor=white&color=yellow&style=plastic"></a>
56
59
  <a href="https://pepy.tech/projects/onvif-python"><img alt="Pepy Total Downloads" src="https://img.shields.io/pepy/dt/onvif-python?logo=pypi&logoColor=white&label=Downloads&color=red&style=plastic"></a>
57
60
  <br>
58
61
  <a href="https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml"><img alt="Build" src="https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml/badge.svg?branch=main"></a>
@@ -2,7 +2,7 @@
2
2
 
3
3
  <div align="center">
4
4
  <a href="https://app.codacy.com/gh/nirsimetri/onvif-python/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade"><img src="https://img.shields.io/codacy/grade/bff08a94e4d447b690cea49c6594826d?style=plastic&logo=codacy&label=Code%20Quality"/></a>
5
- <a href="https://pypi.org/project/onvif-python/"><img alt="PyPI Version" src="https://img.shields.io/badge/Version-0.4.1-orange?logo=python&logoColor=white&color=yellow&style=plastic"></a>
5
+ <a href="https://pypi.org/project/onvif-python/"><img alt="PyPI Version" src="https://img.shields.io/badge/Version-0.4.2-orange?logo=python&logoColor=white&color=yellow&style=plastic"></a>
6
6
  <a href="https://pepy.tech/projects/onvif-python"><img alt="Pepy Total Downloads" src="https://img.shields.io/pepy/dt/onvif-python?logo=pypi&logoColor=white&label=Downloads&color=red&style=plastic"></a>
7
7
  <br>
8
8
  <a href="https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml"><img alt="Build" src="https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml/badge.svg?branch=main"></a>
@@ -63,7 +63,7 @@ def select_device_interactive(devices: list) -> tuple[str, int, bool] | None:
63
63
  else colorize("HTTP", "white")
64
64
  )
65
65
  print(
66
- f"\n{colorize(f"[{idx}]", "yellow")} {colorize(host_port, 'yellow')} ({protocol_indicator})"
66
+ f"\n{colorize(f'[{idx}]', 'yellow')} {colorize(host_port, 'yellow')} ({protocol_indicator})"
67
67
  )
68
68
 
69
69
  # Remove uuid: or urn:uuid: prefix from EPR
@@ -70,7 +70,7 @@ def print_interactive_intro(args, device_info_text) -> str:
70
70
  f"{repo_info}\n"
71
71
  f"{terminal_header}\n"
72
72
  f" Connected to : {colorize(f'{args.host}:{args.port}', 'yellow')}\n"
73
- f" Auth Method : {colorize(f'{'HTTP Digest' if args.digest else 'WS-UsernameToken'}', 'yellow')}"
73
+ f" Auth Method : {colorize('HTTP Digest' if args.digest else 'WS-UsernameToken', 'yellow')}"
74
74
  f"{options_display}{device_info_text}\n\n"
75
75
  f"{colorize('[Quick Start]', 'green')}\n"
76
76
  f" - Type {colorize('dev', 'yellow')} + {colorize('TAB', 'yellow')} to see `devicemgmt` suggestion\n"
@@ -81,7 +81,7 @@ def search_products(search_term: str, page: int = 1, per_page: int = 20) -> None
81
81
  )
82
82
  print(
83
83
  f"Showing {colorize(f'{offset + 1}-{min(offset + per_page, total_count)}', 'cyan')} "
84
- f"of {colorize(f"{total_count} results", 'cyan')}"
84
+ f"of {colorize(f'{total_count} results', 'cyan')}"
85
85
  )
86
86
  print()
87
87
 
@@ -90,7 +90,7 @@ class InteractiveShell(cmd.Cmd):
90
90
  import readline
91
91
 
92
92
  # Set completer to this instance
93
- readline.set_completer(self.complete) # type: ignore[attr-defined]
93
+ readline.set_completer(self.complete) # type: ignore[attr-defined, arg-type]
94
94
  readline.set_completer_delims(" \t\n`!@#$%^&*()=+[{]}\\|;:'\",<>?") # type: ignore[attr-defined]
95
95
 
96
96
  # Enable tab completion, making it compatible with both GNU readline and libedit
@@ -124,30 +124,34 @@ class InteractiveShell(cmd.Cmd):
124
124
  serial = getattr(self.device_data, "SerialNumber", "Unknown")
125
125
  hardware_id = getattr(self.device_data, "HardwareId", "Unknown")
126
126
 
127
- # Get ONVIF version
128
- services = self.client.devicemgmt().GetServices(IncludeCapability=False)
129
- devicemgmt_service = next(
130
- (
131
- s
132
- for s in services
133
- if hasattr(s, "Namespace")
134
- and s.Namespace == "http://www.onvif.org/ver10/device/wsdl"
135
- ),
136
- None,
137
- )
138
- if devicemgmt_service and hasattr(devicemgmt_service, "Version"):
139
- version = devicemgmt_service.Version
140
- major = getattr(version, "Major", "")
141
- minor = getattr(version, "Minor", "")
142
- if major and minor:
143
- onvif_version = f"{major}.{minor}"
144
- elif major:
145
- onvif_version = str(major)
146
- except ONVIFOperationException as e:
147
- if isinstance(e.original_exception, (RequestException, TransportError)):
148
- self._handle_connection_error()
127
+ # Get latest supported ONVIF version
128
+ supported_versions = self.client.devicemgmt().GetCapabilities(
129
+ Category="All"
130
+ )["Device"]["System"]["SupportedVersions"]
131
+ if supported_versions:
132
+ latest_version = max(
133
+ supported_versions,
134
+ key=lambda version: (
135
+ getattr(version, "Major", 0),
136
+ getattr(version, "Minor", 0),
137
+ ),
138
+ )
139
+
140
+ major = getattr(latest_version, "Major", "")
141
+ minor = getattr(latest_version, "Minor", "")
142
+
143
+ if major != "":
144
+ onvif_version = (
145
+ f"{major}.{minor} {colorize('[Latest]', 'green')}"
146
+ if minor != ""
147
+ else str(major)
148
+ )
149
+ except (ONVIFOperationException, KeyError, AttributeError) as e:
150
+ if isinstance(e, ONVIFOperationException):
151
+ if isinstance(e.original_exception, (RequestException, TransportError)):
152
+ self._handle_connection_error()
149
153
  else:
150
- # For other errors (e.g., GetServices not supported), we can still proceed
154
+ # For other errors (e.g., GetCapabilities not supported), we can still proceed
151
155
  # with basic device info if GetDeviceInformation succeeded.
152
156
  pass
153
157
 
@@ -1164,8 +1168,10 @@ class InteractiveShell(cmd.Cmd):
1164
1168
 
1165
1169
  def do_clear(self, _line):
1166
1170
  """Clear terminal screen."""
1167
- # Clear screen for both Windows and Unix-like systems
1168
- os.system("cls" if os.name == "nt" else "clear")
1171
+ if sys.platform == "win32":
1172
+ print("\033[2J\033[3J\033[H", end="")
1173
+ else:
1174
+ print("\033[2J\033[H", end="")
1169
1175
 
1170
1176
  def do_cls(self, _line):
1171
1177
  """Clear stored data."""
@@ -1221,7 +1227,7 @@ class InteractiveShell(cmd.Cmd):
1221
1227
  f"\n Connected to : "
1222
1228
  f"{colorize(f'{self.args.host}:{self.args.port}', 'yellow')}"
1223
1229
  f"\n Auth Method : "
1224
- f"{colorize(f'{'HTTP Digest' if self.args.digest else 'WS-UsernameToken'}', 'yellow')}"
1230
+ f"{colorize('HTTP Digest' if self.args.digest else 'WS-UsernameToken', 'yellow')}"
1225
1231
  f"{options_display}{self.device_info_text}"
1226
1232
  )
1227
1233
  print() # Extra newline for spacing
@@ -230,7 +230,7 @@ def _colors_enabled() -> bool:
230
230
 
231
231
  try:
232
232
  # Enable ANSI escape sequences
233
- kernel32 = ctypes.windll.kernel32
233
+ kernel32 = ctypes.windll.kernel32 # type: ignore[attr-defined]
234
234
  h_stdout = kernel32.GetStdHandle(-11)
235
235
 
236
236
  # Get current console mode
@@ -1,4 +1,4 @@
1
1
  [diffend] Oversized file quarantined before diffing.
2
- name: onvif_python-0.4.1/onvif/db/products.db
2
+ name: onvif_python-0.4.2/onvif/db/products.db
3
3
  size: 81559552 bytes
4
4
  sha256: e0154f7f2ea2ea92cc2d0c9fb9edb7f2e469ebf3480e876ee105ddf620a8a286
@@ -2,5 +2,5 @@
2
2
 
3
3
  from typing import Final
4
4
 
5
- __version__: Final[str] = "0.4.1"
5
+ __version__: Final[str] = "0.4.2"
6
6
  __repository__: Final[str] = "https://github.com/nirsimetri/onvif-python"
@@ -717,7 +717,10 @@ class ONVIFWSDL:
717
717
  def get_wsdl_map(cls) -> dict[str, dict[str, Any]]:
718
718
  """Get the complete WSDL map for all services."""
719
719
  cls._ensure_wsdl_map_initialized()
720
- assert cls.WSDL_MAP is not None
720
+
721
+ if cls.WSDL_MAP is None:
722
+ raise RuntimeError("WSDL map was not initialized")
723
+
721
724
  return cls.WSDL_MAP
722
725
 
723
726
  @classmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: onvif-python
3
- Version: 0.4.1
3
+ Version: 0.4.2
4
4
  Summary: A modern Python library for ONVIF-compliant devices
5
5
  Author-email: Nirsimetri Technologies® <open@nirsimetri.com>
6
6
  Maintainer: Kaburagi
@@ -42,6 +42,9 @@ Requires-Dist: mypy; extra == "dev"
42
42
  Requires-Dist: isort; extra == "dev"
43
43
  Requires-Dist: pylint; extra == "dev"
44
44
  Requires-Dist: docformatter; extra == "dev"
45
+ Requires-Dist: lxml-stubs; extra == "dev"
46
+ Requires-Dist: types-setuptools; extra == "dev"
47
+ Requires-Dist: types-requests; extra == "dev"
45
48
  Provides-Extra: docs
46
49
  Requires-Dist: mkdocs-material; extra == "docs"
47
50
  Requires-Dist: mkdocstrings[python]; extra == "docs"
@@ -52,7 +55,7 @@ Dynamic: license-file
52
55
 
53
56
  <div align="center">
54
57
  <a href="https://app.codacy.com/gh/nirsimetri/onvif-python/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade"><img src="https://img.shields.io/codacy/grade/bff08a94e4d447b690cea49c6594826d?style=plastic&logo=codacy&label=Code%20Quality"/></a>
55
- <a href="https://pypi.org/project/onvif-python/"><img alt="PyPI Version" src="https://img.shields.io/badge/Version-0.4.1-orange?logo=python&logoColor=white&color=yellow&style=plastic"></a>
58
+ <a href="https://pypi.org/project/onvif-python/"><img alt="PyPI Version" src="https://img.shields.io/badge/Version-0.4.2-orange?logo=python&logoColor=white&color=yellow&style=plastic"></a>
56
59
  <a href="https://pepy.tech/projects/onvif-python"><img alt="Pepy Total Downloads" src="https://img.shields.io/pepy/dt/onvif-python?logo=pypi&logoColor=white&label=Downloads&color=red&style=plastic"></a>
57
60
  <br>
58
61
  <a href="https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml"><img alt="Build" src="https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml/badge.svg?branch=main"></a>
@@ -2,7 +2,6 @@ LICENSE.md
2
2
  MANIFEST.in
3
3
  README.md
4
4
  pyproject.toml
5
- setup.py
6
5
  onvif/__init__.py
7
6
  onvif/client.py
8
7
  onvif/meta.py
@@ -12,6 +12,9 @@ mypy
12
12
  isort
13
13
  pylint
14
14
  docformatter
15
+ lxml-stubs
16
+ types-setuptools
17
+ types-requests
15
18
 
16
19
  [docs]
17
20
  mkdocs-material
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "onvif-python"
3
- version = "0.4.1"
3
+ version = "0.4.2"
4
4
  description = "A modern Python library for ONVIF-compliant devices"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -56,6 +56,9 @@ dev = [
56
56
  "isort",
57
57
  "pylint",
58
58
  "docformatter",
59
+ "lxml-stubs",
60
+ "types-setuptools",
61
+ "types-requests",
59
62
  ]
60
63
  docs = [
61
64
  "mkdocs-material",
@@ -97,7 +100,6 @@ extend-exclude = '''
97
100
  [tool.isort]
98
101
  profile = "black"
99
102
  skip = [
100
- "^examples/",
101
103
  "^assets/",
102
104
  "^temp/",
103
105
  "^build/",
@@ -274,10 +274,8 @@ class TestCacheMode:
274
274
 
275
275
  def test_cache_mode_comparison(self):
276
276
  """Test cache mode comparison."""
277
- assert CacheMode.NONE == CacheMode.NONE
278
- assert CacheMode.MEM == CacheMode.MEM
279
- assert CacheMode.DB == CacheMode.DB
280
-
277
+ assert CacheMode.NONE != CacheMode.MEM
278
+ assert CacheMode.NONE != CacheMode.DB
281
279
  assert CacheMode.MEM != CacheMode.DB
282
280
 
283
281
 
@@ -1,5 +0,0 @@
1
- """Setup the project."""
2
-
3
- from setuptools import setup
4
-
5
- setup()
File without changes
File without changes
File without changes