onvif-python 0.1.3__tar.gz → 0.1.4__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 (127) hide show
  1. {onvif_python-0.1.3/onvif_python.egg-info → onvif_python-0.1.4}/PKG-INFO +17 -6
  2. {onvif_python-0.1.3 → onvif_python-0.1.4}/README.md +16 -5
  3. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/cli/interactive.py +30 -15
  4. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/cli/main.py +17 -7
  5. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/cli/utils.py +2 -33
  6. {onvif_python-0.1.3 → onvif_python-0.1.4/onvif_python.egg-info}/PKG-INFO +17 -6
  7. {onvif_python-0.1.3 → onvif_python-0.1.4}/pyproject.toml +1 -1
  8. {onvif_python-0.1.3 → onvif_python-0.1.4}/LICENSE.md +0 -0
  9. {onvif_python-0.1.3 → onvif_python-0.1.4}/MANIFEST.in +0 -0
  10. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/__init__.py +0 -0
  11. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/cli/__init__.py +0 -0
  12. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/cli/__main__.py +0 -0
  13. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/client.py +0 -0
  14. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/operator.py +0 -0
  15. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/__init__.py +0 -0
  16. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/accesscontrol.py +0 -0
  17. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/accessrules.py +0 -0
  18. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/actionengine.py +0 -0
  19. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/analytics/analytics.py +0 -0
  20. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/analytics/ruleengine.py +0 -0
  21. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/analyticsdevice.py +0 -0
  22. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/appmgmt.py +0 -0
  23. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/authenticationbehavior.py +0 -0
  24. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/credential.py +0 -0
  25. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/deviceio.py +0 -0
  26. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/devicemgmt.py +0 -0
  27. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/display.py +0 -0
  28. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/doorcontrol.py +0 -0
  29. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/events/events.py +0 -0
  30. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/events/notification.py +0 -0
  31. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/events/pullpoint.py +0 -0
  32. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/events/subscription.py +0 -0
  33. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/imaging.py +0 -0
  34. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/media.py +0 -0
  35. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/media2.py +0 -0
  36. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/provisioning.py +0 -0
  37. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/ptz.py +0 -0
  38. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/receiver.py +0 -0
  39. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/recording.py +0 -0
  40. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/replay.py +0 -0
  41. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/schedule.py +0 -0
  42. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/search.py +0 -0
  43. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/security/advancedsecurity.py +0 -0
  44. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/security/authorizationserver.py +0 -0
  45. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/security/dot1x.py +0 -0
  46. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/security/jwt.py +0 -0
  47. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/security/keystore.py +0 -0
  48. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/security/mediasigning.py +0 -0
  49. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/security/tlsserver.py +0 -0
  50. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/thermal.py +0 -0
  51. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/services/uplink.py +0 -0
  52. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/utils/__init__.py +0 -0
  53. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/utils/error_handlers.py +0 -0
  54. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/utils/exceptions.py +0 -0
  55. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/utils/wsdl.py +0 -0
  56. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/utils/xml_capture.py +0 -0
  57. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/utils/zeep.py +0 -0
  58. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/accesscontrol/wsdl/index.html +0 -0
  59. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/accessrules/wsdl/accessrules.wsdl +0 -0
  60. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/accessrules/wsdl/index.html +0 -0
  61. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/actionengine.wsdl +0 -0
  62. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl +0 -0
  63. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/advancedsecurity/wsdl/index.html +0 -0
  64. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/analyticsdevice.wsdl +0 -0
  65. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl +0 -0
  66. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/appmgmt/wsdl/index.html +0 -0
  67. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/authenticationbehavior/wsdl/authenticationbehavior.wsdl +0 -0
  68. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/authenticationbehavior/wsdl/index.html +0 -0
  69. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/credential/wsdl/credential.wsdl +0 -0
  70. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/credential/wsdl/index.html +0 -0
  71. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/device/wsdl/devicemgmt.wsdl +0 -0
  72. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/deviceio.wsdl +0 -0
  73. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/display/display.wsdl +0 -0
  74. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/display/wsdl/index.htm +0 -0
  75. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/display.wsdl +0 -0
  76. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/doorcontrol/wsdl/index.html +0 -0
  77. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/events/wsdl/bw-2-vs-mod.wsdl +0 -0
  78. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/events/wsdl/event-vs.wsdl +0 -0
  79. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/events/wsdl/event.wsdl +0 -0
  80. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/events/wsdl/index.html +0 -0
  81. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/federatedsearch.wsdl +0 -0
  82. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/media/wsdl/media.wsdl +0 -0
  83. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/pacs/accesscontrol.wsdl +0 -0
  84. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/pacs/doorcontrol.wsdl +0 -0
  85. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/pacs/types.xsd +0 -0
  86. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/provisioning/wsdl/provisioning.wsdl +0 -0
  87. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/receiver.wsdl +0 -0
  88. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/recording.wsdl +0 -0
  89. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/replay.wsdl +0 -0
  90. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/schedule/wsdl/index.html +0 -0
  91. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/schedule/wsdl/schedule.wsdl +0 -0
  92. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/schema/common.xsd +0 -0
  93. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/schema/metadatastream.xsd +0 -0
  94. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/schema/onvif.xsd +0 -0
  95. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/search.wsdl +0 -0
  96. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/thermal/wsdl/index.html +0 -0
  97. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/thermal/wsdl/thermal.wsdl +0 -0
  98. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/topics/topicns.xml +0 -0
  99. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/uplink/wsdl/index.html +0 -0
  100. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver10/uplink/wsdl/uplink.wsdl +0 -0
  101. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/analytics/humanbody.xsd +0 -0
  102. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/analytics/humanface.xsd +0 -0
  103. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/analytics/index.html +0 -0
  104. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/analytics/radiometry.xsd +0 -0
  105. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/analytics/rules.xsd +0 -0
  106. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/analytics/wsdl/analytics.wsdl +0 -0
  107. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/analytics/wsdl/index.html +0 -0
  108. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/imaging/wsdl/imaging.wsdl +0 -0
  109. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/media/wsdl/index.html +0 -0
  110. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/media/wsdl/media.wsdl +0 -0
  111. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/ptz/wsdl/ptz.wsdl +0 -0
  112. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/util/federated_search_documentation.html +0 -0
  113. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/util/fedsearch-docu-viewer.xsl +0 -0
  114. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/util/onvif-wsdl-viewer.xsl +0 -0
  115. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif/wsdl/ver20/util/operationIndex.html +0 -0
  116. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif_python.egg-info/SOURCES.txt +0 -0
  117. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif_python.egg-info/dependency_links.txt +0 -0
  118. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif_python.egg-info/entry_points.txt +0 -0
  119. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif_python.egg-info/requires.txt +0 -0
  120. {onvif_python-0.1.3 → onvif_python-0.1.4}/onvif_python.egg-info/top_level.txt +0 -0
  121. {onvif_python-0.1.3 → onvif_python-0.1.4}/setup.cfg +0 -0
  122. {onvif_python-0.1.3 → onvif_python-0.1.4}/setup.py +0 -0
  123. {onvif_python-0.1.3 → onvif_python-0.1.4}/tests/test_client.py +0 -0
  124. {onvif_python-0.1.3 → onvif_python-0.1.4}/tests/test_core.py +0 -0
  125. {onvif_python-0.1.3 → onvif_python-0.1.4}/tests/test_error_handlers.py +0 -0
  126. {onvif_python-0.1.3 → onvif_python-0.1.4}/tests/test_exceptions.py +0 -0
  127. {onvif_python-0.1.3 → onvif_python-0.1.4}/tests/test_wsdl_map.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: onvif-python
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: A comprehensive and developer-friendly Python library for working with ONVIF-compliant devices
5
5
  Author-email: Nirsimetri Technologies® <open@nirsimetri.com>
