diff --git a/README.md b/README.md
index 63fa7ce..2917345 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@

-

+

@@ -319,7 +319,7 @@ usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password
[--cache {all,db,mem,none}] [--health-check-interval HEALTH_CHECK_INTERVAL] [--output OUTPUT] [--version]
[service] [method] [params ...]
-ONVIF Terminal Client — v0.2.9
+ONVIF Terminal Client — v0.2.10
https://github.com/nirsimetri/onvif-python
positional arguments:
@@ -400,7 +400,7 @@ Examples:
2. Interactive Shell
```bash
-ONVIF Interactive Shell — v0.2.9
+ONVIF Interactive Shell — v0.2.10
https://github.com/nirsimetri/onvif-python
Basic Commands:
diff --git a/README_ID.md b/README_ID.md
index e3dcb99..b7af256 100644
--- a/README_ID.md
+++ b/README_ID.md
@@ -3,7 +3,7 @@

-

+

@@ -319,7 +319,7 @@ usage: onvif [-h] [--host HOST] [--port PORT] [--username USERNAME] [--password
[--cache {all,db,mem,none}] [--health-check-interval HEALTH_CHECK_INTERVAL] [--output OUTPUT] [--version]
[service] [method] [params ...]
-ONVIF Terminal Client — v0.2.9
+ONVIF Terminal Client — v0.2.10
https://github.com/nirsimetri/onvif-python
positional arguments:
@@ -401,7 +401,7 @@ Examples:
```bash
-ONVIF Interactive Shell — v0.2.9
+ONVIF Interactive Shell — v0.2.10
https://github.com/nirsimetri/onvif-python
Basic Commands:
diff --git a/onvif/__init__.py b/onvif/__init__.py
index 1efb484..bece76a 100644
--- a/onvif/__init__.py
+++ b/onvif/__init__.py
@@ -1,6 +1,6 @@
# onvif/__init__.py
-__version__ = "0.2.9"
+__version__ = "0.2.10"
from .client import ONVIFClient
from .operator import CacheMode
diff --git a/onvif/cli/utils.py b/onvif/cli/utils.py
index 9cdc7ce..0b2a168 100644
--- a/onvif/cli/utils.py
+++ b/onvif/cli/utils.py
@@ -221,7 +221,7 @@ def get_service_methods(service_obj) -> list:
for attr_name in dir(service_obj):
if not attr_name.startswith("_") and callable(getattr(service_obj, attr_name)):
# Skip helper methods
- if attr_name not in ["type", "desc", "operations"]:
+ if attr_name not in ["type", "desc", "operations", "to_dict"]:
methods.append(attr_name)
return sorted(methods)
diff --git a/onvif/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl b/onvif/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl
index 6d12711..fc0d750 100644
--- a/onvif/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl
+++ b/onvif/wsdl/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl
@@ -10,7 +10,7 @@
-->
-
+
@@ -434,6 +434,11 @@
The base64-encoded DER representation of the X.509 certificate.
+
+
+ The keystore has a matching private key.
+
+
diff --git a/onvif/wsdl/ver10/analyticsdevice.wsdl b/onvif/wsdl/ver10/analyticsdevice.wsdl
index f36b182..2549eb5 100644
--- a/onvif/wsdl/ver10/analyticsdevice.wsdl
+++ b/onvif/wsdl/ver10/analyticsdevice.wsdl
@@ -10,7 +10,7 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
-->
-
+
diff --git a/onvif/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl b/onvif/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl
index 1c9016f..848d20c 100644
--- a/onvif/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl
+++ b/onvif/wsdl/ver10/appmgmt/wsdl/appmgmt.wsdl
@@ -1,7 +1,7 @@
-
+
diff --git a/onvif/wsdl/ver10/recording.wsdl b/onvif/wsdl/ver10/recording.wsdl
index 341396b..22b3bbf 100644
--- a/onvif/wsdl/ver10/recording.wsdl
+++ b/onvif/wsdl/ver10/recording.wsdl
@@ -10,7 +10,7 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
-->
-
+
diff --git a/onvif/wsdl/ver10/schema/metadatastream.xsd b/onvif/wsdl/ver10/schema/metadatastream.xsd
index d4b1741..967d094 100644
--- a/onvif/wsdl/ver10/schema/metadatastream.xsd
+++ b/onvif/wsdl/ver10/schema/metadatastream.xsd
@@ -11,7 +11,7 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
xmlns:tt="http://www.onvif.org/ver10/schema"
xmlns:fc="http://www.onvif.org/ver20/analytics/humanface"
xmlns:bd="http://www.onvif.org/ver20/analytics/humanbody"
- xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" targetNamespace="http://www.onvif.org/ver10/schema" elementFormDefault="qualified" version="25.06">
+ xmlns:wsnt="http://docs.oasis-open.org/wsn/b-2" targetNamespace="http://www.onvif.org/ver10/schema" elementFormDefault="qualified" version="25.12">
diff --git a/onvif/wsdl/ver10/schema/onvif.xsd b/onvif/wsdl/ver10/schema/onvif.xsd
index 281f27f..48a81e9 100644
--- a/onvif/wsdl/ver10/schema/onvif.xsd
+++ b/onvif/wsdl/ver10/schema/onvif.xsd
@@ -8,7 +8,7 @@ Recipients of this document may copy, distribute, publish, or display this docum
THIS DOCUMENT IS PROVIDED "AS IS," AND THE CORPORATION AND ITS MEMBERS AND THEIR AFFILIATES, MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THIS DOCUMENT ARE SUITABLE FOR ANY PURPOSE; OR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT, WHETHER OR NOT (1) THE CORPORATION, MEMBERS OR THEIR AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR (2) SUCH DAMAGES WERE REASONABLY FORESEEABLE, AND ARISING OUT OF OR RELATING TO ANY USE OR DISTRIBUTION OF THIS DOCUMENT. THE FOREGOING DISCLAIMER AND LIMITATION ON LIABILITY DO NOT APPLY TO, INVALIDATE, OR LIMIT REPRESENTATIONS AND WARRANTIES MADE BY THE MEMBERS AND THEIR RESPECTIVE AFFILIATES TO THE CORPORATION AND OTHER MEMBERS IN CERTAIN WRITTEN POLICIES OF THE CORPORATION.
-->
-
+
diff --git a/onvif/wsdl/ver10/uplink/wsdl/uplink.wsdl b/onvif/wsdl/ver10/uplink/wsdl/uplink.wsdl
index 5c7c307..17fa416 100644
--- a/onvif/wsdl/ver10/uplink/wsdl/uplink.wsdl
+++ b/onvif/wsdl/ver10/uplink/wsdl/uplink.wsdl
@@ -10,7 +10,7 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
-->
-
+
diff --git a/onvif/wsdl/ver20/media/wsdl/media.wsdl b/onvif/wsdl/ver20/media/wsdl/media.wsdl
index 8212b02..670b0da 100644
--- a/onvif/wsdl/ver20/media/wsdl/media.wsdl
+++ b/onvif/wsdl/ver20/media/wsdl/media.wsdl
@@ -10,7 +10,7 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
-->
-
+
diff --git a/onvif/wsdl/ver20/ptz/wsdl/ptz.wsdl b/onvif/wsdl/ver20/ptz/wsdl/ptz.wsdl
index 7d01747..0caf752 100644
--- a/onvif/wsdl/ver20/ptz/wsdl/ptz.wsdl
+++ b/onvif/wsdl/ver20/ptz/wsdl/ptz.wsdl
@@ -10,7 +10,7 @@ IN NO EVENT WILL THE CORPORATION OR ITS MEMBERS OR THEIR AFFILIATES BE LIABLE FO
-->
-
+
diff --git a/pyproject.toml b/pyproject.toml
index 1278563..d5501e3 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "onvif-python"
-version = "0.2.9"
+version = "0.2.10"
description = "A modern Python library for ONVIF-compliant devices"
readme = "README.md"
requires-python = ">=3.9"
diff --git a/tests/services/base_service_test.py b/tests/services/base_service_test.py
index 7681496..abc229d 100644
--- a/tests/services/base_service_test.py
+++ b/tests/services/base_service_test.py
@@ -146,7 +146,7 @@ def test_no_duplicate_methods(self):
continue
# Skip helper methods
- if method_name in ["type", "desc", "operations"]:
+ if method_name in ["type", "desc", "operations", "to_dict"]:
continue
method_names.append(method_name)
@@ -388,7 +388,7 @@ def test_operator_call_usage(self):
implemented_methods = self.get_implemented_methods()
# Skip helper methods that don't call operator.call()
- helper_methods = ["type", "desc", "operations"]
+ helper_methods = ["type", "desc", "operations", "to_dict"]
errors = []
@@ -447,7 +447,7 @@ def test_no_extra_methods(self):
implemented_methods = self.get_implemented_methods()
# Allowed helper methods that are not ONVIF operations
- allowed_helper_methods = ["type", "desc", "operations"]
+ allowed_helper_methods = ["type", "desc", "operations", "to_dict"]
extra_methods = []
for method_name in implemented_methods.keys():
@@ -482,7 +482,7 @@ def test_parameter_forwarding_for_all_methods(self):
implemented_methods = self.get_implemented_methods()
# Skip helper methods that don't call operator.call()
- helper_methods = ["type", "desc", "operations"]
+ helper_methods = ["type", "desc", "operations", "to_dict"]
errors = []