onvif-python 0.2.0__tar.gz → 0.2.1__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.
- {onvif_python-0.2.0/onvif_python.egg-info → onvif_python-0.2.1}/PKG-INFO +4 -4
- {onvif_python-0.2.0 → onvif_python-0.2.1}/README.md +3 -3
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/cli/interactive.py +2 -2
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/cli/main.py +17 -4
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/operator.py +1 -3
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/utils/discovery.py +1 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/utils/error_handlers.py +1 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/utils/service.py +5 -9
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/utils/wsdl.py +1 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/utils/xml_capture.py +1 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/utils/zeep.py +1 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1/onvif_python.egg-info}/PKG-INFO +4 -4
- {onvif_python-0.2.0 → onvif_python-0.2.1}/pyproject.toml +1 -1
- {onvif_python-0.2.0 → onvif_python-0.2.1}/LICENSE.md +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/MANIFEST.in +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/__init__.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/cli/__init__.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/cli/__main__.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/cli/utils.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/client.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/db/companies.db +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/db/products.db +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/__init__.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/accesscontrol.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/accessrules.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/actionengine.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/analytics/analytics.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/analytics/ruleengine.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/analyticsdevice.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/appmgmt.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/authenticationbehavior.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/credential.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/deviceio.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/devicemgmt.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/display.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/doorcontrol.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/events/events.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/events/notification.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/events/pullpoint.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/events/subscription.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/imaging.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/media.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/media2.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/provisioning.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/ptz.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/receiver.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/recording.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/replay.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/schedule.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/search.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/security/advancedsecurity.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/security/authorizationserver.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/security/dot1x.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/security/jwt.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/security/keystore.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/security/mediasigning.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/security/tlsserver.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/thermal.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/services/uplink.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/utils/__init__.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/utils/exceptions.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/LICENSE.md +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/accesscontrol/wsdl/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/accessrules/wsdl/accessrules.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/accessrules/wsdl/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/actionengine.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/advancedsecurity/wsdl/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/analyticsdevice.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/appmgmt/wsdl/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/authenticationbehavior/wsdl/authenticationbehavior.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/authenticationbehavior/wsdl/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/credential/wsdl/credential.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/credential/wsdl/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/device/wsdl/devicemgmt.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/deviceio.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/display/display.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/display/wsdl/index.htm +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/display.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/doorcontrol/wsdl/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/events/wsdl/bw-2-vs-mod.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/events/wsdl/event-vs.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/events/wsdl/event.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/events/wsdl/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/federatedsearch.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/media/wsdl/media.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/pacs/accesscontrol.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/pacs/doorcontrol.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/pacs/types.xsd +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/provisioning/wsdl/provisioning.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/receiver.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/recording.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/replay.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/schedule/wsdl/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/schedule/wsdl/schedule.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/schema/common.xsd +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/schema/metadatastream.xsd +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/schema/onvif.xsd +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/search.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/thermal/wsdl/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/thermal/wsdl/thermal.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/topics/topicns.xml +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/uplink/wsdl/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/uplink/wsdl/uplink.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/analytics/humanbody.xsd +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/analytics/humanface.xsd +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/analytics/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/analytics/radiometry.xsd +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/analytics/rules.xsd +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/analytics/wsdl/analytics.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/analytics/wsdl/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/imaging/wsdl/imaging.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/media/wsdl/index.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/media/wsdl/media.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/ptz/wsdl/ptz.wsdl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/util/federated_search_documentation.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/util/fedsearch-docu-viewer.xsl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/util/onvif-wsdl-viewer.xsl +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/util/operationIndex.html +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif_python.egg-info/SOURCES.txt +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif_python.egg-info/dependency_links.txt +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif_python.egg-info/entry_points.txt +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif_python.egg-info/requires.txt +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/onvif_python.egg-info/top_level.txt +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/setup.cfg +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/setup.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/tests/test_client.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/tests/test_core.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/tests/test_error_handlers.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/tests/test_exceptions.py +0 -0
- {onvif_python-0.2.0 → onvif_python-0.2.1}/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.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: A modern Python library for ONVIF-compliant devices
|
|
5
5
|
Author-email: Nirsimetri Technologies® <open@nirsimetri.com>
|
|
6
6
|
Maintainer: Kaburagi
|
|
@@ -47,7 +47,7 @@ Dynamic: license-file
|
|
|
47
47
|
|
|
48
48
|
[](https://app.codacy.com/gh/nirsimetri/onvif-python/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
|
|
49
49
|
[](https://deepwiki.com/nirsimetri/onvif-python)
|
|
50
|
-
[](https://pypi.org/project/onvif-python/)
|
|
51
51
|
[](https://clickpy.clickhouse.com/dashboard/onvif-python)
|
|
52
52
|
<br>
|
|
53
53
|
[](https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml)
|
|
@@ -356,7 +356,7 @@ usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password
|
|
|
356
356
|
[--no-verify] [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}] [--health-check-interval HEALTH_CHECK_INTERVAL] [--version]
|
|
357
357
|
[service] [method] [params ...]
|
|
358
358
|
|
|
359
|
-
ONVIF Terminal Client — v0.2.
|
|
359
|
+
ONVIF Terminal Client — v0.2.1
|
|
360
360
|
https://github.com/nirsimetri/onvif-python
|
|
361
361
|
|
|
362
362
|
positional arguments:
|
|
@@ -429,7 +429,7 @@ Examples:
|
|
|
429
429
|
<summary><b>2. Interactive Shell</b></summary>
|
|
430
430
|
|
|
431
431
|
```bash
|
|
432
|
-
ONVIF Interactive Shell — v0.2.
|
|
432
|
+
ONVIF Interactive Shell — v0.2.1
|
|
433
433
|
https://github.com/nirsimetri/onvif-python
|
|
434
434
|
|
|
435
435
|
Basic Commands:
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://app.codacy.com/gh/nirsimetri/onvif-python/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
|
|
6
6
|
[](https://deepwiki.com/nirsimetri/onvif-python)
|
|
7
|
-
[](https://pypi.org/project/onvif-python/)
|
|
8
8
|
[](https://clickpy.clickhouse.com/dashboard/onvif-python)
|
|
9
9
|
<br>
|
|
10
10
|
[](https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml)
|
|
@@ -313,7 +313,7 @@ usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password
|
|
|
313
313
|
[--no-verify] [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}] [--health-check-interval HEALTH_CHECK_INTERVAL] [--version]
|
|
314
314
|
[service] [method] [params ...]
|
|
315
315
|
|
|
316
|
-
ONVIF Terminal Client — v0.2.
|
|
316
|
+
ONVIF Terminal Client — v0.2.1
|
|
317
317
|
https://github.com/nirsimetri/onvif-python
|
|
318
318
|
|
|
319
319
|
positional arguments:
|
|
@@ -386,7 +386,7 @@ Examples:
|
|
|
386
386
|
<summary><b>2. Interactive Shell</b></summary>
|
|
387
387
|
|
|
388
388
|
```bash
|
|
389
|
-
ONVIF Interactive Shell — v0.2.
|
|
389
|
+
ONVIF Interactive Shell — v0.2.1
|
|
390
390
|
https://github.com/nirsimetri/onvif-python
|
|
391
391
|
|
|
392
392
|
Basic Commands:
|
|
@@ -194,7 +194,7 @@ class InteractiveShell(cmd.Cmd):
|
|
|
194
194
|
" / __ \\/ | / / | / / _/ ____/",
|
|
195
195
|
" / / / / |/ /| | / // // /_ ",
|
|
196
196
|
"/ /_/ / /| / | |/ // // __/ ",
|
|
197
|
-
"\\____/_/ |_/ |___/___/_/ v0.2.
|
|
197
|
+
"\\____/_/ |_/ |___/___/_/ v0.2.1",
|
|
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.
|
|
1403
|
+
{colorize('ONVIF Interactive Shell — v0.2.1', '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
|
|
@@ -21,7 +21,7 @@ def create_parser():
|
|
|
21
21
|
"""Create argument parser for ONVIF CLI"""
|
|
22
22
|
parser = argparse.ArgumentParser(
|
|
23
23
|
prog="onvif",
|
|
24
|
-
description=f"{colorize('ONVIF Terminal Client', 'yellow')} — v0.2.
|
|
24
|
+
description=f"{colorize('ONVIF Terminal Client', 'yellow')} — v0.2.1\nhttps://github.com/nirsimetri/onvif-python",
|
|
25
25
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
26
26
|
epilog=f"""
|
|
27
27
|
Examples:
|
|
@@ -198,10 +198,14 @@ def search_products(search_term: str, page: int = 1, per_page: int = 20) -> None
|
|
|
198
198
|
WHERE LOWER(model) LIKE LOWER(?)
|
|
199
199
|
OR LOWER(post_title) LIKE LOWER(?)
|
|
200
200
|
OR LOWER(company_name) LIKE LOWER(?)
|
|
201
|
+
OR LOWER(product_category) LIKE LOWER(?)
|
|
201
202
|
"""
|
|
202
203
|
|
|
203
204
|
search_pattern = f"%{search_term}%"
|
|
204
|
-
cursor.execute(
|
|
205
|
+
cursor.execute(
|
|
206
|
+
count_query,
|
|
207
|
+
(search_pattern, search_pattern, search_pattern, search_pattern),
|
|
208
|
+
)
|
|
205
209
|
total_count = cursor.fetchone()[0]
|
|
206
210
|
|
|
207
211
|
if total_count == 0:
|
|
@@ -229,12 +233,21 @@ def search_products(search_term: str, page: int = 1, per_page: int = 20) -> None
|
|
|
229
233
|
WHERE LOWER(model) LIKE LOWER(?)
|
|
230
234
|
OR LOWER(post_title) LIKE LOWER(?)
|
|
231
235
|
OR LOWER(company_name) LIKE LOWER(?)
|
|
236
|
+
OR LOWER(product_category) LIKE LOWER(?)
|
|
232
237
|
ORDER BY test_date DESC
|
|
233
238
|
LIMIT ? OFFSET ?
|
|
234
239
|
"""
|
|
235
240
|
|
|
236
241
|
cursor.execute(
|
|
237
|
-
query,
|
|
242
|
+
query,
|
|
243
|
+
(
|
|
244
|
+
search_pattern,
|
|
245
|
+
search_pattern,
|
|
246
|
+
search_pattern,
|
|
247
|
+
search_pattern,
|
|
248
|
+
per_page,
|
|
249
|
+
offset,
|
|
250
|
+
),
|
|
238
251
|
)
|
|
239
252
|
results = cursor.fetchall()
|
|
240
253
|
|
|
@@ -448,7 +461,7 @@ def main():
|
|
|
448
461
|
|
|
449
462
|
# Show ONVIF CLI version
|
|
450
463
|
if args.version:
|
|
451
|
-
print(colorize("0.2.
|
|
464
|
+
print(colorize("0.2.1", "yellow"))
|
|
452
465
|
sys.exit(0)
|
|
453
466
|
|
|
454
467
|
# Handle product search
|
|
@@ -15,6 +15,7 @@ from zeep.wsse.username import UsernameToken
|
|
|
15
15
|
from .utils import ONVIFOperationException, ZeepPatcher
|
|
16
16
|
|
|
17
17
|
logger = logging.getLogger(__name__)
|
|
18
|
+
logger.addHandler(logging.NullHandler())
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
class CacheMode(Enum):
|
|
@@ -194,7 +195,6 @@ class ONVIFOperator:
|
|
|
194
195
|
try:
|
|
195
196
|
func = getattr(self.service, method)
|
|
196
197
|
except AttributeError as e:
|
|
197
|
-
logger.error(f"Method {method} not found in {self.service_name} service")
|
|
198
198
|
raise ONVIFOperationException(operation=method, original_exception=e)
|
|
199
199
|
|
|
200
200
|
try:
|
|
@@ -207,10 +207,8 @@ class ONVIFOperator:
|
|
|
207
207
|
return result
|
|
208
208
|
|
|
209
209
|
except Fault as e:
|
|
210
|
-
logger.error(f"SOAP Fault in {self.service_name}.{method}: {e}")
|
|
211
210
|
raise ONVIFOperationException(operation=method, original_exception=e)
|
|
212
211
|
except Exception as e:
|
|
213
|
-
logger.error(f"ONVIF call error in {self.service_name}.{method}: {e}")
|
|
214
212
|
raise ONVIFOperationException(operation=method, original_exception=e)
|
|
215
213
|
|
|
216
214
|
def create_type(self, type_name: str):
|
|
@@ -4,6 +4,7 @@ import logging
|
|
|
4
4
|
from .exceptions import ONVIFOperationException
|
|
5
5
|
|
|
6
6
|
logger = logging.getLogger(__name__)
|
|
7
|
+
logger.addHandler(logging.NullHandler())
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
def _is_zeep_object(obj):
|
|
@@ -40,13 +41,6 @@ class ONVIFService:
|
|
|
40
41
|
3. Is not a private method (doesn't start with underscore)
|
|
41
42
|
4. Is not an internal attribute (like 'operator')
|
|
42
43
|
|
|
43
|
-
Benefits:
|
|
44
|
-
1. **DRY Principle**: No need to repeat error handling in every method
|
|
45
|
-
2. **Consistency**: All ONVIF operations behave the same way
|
|
46
|
-
3. **Maintainability**: Error handling logic in one place
|
|
47
|
-
4. **Debuggability**: Always know which operation failed
|
|
48
|
-
5. **Transparency**: No boilerplate code in service implementations
|
|
49
|
-
|
|
50
44
|
Notes:
|
|
51
45
|
- This is an abstract base class - don't instantiate directly
|
|
52
46
|
- Subclasses must implement their own __init__ and ONVIF methods
|
|
@@ -113,11 +107,13 @@ class ONVIFService:
|
|
|
113
107
|
return result
|
|
114
108
|
except ONVIFOperationException as oe:
|
|
115
109
|
# Re-raise ONVIF exceptions as-is
|
|
116
|
-
|
|
110
|
+
service_name = getattr(self.operator, "service_name", "Unknown")
|
|
111
|
+
logger.error(f"{service_name}.{name}: {oe}")
|
|
117
112
|
raise
|
|
118
113
|
except Exception as e:
|
|
119
114
|
# Convert any other exception (including TypeError) to ONVIFOperationException
|
|
120
|
-
|
|
115
|
+
service_name = getattr(self.operator, "service_name", "Unknown")
|
|
116
|
+
logger.error(f"{service_name}.{name}: {e}")
|
|
121
117
|
raise ONVIFOperationException(name, e)
|
|
122
118
|
|
|
123
119
|
return wrapped_method
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: onvif-python
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: A modern Python library for ONVIF-compliant devices
|
|
5
5
|
Author-email: Nirsimetri Technologies® <open@nirsimetri.com>
|
|
6
6
|
Maintainer: Kaburagi
|
|
@@ -47,7 +47,7 @@ Dynamic: license-file
|
|
|
47
47
|
|
|
48
48
|
[](https://app.codacy.com/gh/nirsimetri/onvif-python/dashboard?utm_source=gh&utm_medium=referral&utm_content=&utm_campaign=Badge_grade)
|
|
49
49
|
[](https://deepwiki.com/nirsimetri/onvif-python)
|
|
50
|
-
[](https://pypi.org/project/onvif-python/)
|
|
51
51
|
[](https://clickpy.clickhouse.com/dashboard/onvif-python)
|
|
52
52
|
<br>
|
|
53
53
|
[](https://github.com/nirsimetri/onvif-python/actions/workflows/python-app.yml)
|
|
@@ -356,7 +356,7 @@ usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password
|
|
|
356
356
|
[--no-verify] [--no-patch] [--interactive] [--debug] [--wsdl WSDL] [--cache {all,db,mem,none}] [--health-check-interval HEALTH_CHECK_INTERVAL] [--version]
|
|
357
357
|
[service] [method] [params ...]
|
|
358
358
|
|
|
359
|
-
ONVIF Terminal Client — v0.2.
|
|
359
|
+
ONVIF Terminal Client — v0.2.1
|
|
360
360
|
https://github.com/nirsimetri/onvif-python
|
|
361
361
|
|
|
362
362
|
positional arguments:
|
|
@@ -429,7 +429,7 @@ Examples:
|
|
|
429
429
|
<summary><b>2. Interactive Shell</b></summary>
|
|
430
430
|
|
|
431
431
|
```bash
|
|
432
|
-
ONVIF Interactive Shell — v0.2.
|
|
432
|
+
ONVIF Interactive Shell — v0.2.1
|
|
433
433
|
https://github.com/nirsimetri/onvif-python
|
|
434
434
|
|
|
435
435
|
Basic Commands:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/accessrules/wsdl/accessrules.wsdl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/authenticationbehavior/wsdl/index.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver10/provisioning/wsdl/provisioning.wsdl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{onvif_python-0.2.0 → onvif_python-0.2.1}/onvif/wsdl/ver20/util/federated_search_documentation.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|