6
6
  Maintainer: Kaburagi
@@ -40,7 +40,7 @@ Dynamic: license-file
40
40
 
41
41
  [![License](https://img.shields.io/badge/License-MIT-blue)](https://github.com/nirsimetri/onvif-python?tab=MIT-1-ov-file)
42
42
  [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/nirsimetri/onvif-python)
43
- [![PyPI](https://img.shields.io/badge/PyPI-0.1.3-orange?logo=archive)](https://pypi.org/project/onvif-python/)
43
+ [![PyPI](https://img.shields.io/badge/PyPI-0.1.4-orange?logo=archive)](https://pypi.org/project/onvif-python/)
44
44
  [![Downloads](https://img.shields.io/pypi/dm/onvif-python?label=Downloads&color=red)](https://clickpy.clickhouse.com/dashboard/onvif-python)
45
45
  <br>
46
46
  [![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)
@@ -212,10 +212,10 @@ This library includes a powerful command-line interface (CLI) for interacting wi
212
212
 
213
213
  ```bash
214
214
  usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--timeout TIMEOUT] [--https] [--no-verify]
215
- [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}]
215
+ [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}] [--version]
216
216
  [service] [method] [params ...]
217
217
 
218
- ONVIF Terminal Client —
218
+ ONVIF Terminal Client — v0.1.4
219
219
  https://github.com/nirsimetri/onvif-python
220
220
 
221
221
  positional arguments:
@@ -241,6 +241,7 @@ options:
241
241
  --wsdl WSDL Custom WSDL directory path
242
242
  --cache {all,db,mem,none}
243
243
  Caching mode for ONVIFClient (default: all). 'all': memory+disk, 'db': disk-only, 'mem': memory-only, 'none': disabled.
244
+ --version, -v Show ONVIF CLI version and exit
244
245
 
245
246
  Examples:
246
247
  # Discover ONVIF devices on network
@@ -269,7 +270,7 @@ Examples:
269
270
  <summary><b>2. Interactive Shell</b></summary>
270
271
 
271
272
  ```bash
272
- ONVIF Interactive Shell Commands -
273
+ ONVIF Interactive Shell Commands - v0.1.4
273
274
  https://github.com/nirsimetri/onvif-python
274
275
 
275
276
  Basic Commands:
@@ -278,7 +279,6 @@ Basic Commands:
278
279
  info - Show connection and device information
279
280
  exit, quit - Exit the shell
280
281
  shortcuts - Show available shortcuts
281
- help <command> - Show help for a specific command
282
282
 
283
283
  Navigation Commands:
284
284
  <service> - Enter service mode (e.g., devicemgmt, media)
@@ -287,6 +287,7 @@ Navigation Commands:
287
287
  up - Exit current service mode (go up one level)
288
288
  pwd - Show current service context
289
289
  clear - Clear terminal screen
290
+ help <command> - Show help for a specific command
290
291
 
291
292
  Service Mode Commands:
292
293
  desc <method> - Show method documentation
@@ -752,6 +753,9 @@ If your device is not listed right now, feel free to contribute your test result
752
753
 
753
754
  This library fully supports all major ONVIF Profiles listed below. Each profile represents a standardized set of features and use cases, ensuring interoperability between ONVIF-compliant devices and clients. You can use this library to integrate with devices and systems that implement any of these profiles.
754
755
 
756
+ <details>
757
+ <summary><b>ONVIF profiles list</b></summary>
758
+
755
759
  | Name | Specifications | Main Features | Typical Use Case | Support |
756
760
  |-----------|----------------|---------------|------------------|---------|
757
761
  | Profile_S | [Document](https://www.onvif.org/wp-content/uploads/2019/12/ONVIF_Profile_-S_Specification_v1-3.pdf) | Video streaming, PTZ, audio, multicasting | Network video transmitters (cameras) and receivers (recorders, VMS) | ✅ Yes |
@@ -762,6 +766,8 @@ This library fully supports all major ONVIF Profiles listed below. Each profile
762
766
  | Profile_D | [Document](https://www.onvif.org/wp-content/uploads/2021/06/onvif-profile-d-specification-v1-0.pdf) | Access control peripherals (locks, sensors, relays) | Peripheral devices for access control | ✅ Yes |
763
767
  | Profile_M | [Document](https://www.onvif.org/wp-content/uploads/2024/04/onvif-profile-m-specification-v1-1.pdf) | Metadata, analytics events, object detection | Analytics devices, metadata clients | ✅ Yes |
764
768
 
769
+ </details>
770
+
765
771
  For a full description of each profile and its features, visit [ONVIF Profiles](https://www.onvif.org/profiles/).
766
772
 
767
773
  ## Implemented ONVIF Services
@@ -771,6 +777,9 @@ For a full description of each profile and its features, visit [ONVIF Profiles](
771
777
 
772
778
  Below is a list of ONVIF services implemented and supported by this library, along with links to the official specifications, service definitions, and schema files as referenced from the [ONVIF Developer Specs](https://developer.onvif.org/pub/specs/branches/development/doc/index.html). This table provides a quick overview of the available ONVIF features and their technical documentation for integration and development purposes.
773
779
 
780
+ <details>
781
+ <summary><b>ONVIF services list</b></summary>
782
+
774
783
  | Service | Specifications | Service Definitions | Schema Files | Status |
775
784
  |------------------------|-------------------------------|-----------------------------|-------------------------------------|------------|
776
785
  | 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 |
@@ -802,6 +811,8 @@ Below is a list of ONVIF services implemented and supported by this library, alo
802
811
  | 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 |
803
812
  | WebRTC | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/WebRTC.xml) | - | - | ❌ Any idea? |
804
813
 
814
+ </details>
815
+
805
816
  ## Service Bindings in ONVIF
806
817
 
807
818
  ONVIF services are defined by WSDL bindings. In this library, there are two main patterns:
@@ -2,7 +2,7 @@
2
2
 
3
3
  [![License](https://img.shields.io/badge/License-MIT-blue)](https://github.com/nirsimetri/onvif-python?tab=MIT-1-ov-file)
4
4
  [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/nirsimetri/onvif-python)
5
- [![PyPI](https://img.shields.io/badge/PyPI-0.1.3-orange?logo=archive)](https://pypi.org/project/onvif-python/)
5
+ [![PyPI](https://img.shields.io/badge/PyPI-0.1.4-orange?logo=archive)](https://pypi.org/project/onvif-python/)
6
6
  [![Downloads](https://img.shields.io/pypi/dm/onvif-python?label=Downloads&color=red)](https://clickpy.clickhouse.com/dashboard/onvif-python)
7
7
  <br>
8
8
  [![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)
@@ -174,10 +174,10 @@ This library includes a powerful command-line interface (CLI) for interacting wi
174
174
 
175
175
  ```bash
176
176
  usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--timeout TIMEOUT] [--https] [--no-verify]
177
- [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}]
177
+ [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}] [--version]
178
178
  [service] [method] [params ...]
179
179
 
180
- ONVIF Terminal Client —
180
+ ONVIF Terminal Client — v0.1.4
181
181
  https://github.com/nirsimetri/onvif-python
182
182
 
183
183
  positional arguments:
@@ -203,6 +203,7 @@ options:
203
203
  --wsdl WSDL Custom WSDL directory path
204
204
  --cache {all,db,mem,none}
205
205
  Caching mode for ONVIFClient (default: all). 'all': memory+disk, 'db': disk-only, 'mem': memory-only, 'none': disabled.
206
+ --version, -v Show ONVIF CLI version and exit
206
207
 
207
208
  Examples:
208
209
  # Discover ONVIF devices on network
@@ -231,7 +232,7 @@ Examples:
231
232
  <summary><b>2. Interactive Shell</b></summary>
232
233
 
233
234
  ```bash
234
- ONVIF Interactive Shell Commands -
235
+ ONVIF Interactive Shell Commands - v0.1.4
235
236
  https://github.com/nirsimetri/onvif-python
236
237
 
237
238
  Basic Commands:
@@ -240,7 +241,6 @@ Basic Commands:
240
241
  info - Show connection and device information
241
242
  exit, quit - Exit the shell
242
243
  shortcuts - Show available shortcuts
243
- help <command> - Show help for a specific command
244
244
 
245
245
  Navigation Commands:
246
246
  <service> - Enter service mode (e.g., devicemgmt, media)
@@ -249,6 +249,7 @@ Navigation Commands:
249
249
  up - Exit current service mode (go up one level)
250
250
  pwd - Show current service context
251
251
  clear - Clear terminal screen
252
+ help <command> - Show help for a specific command
252
253
 
253
254
  Service Mode Commands:
254
255
  desc <method> - Show method documentation
@@ -714,6 +715,9 @@ If your device is not listed right now, feel free to contribute your test result
714
715
 
715
716
  This library fully supports all major ONVIF Profiles listed below. Each profile represents a standardized set of features and use cases, ensuring interoperability between ONVIF-compliant devices and clients. You can use this library to integrate with devices and systems that implement any of these profiles.
716
717
 
718
+ <details>
719
+ <summary><b>ONVIF profiles list</b></summary>
720
+
717
721
  | Name | Specifications | Main Features | Typical Use Case | Support |
718
722
  |-----------|----------------|---------------|------------------|---------|
719
723
  | Profile_S | [Document](https://www.onvif.org/wp-content/uploads/2019/12/ONVIF_Profile_-S_Specification_v1-3.pdf) | Video streaming, PTZ, audio, multicasting | Network video transmitters (cameras) and receivers (recorders, VMS) | ✅ Yes |
@@ -724,6 +728,8 @@ This library fully supports all major ONVIF Profiles listed below. Each profile
724
728
  | Profile_D | [Document](https://www.onvif.org/wp-content/uploads/2021/06/onvif-profile-d-specification-v1-0.pdf) | Access control peripherals (locks, sensors, relays) | Peripheral devices for access control | ✅ Yes |
725
729
  | Profile_M | [Document](https://www.onvif.org/wp-content/uploads/2024/04/onvif-profile-m-specification-v1-1.pdf) | Metadata, analytics events, object detection | Analytics devices, metadata clients | ✅ Yes |
726
730
 
731
+ </details>
732
+
727
733
  For a full description of each profile and its features, visit [ONVIF Profiles](https://www.onvif.org/profiles/).
728
734
 
729
735
  ## Implemented ONVIF Services
@@ -733,6 +739,9 @@ For a full description of each profile and its features, visit [ONVIF Profiles](
733
739
 
734
740
  Below is a list of ONVIF services implemented and supported by this library, along with links to the official specifications, service definitions, and schema files as referenced from the [ONVIF Developer Specs](https://developer.onvif.org/pub/specs/branches/development/doc/index.html). This table provides a quick overview of the available ONVIF features and their technical documentation for integration and development purposes.
735
741
 
742
+ <details>
743
+ <summary><b>ONVIF services list</b></summary>
744
+
736
745
  | Service | Specifications | Service Definitions | Schema Files | Status |
737
746
  |------------------------|-------------------------------|-----------------------------|-------------------------------------|------------|
738
747
  | 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 |
@@ -764,6 +773,8 @@ Below is a list of ONVIF services implemented and supported by this library, alo
764
773
  | 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 |
765
774
  | WebRTC | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/WebRTC.xml) | - | - | ❌ Any idea? |
766
775
 
776
+ </details>
777
+
767
778
  ## Service Bindings in ONVIF
768
779
 
769
780
  ONVIF services are defined by WSDL bindings. In this library, there are two main patterns:
@@ -3,6 +3,8 @@
3
3
  import cmd
4
4
  import sys
5
5
  import socket
6
+ import ssl
7
+ import os
6
8
  import threading
7
9
  import textwrap
8
10
  from datetime import datetime
@@ -181,7 +183,7 @@ class InteractiveShell(cmd.Cmd):
181
183
  " / __ \\/ | / / | / / _/ ____/",
182
184
  " / / / / |/ /| | / // // /_ ",
183
185
  "/ /_/ / /| / | |/ // // __/ ",
184
- "\\____/_/ |_/ |___/___/_/ v0.1.3",
186
+ "\\____/_/ |_/ |___/___/_/ v0.1.4",
185
187
  " ",
186
188
  ]
187
189
 
@@ -220,22 +222,39 @@ class InteractiveShell(cmd.Cmd):
220
222
  self._health_check_thread.start()
221
223
 
222
224
  def _periodic_health_check(self):
223
- """Periodically checks device connection using a TCP socket ping."""
224
- # Wait a moment before the first check to allow the shell to display the intro
225
+ """Periodically checks device connection using TCP or TLS depending on mode."""
226
+ # Wait before first check to allow intro to finish
225
227
  self._stop_health_check.wait(10.0)
228
+
226
229
  while not self._stop_health_check.is_set():
227
230
  sock = None
228
231
  try:
229
- # Create a socket and set a short timeout
230
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
231
- sock.settimeout(3) # 3-second timeout for the connection attempt
232
+ sock = socket.create_connection(
233
+ (self.args.host, self.args.port), timeout=5.0
234
+ )
235
+
236
+ # If HTTPS, perform a short TLS handshake check
237
+ if getattr(self.args, "https", False):
238
+ context = ssl.create_default_context()
239
+ context.check_hostname = False
240
+ context.verify_mode = ssl.CERT_NONE
241
+
242
+ with context.wrap_socket(
243
+ sock, server_hostname=self.args.host
244
+ ) as ssock:
245
+ ssock.settimeout(5)
246
+ # Try a minimal handshake
247
+ ssock.do_handshake()
248
+
249
+ # If we reach here, the connection (and TLS if applicable) succeeded
250
+ pass
232
251
 
233
- # Try to connect to the host and port
234
- sock.connect((self.args.host, self.args.port))
235
252
  except (
236
253
  socket.timeout,
237
254
  ConnectionRefusedError,
238
255
  socket.gaierror,
256
+ ssl.SSLError,
257
+ ssl.SSLEOFError,
239
258
  OSError,
240
259
  ) as e:
241
260
  # Connection failed, trigger exit
@@ -244,7 +263,7 @@ class InteractiveShell(cmd.Cmd):
244
263
  file=sys.stderr,
245
264
  )
246
265
  print(
247
- f"{colorize('Error:', 'red')} TCP check failed - {e}",
266
+ f"{colorize('Error:', 'red')} Health check failed: {e}",
248
267
  file=sys.stderr,
249
268
  )
250
269
  print(
@@ -253,15 +272,13 @@ class InteractiveShell(cmd.Cmd):
253
272
  )
254
273
  # Forcibly exit the entire process. This is necessary to interrupt
255
274
  # the blocking input() call in the main thread.
256
- import os
257
-
258
275
  os._exit(1)
259
276
  finally:
260
277
  # Ensure the socket is always closed
261
278
  if sock:
262
279
  sock.close()
263
280
 
264
- # Wait for the next interval or until stopped
281
+ # Wait before next check or stop signal
265
282
  self._stop_health_check.wait(5.0) # Check every 5 seconds
266
283
 
267
284
  def _handle_connection_error(self, e):
@@ -1141,8 +1158,6 @@ class InteractiveShell(cmd.Cmd):
1141
1158
 
1142
1159
  def do_clear(self, line):
1143
1160
  """Clear terminal screen"""
1144
- import os
1145
-
1146
1161
  # Clear screen for both Windows and Unix-like systems
1147
1162
  os.system("cls" if os.name == "nt" else "clear")
1148
1163
 
@@ -1285,7 +1300,7 @@ class InteractiveShell(cmd.Cmd):
1285
1300
  super().do_help(line)
1286
1301
  else:
1287
1302
  help_text = f"""
1288
- {colorize('ONVIF Interactive Shell Commands -', 'cyan')}\n{colorize('https://github.com/nirsimetri/onvif-python', 'white')}
1303
+ {colorize('ONVIF Interactive Shell Commands - v0.1.4', 'cyan')}\n{colorize('https://github.com/nirsimetri/onvif-python', 'white')}
1289
1304
 
1290
1305
  {colorize('Basic Commands:', 'yellow')}
1291
1306
  capabilities, caps - Show device capabilities
@@ -16,7 +16,7 @@ def create_parser():
16
16
  """Create argument parser for ONVIF CLI"""
17
17
  parser = argparse.ArgumentParser(
18
18
  prog="onvif",
19
- description=f"{colorize('ONVIF Terminal Client', 'yellow')} —\nhttps://github.com/nirsimetri/onvif-python",
19
+ description=f"{colorize('ONVIF Terminal Client', 'yellow')} — v0.1.4\nhttps://github.com/nirsimetri/onvif-python",
20
20
  formatter_class=argparse.RawDescriptionHelpFormatter,
21
21
  epilog=f"""
22
22
  Examples:
@@ -107,6 +107,11 @@ Examples:
107
107
  "params", nargs="*", help="Method parameters as Simple Parameter or JSON string"
108
108
  )
109
109
 
110
+ # ONVI CLI
111
+ parser.add_argument(
112
+ "--version", "-v", action="store_true", help="Show ONVIF CLI version and exit"
113
+ )
114
+
110
115
  return parser
111
116
 
112
117
 
@@ -124,6 +129,17 @@ def main():
124
129
 
125
130
  args = parser.parse_intermixed_args()
126
131
 
132
+ # Show ONVIF CLI version
133
+ if args.version:
134
+ print(colorize("0.1.4", "yellow"))
135
+ sys.exit(0)
136
+
137
+ # Validate arguments early (before discovery)
138
+ if not args.interactive and (not args.service or not args.method):
139
+ parser.error(
140
+ f"Either {colorize('--interactive', 'white')}/{colorize('-i', 'white')} mode or {colorize('service/method', 'white')} must be specified"
141
+ )
142
+
127
143
  # Handle discovery mode
128
144
  if args.discover:
129
145
  if args.host:
@@ -175,12 +191,6 @@ def main():
175
191
  print("\nPassword entry cancelled.")
176
192
  sys.exit(1)
177
193
 
178
- # Validate arguments
179
- if not args.interactive and (not args.service or not args.method):
180
- parser.error(
181
- f"Either {colorize('--interactive', 'white')}/{colorize('-i', 'white')} mode or {colorize('service/method', 'white')} must be specified"
182
- )
183
-
184
194
  try:
185
195
  # Create ONVIF client
186
196
  client = ONVIFClient(
@@ -547,36 +547,6 @@ def extract_documentation_text(doc_elem) -> str:
547
547
  return "".join(parts)
548
548
 
549
549
 
550
- def extract_documentation_text(doc_elem) -> str:
551
- """
552
- Extract full text from xs:documentation element including child elements.
553
- This handles cases where documentation contains HTML tags like <a href="">.
554
-
555
- Args:
556
- doc_elem: The xs:documentation XML element
557
-
558
- Returns:
559
- Full text content including text from child elements
560
- """
561
- if doc_elem is None:
562
- return ""
563
-
564
- parts = []
565
-
566
- # Get text before first child
567
- if doc_elem.text:
568
- parts.append(doc_elem.text)
569
-
570
- # Get text from and after each child element
571
- for child in doc_elem:
572
- if child.text:
573
- parts.append(child.text)
574
- if child.tail:
575
- parts.append(child.tail)
576
-
577
- return "".join(parts)
578
-
579
-
580
550
  def get_operation_type_info(
581
551
  service_obj, operation_name: str
582
552
  ) -> Optional[Dict[str, Any]]:
@@ -641,7 +611,7 @@ def get_operation_type_info(
641
611
 
642
612
  return result
643
613
 
644
- except Exception as e:
614
+ except Exception:
645
615
  return None
646
616
 
647
617
 
@@ -802,12 +772,11 @@ def resolve_element_type(
802
772
  return parameters
803
773
 
804
774
  # Get element documentation
805
- element_doc = None
806
775
  doc_elem = element.find("xs:annotation/xs:documentation", namespaces)
807
776
  if doc_elem is not None:
808
777
  full_text = extract_documentation_text(doc_elem)
809
778
  if full_text:
810
- element_doc = clean_documentation_html(full_text)
779
+ clean_documentation_html(full_text)
811
780
 
812
781
  # Check if it has a complexType
813
782
  complex_type = element.find("xs:complexType", namespaces)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: onvif-python
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: A comprehensive and developer-friendly Python library for working with ONVIF-compliant devices
5
5
  Author-email: Nirsimetri Technologies® <open@nirsimetri.com>
6
6
  Maintainer: Kaburagi
@@ -40,7 +40,7 @@ Dynamic: license-file
40
40
 
41
41
  [![License](https://img.shields.io/badge/License-MIT-blue)](https://github.com/nirsimetri/onvif-python?tab=MIT-1-ov-file)
42
42
  [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/nirsimetri/onvif-python)
43
- [![PyPI](https://img.shields.io/badge/PyPI-0.1.3-orange?logo=archive)](https://pypi.org/project/onvif-python/)
43
+ [![PyPI](https://img.shields.io/badge/PyPI-0.1.4-orange?logo=archive)](https://pypi.org/project/onvif-python/)
44
44
  [![Downloads](https://img.shields.io/pypi/dm/onvif-python?label=Downloads&color=red)](https://clickpy.clickhouse.com/dashboard/onvif-python)
45
45
  <br>
46
46
  [![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)
@@ -212,10 +212,10 @@ This library includes a powerful command-line interface (CLI) for interacting wi
212
212
 
213
213
  ```bash
214
214
  usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password PASSWORD] [--discover] [--timeout TIMEOUT] [--https] [--no-verify]
215
- [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}]
215
+ [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}] [--version]
216
216
  [service] [method] [params ...]
217
217
 
218
- ONVIF Terminal Client —
218
+ ONVIF Terminal Client — v0.1.4
219
219
  https://github.com/nirsimetri/onvif-python
220
220
 
221
221
  positional arguments:
@@ -241,6 +241,7 @@ options:
241
241
  --wsdl WSDL Custom WSDL directory path
242
242
  --cache {all,db,mem,none}
243
243
  Caching mode for ONVIFClient (default: all). 'all': memory+disk, 'db': disk-only, 'mem': memory-only, 'none': disabled.
244
+ --version, -v Show ONVIF CLI version and exit
244
245
 
245
246
  Examples:
246
247
  # Discover ONVIF devices on network
@@ -269,7 +270,7 @@ Examples:
269
270
  <summary><b>2. Interactive Shell</b></summary>
270
271
 
271
272
  ```bash
272
- ONVIF Interactive Shell Commands -
273
+ ONVIF Interactive Shell Commands - v0.1.4
273
274
  https://github.com/nirsimetri/onvif-python
274
275
 
275
276
  Basic Commands:
@@ -278,7 +279,6 @@ Basic Commands:
278
279
  info - Show connection and device information
279
280
  exit, quit - Exit the shell
280
281
  shortcuts - Show available shortcuts
281
- help <command> - Show help for a specific command
282
282
 
283
283
  Navigation Commands:
284
284
  <service> - Enter service mode (e.g., devicemgmt, media)
@@ -287,6 +287,7 @@ Navigation Commands:
287
287
  up - Exit current service mode (go up one level)
288
288
  pwd - Show current service context
289
289
  clear - Clear terminal screen
290
+ help <command> - Show help for a specific command
290
291
 
291
292
  Service Mode Commands:
292
293
  desc <method> - Show method documentation
@@ -752,6 +753,9 @@ If your device is not listed right now, feel free to contribute your test result
752
753
 
753
754
  This library fully supports all major ONVIF Profiles listed below. Each profile represents a standardized set of features and use cases, ensuring interoperability between ONVIF-compliant devices and clients. You can use this library to integrate with devices and systems that implement any of these profiles.
754
755
 
756
+ <details>
757
+ <summary><b>ONVIF profiles list</b></summary>
758
+
755
759
  | Name | Specifications | Main Features | Typical Use Case | Support |
756
760
  |-----------|----------------|---------------|------------------|---------|
757
761
  | Profile_S | [Document](https://www.onvif.org/wp-content/uploads/2019/12/ONVIF_Profile_-S_Specification_v1-3.pdf) | Video streaming, PTZ, audio, multicasting | Network video transmitters (cameras) and receivers (recorders, VMS) | ✅ Yes |
@@ -762,6 +766,8 @@ This library fully supports all major ONVIF Profiles listed below. Each profile
762
766
  | Profile_D | [Document](https://www.onvif.org/wp-content/uploads/2021/06/onvif-profile-d-specification-v1-0.pdf) | Access control peripherals (locks, sensors, relays) | Peripheral devices for access control | ✅ Yes |
763
767
  | Profile_M | [Document](https://www.onvif.org/wp-content/uploads/2024/04/onvif-profile-m-specification-v1-1.pdf) | Metadata, analytics events, object detection | Analytics devices, metadata clients | ✅ Yes |
764
768
 
769
+ </details>
770
+
765
771
  For a full description of each profile and its features, visit [ONVIF Profiles](https://www.onvif.org/profiles/).
766
772
 
767
773
  ## Implemented ONVIF Services
@@ -771,6 +777,9 @@ For a full description of each profile and its features, visit [ONVIF Profiles](
771
777
 
772
778
  Below is a list of ONVIF services implemented and supported by this library, along with links to the official specifications, service definitions, and schema files as referenced from the [ONVIF Developer Specs](https://developer.onvif.org/pub/specs/branches/development/doc/index.html). This table provides a quick overview of the available ONVIF features and their technical documentation for integration and development purposes.
773
779
 
780
+ <details>
781
+ <summary><b>ONVIF services list</b></summary>
782
+
774
783
  | Service | Specifications | Service Definitions | Schema Files | Status |
775
784
  |------------------------|-------------------------------|-----------------------------|-------------------------------------|------------|
776
785
  | 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 |
@@ -802,6 +811,8 @@ Below is a list of ONVIF services implemented and supported by this library, alo
802
811
  | 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 |
803
812
  | WebRTC | [Document](https://developer.onvif.org/pub/specs/branches/development/doc/WebRTC.xml) | - | - | ❌ Any idea? |
804
813
 
814
+ </details>
815
+
805
816
  ## Service Bindings in ONVIF
806
817
 
807
818
  ONVIF services are defined by WSDL bindings. In this library, there are two main patterns:
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "onvif-python"
7
- version = "0.1.3"
7
+ version = "0.1.4"
8
8
  description = "A comprehensive and developer-friendly Python library for working with ONVIF-compliant devices"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
File without changes
File without changes
File without changes
File without changes