onvif-python 0.2.3__tar.gz → 0.2.5__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 (134) hide show
  1. {onvif_python-0.2.3/onvif_python.egg-info → onvif_python-0.2.5}/PKG-INFO +43 -38
  2. {onvif_python-0.2.3 → onvif_python-0.2.5}/README.md +42 -37
  3. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/__init__.py +1 -2
  4. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/cli/interactive.py +2 -2
  5. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/cli/main.py +607 -399
  6. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/cli/utils.py +49 -22
  7. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/client.py +28 -0
  8. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/__init__.py +2 -0
  9. onvif_python-0.2.5/onvif/services/events/pausable_subscription.py +31 -0
  10. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/utils/service.py +4 -2
  11. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/utils/wsdl.py +14 -0
  12. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl +11 -0
  13. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/device/wsdl/devicemgmt.wsdl +2 -2
  14. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/schema/onvif.xsd +2 -2
  15. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/media/wsdl/media.wsdl +1 -1
  16. {onvif_python-0.2.3 → onvif_python-0.2.5/onvif_python.egg-info}/PKG-INFO +43 -38
  17. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif_python.egg-info/SOURCES.txt +2 -2
  18. {onvif_python-0.2.3 → onvif_python-0.2.5}/pyproject.toml +1 -1
  19. onvif_python-0.2.3/tests/test_wsdl_map.py +0 -47
  20. {onvif_python-0.2.3 → onvif_python-0.2.5}/LICENSE.md +0 -0
  21. {onvif_python-0.2.3 → onvif_python-0.2.5}/MANIFEST.in +0 -0
  22. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/cli/__init__.py +0 -0
  23. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/cli/__main__.py +0 -0
  24. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/db/companies.db +0 -0
  25. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/db/products.db +0 -0
  26. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/operator.py +0 -0
  27. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/accesscontrol.py +0 -0
  28. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/accessrules.py +0 -0
  29. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/actionengine.py +0 -0
  30. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/analytics/analytics.py +0 -0
  31. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/analytics/ruleengine.py +0 -0
  32. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/analyticsdevice.py +0 -0
  33. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/appmgmt.py +0 -0
  34. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/authenticationbehavior.py +0 -0
  35. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/credential.py +0 -0
  36. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/deviceio.py +0 -0
  37. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/devicemgmt.py +0 -0
  38. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/display.py +0 -0
  39. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/doorcontrol.py +0 -0
  40. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/events/events.py +0 -0
  41. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/events/notification.py +0 -0
  42. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/events/pullpoint.py +0 -0
  43. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/events/subscription.py +0 -0
  44. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/imaging.py +0 -0
  45. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/media.py +0 -0
  46. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/media2.py +0 -0
  47. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/provisioning.py +0 -0
  48. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/ptz.py +0 -0
  49. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/receiver.py +0 -0
  50. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/recording.py +0 -0
  51. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/replay.py +0 -0
  52. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/schedule.py +0 -0
  53. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/search.py +0 -0
  54. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/security/advancedsecurity.py +0 -0
  55. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/security/authorizationserver.py +0 -0
  56. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/security/dot1x.py +0 -0
  57. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/security/jwt.py +0 -0
  58. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/security/keystore.py +0 -0
  59. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/security/mediasigning.py +0 -0
  60. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/security/tlsserver.py +0 -0
  61. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/thermal.py +0 -0
  62. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/services/uplink.py +0 -0
  63. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/utils/__init__.py +0 -0
  64. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/utils/discovery.py +0 -0
  65. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/utils/error_handlers.py +0 -0
  66. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/utils/exceptions.py +0 -0
  67. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/utils/parser.py +0 -0
  68. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/utils/xml_capture.py +0 -0
  69. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/utils/zeep.py +0 -0
  70. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/LICENSE.md +0 -0
  71. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/accesscontrol/wsdl/index.html +0 -0
  72. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/accessrules/wsdl/accessrules.wsdl +0 -0
  73. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/accessrules/wsdl/index.html +0 -0
  74. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/actionengine.wsdl +0 -0
  75. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/advancedsecurity/wsdl/index.html +0 -0
  76. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/analyticsdevice.wsdl +0 -0
  77. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl +0 -0
  78. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/appmgmt/wsdl/index.html +0 -0
  79. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/authenticationbehavior/wsdl/authenticationbehavior.wsdl +0 -0
  80. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/authenticationbehavior/wsdl/index.html +0 -0
  81. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/credential/wsdl/credential.wsdl +0 -0
  82. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/credential/wsdl/index.html +0 -0
  83. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/deviceio.wsdl +0 -0
  84. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/display/display.wsdl +0 -0
  85. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/display/wsdl/index.htm +0 -0
  86. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/display.wsdl +0 -0
  87. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/doorcontrol/wsdl/index.html +0 -0
  88. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/events/wsdl/bw-2-vs-mod.wsdl +0 -0
  89. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/events/wsdl/event-vs.wsdl +0 -0
  90. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/events/wsdl/event.wsdl +0 -0
  91. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/events/wsdl/index.html +0 -0
  92. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/federatedsearch.wsdl +0 -0
  93. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/media/wsdl/media.wsdl +0 -0
  94. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/pacs/accesscontrol.wsdl +0 -0
  95. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/pacs/doorcontrol.wsdl +0 -0
  96. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/pacs/types.xsd +0 -0
  97. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/provisioning/wsdl/provisioning.wsdl +0 -0
  98. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/receiver.wsdl +0 -0
  99. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/recording.wsdl +0 -0
  100. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/replay.wsdl +0 -0
  101. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/schedule/wsdl/index.html +0 -0
  102. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/schedule/wsdl/schedule.wsdl +0 -0
  103. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/schema/common.xsd +0 -0
  104. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/schema/metadatastream.xsd +0 -0
  105. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/search.wsdl +0 -0
  106. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/thermal/wsdl/index.html +0 -0
  107. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/thermal/wsdl/thermal.wsdl +0 -0
  108. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/topics/topicns.xml +0 -0
  109. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/uplink/wsdl/index.html +0 -0
  110. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver10/uplink/wsdl/uplink.wsdl +0 -0
  111. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/analytics/humanbody.xsd +0 -0
  112. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/analytics/humanface.xsd +0 -0
  113. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/analytics/index.html +0 -0
  114. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/analytics/radiometry.xsd +0 -0
  115. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/analytics/rules.xsd +0 -0
  116. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/analytics/wsdl/analytics.wsdl +0 -0
  117. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/analytics/wsdl/index.html +0 -0
  118. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/imaging/wsdl/imaging.wsdl +0 -0
  119. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/media/wsdl/index.html +0 -0
  120. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/ptz/wsdl/ptz.wsdl +0 -0
  121. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/util/federated_search_documentation.html +0 -0
  122. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/util/fedsearch-docu-viewer.xsl +0 -0
  123. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/util/onvif-wsdl-viewer.xsl +0 -0
  124. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif/wsdl/ver20/util/operationIndex.html +0 -0
  125. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif_python.egg-info/dependency_links.txt +0 -0
  126. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif_python.egg-info/entry_points.txt +0 -0
  127. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif_python.egg-info/requires.txt +0 -0
  128. {onvif_python-0.2.3 → onvif_python-0.2.5}/onvif_python.egg-info/top_level.txt +0 -0
  129. {onvif_python-0.2.3 → onvif_python-0.2.5}/setup.cfg +0 -0
  130. {onvif_python-0.2.3 → onvif_python-0.2.5}/setup.py +0 -0
  131. {onvif_python-0.2.3 → onvif_python-0.2.5}/tests/test_client.py +0 -0
  132. {onvif_python-0.2.3 → onvif_python-0.2.5}/tests/test_core.py +0 -0
  133. {onvif_python-0.2.3 → onvif_python-0.2.5}/tests/test_error_handlers.py +0 -0
  134. {onvif_python-0.2.3 → onvif_python-0.2.5}/tests/test_exceptions.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: onvif-python
3
- Version: 0.2.3
3
+ Version: 0.2.5
4
4
  Summary: A modern Python library for ONVIF-compliant devices
5
5
  Author-email: Nirsimetri Technologies® <open@nirsimetri.com>
6
6
  Maintainer: Kaburagi
@@ -44,14 +44,13 @@ Dynamic: license-file
44
44
  <h1 align="center">ONVIF Python</h1>
45
45
 
46
46
  <div align="center">
47
-
48
- [![Codacy grade](https://img.shields.io/codacy/grade/bff08a94e4d447b690cea49c6594826d?label=Code%20Quality&logo=codacy)](https://app.codacy.com/gh/nirsimetri/onvif-python/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
49
- [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/nirsimetri/onvif-python)
50
- [![PyPI](https://img.shields.io/badge/PyPI-0.2.3-orange?logo=archive)](https://pypi.org/project/onvif-python/)
51
- [![Downloads](https://img.shields.io/pypi/dm/onvif-python?label=Downloads&color=red)](https://clickpy.clickhouse.com/dashboard/onvif-python)
47
+ <a href="https://app.codacy.com/gh/nirsimetri/onvif-python/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade"><img alt="Codacy grade" src="https://img.shields.io/codacy/grade/bff08a94e4d447b690cea49c6594826d?label=Code%20Quality&logo=codacy"></a>
48
+ <a href="https://deepwiki.com/nirsimetri/onvif-python"><img alt="Ask DeepWiki" src="https://deepwiki.com/badge.svg"></a>
49
+ <a href="https://pypi.org/project/onvif-python/"><img alt="PyPI Version" src="https://img.shields.io/badge/PyPI-0.2.5-orange?logo=archive&color=yellow"></a>
50
+ <a href="https://pepy.tech/projects/onvif-python"><img alt="Pepy Total Downloads" src="https://img.shields.io/pepy/dt/onvif-python?label=Downloads&color=red"></a>
52
51
  <br>
53
- [![Build](https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml/badge.svg?branch=main)](https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml)
54
- [![Upload Python Package](https://github.com/nirsimetri/onvif-python/actions/workflows/python-publish.yml/badge.svg)](https://github.com/nirsimetri/onvif-python/actions/workflows/python-publish.yml)
52
+ <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>
53
+ <a href="https://github.com/nirsimetri/onvif-python/actions/workflows/python-publish.yml"><img alt="Upload Python Package" src="https://github.com/nirsimetri/onvif-python/actions/workflows/python-publish.yml/badge.svg"></a>
55
54
  </div>
56
55
 
57
56
  <h1 align="center">
@@ -65,15 +64,21 @@ Dynamic: license-file
65
64
 
66
65
  Behind the scenes, ONVIF communication relies on **[SOAP](https://en.wikipedia.org/wiki/SOAP) (Simple Object Access Protocol)** — an [XML](https://en.wikipedia.org/wiki/XML)-based messaging protocol with strict schema definitions ([WSDL](https://en.wikipedia.org/wiki/Web_Services_Description_Language)/[XSD](https://en.wikipedia.org/wiki/XML_Schema_(W3C))). SOAP ensures interoperability, but when used directly it can be verbose, complex, and error-prone.
67
66
 
68
- This library simplifies that process by wrapping SOAP communication into a clean, Pythonic API. You no longer need to handle low-level XML parsing, namespaces, or security tokens manually — the library takes care of it, letting you focus on building functionality.
67
+ This library simplifies that process by wrapping SOAP communication into a clean, Pythonic API. You no longer need to handle low-level XML parsing, namespaces, or security tokens manually — the library takes care of it, letting you focus on building functionality.
69
68
 
70
- ## Key Features
71
- - Full implementation of ONVIF core services and profiles
72
- - Support for device discovery, media streaming, PTZ control, event management, and more
73
- - Pythonic abstraction over SOAP requests and responses (no need to handcraft XML)
74
- - Extensible architecture for custom ONVIF extensions
75
- - Compatible with multiple ONVIF specification versions
76
- - Example scripts and tests included
69
+ ## Library Philosophy
70
+ > [!NOTE]
71
+ > This library will be continuously updated as ONVIF versions are updated. It uses a built-in WSDL that will always follow changes to the [ONVIF WSDL Specifications](https://github.com/onvif/specs). You can also use your own ONVIF WSDL file by adding the `wsdl_dir` argument; see [ONVIFClient Parameters](#onvifclient-parameters).
72
+
73
+ - **WYSIWYG (What You See is What You Get)**: Every ONVIF operation in the library mirrors the official ONVIF specification exactly. Method names, parameter structures, and response formats follow ONVIF standards without abstraction layers or renamed interfaces. What you see in the ONVIF documentation is exactly what you get in Python.
74
+
75
+ - **Device Variety Interoperability**: Built to handle the real-world diversity of ONVIF implementations across manufacturers. The library gracefully handles missing features, optional operations, and vendor-specific behaviors through comprehensive error handling and fallback mechanisms. Whether you're working with high-end enterprise cameras or budget IP cameras, the library adapts.
76
+
77
+ - **Official Specifications Accuracy**: All service implementations are generated and validated against official `ONVIF WSDL Specifications`. The library includes comprehensive test suites that verify compliance with ONVIF standards, ensuring that method signatures, parameter types, and behavior match the official specifications precisely.
78
+
79
+ - **Modern Python Approach**: Designed for excellent IDE support with full type hints, auto-completion, and immediate error detection. You'll get `TypeError` exceptions upfront when accessing ONVIF operations with wrong arguments, instead of cryptic `SOAP faults` later. Clean, Pythonic API that feels natural to Python developers while maintaining ONVIF compatibility.
80
+
81
+ - **Minimal Dependencies**: Only depends on essential, well-maintained libraries (`zeep` for SOAP, `requests` for HTTP). No bloated framework dependencies or custom XML parsers. The library stays lightweight while providing full ONVIF functionality, making it easy to integrate into any project without dependency conflicts.
77
82
 
78
83
  ## Who Is It For?
79
84
  - **Individual developers** exploring ONVIF or building hobby projects
@@ -352,11 +357,12 @@ This library includes a powerful command-line interface (CLI) for interacting wi
352
357
  <summary><b>1. Direct CLI</b></summary>
353
358
 
354
359
  ```bash
355
- usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--filter FILTER] [--search SEARCH] [--page PAGE] [--per-page PER_PAGE] [--timeout TIMEOUT] [--https]
356
- [--no-verify] [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}] [--health-check-interval HEALTH_CHECK_INTERVAL] [--version]
360
+ usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--filter FILTER] [--search SEARCH] [--page PAGE]
361
+ [--per-page PER_PAGE] [--timeout TIMEOUT] [--https] [--no-verify] [--no-patch] [--interactive] [--debug] [--wsdl WSDL]
362
+ [--cache {all,db,mem,none}] [--health-check-interval HEALTH_CHECK_INTERVAL] [--output OUTPUT] [--version]
357
363
  [service] [method] [params ...]
358
364
 
359
- ONVIF Terminal Client — v0.2.3
365
+ ONVIF Terminal Client — v0.2.5
360
366
  https://github.com/nirsimetri/onvif-python
361
367
 
362
368
  positional arguments:
@@ -390,6 +396,9 @@ options:
390
396
  Caching mode for ONVIFClient (default: all). 'all': memory+disk, 'db': disk-only, 'mem': memory-only, 'none': disabled.
391
397
  --health-check-interval HEALTH_CHECK_INTERVAL, -hci HEALTH_CHECK_INTERVAL
392
398
  Health check interval in seconds for interactive mode (default: 10)
399
+ --output OUTPUT, -o OUTPUT
400
+ Save command output to file. Supports .json, .xml extensions for format detection, or plain text. XML format automatically enables
401
+ debug mode for SOAP capture.
393
402
  --version, -v Show ONVIF CLI version and exit
394
403
 
395
404
  Examples:
@@ -410,7 +419,12 @@ Examples:
410
419
 
411
420
  # Direct command execution
412
421
  onvif devicemgmt GetCapabilities Category=All --host 192.168.1.17 --port 8000 --username admin --password admin123
413
- onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity={"PanTilt": {"x": -0.1, "y": 0}} --host 192.168.1.17 --port 8000 --username admin --password admin123
422
+ onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity={'PanTilt': {'x': -0.1, 'y': 0}} -H 192.168.1.17 -P 8000 -u admin -p admin123
423
+
424
+ # Save output to file
425
+ onvif devicemgmt GetDeviceInformation --host 192.168.1.17 --port 8000 --username admin --password admin123 --output device_info.json
426
+ onvif media GetProfiles --host 192.168.1.17 --port 8000 --username admin --password admin123 --output profiles.xml
427
+ onvif ptz GetConfigurations --host 192.168.1.17 --port 8000 --username admin --password admin123 --output ptz_config.txt --debug
414
428
 
415
429
  # Interactive mode
416
430
  onvif --host 192.168.1.17 --port 8000 --username admin --password admin123 --interactive
@@ -429,7 +443,7 @@ Examples:
429
443
  <summary><b>2. Interactive Shell</b></summary>
430
444
 
431
445
  ```bash
432
- ONVIF Interactive Shell — v0.2.3
446
+ ONVIF Interactive Shell — v0.2.5
433
447
  https://github.com/nirsimetri/onvif-python
434
448
 
435
449
  Basic Commands:
@@ -637,7 +651,11 @@ onvif <service> <method> [parameters...] -H <host> -P <port> -u <user> -p <pass>
637
651
  onvif devicemgmt GetCapabilities Category=All -H 192.168.1.17 -P 8000 -u admin -p admin123
638
652
 
639
653
  # Move a PTZ camera
640
- onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity='{"PanTilt": {"x": 0.1}}' -H 192.168.1.17 -P 8000 -u admin -p admin123
654
+ onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity='{"PanTilt": {"x": 0.1, "y": 0}}' -H 192.168.1.17 -P 8000 -u admin -p admin123
655
+
656
+ # Save output to file
657
+ onvif devicemgmt GetDeviceInformation --host 192.168.1.17 --port 8000 --username admin --password admin123 --output device_info.json
658
+ onvif media GetProfiles -H 192.168.1.17 -P 8000 -u admin -p admin123 -o profiles.xml
641
659
  ```
642
660
 
643
661
  **4. ONVIF Product Search**
@@ -1028,7 +1046,7 @@ Below is a list of ONVIF services implemented and supported by this library, alo
1028
1046
  | Service | Specifications | Service Definitions | Schema Files | Status |
1029
1047
  |------------------------|-------------------------------|-----------------------------|-------------------------------------|------------|
1030
1048
  | Device Management | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Core.xml) | [device.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/device/wsdl/devicemgmt.wsdl) | [onvif.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/onvif.xsd) <br> [common.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/common.xsd) | ✅ Complete |
1031
- | Events | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Core.xml) | [event.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/events/wsdl/event.wsdl) | [onvif.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/onvif.xsd) <br> [common.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/common.xsd) | ⚠️ Partial |
1049
+ | Events | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Core.xml) | [event.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/events/wsdl/event.wsdl) | [onvif.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/onvif.xsd) <br> [common.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/common.xsd) | ✅ Complete |
1032
1050
  | Access Control | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AccessControl.xml) | [accesscontrol.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/pacs/accesscontrol.wsdl) | [types.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/pacs/types.xsd) | ✅ Complete |
1033
1051
  | Access Rules | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AccessRules.xml) | [accessrules.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/accessrules/wsdl/accessrules.wsdl) | - | ✅ Complete |
1034
1052
  | Action Engine | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/ActionEngine.xml) | [actionengine.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/actionengine.wsdl) | - | ✅ Complete |
@@ -1050,12 +1068,10 @@ Below is a list of ONVIF services implemented and supported by this library, alo
1050
1068
  | Recording Control | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/RecordingControl.xml) | [recording.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/recording.wsdl) | - | ✅ Complete |
1051
1069
  | Recording Search | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/RecordingSearch.xml) | [search.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/search.wsdl) | - | ✅ Complete |
1052
1070
  | Replay Control | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Replay.xml) | [replay.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/replay.wsdl) | - | ✅ Complete |
1053
- | Resource Query | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/ResourceQuery.xml) | - | | ❌ Any idea? |
1054
1071
  | Schedule | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Schedule.xml) | [schedule.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schedule/wsdl/schedule.wsdl) | - | ✅ Complete |
1055
1072
  | Security | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Security.xml) | [advancedsecurity.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl) | - | ✅ Complete |
1056
1073
  | Thermal | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Thermal.xml) | [thermal.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/thermal/wsdl/thermal.wsdl) | [radiometry.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/radiometry.xsd) | ✅ Complete |
1057
1074
  | Uplink | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Uplink.xml) | [uplink.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/uplink/wsdl/uplink.wsdl) | - | ✅ Complete |
1058
- | WebRTC | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/WebRTC.xml) | - | - | ❌ Any idea? |
1059
1075
 
1060
1076
  </details>
1061
1077
 
@@ -1155,13 +1171,11 @@ Some ONVIF services have multiple bindings in the same WSDL. These typically inc
1155
1171
  - [ ] Add more usage examples for advanced features.
1156
1172
  - [ ] Add benchmarking and performance metrics.
1157
1173
  - [ ] Add community-contributed device configuration templates.
1158
- - [ ] Implement missing or partial ONVIF services.
1159
- - [ ] Add function to expose ONVIF devices (for debugging purposes by the community).
1160
1174
 
1161
1175
  ## Related Projects
1162
1176
 
1163
1177
  - [onvif-products-directory](https://github.com/nirsimetri/onvif-products-directory):
1164
- This project is a comprehensive ONVIF data aggregation and management suite, designed to help developers explore, analyze, and process ONVIF-compliant product information from hundreds of manufacturers worldwide. It provides a unified structure for device, client, and company data, making it easier to perform research, build integrations, and generate statistics for ONVIF ecosystem analysis.
1178
+ This project is a comprehensive ONVIF data aggregation and management suite, designed to help developers explore, analyze, and process ONVIF-compliant product information from hundreds of manufacturers worldwide.
1165
1179
 
1166
1180
  - (soon) [onvif-rest-server](https://github.com/nirsimetri/onvif-rest-server):
1167
1181
  A RESTful API server for ONVIF devices, enabling easy integration of ONVIF device management, media streaming, and other capabilities into web applications and services.
@@ -1169,19 +1183,10 @@ Some ONVIF services have multiple bindings in the same WSDL. These typically inc
1169
1183
  - (soon) [onvif-mcp](https://github.com/nirsimetri/onvif-mcp):
1170
1184
  A Model Context Protocol (MCP) server for ONVIF, providing a unified API and context-based integration for ONVIF devices, clients, and services. It enables advanced automation, orchestration, and interoperability across ONVIF-compliant devices and clients.
1171
1185
 
1172
- ## Alternatives
1173
-
1174
- If you are looking for other ONVIF Python libraries, here are some alternatives:
1175
-
1176
- - [python-onvif-zeep](https://github.com/FalkTannhaeuser/python-onvif-zeep):
1177
- A synchronous ONVIF client library for Python, using Zeep for SOAP communication. Focuses on compatibility and ease of use for standard ONVIF device operations. Good for scripts and applications where async is not required.
1178
-
1179
- - [python-onvif-zeep-async](https://github.com/openvideolibs/python-onvif-zeep-async):
1180
- An asynchronous ONVIF client library for Python, based on Zeep and asyncio. Suitable for applications requiring non-blocking operations and concurrent device communication. Supports many ONVIF services and is actively maintained.
1181
-
1182
1186
  ## References
1183
1187
  - [ONVIF Official Specifications](https://www.onvif.org/profiles/specifications/specification-history/)
1184
1188
  - [ONVIF Official Specs Repository](https://github.com/onvif/specs)
1189
+ - [ONVIF Application Programmer's Guide](https://www.onvif.org/wp-content/uploads/2016/12/ONVIF_WG-APG-Application_Programmers_Guide-1.pdf)
1185
1190
  - [ONVIF 2.0 Service Operation Index](https://www.onvif.org/onvif/ver20/util/operationIndex.html)
1186
1191
  - [Usage Examples](./examples/)
1187
1192
 
@@ -1,14 +1,13 @@
1
1
  <h1 align="center">ONVIF Python</h1>
2
2
 
3
3
  <div align="center">
4
-
5
- [![Codacy grade](https://img.shields.io/codacy/grade/bff08a94e4d447b690cea49c6594826d?label=Code%20Quality&logo=codacy)](https://app.codacy.com/gh/nirsimetri/onvif-python/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
6
- [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/nirsimetri/onvif-python)
7
- [![PyPI](https://img.shields.io/badge/PyPI-0.2.3-orange?logo=archive)](https://pypi.org/project/onvif-python/)
8
- [![Downloads](https://img.shields.io/pypi/dm/onvif-python?label=Downloads&color=red)](https://clickpy.clickhouse.com/dashboard/onvif-python)
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 alt="Codacy grade" src="https://img.shields.io/codacy/grade/bff08a94e4d447b690cea49c6594826d?label=Code%20Quality&logo=codacy"></a>
5
+ <a href="https://deepwiki.com/nirsimetri/onvif-python"><img alt="Ask DeepWiki" src="https://deepwiki.com/badge.svg"></a>
6
+ <a href="https://pypi.org/project/onvif-python/"><img alt="PyPI Version" src="https://img.shields.io/badge/PyPI-0.2.5-orange?logo=archive&color=yellow"></a>
7
+ <a href="https://pepy.tech/projects/onvif-python"><img alt="Pepy Total Downloads" src="https://img.shields.io/pepy/dt/onvif-python?label=Downloads&color=red"></a>
9
8
  <br>
10
- [![Build](https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml/badge.svg?branch=main)](https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml)
11
- [![Upload Python Package](https://github.com/nirsimetri/onvif-python/actions/workflows/python-publish.yml/badge.svg)](https://github.com/nirsimetri/onvif-python/actions/workflows/python-publish.yml)
9
+ <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>
10
+ <a href="https://github.com/nirsimetri/onvif-python/actions/workflows/python-publish.yml"><img alt="Upload Python Package" src="https://github.com/nirsimetri/onvif-python/actions/workflows/python-publish.yml/badge.svg"></a>
12
11
  </div>
13
12
 
14
13
  <h1 align="center">
@@ -22,15 +21,21 @@
22
21
 
23
22
  Behind the scenes, ONVIF communication relies on **[SOAP](https://en.wikipedia.org/wiki/SOAP) (Simple Object Access Protocol)** — an [XML](https://en.wikipedia.org/wiki/XML)-based messaging protocol with strict schema definitions ([WSDL](https://en.wikipedia.org/wiki/Web_Services_Description_Language)/[XSD](https://en.wikipedia.org/wiki/XML_Schema_(W3C))). SOAP ensures interoperability, but when used directly it can be verbose, complex, and error-prone.
24
23
 
25
- This library simplifies that process by wrapping SOAP communication into a clean, Pythonic API. You no longer need to handle low-level XML parsing, namespaces, or security tokens manually — the library takes care of it, letting you focus on building functionality.
24
+ This library simplifies that process by wrapping SOAP communication into a clean, Pythonic API. You no longer need to handle low-level XML parsing, namespaces, or security tokens manually — the library takes care of it, letting you focus on building functionality.
26
25
 
27
- ## Key Features
28
- - Full implementation of ONVIF core services and profiles
29
- - Support for device discovery, media streaming, PTZ control, event management, and more
30
- - Pythonic abstraction over SOAP requests and responses (no need to handcraft XML)
31
- - Extensible architecture for custom ONVIF extensions
32
- - Compatible with multiple ONVIF specification versions
33
- - Example scripts and tests included
26
+ ## Library Philosophy
27
+ > [!NOTE]
28
+ > This library will be continuously updated as ONVIF versions are updated. It uses a built-in WSDL that will always follow changes to the [ONVIF WSDL Specifications](https://github.com/onvif/specs). You can also use your own ONVIF WSDL file by adding the `wsdl_dir` argument; see [ONVIFClient Parameters](#onvifclient-parameters).
29
+
30
+ - **WYSIWYG (What You See is What You Get)**: Every ONVIF operation in the library mirrors the official ONVIF specification exactly. Method names, parameter structures, and response formats follow ONVIF standards without abstraction layers or renamed interfaces. What you see in the ONVIF documentation is exactly what you get in Python.
31
+
32
+ - **Device Variety Interoperability**: Built to handle the real-world diversity of ONVIF implementations across manufacturers. The library gracefully handles missing features, optional operations, and vendor-specific behaviors through comprehensive error handling and fallback mechanisms. Whether you're working with high-end enterprise cameras or budget IP cameras, the library adapts.
33
+
34
+ - **Official Specifications Accuracy**: All service implementations are generated and validated against official `ONVIF WSDL Specifications`. The library includes comprehensive test suites that verify compliance with ONVIF standards, ensuring that method signatures, parameter types, and behavior match the official specifications precisely.
35
+
36
+ - **Modern Python Approach**: Designed for excellent IDE support with full type hints, auto-completion, and immediate error detection. You'll get `TypeError` exceptions upfront when accessing ONVIF operations with wrong arguments, instead of cryptic `SOAP faults` later. Clean, Pythonic API that feels natural to Python developers while maintaining ONVIF compatibility.
37
+
38
+ - **Minimal Dependencies**: Only depends on essential, well-maintained libraries (`zeep` for SOAP, `requests` for HTTP). No bloated framework dependencies or custom XML parsers. The library stays lightweight while providing full ONVIF functionality, making it easy to integrate into any project without dependency conflicts.
34
39
 
35
40
  ## Who Is It For?
36
41
  - **Individual developers** exploring ONVIF or building hobby projects
@@ -309,11 +314,12 @@ This library includes a powerful command-line interface (CLI) for interacting wi
309
314
  <summary><b>1. Direct CLI</b></summary>
310
315
 
311
316
  ```bash
312
- usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--filter FILTER] [--search SEARCH] [--page PAGE] [--per-page PER_PAGE] [--timeout TIMEOUT] [--https]
313
- [--no-verify] [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}] [--health-check-interval HEALTH_CHECK_INTERVAL] [--version]
317
+ usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--filter FILTER] [--search SEARCH] [--page PAGE]
318
+ [--per-page PER_PAGE] [--timeout TIMEOUT] [--https] [--no-verify] [--no-patch] [--interactive] [--debug] [--wsdl WSDL]
319
+ [--cache {all,db,mem,none}] [--health-check-interval HEALTH_CHECK_INTERVAL] [--output OUTPUT] [--version]
314
320
  [service] [method] [params ...]
315
321
 
316
- ONVIF Terminal Client — v0.2.3
322
+ ONVIF Terminal Client — v0.2.5
317
323
  https://github.com/nirsimetri/onvif-python
318
324
 
319
325
  positional arguments:
@@ -347,6 +353,9 @@ options:
347
353
  Caching mode for ONVIFClient (default: all). 'all': memory+disk, 'db': disk-only, 'mem': memory-only, 'none': disabled.
348
354
  --health-check-interval HEALTH_CHECK_INTERVAL, -hci HEALTH_CHECK_INTERVAL
349
355
  Health check interval in seconds for interactive mode (default: 10)
356
+ --output OUTPUT, -o OUTPUT
357
+ Save command output to file. Supports .json, .xml extensions for format detection, or plain text. XML format automatically enables
358
+ debug mode for SOAP capture.
350
359
  --version, -v Show ONVIF CLI version and exit
351
360
 
352
361
  Examples:
@@ -367,7 +376,12 @@ Examples:
367
376
 
368
377
  # Direct command execution
369
378
  onvif devicemgmt GetCapabilities Category=All --host 192.168.1.17 --port 8000 --username admin --password admin123
370
- onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity={"PanTilt": {"x": -0.1, "y": 0}} --host 192.168.1.17 --port 8000 --username admin --password admin123
379
+ onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity={'PanTilt': {'x': -0.1, 'y': 0}} -H 192.168.1.17 -P 8000 -u admin -p admin123
380
+
381
+ # Save output to file
382
+ onvif devicemgmt GetDeviceInformation --host 192.168.1.17 --port 8000 --username admin --password admin123 --output device_info.json
383
+ onvif media GetProfiles --host 192.168.1.17 --port 8000 --username admin --password admin123 --output profiles.xml
384
+ onvif ptz GetConfigurations --host 192.168.1.17 --port 8000 --username admin --password admin123 --output ptz_config.txt --debug
371
385
 
372
386
  # Interactive mode
373
387
  onvif --host 192.168.1.17 --port 8000 --username admin --password admin123 --interactive
@@ -386,7 +400,7 @@ Examples:
386
400
  <summary><b>2. Interactive Shell</b></summary>
387
401
 
388
402
  ```bash
389
- ONVIF Interactive Shell — v0.2.3
403
+ ONVIF Interactive Shell — v0.2.5
390
404
  https://github.com/nirsimetri/onvif-python
391
405
 
392
406
  Basic Commands:
@@ -594,7 +608,11 @@ onvif <service> <method> [parameters...] -H <host> -P <port> -u <user> -p <pass>
594
608
  onvif devicemgmt GetCapabilities Category=All -H 192.168.1.17 -P 8000 -u admin -p admin123
595
609
 
596
610
  # Move a PTZ camera
597
- onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity='{"PanTilt": {"x": 0.1}}' -H 192.168.1.17 -P 8000 -u admin -p admin123
611
+ onvif ptz ContinuousMove ProfileToken=Profile_1 Velocity='{"PanTilt": {"x": 0.1, "y": 0}}' -H 192.168.1.17 -P 8000 -u admin -p admin123
612
+
613
+ # Save output to file
614
+ onvif devicemgmt GetDeviceInformation --host 192.168.1.17 --port 8000 --username admin --password admin123 --output device_info.json
615
+ onvif media GetProfiles -H 192.168.1.17 -P 8000 -u admin -p admin123 -o profiles.xml
598
616
  ```
599
617
 
600
618
  **4. ONVIF Product Search**
@@ -985,7 +1003,7 @@ Below is a list of ONVIF services implemented and supported by this library, alo
985
1003
  | Service | Specifications | Service Definitions | Schema Files | Status |
986
1004
  |------------------------|-------------------------------|-----------------------------|-------------------------------------|------------|
987
1005
  | Device Management | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Core.xml) | [device.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/device/wsdl/devicemgmt.wsdl) | [onvif.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/onvif.xsd) <br> [common.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/common.xsd) | ✅ Complete |
988
- | Events | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Core.xml) | [event.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/events/wsdl/event.wsdl) | [onvif.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/onvif.xsd) <br> [common.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/common.xsd) | ⚠️ Partial |
1006
+ | Events | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Core.xml) | [event.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/events/wsdl/event.wsdl) | [onvif.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/onvif.xsd) <br> [common.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schema/common.xsd) | ✅ Complete |
989
1007
  | Access Control | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AccessControl.xml) | [accesscontrol.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/pacs/accesscontrol.wsdl) | [types.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/pacs/types.xsd) | ✅ Complete |
990
1008
  | Access Rules | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/AccessRules.xml) | [accessrules.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/accessrules/wsdl/accessrules.wsdl) | - | ✅ Complete |
991
1009
  | Action Engine | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/ActionEngine.xml) | [actionengine.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/actionengine.wsdl) | - | ✅ Complete |
@@ -1007,12 +1025,10 @@ Below is a list of ONVIF services implemented and supported by this library, alo
1007
1025
  | Recording Control | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/RecordingControl.xml) | [recording.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/recording.wsdl) | - | ✅ Complete |
1008
1026
  | Recording Search | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/RecordingSearch.xml) | [search.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/search.wsdl) | - | ✅ Complete |
1009
1027
  | Replay Control | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Replay.xml) | [replay.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/replay.wsdl) | - | ✅ Complete |
1010
- | Resource Query | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/ResourceQuery.xml) | - | | ❌ Any idea? |
1011
1028
  | Schedule | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Schedule.xml) | [schedule.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/schedule/wsdl/schedule.wsdl) | - | ✅ Complete |
1012
1029
  | Security | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Security.xml) | [advancedsecurity.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl) | - | ✅ Complete |
1013
1030
  | Thermal | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Thermal.xml) | [thermal.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/thermal/wsdl/thermal.wsdl) | [radiometry.xsd](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver20/analytics/radiometry.xsd) | ✅ Complete |
1014
1031
  | Uplink | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/Uplink.xml) | [uplink.wsdl](https://developer.onvif.org/pub/specs/branches/development/wsdl/ver10/uplink/wsdl/uplink.wsdl) | - | ✅ Complete |
1015
- | WebRTC | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/WebRTC.xml) | - | - | ❌ Any idea? |
1016
1032
 
1017
1033
  </details>
1018
1034
 
@@ -1112,13 +1128,11 @@ Some ONVIF services have multiple bindings in the same WSDL. These typically inc
1112
1128
  - [ ] Add more usage examples for advanced features.
1113
1129
  - [ ] Add benchmarking and performance metrics.
1114
1130
  - [ ] Add community-contributed device configuration templates.
1115
- - [ ] Implement missing or partial ONVIF services.
1116
- - [ ] Add function to expose ONVIF devices (for debugging purposes by the community).
1117
1131
 
1118
1132
  ## Related Projects
1119
1133
 
1120
1134
  - [onvif-products-directory](https://github.com/nirsimetri/onvif-products-directory):
1121
- This project is a comprehensive ONVIF data aggregation and management suite, designed to help developers explore, analyze, and process ONVIF-compliant product information from hundreds of manufacturers worldwide. It provides a unified structure for device, client, and company data, making it easier to perform research, build integrations, and generate statistics for ONVIF ecosystem analysis.
1135
+ This project is a comprehensive ONVIF data aggregation and management suite, designed to help developers explore, analyze, and process ONVIF-compliant product information from hundreds of manufacturers worldwide.
1122
1136
 
1123
1137
  - (soon) [onvif-rest-server](https://github.com/nirsimetri/onvif-rest-server):
1124
1138
  A RESTful API server for ONVIF devices, enabling easy integration of ONVIF device management, media streaming, and other capabilities into web applications and services.
@@ -1126,19 +1140,10 @@ Some ONVIF services have multiple bindings in the same WSDL. These typically inc
1126
1140
  - (soon) [onvif-mcp](https://github.com/nirsimetri/onvif-mcp):
1127
1141
  A Model Context Protocol (MCP) server for ONVIF, providing a unified API and context-based integration for ONVIF devices, clients, and services. It enables advanced automation, orchestration, and interoperability across ONVIF-compliant devices and clients.
1128
1142
 
1129
- ## Alternatives
1130
-
1131
- If you are looking for other ONVIF Python libraries, here are some alternatives:
1132
-
1133
- - [python-onvif-zeep](https://github.com/FalkTannhaeuser/python-onvif-zeep):
1134
- A synchronous ONVIF client library for Python, using Zeep for SOAP communication. Focuses on compatibility and ease of use for standard ONVIF device operations. Good for scripts and applications where async is not required.
1135
-
1136
- - [python-onvif-zeep-async](https://github.com/openvideolibs/python-onvif-zeep-async):
1137
- An asynchronous ONVIF client library for Python, based on Zeep and asyncio. Suitable for applications requiring non-blocking operations and concurrent device communication. Supports many ONVIF services and is actively maintained.
1138
-
1139
1143
  ## References
1140
1144
  - [ONVIF Official Specifications](https://www.onvif.org/profiles/specifications/specification-history/)
1141
1145
  - [ONVIF Official Specs Repository](https://github.com/onvif/specs)
1146
+ - [ONVIF Application Programmer's Guide](https://www.onvif.org/wp-content/uploads/2016/12/ONVIF_WG-APG-Application_Programmers_Guide-1.pdf)
1142
1147
  - [ONVIF 2.0 Service Operation Index](https://www.onvif.org/onvif/ver20/util/operationIndex.html)
1143
1148
  - [Usage Examples](./examples/)
1144
1149
 
@@ -1,7 +1,7 @@
1
1
  # onvif/__init__.py
2
2
 
3
3
  from .client import ONVIFClient
4
- from .operator import ONVIFOperator, CacheMode
4
+ from .operator import CacheMode
5
5
  from .utils import (
6
6
  ONVIFWSDL,
7
7
  ONVIFOperationException,
@@ -14,7 +14,6 @@ from .cli import main as ONVIFCLI
14
14
 
15
15
  __all__ = [
16
16
  "ONVIFClient",
17
- "ONVIFOperator",
18
17
  "CacheMode",
19
18
  "ONVIFWSDL",
20
19
  "ONVIFOperationException",
@@ -194,7 +194,7 @@ class InteractiveShell(cmd.Cmd):
194
194
  " / __ \\/ | / / | / / _/ ____/",
195
195
  " / / / / |/ /| | / // // /_ ",
196
196
  "/ /_/ / /| / | |/ // // __/ ",
197
- "\\____/_/ |_/ |___/___/_/ v0.2.3",
197
+ "\\____/_/ |_/ |___/___/_/ v0.2.5",
198
198
  " ",
199
199
  ]
200
200
 
@@ -1400,7 +1400,7 @@ class InteractiveShell(cmd.Cmd):
1400
1400
  super().do_help(line)
1401
1401
  else:
1402
1402
  help_text = f"""
1403
- {colorize('ONVIF Interactive Shell — v0.2.3', 'cyan')}\n{colorize('https://github.com/nirsimetri/onvif-python', 'white')}
1403
+ {colorize('ONVIF Interactive Shell — v0.2.5', 'cyan')}\n{colorize('https://github.com/nirsimetri/onvif-python', 'white')}
1404
1404
 
1405
1405
  {colorize('Basic Commands:', 'yellow')}
1406
1406
  capabilities, caps - Show device capabilities