From 597b7306e458bb1424b0718d323cc9801b927b44 Mon Sep 17 00:00:00 2001 From: David Grayston Date: Mon, 16 Nov 2020 16:21:52 +0000 Subject: [PATCH 01/98] Update demo SDK version --- examples/aml/requirements.txt | 2 +- examples/doc_scan/requirements.in | 2 +- examples/doc_scan/requirements.txt | 3 ++- examples/yoti_example_django/requirements.in | 2 +- examples/yoti_example_django/requirements.txt | 4 ++-- examples/yoti_example_flask/requirements.in | 2 +- examples/yoti_example_flask/requirements.txt | 3 ++- 7 files changed, 10 insertions(+), 8 deletions(-) diff --git a/examples/aml/requirements.txt b/examples/aml/requirements.txt index b6c39efd..7e25054c 100644 --- a/examples/aml/requirements.txt +++ b/examples/aml/requirements.txt @@ -1,2 +1,2 @@ -yoti>=2.13.0 +yoti>=2.14.0 python-dotenv>=0.7.1 diff --git a/examples/doc_scan/requirements.in b/examples/doc_scan/requirements.in index 4bfbe87a..6c49c931 100644 --- a/examples/doc_scan/requirements.in +++ b/examples/doc_scan/requirements.in @@ -1,5 +1,5 @@ flask>=1.1.2 python-dotenv>=0.13.0 -yoti>=2.13.0 +yoti>=2.14.0 filetype>=1.0.7 pyopenssl>=19.1.0 diff --git a/examples/doc_scan/requirements.txt b/examples/doc_scan/requirements.txt index 38b136a4..5fb08a69 100644 --- a/examples/doc_scan/requirements.txt +++ b/examples/doc_scan/requirements.txt @@ -23,12 +23,13 @@ protobuf==3.11.3 # via yoti pycparser==2.20 # via cffi pyopenssl==19.1.0 # via -r requirements.in, yoti python-dotenv==0.13.0 # via -r requirements.in +pytz==2020.4 # via yoti requests==2.23.0 # via yoti six==1.14.0 # via cryptography, protobuf, pyopenssl urllib3==1.25.9 # via requests werkzeug==1.0.1 # via flask wrapt==1.12.1 # via deprecated -yoti==2.13.0 # via -r requirements.in +yoti==2.14.0 # via -r requirements.in # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/examples/yoti_example_django/requirements.in b/examples/yoti_example_django/requirements.in index 6210c53b..3890bd95 100644 --- a/examples/yoti_example_django/requirements.in +++ b/examples/yoti_example_django/requirements.in @@ -3,4 +3,4 @@ django-sslserver>=0.22.0 python-dotenv>=0.7.1 requests>=2.20.0 urllib3>=1.24.2 -yoti>=2.13.0 +yoti>=2.14.0 diff --git a/examples/yoti_example_django/requirements.txt b/examples/yoti_example_django/requirements.txt index cd45786c..ee241f0b 100644 --- a/examples/yoti_example_django/requirements.txt +++ b/examples/yoti_example_django/requirements.txt @@ -20,13 +20,13 @@ protobuf==3.6.0 # via yoti pycparser==2.18 # via cffi pyopenssl==18.0.0 # via yoti python-dotenv==0.8.2 # via -r requirements.in -pytz==2018.4 # via django +pytz==2020.4 # via django, yoti requests==2.21.0 # via -r requirements.in, yoti six==1.11.0 # via cryptography, protobuf, pyopenssl sqlparse==0.3.0 # via django urllib3==1.24.2 # via -r requirements.in, requests wrapt==1.12.1 # via deprecated -yoti==2.13.0 # via -r requirements.in +yoti==2.14.0 # via -r requirements.in # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/examples/yoti_example_flask/requirements.in b/examples/yoti_example_flask/requirements.in index 89c202b6..f59712fe 100644 --- a/examples/yoti_example_flask/requirements.in +++ b/examples/yoti_example_flask/requirements.in @@ -5,5 +5,5 @@ pyopenssl>=19.0.0 python-dotenv>=0.7.1 requests>=2.20.0 urllib3>=1.24.2 -yoti>=2.13.0 +yoti>=2.14.0 werkzeug>=1.0.1 diff --git a/examples/yoti_example_flask/requirements.txt b/examples/yoti_example_flask/requirements.txt index a5a293a8..6d5f67d3 100644 --- a/examples/yoti_example_flask/requirements.txt +++ b/examples/yoti_example_flask/requirements.txt @@ -22,12 +22,13 @@ protobuf==3.6.0 # via yoti pycparser==2.18 # via cffi pyopenssl==19.0.0 # via -r requirements.in, yoti python-dotenv==0.8.2 # via -r requirements.in +pytz==2020.4 # via yoti requests==2.21.0 # via -r requirements.in, yoti six==1.11.0 # via cryptography, protobuf, pyopenssl urllib3==1.24.2 # via -r requirements.in, requests werkzeug==1.0.1 # via -r requirements.in, flask wrapt==1.12.1 # via deprecated -yoti==2.13.0 # via -r requirements.in +yoti==2.14.0 # via -r requirements.in # The following packages are considered to be unsafe in a requirements file: # setuptools From 412820e54cf4fb42bbb036318cb63637b550d921 Mon Sep 17 00:00:00 2001 From: David Grayston Date: Mon, 16 Nov 2020 16:22:02 +0000 Subject: [PATCH 02/98] Bump minor version --- sonar-project.properties | 2 +- yoti_python_sdk/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sonar-project.properties b/sonar-project.properties index b8f41b51..f77622f8 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,7 +2,7 @@ sonar.host.url = https://sonarcloud.io sonar.organization = getyoti sonar.projectKey = getyoti:python sonar.projectName = Python SDK -sonar.projectVersion = 2.14.0 +sonar.projectVersion = 2.15.0 sonar.exclusions = yoti_python_sdk/tests/**,examples/**,yoti_python_sdk/protobuf/**/* sonar.python.pylint.reportPath = coverage.out diff --git a/yoti_python_sdk/version.py b/yoti_python_sdk/version.py index 18b49b72..f697b811 100644 --- a/yoti_python_sdk/version.py +++ b/yoti_python_sdk/version.py @@ -1,2 +1,2 @@ # -*- coding: utf-8 -*- -__version__ = "2.14.0" +__version__ = "2.15.0" From 41027339f5a4c85c3a86bfa7658a2e4440349423 Mon Sep 17 00:00:00 2001 From: David Grayston Date: Thu, 12 Nov 2020 16:51:23 +0000 Subject: [PATCH 03/98] SDK-1825: Add support for custom privacy policy URL --- examples/doc_scan/app.py | 6 ++++ examples/doc_scan/templates/privacy.html | 10 +++++++ .../doc_scan/session/create/sdk_config.py | 28 +++++++++++++++++++ .../session/create/test_sdk_config.py | 4 +++ 4 files changed, 48 insertions(+) create mode 100644 examples/doc_scan/templates/privacy.html diff --git a/examples/doc_scan/app.py b/examples/doc_scan/app.py index 3de18b4d..d550b6a6 100644 --- a/examples/doc_scan/app.py +++ b/examples/doc_scan/app.py @@ -47,6 +47,7 @@ def create_session(): .with_preset_issuing_country("GBR") .with_success_url("{url}/success".format(url=YOTI_APP_BASE_URL)) .with_error_url("{url}/error".format(url=YOTI_APP_BASE_URL)) + .with_privacy_policy_url("{url}/privacy-policy".format(url=YOTI_APP_BASE_URL)) .build() ) @@ -173,5 +174,10 @@ def media(): ) +@app.route("/privacy-policy") +def privacy_policy(): + return render_template("privacy.html") + + if __name__ == "__main__": app.run() diff --git a/examples/doc_scan/templates/privacy.html b/examples/doc_scan/templates/privacy.html new file mode 100644 index 00000000..f3b4c54a --- /dev/null +++ b/examples/doc_scan/templates/privacy.html @@ -0,0 +1,10 @@ +{% include "layout/header.html" %} +
+
+
+

Privacy Policy

+

Demo privacy policy

+
+
+
+{% include "layout/footer.html" %} \ No newline at end of file diff --git a/yoti_python_sdk/doc_scan/session/create/sdk_config.py b/yoti_python_sdk/doc_scan/session/create/sdk_config.py index c76fe897..a1427e43 100644 --- a/yoti_python_sdk/doc_scan/session/create/sdk_config.py +++ b/yoti_python_sdk/doc_scan/session/create/sdk_config.py @@ -21,6 +21,7 @@ def __init__( preset_issuing_country, success_url, error_url, + privacy_policy_url=None, ): """ :param allowed_capture_methods: the allowed capture methods @@ -39,6 +40,8 @@ def __init__( :type success_url: str :param error_url: the error url :type error_url: str + :param privacy_policy_url: the privacy policy url + :type privacy_policy_url: str """ self.__allowed_capture_methods = allowed_capture_methods self.__primary_colour = primary_colour @@ -48,6 +51,7 @@ def __init__( self.__preset_issuing_country = preset_issuing_country self.__success_url = success_url self.__error_url = error_url + self.__privacy_policy_url = privacy_policy_url @property def allowed_capture_methods(self): @@ -121,6 +125,15 @@ def error_url(self): """ return self.__error_url + @property + def privacy_policy_url(self): + """ + The privacy policy URL + + :return: the privacy policy url + """ + return self.__privacy_policy_url + def to_json(self): return remove_null_values( { @@ -132,6 +145,7 @@ def to_json(self): "preset_issuing_country": self.preset_issuing_country, "success_url": self.success_url, "error_url": self.error_url, + "privacy_policy_url": self.privacy_policy_url, } ) @@ -150,6 +164,7 @@ def __init__(self): self.__preset_issuing_country = None self.__success_url = None self.__error_url = None + self.__privacy_policy_url = None def with_allowed_capture_methods(self, allowed_capture_methods): """ @@ -265,6 +280,18 @@ def with_error_url(self, url): self.__error_url = url return self + def with_privacy_policy_url(self, url): + """ + Sets the privacy policy URL + + :param url: the privacy policy URL + :type url: str + :return: the builder + :rtype: SdkConfigBuilder + """ + self.__privacy_policy_url = url + return self + def build(self): return SdkConfig( self.__allowed_capture_methods, @@ -275,4 +302,5 @@ def build(self): self.__preset_issuing_country, self.__success_url, self.__error_url, + self.__privacy_policy_url, ) diff --git a/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py b/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py index 6de7b4ca..68d2eafe 100644 --- a/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py +++ b/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py @@ -14,6 +14,7 @@ class SdkConfigTest(unittest.TestCase): SOME_PRESET_ISSUING_COUNTRY = "USA" SOME_SUCCESS_URL = "https://mysite.com/yoti/success" SOME_ERROR_URL = "https://mysite.com/yoti/error" + SOME_PRIVACY_POLICY_URL = "https://mysite.com/privacy" def test_should_build_correctly(self): result = ( @@ -26,6 +27,7 @@ def test_should_build_correctly(self): .with_preset_issuing_country(self.SOME_PRESET_ISSUING_COUNTRY) .with_success_url(self.SOME_SUCCESS_URL) .with_error_url(self.SOME_ERROR_URL) + .with_privacy_policy_url(self.SOME_PRIVACY_POLICY_URL) .build() ) @@ -38,6 +40,7 @@ def test_should_build_correctly(self): assert result.preset_issuing_country is self.SOME_PRESET_ISSUING_COUNTRY assert result.success_url is self.SOME_SUCCESS_URL assert result.error_url is self.SOME_ERROR_URL + assert result.privacy_policy_url is self.SOME_PRIVACY_POLICY_URL def test_should_allows_camera(self): result = SdkConfigBuilder().with_allows_camera().build() @@ -55,6 +58,7 @@ def test_should_serialize_to_json_without_error(self): .with_preset_issuing_country(self.SOME_PRESET_ISSUING_COUNTRY) .with_success_url(self.SOME_SUCCESS_URL) .with_error_url(self.SOME_ERROR_URL) + .with_privacy_policy_url(self.SOME_PRIVACY_POLICY_URL) .build() ) From 85b0cc8b4fb12a245f12b15f4b5e4a9a8373cffc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Nov 2020 17:15:54 +0000 Subject: [PATCH 04/98] Bump protobuf from 3.13.0 to 3.14.0 Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 3.13.0 to 3.14.0. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/master/generate_changelog.py) - [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.13.0...v3.14.0) Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 5 +---- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/requirements.in b/requirements.in index a229f183..5fb32f6b 100644 --- a/requirements.in +++ b/requirements.in @@ -4,7 +4,7 @@ cffi==1.14.3 future==0.18.2 itsdangerous==1.1.0 pbr==1.10.0 -protobuf==3.13.0 +protobuf==3.14.0 pyopenssl==19.1.0 PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 pytz==2020.4 diff --git a/requirements.txt b/requirements.txt index b8c0490b..48c781a6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,7 +15,7 @@ idna==2.7 # via requests iso8601==0.1.13 # via -r requirements.in itsdangerous==1.1.0 # via -r requirements.in pbr==1.10.0 # via -r requirements.in -protobuf==3.13.0 # via -r requirements.in +protobuf==3.14.0 # via -r requirements.in pycparser==2.18 # via cffi pyopenssl==19.1.0 # via -r requirements.in pytz==2020.4 # via -r requirements.in @@ -25,6 +25,3 @@ six==1.10.0 # via cryptography, protobuf, pyopenssl urllib3==1.24.3 # via -r requirements.in, requests wheel==0.33.6 # via -r requirements.in wrapt==1.11.2 # via deprecated - -# The following packages are considered to be unsafe in a requirements file: -# setuptools From f41f583d798e8e4df34d55e4b5e565cb3295844b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Dec 2020 05:17:22 +0000 Subject: [PATCH 05/98] Bump cffi from 1.14.3 to 1.14.4 Bumps [cffi](https://github.com/python-cffi/release-doc) from 1.14.3 to 1.14.4. - [Release notes](https://github.com/python-cffi/release-doc/releases) - [Commits](https://github.com/python-cffi/release-doc/commits) Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.in b/requirements.in index 5fb32f6b..569f4af8 100644 --- a/requirements.in +++ b/requirements.in @@ -1,6 +1,6 @@ asn1==2.2.0 # asn1 2.3.0 introduces enum34 as a dependency, which causes problems on some envs cryptography==2.8.0 -cffi==1.14.3 +cffi==1.14.4 future==0.18.2 itsdangerous==1.1.0 pbr==1.10.0 diff --git a/requirements.txt b/requirements.txt index 48c781a6..42201f80 100644 --- a/requirements.txt +++ b/requirements.txt @@ -6,7 +6,7 @@ # asn1==2.2.0 # via -r requirements.in certifi==2018.11.29 # via requests -cffi==1.14.3 # via -r requirements.in, cryptography +cffi==1.14.4 # via -r requirements.in, cryptography chardet==3.0.4 # via requests cryptography==2.8 # via -r requirements.in, pyopenssl deprecated==1.2.10 # via -r requirements.in From 5468a722af1433a1bdad69ca27fc834b980e88fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Dec 2020 05:16:11 +0000 Subject: [PATCH 06/98] Bump virtualenv from 20.1.0 to 20.2.1 Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.1.0 to 20.2.1. - [Release notes](https://github.com/pypa/virtualenv/releases) - [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst) - [Commits](https://github.com/pypa/virtualenv/compare/20.1.0...20.2.1) Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 4f3033a6..28393a6f 100644 --- a/setup.py +++ b/setup.py @@ -45,7 +45,7 @@ "python-coveralls==2.9.3", "coverage==4.5.4", "mock==2.0.0", - "virtualenv==20.1.0", + "virtualenv==20.2.1", ], }, classifiers=[ From 219b41048f7e63d1d8146a35964f7dee08c2df66 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Mar 2021 12:03:09 +0000 Subject: [PATCH 07/98] Bump virtualenv from 20.2.1 to 20.4.3 Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.2.1 to 20.4.3. - [Release notes](https://github.com/pypa/virtualenv/releases) - [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst) - [Commits](https://github.com/pypa/virtualenv/compare/20.2.1...20.4.3) Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 28393a6f..93bb0fa8 100644 --- a/setup.py +++ b/setup.py @@ -45,7 +45,7 @@ "python-coveralls==2.9.3", "coverage==4.5.4", "mock==2.0.0", - "virtualenv==20.2.1", + "virtualenv==20.4.3", ], }, classifiers=[ From 2a51312d4b301e3e8792ee7bdc8d90a87b6e443f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Mar 2021 12:17:25 +0000 Subject: [PATCH 08/98] Bump pytz from 2020.4 to 2021.1 Bumps [pytz](https://github.com/stub42/pytz) from 2020.4 to 2021.1. - [Release notes](https://github.com/stub42/pytz/releases) - [Commits](https://github.com/stub42/pytz/compare/release_2020.4...release_2021.1) Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 72 ++++++++++++++++++++++++++++++++++-------------- setup.py | 2 +- 3 files changed, 53 insertions(+), 23 deletions(-) diff --git a/requirements.in b/requirements.in index 569f4af8..c65ea625 100644 --- a/requirements.in +++ b/requirements.in @@ -7,7 +7,7 @@ pbr==1.10.0 protobuf==3.14.0 pyopenssl==19.1.0 PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 -pytz==2020.4 +pytz==2021.1 requests>=2.20.0 urllib3>=1.24.3 deprecated==1.2.10 diff --git a/requirements.txt b/requirements.txt index 42201f80..614154d3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,24 +4,54 @@ # # pip-compile --output-file=requirements.txt requirements.in # -asn1==2.2.0 # via -r requirements.in -certifi==2018.11.29 # via requests -cffi==1.14.4 # via -r requirements.in, cryptography -chardet==3.0.4 # via requests -cryptography==2.8 # via -r requirements.in, pyopenssl -deprecated==1.2.10 # via -r requirements.in -future==0.18.2 # via -r requirements.in -idna==2.7 # via requests -iso8601==0.1.13 # via -r requirements.in -itsdangerous==1.1.0 # via -r requirements.in -pbr==1.10.0 # via -r requirements.in -protobuf==3.14.0 # via -r requirements.in -pycparser==2.18 # via cffi -pyopenssl==19.1.0 # via -r requirements.in -pytz==2020.4 # via -r requirements.in -pyyaml==5.2 # via -r requirements.in -requests==2.21.0 # via -r requirements.in -six==1.10.0 # via cryptography, protobuf, pyopenssl -urllib3==1.24.3 # via -r requirements.in, requests -wheel==0.33.6 # via -r requirements.in -wrapt==1.11.2 # via deprecated +asn1==2.2.0 + # via -r requirements.in +certifi==2018.11.29 + # via requests +cffi==1.14.4 + # via + # -r requirements.in + # cryptography +chardet==3.0.4 + # via requests +cryptography==2.8 + # via + # -r requirements.in + # pyopenssl +deprecated==1.2.10 + # via -r requirements.in +future==0.18.2 + # via -r requirements.in +idna==2.7 + # via requests +iso8601==0.1.13 + # via -r requirements.in +itsdangerous==1.1.0 + # via -r requirements.in +pbr==1.10.0 + # via -r requirements.in +protobuf==3.14.0 + # via -r requirements.in +pycparser==2.18 + # via cffi +pyopenssl==19.1.0 + # via -r requirements.in +pytz==2021.1 + # via -r requirements.in +pyyaml==5.2 + # via -r requirements.in +requests==2.21.0 + # via -r requirements.in +six==1.10.0 + # via + # cryptography + # protobuf + # pyopenssl +urllib3==1.24.3 + # via + # -r requirements.in + # requests +wheel==0.33.6 + # via -r requirements.in +wrapt==1.11.2 + # via deprecated diff --git a/setup.py b/setup.py index 93bb0fa8..413abafa 100644 --- a/setup.py +++ b/setup.py @@ -26,7 +26,7 @@ "asn1==2.2.0", "pyopenssl>=18.0.0", "iso8601==0.1.13", - "pytz==2020.4", + "pytz==2021.1", ], extras_require={ "examples": [ From 7e04b10f2e9b95a561a0421104edf09ff5d8527c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Mar 2021 12:26:28 +0000 Subject: [PATCH 09/98] Bump iso8601 from 0.1.13 to 0.1.14 Bumps [iso8601](https://github.com/micktwomey/pyiso8601) from 0.1.13 to 0.1.14. - [Release notes](https://github.com/micktwomey/pyiso8601/releases) - [Commits](https://github.com/micktwomey/pyiso8601/compare/0.1.13...0.1.14) Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.in b/requirements.in index c65ea625..882d0016 100644 --- a/requirements.in +++ b/requirements.in @@ -12,4 +12,4 @@ requests>=2.20.0 urllib3>=1.24.3 deprecated==1.2.10 wheel==0.33.6 -iso8601==0.1.13 +iso8601==0.1.14 diff --git a/requirements.txt b/requirements.txt index 614154d3..3ae469a0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,7 +24,7 @@ future==0.18.2 # via -r requirements.in idna==2.7 # via requests -iso8601==0.1.13 +iso8601==0.1.14 # via -r requirements.in itsdangerous==1.1.0 # via -r requirements.in diff --git a/setup.py b/setup.py index 413abafa..e8f9f477 100644 --- a/setup.py +++ b/setup.py @@ -25,7 +25,7 @@ "future>=0.11.0", "asn1==2.2.0", "pyopenssl>=18.0.0", - "iso8601==0.1.13", + "iso8601==0.1.14", "pytz==2021.1", ], extras_require={ From fac56f2736d8be57071b408421ae436faf7de8f0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Mar 2021 12:36:17 +0000 Subject: [PATCH 10/98] Bump deprecated from 1.2.10 to 1.2.12 Bumps [deprecated](https://github.com/tantale/deprecated) from 1.2.10 to 1.2.12. - [Release notes](https://github.com/tantale/deprecated/releases) - [Changelog](https://github.com/tantale/deprecated/blob/master/CHANGELOG.rst) - [Commits](https://github.com/tantale/deprecated/compare/v1.2.10...v1.2.12) Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.in b/requirements.in index 882d0016..e13ddd3e 100644 --- a/requirements.in +++ b/requirements.in @@ -10,6 +10,6 @@ PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 pytz==2021.1 requests>=2.20.0 urllib3>=1.24.3 -deprecated==1.2.10 +deprecated==1.2.12 wheel==0.33.6 iso8601==0.1.14 diff --git a/requirements.txt b/requirements.txt index 3ae469a0..b1a87b98 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ cryptography==2.8 # via # -r requirements.in # pyopenssl -deprecated==1.2.10 +deprecated==1.2.12 # via -r requirements.in future==0.18.2 # via -r requirements.in diff --git a/setup.py b/setup.py index e8f9f477..6f5f3796 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ author="Yoti", author_email="websdk@yoti.com", install_requires=[ - "deprecated==1.2.10", + "deprecated==1.2.12", "cryptography>=2.2.1", "protobuf>=3.1.0", "requests>=2.11.1", From cb493e94d3845d2acfe90a5e35da6c062554701f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Apr 2021 10:41:37 +0000 Subject: [PATCH 11/98] Bump protobuf from 3.14.0 to 3.15.8 Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 3.14.0 to 3.15.8. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/master/generate_changelog.py) - [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.14.0...v3.15.8) Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.in b/requirements.in index e13ddd3e..fb4576d3 100644 --- a/requirements.in +++ b/requirements.in @@ -4,7 +4,7 @@ cffi==1.14.4 future==0.18.2 itsdangerous==1.1.0 pbr==1.10.0 -protobuf==3.14.0 +protobuf==3.15.8 pyopenssl==19.1.0 PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 pytz==2021.1 diff --git a/requirements.txt b/requirements.txt index b1a87b98..8e71ce30 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,7 +30,7 @@ itsdangerous==1.1.0 # via -r requirements.in pbr==1.10.0 # via -r requirements.in -protobuf==3.14.0 +protobuf==3.15.8 # via -r requirements.in pycparser==2.18 # via cffi From 9d7b92b60f68f02f0acf6f02e0a060a7b4d8277c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Apr 2021 09:36:16 +0000 Subject: [PATCH 12/98] Bump cffi from 1.14.4 to 1.14.5 Bumps [cffi](https://github.com/python-cffi/release-doc) from 1.14.4 to 1.14.5. - [Release notes](https://github.com/python-cffi/release-doc/releases) - [Commits](https://github.com/python-cffi/release-doc/commits) Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.in b/requirements.in index fb4576d3..128083db 100644 --- a/requirements.in +++ b/requirements.in @@ -1,6 +1,6 @@ asn1==2.2.0 # asn1 2.3.0 introduces enum34 as a dependency, which causes problems on some envs cryptography==2.8.0 -cffi==1.14.4 +cffi==1.14.5 future==0.18.2 itsdangerous==1.1.0 pbr==1.10.0 diff --git a/requirements.txt b/requirements.txt index 8e71ce30..c37af6e0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ asn1==2.2.0 # via -r requirements.in certifi==2018.11.29 # via requests -cffi==1.14.4 +cffi==1.14.5 # via # -r requirements.in # cryptography From 9b27c92d111569139c9dc108af4bf8ff91b831fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Jun 2021 05:09:47 +0000 Subject: [PATCH 13/98] Bump protobuf from 3.15.8 to 3.17.1 Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 3.15.8 to 3.17.1. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/master/generate_changelog.py) - [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.15.8...v3.17.1) Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.in b/requirements.in index 128083db..4d543b4f 100644 --- a/requirements.in +++ b/requirements.in @@ -4,7 +4,7 @@ cffi==1.14.5 future==0.18.2 itsdangerous==1.1.0 pbr==1.10.0 -protobuf==3.15.8 +protobuf==3.17.1 pyopenssl==19.1.0 PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 pytz==2021.1 diff --git a/requirements.txt b/requirements.txt index c37af6e0..75f6d4b1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,7 +30,7 @@ itsdangerous==1.1.0 # via -r requirements.in pbr==1.10.0 # via -r requirements.in -protobuf==3.15.8 +protobuf==3.17.1 # via -r requirements.in pycparser==2.18 # via cffi From ae48f84c92ca4b4f890e8815d8c584700a65ebc7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Jun 2021 05:09:22 +0000 Subject: [PATCH 14/98] Bump werkzeug from 1.0.1 to 2.0.1 Bumps [werkzeug](https://github.com/pallets/werkzeug) from 1.0.1 to 2.0.1. - [Release notes](https://github.com/pallets/werkzeug/releases) - [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/werkzeug/compare/1.0.1...2.0.1) Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 6f5f3796..f39f0203 100644 --- a/setup.py +++ b/setup.py @@ -34,7 +34,7 @@ "Flask>=1.0.4", "python-dotenv>=0.7.1", "django-sslserver>=0.22.0", - "Werkzeug==1.0.1", + "Werkzeug==2.0.1", ], "dev": [ "pre-commit==1.17.0", From 1d21b3bd40becf4d4ee1fa6802d8aa442cb423a0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Jun 2021 05:09:26 +0000 Subject: [PATCH 15/98] Bump virtualenv from 20.4.3 to 20.4.7 Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.4.3 to 20.4.7. - [Release notes](https://github.com/pypa/virtualenv/releases) - [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst) - [Commits](https://github.com/pypa/virtualenv/compare/20.4.3...20.4.7) Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index f39f0203..bb3620b1 100644 --- a/setup.py +++ b/setup.py @@ -45,7 +45,7 @@ "python-coveralls==2.9.3", "coverage==4.5.4", "mock==2.0.0", - "virtualenv==20.4.3", + "virtualenv==20.4.7", ], }, classifiers=[ From c1d7f9c6caecff6fd791f9fc0d58f6d79645187e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Jul 2021 04:02:20 +0000 Subject: [PATCH 16/98] Bump protobuf from 3.17.1 to 3.17.3 Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 3.17.1 to 3.17.3. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/master/generate_changelog.py) - [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.17.1...v3.17.3) --- updated-dependencies: - dependency-name: protobuf dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.in b/requirements.in index 4d543b4f..fbb5f151 100644 --- a/requirements.in +++ b/requirements.in @@ -4,7 +4,7 @@ cffi==1.14.5 future==0.18.2 itsdangerous==1.1.0 pbr==1.10.0 -protobuf==3.17.1 +protobuf==3.17.3 pyopenssl==19.1.0 PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 pytz==2021.1 diff --git a/requirements.txt b/requirements.txt index 75f6d4b1..6f9c93cf 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,7 +30,7 @@ itsdangerous==1.1.0 # via -r requirements.in pbr==1.10.0 # via -r requirements.in -protobuf==3.17.1 +protobuf==3.17.3 # via -r requirements.in pycparser==2.18 # via cffi From 885c7c68db7c5582a4889bbf3a6ec83635c4a908 Mon Sep 17 00:00:00 2001 From: Michal Milewicz Date: Fri, 9 Jul 2021 11:01:37 +0200 Subject: [PATCH 17/98] adding myself to dependabot --- .github/dependabot.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index e7036d6d..7223e919 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -11,3 +11,4 @@ updates: - gautam-yoti assignees: - echarrod + - michalmilewiczyoti From 0691db9625545d9f7430ba016177e2c3c9aa363b Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 4 Aug 2021 16:50:14 +0100 Subject: [PATCH 18/98] Apply suggestions from code review --- .github/dependabot.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 7223e919..ec60e657 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,6 +9,6 @@ updates: reviewers: - echarrod - gautam-yoti + - michalmilewiczyoti assignees: - - echarrod - michalmilewiczyoti From 6cab71ff01bad7ad7ea983f273752f4c4aaee708 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Sep 2021 04:00:50 +0000 Subject: [PATCH 19/98] Bump virtualenv from 20.4.7 to 20.7.2 Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.4.7 to 20.7.2. - [Release notes](https://github.com/pypa/virtualenv/releases) - [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst) - [Commits](https://github.com/pypa/virtualenv/compare/20.4.7...20.7.2) --- updated-dependencies: - dependency-name: virtualenv dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index bb3620b1..5609d43b 100644 --- a/setup.py +++ b/setup.py @@ -45,7 +45,7 @@ "python-coveralls==2.9.3", "coverage==4.5.4", "mock==2.0.0", - "virtualenv==20.4.7", + "virtualenv==20.7.2", ], }, classifiers=[ From 22907cbe8a901e260a01de6b5d557a857b619e70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Sep 2021 12:19:03 +0000 Subject: [PATCH 20/98] Bump cffi from 1.14.5 to 1.14.6 Bumps [cffi](http://cffi.readthedocs.org) from 1.14.5 to 1.14.6. --- updated-dependencies: - dependency-name: cffi dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.in b/requirements.in index fbb5f151..bf5c44ab 100644 --- a/requirements.in +++ b/requirements.in @@ -1,6 +1,6 @@ asn1==2.2.0 # asn1 2.3.0 introduces enum34 as a dependency, which causes problems on some envs cryptography==2.8.0 -cffi==1.14.5 +cffi==1.14.6 future==0.18.2 itsdangerous==1.1.0 pbr==1.10.0 diff --git a/requirements.txt b/requirements.txt index 6f9c93cf..02769ed1 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ asn1==2.2.0 # via -r requirements.in certifi==2018.11.29 # via requests -cffi==1.14.5 +cffi==1.14.6 # via # -r requirements.in # cryptography From 3edba3f2d5b0740eb44acc1046471ce59cb6412c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Sep 2021 16:19:29 +0000 Subject: [PATCH 21/98] Bump iso8601 from 0.1.14 to 0.1.16 Bumps [iso8601](https://github.com/micktwomey/pyiso8601) from 0.1.14 to 0.1.16. - [Release notes](https://github.com/micktwomey/pyiso8601/releases) - [Commits](https://github.com/micktwomey/pyiso8601/compare/0.1.14...0.1.16) --- updated-dependencies: - dependency-name: iso8601 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.in b/requirements.in index bf5c44ab..3783b6d4 100644 --- a/requirements.in +++ b/requirements.in @@ -12,4 +12,4 @@ requests>=2.20.0 urllib3>=1.24.3 deprecated==1.2.12 wheel==0.33.6 -iso8601==0.1.14 +iso8601==0.1.16 diff --git a/requirements.txt b/requirements.txt index 02769ed1..9ce9d685 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,7 +24,7 @@ future==0.18.2 # via -r requirements.in idna==2.7 # via requests -iso8601==0.1.14 +iso8601==0.1.16 # via -r requirements.in itsdangerous==1.1.0 # via -r requirements.in diff --git a/setup.py b/setup.py index 5609d43b..aec51a84 100644 --- a/setup.py +++ b/setup.py @@ -25,7 +25,7 @@ "future>=0.11.0", "asn1==2.2.0", "pyopenssl>=18.0.0", - "iso8601==0.1.14", + "iso8601==0.1.16", "pytz==2021.1", ], extras_require={ From afedb393424f617f8df3c53719ad9b935a97d428 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Oct 2021 04:02:21 +0000 Subject: [PATCH 22/98] Bump virtualenv from 20.7.2 to 20.8.1 Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.7.2 to 20.8.1. - [Release notes](https://github.com/pypa/virtualenv/releases) - [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst) - [Commits](https://github.com/pypa/virtualenv/compare/20.7.2...20.8.1) --- updated-dependencies: - dependency-name: virtualenv dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index aec51a84..50502a8e 100644 --- a/setup.py +++ b/setup.py @@ -45,7 +45,7 @@ "python-coveralls==2.9.3", "coverage==4.5.4", "mock==2.0.0", - "virtualenv==20.7.2", + "virtualenv==20.8.1", ], }, classifiers=[ From 7950d4bc52bc28cef2718ca9c6e57a6b3bcfd049 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Oct 2021 04:01:54 +0000 Subject: [PATCH 23/98] Bump deprecated from 1.2.12 to 1.2.13 Bumps [deprecated](https://github.com/tantale/deprecated) from 1.2.12 to 1.2.13. - [Release notes](https://github.com/tantale/deprecated/releases) - [Changelog](https://github.com/tantale/deprecated/blob/master/CHANGELOG.rst) - [Commits](https://github.com/tantale/deprecated/compare/v1.2.12...v1.2.13) --- updated-dependencies: - dependency-name: deprecated dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.in b/requirements.in index 3783b6d4..6dcdc67e 100644 --- a/requirements.in +++ b/requirements.in @@ -10,6 +10,6 @@ PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 pytz==2021.1 requests>=2.20.0 urllib3>=1.24.3 -deprecated==1.2.12 +deprecated==1.2.13 wheel==0.33.6 iso8601==0.1.16 diff --git a/requirements.txt b/requirements.txt index 9ce9d685..aeef4920 100644 --- a/requirements.txt +++ b/requirements.txt @@ -18,7 +18,7 @@ cryptography==2.8 # via # -r requirements.in # pyopenssl -deprecated==1.2.12 +deprecated==1.2.13 # via -r requirements.in future==0.18.2 # via -r requirements.in diff --git a/setup.py b/setup.py index 50502a8e..9ddc4faa 100644 --- a/setup.py +++ b/setup.py @@ -18,7 +18,7 @@ author="Yoti", author_email="websdk@yoti.com", install_requires=[ - "deprecated==1.2.12", + "deprecated==1.2.13", "cryptography>=2.2.1", "protobuf>=3.1.0", "requests>=2.11.1", From c0bfbdb6c2b2accb829c3d1b77f8792b7cb4df64 Mon Sep 17 00:00:00 2001 From: echarrod Date: Thu, 21 Oct 2021 10:30:41 +0100 Subject: [PATCH 24/98] Update supported Python versions: add later versions and remove 2.7 --- .github/workflows/tests.yaml | 2 +- setup.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index ff260478..7ae1b7a7 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [2.7, 3.6, 3.7, 3.8, 3.9, "3.10-dev"] + python-version: [3.6, 3.7, 3.8, 3.9, 3.10, "3.11-dev"] steps: - uses: actions/checkout@v2 diff --git a/setup.py b/setup.py index 9ddc4faa..60a2381f 100644 --- a/setup.py +++ b/setup.py @@ -46,6 +46,7 @@ "coverage==4.5.4", "mock==2.0.0", "virtualenv==20.8.1", + "flake8==4.0.1", ], }, classifiers=[ @@ -54,13 +55,12 @@ "Operating System :: OS Independent", "Intended Audience :: Developers", "Programming Language :: Python", - "Programming Language :: Python :: 2", - "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.4", - "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", "Topic :: Software Development :: Libraries :: Python Modules", ], keywords="yoti sdk 2FA multifactor authentication verification identity login register verify 2Factor", From 91bb167b9f941d99b6b71167adc4ef4471ac2dc2 Mon Sep 17 00:00:00 2001 From: echarrod Date: Thu, 21 Oct 2021 10:31:04 +0100 Subject: [PATCH 25/98] Update pre-commit, use specific versions rather than floating branch --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6ed7baf9..d702e8d7 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,7 +1,7 @@ exclude: protobuf/ repos: - repo: https://github.com/ambv/black - rev: stable + rev: 847d468b828faff7daae297d8a20d899d2259824 hooks: - id: black - repo: https://github.com/pre-commit/pre-commit-hooks From aa9e1620fa3f68066b2097c4bde8bbaedd3394fd Mon Sep 17 00:00:00 2001 From: echarrod Date: Thu, 21 Oct 2021 10:49:33 +0100 Subject: [PATCH 26/98] Remove travis, update references to point to Github workflow --- .travis.yml | 77 ------------------------------------------------- CONTRIBUTING.md | 2 +- README.md | 2 +- 3 files changed, 2 insertions(+), 79 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 180a9b1f..00000000 --- a/.travis.yml +++ /dev/null @@ -1,77 +0,0 @@ -language: python - -dist: xenial - -git: - depth: 3 - -jobs: - allow_failures: - - python: "3.8-dev" - include: - - &test - stage: Test - python: "2.7" - cache: pip - before_install: - - pip install -U setuptools - install: - - pip install -r requirements.txt - - pip install -e .[dev] - script: - - pytest -v - - <<: *test - python: "3.4" - - <<: *test - python: "3.5" - - <<: *test - python: "3.5-dev" - - <<: *test - python: "3.6" - - <<: *test - python: "3.6-dev" - - <<: *test - python: "3.7" - - <<: *test - python: "3.7-dev" - - <<: *test - python: "3.8-dev" - - <<: *test - python: "3.8" - - - stage: Check Examples - name: AML - python: "3.8" - script: - - cd ./examples/aml - - pip install -r requirements.txt - - name: Django - python: "3.8" - script: - - cd ./examples/yoti_example_django - - pip install -r requirements.txt - - name: Flask - python: "3.8" - script: - - cd ./examples/yoti_example_flask - - pip install -r requirements.txt - - name: Doc Scan - python: "3.8" - script: - - cd ./examples/doc_scan - - pip install -r requirements.txt - - - stage: Analyze - name: Sonarcloud - python: "3.8" - addons: - sonarcloud: - organization: "getyoti" - install: - - pip install -r requirements.txt - - pip install -e .[dev] - script: - - pytest --cov=yoti_python_sdk yoti_python_sdk/tests --cov-report=xml:coverage-reports/coverage-new.xml - - sed -i 's+.*+/home/travis/build/getyoti/yoti-python-sdk/yoti_python_sdk+g' coverage-reports/coverage-new.xml - - sonar-scanner - if: type = pull_request OR branch = master diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 86e2f477..51e32699 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -7,7 +7,7 @@ ## Adding Features Any features added must be fully tested and documented, with examples supplied in the pull request. -The feature must support the lowest Python version that the SDK supports (see [the travis file](.travis.yml) for all supported versions). The feature +The feature must support the lowest Python version that the SDK supports (see [the GitHub workflow tests file](./.github/workflows/tests.yaml) for all supported versions). The feature must not introduce any unnecessary dependencies (although introducing a new third party library is open for discussion if absolutely required). diff --git a/README.md b/README.md index 1014886c..d50a9736 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Yoti also allows you to enable user details verification from your mobile app by ## Requirements -To see the versions of Python this SDK is compatible with, see the [.travis.yml](/.travis.yml) file. +To see the versions of Python this SDK is compatible with, see the [the GitHub workflow tests file](./.github/workflows/tests.yaml) file. ## Installing the SDK From 2335e35466f2abaf2d1615c44129438ef47d0407 Mon Sep 17 00:00:00 2001 From: echarrod Date: Thu, 21 Oct 2021 11:39:44 +0100 Subject: [PATCH 27/98] Update itsdangerous after incompatibility --- requirements.in | 2 +- requirements.txt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.in b/requirements.in index 6dcdc67e..23d83903 100644 --- a/requirements.in +++ b/requirements.in @@ -2,7 +2,7 @@ asn1==2.2.0 # asn1 2.3.0 introduces enum34 as a dependency, which causes problem cryptography==2.8.0 cffi==1.14.6 future==0.18.2 -itsdangerous==1.1.0 +itsdangerous==2.0.1 pbr==1.10.0 protobuf==3.17.3 pyopenssl==19.1.0 diff --git a/requirements.txt b/requirements.txt index aeef4920..d8194de7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.8 # To update, run: # # pip-compile --output-file=requirements.txt requirements.in @@ -26,7 +26,7 @@ idna==2.7 # via requests iso8601==0.1.16 # via -r requirements.in -itsdangerous==1.1.0 +itsdangerous==2.0.1 # via -r requirements.in pbr==1.10.0 # via -r requirements.in From 6bd37fd99db5c2843cd817e9fe76762be0112ef9 Mon Sep 17 00:00:00 2001 From: echarrod Date: Thu, 21 Oct 2021 11:40:10 +0100 Subject: [PATCH 28/98] Fix pre-commit violations --- .../test_third_party_attribute_extension.py | 15 ++++++++++++--- yoti_python_sdk/tests/test_activity_details.py | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/yoti_python_sdk/tests/dynamic_sharing_service/extension/test_third_party_attribute_extension.py b/yoti_python_sdk/tests/dynamic_sharing_service/extension/test_third_party_attribute_extension.py index 7c7a57ae..1bf054ba 100644 --- a/yoti_python_sdk/tests/dynamic_sharing_service/extension/test_third_party_attribute_extension.py +++ b/yoti_python_sdk/tests/dynamic_sharing_service/extension/test_third_party_attribute_extension.py @@ -117,9 +117,18 @@ def test_should_format_utc_expiry_dates_correctly(expiry_date, expected_value): @pytest.mark.parametrize( "expiry_date, tz_name", [ - (datetime(2030, 6, 6, 8, 0, 0, 0), "US/Eastern",), - (datetime(2030, 6, 6, 15, 0, 0, 0), "Europe/Moscow",), - (datetime(2030, 6, 6, 7, 0, 0, 0), "America/Jamaica",), + ( + datetime(2030, 6, 6, 8, 0, 0, 0), + "US/Eastern", + ), + ( + datetime(2030, 6, 6, 15, 0, 0, 0), + "Europe/Moscow", + ), + ( + datetime(2030, 6, 6, 7, 0, 0, 0), + "America/Jamaica", + ), (datetime(2030, 6, 6, 23, 0, 0, 0), "Etc/GMT-11"), (datetime(2030, 6, 6, 7, 0, 0, 0), "Etc/GMT+5"), # In order to conform with the POSIX style, those zones beginning diff --git a/yoti_python_sdk/tests/test_activity_details.py b/yoti_python_sdk/tests/test_activity_details.py index 1735b030..1fc349f1 100644 --- a/yoti_python_sdk/tests/test_activity_details.py +++ b/yoti_python_sdk/tests/test_activity_details.py @@ -85,7 +85,7 @@ def create_age_verified_field( ): activity_details.field = lambda: None activity_details.field.name = ( - "age_over:{0}".format(age) if over is True else "age_under:".format(age) + "age_over:{0}".format(age) if over is True else "age_under:{0}".format(age) ) activity_details.field.value = encoded_string_verified_value activity_details.field.content_type = Protobuf.CT_STRING From 818e0732e4fe3177e73035ee708fd6059b66596c Mon Sep 17 00:00:00 2001 From: echarrod Date: Thu, 21 Oct 2021 12:16:01 +0100 Subject: [PATCH 29/98] Use Python 3.9 for examples, install distutils --- .github/workflows/tests.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 7ae1b7a7..f2384922 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -13,7 +13,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [3.6, 3.7, 3.8, 3.9, 3.10, "3.11-dev"] + python-version: [3.6, 3.7, 3.8, 3.9, "3.10"] steps: - uses: actions/checkout@v2 @@ -41,9 +41,13 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-python@v2.1.4 + with: + python-version: 3.9 - run: pip install -U setuptools==45 + - run: sudo apt install python3-distutils -y + - run: pushd examples/aml && pip install -r requirements.txt && popd - run: pushd examples/yoti_example_django && pip install -r requirements.txt && popd From bf7d59c05dad4b0c1bb9f19a1f1ae4bfe79295dd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 21 Oct 2021 11:48:54 +0000 Subject: [PATCH 30/98] Bump protobuf from 3.17.3 to 3.19.0 Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 3.17.3 to 3.19.0. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/master/generate_changelog.py) - [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.17.3...v3.19.0) --- updated-dependencies: - dependency-name: protobuf dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/requirements.in b/requirements.in index 23d83903..9d7e6792 100644 --- a/requirements.in +++ b/requirements.in @@ -4,7 +4,7 @@ cffi==1.14.6 future==0.18.2 itsdangerous==2.0.1 pbr==1.10.0 -protobuf==3.17.3 +protobuf==3.19.0 pyopenssl==19.1.0 PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 pytz==2021.1 diff --git a/requirements.txt b/requirements.txt index d8194de7..b7aed536 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,7 +30,7 @@ itsdangerous==2.0.1 # via -r requirements.in pbr==1.10.0 # via -r requirements.in -protobuf==3.17.3 +protobuf==3.19.0 # via -r requirements.in pycparser==2.18 # via cffi @@ -45,7 +45,6 @@ requests==2.21.0 six==1.10.0 # via # cryptography - # protobuf # pyopenssl urllib3==1.24.3 # via From a0887d8828ec191cfe06784a2a6e1ab4bc9f9455 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 04:00:37 +0000 Subject: [PATCH 31/98] Bump werkzeug from 2.0.1 to 2.0.2 Bumps [werkzeug](https://github.com/pallets/werkzeug) from 2.0.1 to 2.0.2. - [Release notes](https://github.com/pallets/werkzeug/releases) - [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/werkzeug/compare/2.0.1...2.0.2) --- updated-dependencies: - dependency-name: werkzeug dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 60a2381f..b3a102a7 100644 --- a/setup.py +++ b/setup.py @@ -34,7 +34,7 @@ "Flask>=1.0.4", "python-dotenv>=0.7.1", "django-sslserver>=0.22.0", - "Werkzeug==2.0.1", + "Werkzeug==2.0.2", ], "dev": [ "pre-commit==1.17.0", From 767a8ad177c662f8040b9381d83e551894791d18 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 04:01:15 +0000 Subject: [PATCH 32/98] Bump pytz from 2021.1 to 2021.3 Bumps [pytz](https://github.com/stub42/pytz) from 2021.1 to 2021.3. - [Release notes](https://github.com/stub42/pytz/releases) - [Commits](https://github.com/stub42/pytz/compare/release_2021.1...release_2021.3) --- updated-dependencies: - dependency-name: pytz dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.in b/requirements.in index 9d7e6792..c0b07b66 100644 --- a/requirements.in +++ b/requirements.in @@ -7,7 +7,7 @@ pbr==1.10.0 protobuf==3.19.0 pyopenssl==19.1.0 PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 -pytz==2021.1 +pytz==2021.3 requests>=2.20.0 urllib3>=1.24.3 deprecated==1.2.13 diff --git a/requirements.txt b/requirements.txt index b7aed536..d3a836c9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -36,7 +36,7 @@ pycparser==2.18 # via cffi pyopenssl==19.1.0 # via -r requirements.in -pytz==2021.1 +pytz==2021.3 # via -r requirements.in pyyaml==5.2 # via -r requirements.in diff --git a/setup.py b/setup.py index b3a102a7..9acc8b0c 100644 --- a/setup.py +++ b/setup.py @@ -26,7 +26,7 @@ "asn1==2.2.0", "pyopenssl>=18.0.0", "iso8601==0.1.16", - "pytz==2021.1", + "pytz==2021.3", ], extras_require={ "examples": [ From fcf93bbef654aa825c8588f68adb3b1779909766 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 14:27:46 +0000 Subject: [PATCH 33/98] Bump protobuf from 3.19.0 to 3.19.1 Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 3.19.0 to 3.19.1. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/master/generate_changelog.py) - [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.19.0...v3.19.1) --- updated-dependencies: - dependency-name: protobuf dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.in b/requirements.in index c0b07b66..e40b35ec 100644 --- a/requirements.in +++ b/requirements.in @@ -4,7 +4,7 @@ cffi==1.14.6 future==0.18.2 itsdangerous==2.0.1 pbr==1.10.0 -protobuf==3.19.0 +protobuf==3.19.1 pyopenssl==19.1.0 PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 pytz==2021.3 diff --git a/requirements.txt b/requirements.txt index d3a836c9..49e03d51 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,7 +30,7 @@ itsdangerous==2.0.1 # via -r requirements.in pbr==1.10.0 # via -r requirements.in -protobuf==3.19.0 +protobuf==3.19.1 # via -r requirements.in pycparser==2.18 # via cffi From 1a7a0a01a5f983c0e869d8adfcd930dbdf0bc405 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 14:43:09 +0000 Subject: [PATCH 34/98] Bump cffi from 1.14.6 to 1.15.0 Bumps [cffi](http://cffi.readthedocs.org) from 1.14.6 to 1.15.0. --- updated-dependencies: - dependency-name: cffi dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.in b/requirements.in index e40b35ec..9fcc7209 100644 --- a/requirements.in +++ b/requirements.in @@ -1,6 +1,6 @@ asn1==2.2.0 # asn1 2.3.0 introduces enum34 as a dependency, which causes problems on some envs cryptography==2.8.0 -cffi==1.14.6 +cffi==1.15.0 future==0.18.2 itsdangerous==2.0.1 pbr==1.10.0 diff --git a/requirements.txt b/requirements.txt index 49e03d51..2d8a6d06 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,7 +8,7 @@ asn1==2.2.0 # via -r requirements.in certifi==2018.11.29 # via requests -cffi==1.14.6 +cffi==1.15.0 # via # -r requirements.in # cryptography From c8562d7d349a0585a6bf3724980f377b0f5dc792 Mon Sep 17 00:00:00 2001 From: Michal Milewicz Date: Fri, 29 Oct 2021 10:01:04 +0200 Subject: [PATCH 35/98] [SDK-1998] adding handoff flag --- .gitignore | 1 + .../doc_scan/session/create/sdk_config.py | 29 +++++++++++++++++++ .../session/create/test_sdk_config.py | 12 ++++++++ yoti_python_sdk/tests/test_anchor.py | 11 ++++--- 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 8a197872..1cd6cf41 100644 --- a/.gitignore +++ b/.gitignore @@ -105,3 +105,4 @@ examples/yoti_example_django/*.pem examples/yoti_example_flask/*.pem .scannerwork +.venv/ \ No newline at end of file diff --git a/yoti_python_sdk/doc_scan/session/create/sdk_config.py b/yoti_python_sdk/doc_scan/session/create/sdk_config.py index a1427e43..37cde6b5 100644 --- a/yoti_python_sdk/doc_scan/session/create/sdk_config.py +++ b/yoti_python_sdk/doc_scan/session/create/sdk_config.py @@ -21,6 +21,7 @@ def __init__( preset_issuing_country, success_url, error_url, + allow_handoff=None, privacy_policy_url=None, ): """ @@ -42,6 +43,8 @@ def __init__( :type error_url: str :param privacy_policy_url: the privacy policy url :type privacy_policy_url: str + :param allow_handoff: boolean flag for allow_handoff + :type allow_handoff: bool """ self.__allowed_capture_methods = allowed_capture_methods self.__primary_colour = primary_colour @@ -52,6 +55,7 @@ def __init__( self.__success_url = success_url self.__error_url = error_url self.__privacy_policy_url = privacy_policy_url + self.__allow_handoff = allow_handoff @property def allowed_capture_methods(self): @@ -134,6 +138,16 @@ def privacy_policy_url(self): """ return self.__privacy_policy_url + @property + def allow_handoff(self): + """ + Flag to enable/disable relying business to handoff + support when creating a session. + + :return: the allow_handoff + """ + return self.__allow_handoff + def to_json(self): return remove_null_values( { @@ -146,6 +160,7 @@ def to_json(self): "success_url": self.success_url, "error_url": self.error_url, "privacy_policy_url": self.privacy_policy_url, + "allow_handoff": self.allow_handoff, } ) @@ -165,6 +180,7 @@ def __init__(self): self.__success_url = None self.__error_url = None self.__privacy_policy_url = None + self.__allow_handoff = None def with_allowed_capture_methods(self, allowed_capture_methods): """ @@ -292,6 +308,18 @@ def with_privacy_policy_url(self, url): self.__privacy_policy_url = url return self + def with_allow_handoff(self, flag): + """ + Sets the allow handoff flag + + :param flag: boolean value for flag + :type flag: bool + :return: the builder + :rtype: SdkConfigBuilder + """ + self.__allow_handoff = flag + return self + def build(self): return SdkConfig( self.__allowed_capture_methods, @@ -302,5 +330,6 @@ def build(self): self.__preset_issuing_country, self.__success_url, self.__error_url, + self.__allow_handoff, self.__privacy_policy_url, ) diff --git a/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py b/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py index 68d2eafe..e1128767 100644 --- a/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py +++ b/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py @@ -15,6 +15,7 @@ class SdkConfigTest(unittest.TestCase): SOME_SUCCESS_URL = "https://mysite.com/yoti/success" SOME_ERROR_URL = "https://mysite.com/yoti/error" SOME_PRIVACY_POLICY_URL = "https://mysite.com/privacy" + SOME_ALLOW_HANDOFF = True def test_should_build_correctly(self): result = ( @@ -28,6 +29,7 @@ def test_should_build_correctly(self): .with_success_url(self.SOME_SUCCESS_URL) .with_error_url(self.SOME_ERROR_URL) .with_privacy_policy_url(self.SOME_PRIVACY_POLICY_URL) + .with_allow_handoff(self.SOME_ALLOW_HANDOFF) .build() ) @@ -47,6 +49,16 @@ def test_should_allows_camera(self): assert result.allowed_capture_methods == "CAMERA" + def test_not_passing_allow_handoff(self): + result = SdkConfigBuilder().with_allows_camera().build() + + assert result.allow_handoff is None + + def test_passing_allow_handoff_false_value(self): + result = SdkConfigBuilder().with_allow_handoff(False).build() + + assert result.allow_handoff is False + def test_should_serialize_to_json_without_error(self): result = ( SdkConfigBuilder() diff --git a/yoti_python_sdk/tests/test_anchor.py b/yoti_python_sdk/tests/test_anchor.py index 0adf48aa..59729c5e 100644 --- a/yoti_python_sdk/tests/test_anchor.py +++ b/yoti_python_sdk/tests/test_anchor.py @@ -1,13 +1,13 @@ # -*- coding: utf-8 -*- import logging +import pytz import time from datetime import datetime -from yoti_python_sdk.protobuf.attribute_public_api import Attribute_pb2 - import yoti_python_sdk from yoti_python_sdk import config from yoti_python_sdk.anchor import Anchor +from yoti_python_sdk.protobuf.attribute_public_api import Attribute_pb2 from yoti_python_sdk.tests import anchor_fixture_parser @@ -119,9 +119,12 @@ def test_processing_unknown_anchor_data(): ] expected_timestamp = datetime(2019, 3, 5, 10, 45, 11, 840037) - actual_timestamp = anchors[0].signed_timestamp + actual_timestamp = anchors[0].signed_timestamp.astimezone(pytz.utc) + + test_datetime_format = "%Y-%m-%d %H:%M:%S" - assert expected_timestamp == actual_timestamp + assert expected_timestamp.strftime(test_datetime_format) == \ + actual_timestamp.strftime(test_datetime_format) assert "document-registration-server" in [ a.value for a in anchors[0].origin_server_certs.issuer From 2f88484b05dd96aef2b2992a32493f6592228f82 Mon Sep 17 00:00:00 2001 From: Michal Milewicz Date: Fri, 5 Nov 2021 10:08:54 +0100 Subject: [PATCH 36/98] [SDK-1998] code review fixies --- yoti_python_sdk/tests/test_anchor.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/yoti_python_sdk/tests/test_anchor.py b/yoti_python_sdk/tests/test_anchor.py index 59729c5e..972412c9 100644 --- a/yoti_python_sdk/tests/test_anchor.py +++ b/yoti_python_sdk/tests/test_anchor.py @@ -118,13 +118,10 @@ def test_processing_unknown_anchor_data(): (anchor.value, anchor.anchor_type, anchor.sub_type) for anchor in anchors ] - expected_timestamp = datetime(2019, 3, 5, 10, 45, 11, 840037) - actual_timestamp = anchors[0].signed_timestamp.astimezone(pytz.utc) + expected_timestamp = datetime(2019, 3, 5, 10, 45, 11, 840037).replace(tzinfo=None) + actual_timestamp = anchors[0].signed_timestamp.astimezone(pytz.utc).replace(tzinfo=None) - test_datetime_format = "%Y-%m-%d %H:%M:%S" - - assert expected_timestamp.strftime(test_datetime_format) == \ - actual_timestamp.strftime(test_datetime_format) + assert expected_timestamp == actual_timestamp assert "document-registration-server" in [ a.value for a in anchors[0].origin_server_certs.issuer From 383864735e4c96a94bc24a241d6052b30668b23b Mon Sep 17 00:00:00 2001 From: Michal Milewicz Date: Fri, 5 Nov 2021 13:17:10 +0100 Subject: [PATCH 37/98] fixing test --- yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py | 1 + 1 file changed, 1 insertion(+) diff --git a/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py b/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py index e1128767..d621a441 100644 --- a/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py +++ b/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py @@ -43,6 +43,7 @@ def test_should_build_correctly(self): assert result.success_url is self.SOME_SUCCESS_URL assert result.error_url is self.SOME_ERROR_URL assert result.privacy_policy_url is self.SOME_PRIVACY_POLICY_URL + assert result.allow_handoff is True def test_should_allows_camera(self): result = SdkConfigBuilder().with_allows_camera().build() From d2d159de0ad7a0877ba5e608bbbe5cd765ecb98f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Nov 2021 13:17:52 +0000 Subject: [PATCH 38/98] Bump virtualenv from 20.8.1 to 20.10.0 Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.8.1 to 20.10.0. - [Release notes](https://github.com/pypa/virtualenv/releases) - [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst) - [Commits](https://github.com/pypa/virtualenv/compare/20.8.1...20.10.0) --- updated-dependencies: - dependency-name: virtualenv dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 9acc8b0c..740fe001 100644 --- a/setup.py +++ b/setup.py @@ -45,7 +45,7 @@ "python-coveralls==2.9.3", "coverage==4.5.4", "mock==2.0.0", - "virtualenv==20.8.1", + "virtualenv==20.10.0", "flake8==4.0.1", ], }, From 07bb943d9056cd0f5b07eb7a7e86e4dc96467891 Mon Sep 17 00:00:00 2001 From: Michal Milewicz Date: Tue, 30 Nov 2021 09:44:50 +0100 Subject: [PATCH 39/98] [SDK-2004] Add support for issuing authority sub check --- .../session/create/subcheck/__init__.py | 5 +++ .../subcheck/issuing_authority_sub_check.py | 41 +++++++++++++++++++ .../session/create/subcheck/sub_check.py | 20 +++++++++ .../session/create/subcheck/__init__.py | 0 .../test_issuing_authority_sub_check.py | 41 +++++++++++++++++++ 5 files changed, 107 insertions(+) create mode 100644 yoti_python_sdk/doc_scan/session/create/subcheck/__init__.py create mode 100644 yoti_python_sdk/doc_scan/session/create/subcheck/issuing_authority_sub_check.py create mode 100644 yoti_python_sdk/doc_scan/session/create/subcheck/sub_check.py create mode 100644 yoti_python_sdk/tests/doc_scan/session/create/subcheck/__init__.py create mode 100644 yoti_python_sdk/tests/doc_scan/session/create/subcheck/test_issuing_authority_sub_check.py diff --git a/yoti_python_sdk/doc_scan/session/create/subcheck/__init__.py b/yoti_python_sdk/doc_scan/session/create/subcheck/__init__.py new file mode 100644 index 00000000..2e248d33 --- /dev/null +++ b/yoti_python_sdk/doc_scan/session/create/subcheck/__init__.py @@ -0,0 +1,5 @@ +from .issuing_authority_sub_check import IssuingAuthoritySubCheckBuilder + +__all__ = [ + "IssuingAuthoritySubCheckBuilder", +] diff --git a/yoti_python_sdk/doc_scan/session/create/subcheck/issuing_authority_sub_check.py b/yoti_python_sdk/doc_scan/session/create/subcheck/issuing_authority_sub_check.py new file mode 100644 index 00000000..eb955e17 --- /dev/null +++ b/yoti_python_sdk/doc_scan/session/create/subcheck/issuing_authority_sub_check.py @@ -0,0 +1,41 @@ +# -*- coding: utf-8 -*- + +from yoti_python_sdk.doc_scan.session.create.filter.document_filter import DocumentFilter +from yoti_python_sdk.utils import YotiSerializable +from .sub_check import SubRequestedCheck + + +class IssuingAuthoritySubCheck(SubRequestedCheck): + """ + Requests creation of a Issuing Authority Sub Check. + """ + + def __init__(self, filter=None): + self._filter = filter + + @property + def requested(self): + return True + + @property + def filter(self): + return self._filter + + +class IssuingAuthoritySubCheckBuilder: + """ + Builder for Issuing Authority Sub Check. + """ + def __init__(self): + self._filter = None + + def with_filter(self, filter): + if not issubclass(type(filter), DocumentFilter): + raise ValueError('invalid filter') + + self._filter = filter + + return self + + def build(self): + return IssuingAuthoritySubCheck(filter=self._filter) diff --git a/yoti_python_sdk/doc_scan/session/create/subcheck/sub_check.py b/yoti_python_sdk/doc_scan/session/create/subcheck/sub_check.py new file mode 100644 index 00000000..d4fa882d --- /dev/null +++ b/yoti_python_sdk/doc_scan/session/create/subcheck/sub_check.py @@ -0,0 +1,20 @@ +from abc import ABCMeta +from abc import abstractmethod + +from yoti_python_sdk.utils import YotiSerializable + + +class SubRequestedCheck(YotiSerializable): + """ + Requests creation of a SubCheck to be performed on a document + """ + + __metaclass__ = ABCMeta + + @property + @abstractmethod + def type(self): + raise NotImplementedError + + def to_json(self): + return remove_null_values({"type": self.type, "config": self.config}) diff --git a/yoti_python_sdk/tests/doc_scan/session/create/subcheck/__init__.py b/yoti_python_sdk/tests/doc_scan/session/create/subcheck/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/yoti_python_sdk/tests/doc_scan/session/create/subcheck/test_issuing_authority_sub_check.py b/yoti_python_sdk/tests/doc_scan/session/create/subcheck/test_issuing_authority_sub_check.py new file mode 100644 index 00000000..bd1da3f4 --- /dev/null +++ b/yoti_python_sdk/tests/doc_scan/session/create/subcheck/test_issuing_authority_sub_check.py @@ -0,0 +1,41 @@ +import unittest + +from yoti_python_sdk.doc_scan.session.create.filter.orthogonal_restrictions_filter import \ + OrthogonalRestrictionsFilterBuilder +from yoti_python_sdk.doc_scan.session.create.subcheck import ( + IssuingAuthoritySubCheckBuilder +) +from yoti_python_sdk.doc_scan.session.create.subcheck.issuing_authority_sub_check import IssuingAuthoritySubCheck + + +class IssuingAuthoritySubCheckTest(unittest.TestCase): + def test_should_build_correctly_without_additional_data(self): + issuing_authority_sub_check = IssuingAuthoritySubCheckBuilder().build() + + assert isinstance(issuing_authority_sub_check, IssuingAuthoritySubCheck) + + def test_should_build_correctly_with_filter(self): + filter = OrthogonalRestrictionsFilterBuilder().with_whitelisted_country_codes( + ["GBR", "FRA"]).with_whitelisted_document_types(["PASSPORT", "STATE_ID"]).build() + + issuing_authority_sub_check = IssuingAuthoritySubCheckBuilder().with_filter( + filter=filter).build() + + assert isinstance(issuing_authority_sub_check, IssuingAuthoritySubCheck) + assert issuing_authority_sub_check.filter == filter + + def test_should_always_build_with_requested_as_boolean_true(self): + issuing_authority_sub_check = IssuingAuthoritySubCheckBuilder().build() + + assert issuing_authority_sub_check.requested is True + + def test_build_invalid_filter(self): + filter = 'invalid' + + with self.assertRaises(ValueError): + IssuingAuthoritySubCheckBuilder().with_filter( + filter=filter).build() + + +if __name__ == "__main__": + unittest.main() From e3e31e99d6f7c1c6d63d3c642cb40405f0901d3d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Dec 2021 04:01:21 +0000 Subject: [PATCH 40/98] Bump iso8601 from 0.1.16 to 1.0.2 Bumps [iso8601](https://github.com/micktwomey/pyiso8601) from 0.1.16 to 1.0.2. - [Release notes](https://github.com/micktwomey/pyiso8601/releases) - [Commits](https://github.com/micktwomey/pyiso8601/compare/0.1.16...1.0.2) --- updated-dependencies: - dependency-name: iso8601 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.in b/requirements.in index 9fcc7209..c3586269 100644 --- a/requirements.in +++ b/requirements.in @@ -12,4 +12,4 @@ requests>=2.20.0 urllib3>=1.24.3 deprecated==1.2.13 wheel==0.33.6 -iso8601==0.1.16 +iso8601==1.0.2 diff --git a/requirements.txt b/requirements.txt index 2d8a6d06..281792c6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -24,7 +24,7 @@ future==0.18.2 # via -r requirements.in idna==2.7 # via requests -iso8601==0.1.16 +iso8601==1.0.2 # via -r requirements.in itsdangerous==2.0.1 # via -r requirements.in diff --git a/setup.py b/setup.py index 740fe001..728efb66 100644 --- a/setup.py +++ b/setup.py @@ -25,7 +25,7 @@ "future>=0.11.0", "asn1==2.2.0", "pyopenssl>=18.0.0", - "iso8601==0.1.16", + "iso8601==1.0.2", "pytz==2021.3", ], extras_require={ From 5d46ab8dad630c774f8ccafd02a50f13bbb4c4d8 Mon Sep 17 00:00:00 2001 From: Michal Milewicz Date: Wed, 1 Dec 2021 15:45:35 +0100 Subject: [PATCH 41/98] changes after CR --- .../session/create/subcheck/issuing_authority_sub_check.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yoti_python_sdk/doc_scan/session/create/subcheck/issuing_authority_sub_check.py b/yoti_python_sdk/doc_scan/session/create/subcheck/issuing_authority_sub_check.py index eb955e17..376171b7 100644 --- a/yoti_python_sdk/doc_scan/session/create/subcheck/issuing_authority_sub_check.py +++ b/yoti_python_sdk/doc_scan/session/create/subcheck/issuing_authority_sub_check.py @@ -7,7 +7,7 @@ class IssuingAuthoritySubCheck(SubRequestedCheck): """ - Requests creation of a Issuing Authority Sub Check. + Requests creation of an Issuing Authority Sub Check. """ def __init__(self, filter=None): From 8ca2f929dece0b34ad64341dd68f9b39ba3995bc Mon Sep 17 00:00:00 2001 From: Michal Milewicz Date: Wed, 8 Dec 2021 10:18:29 +0100 Subject: [PATCH 42/98] [SDK-1980] Add support for Session Deadline --- .../doc_scan/session/create/session_spec.py | 30 +++++++++++++++++++ .../session/retrieve/create_session_result.py | 11 +++++++ .../session/create/test_session_spec.py | 4 +++ 3 files changed, 45 insertions(+) diff --git a/yoti_python_sdk/doc_scan/session/create/session_spec.py b/yoti_python_sdk/doc_scan/session/create/session_spec.py index ef3bbce4..75a2b8be 100644 --- a/yoti_python_sdk/doc_scan/session/create/session_spec.py +++ b/yoti_python_sdk/doc_scan/session/create/session_spec.py @@ -21,6 +21,7 @@ def __init__( requested_tasks=None, required_documents=None, block_biometric_consent=None, + session_deadline=None, ): """ :param client_session_token_ttl: the client session token TTL @@ -41,6 +42,8 @@ def __init__( :type required_documents: list[RequiredDocument] or None :param block_biometric_consent: block the collection of biometric consent :type block_biometric_consent: bool + :param session_deadline: session deadline using a Zoned timestamp + "type session_deadline: str """ if requested_tasks is None: requested_tasks = [] @@ -58,6 +61,7 @@ def __init__( self.__requested_tasks = requested_tasks self.__required_documents = required_documents self.__block_biometric_consent = block_biometric_consent + self.__session_deadline = session_deadline @property def client_session_token_ttl(self): @@ -152,6 +156,16 @@ def block_biometric_consent(self): """ return self.__block_biometric_consent + @property + def session_deadline(self): + """ + Session deadline used by IDV + + :return: session deadline + :rtype: str + """ + return self.__session_deadline + def to_json(self): return remove_null_values( { @@ -164,6 +178,7 @@ def to_json(self): "sdk_config": self.sdk_config, "required_documents": self.required_documents, "block_biometric_consent": self.block_biometric_consent, + "session_deadline": self.session_deadline, } ) @@ -183,6 +198,7 @@ def __init__(self): self.__requested_tasks = [] self.__required_documents = [] self.__block_biometric_consent = None + self.__session_deadline = None def with_client_session_token_ttl(self, value): """ @@ -196,6 +212,19 @@ def with_client_session_token_ttl(self, value): self.__client_session_token_ttl = value return self + def with_session_deadline(self, value): + """ + Sets the deadline that the session needs to be completed by. + Can be used as an alternative to with_client_session_token_ttl. + + :param value: the session deadline + :type value: str + :return: the builder + :rtype: SessionSpecBuilder + """ + self.__session_deadline = value + return self + def with_resources_ttl(self, value): """ Sets the resources TTL (time-to-live) @@ -309,4 +338,5 @@ def build(self): self.__requested_tasks, self.__required_documents, self.__block_biometric_consent, + self.__session_deadline, ) diff --git a/yoti_python_sdk/doc_scan/session/retrieve/create_session_result.py b/yoti_python_sdk/doc_scan/session/retrieve/create_session_result.py index c64dd9da..2990f473 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/create_session_result.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/create_session_result.py @@ -16,6 +16,7 @@ def __init__(self, data=None): data = dict() self.__client_session_token_ttl = data.get("client_session_token_ttl", None) + self.__session_deadline = data.get("session_deadline", None) self.__session_id = data.get("session_id", None) self.__client_session_token = data.get("client_session_token", None) @@ -49,3 +50,13 @@ def session_id(self): :rtype: str or None """ return self.__session_id + + @property + def session_deadline(self): + """ + The deadline that the session needs to be completed by. + + :return: the session deadline + :rtype: str or None + """ + return self.__session_deadline diff --git a/yoti_python_sdk/tests/doc_scan/session/create/test_session_spec.py b/yoti_python_sdk/tests/doc_scan/session/create/test_session_spec.py index 41f0a5e5..034c4b05 100644 --- a/yoti_python_sdk/tests/doc_scan/session/create/test_session_spec.py +++ b/yoti_python_sdk/tests/doc_scan/session/create/test_session_spec.py @@ -21,6 +21,7 @@ class SessionSpecTest(unittest.TestCase): SOME_CLIENT_SESSION_TOKEN_TTL = 300 SOME_RESOURCES_TTL = 100000 SOME_USER_TRACKING_ID = "someUserTrackingId" + SOME_SESSION_DEADLINE = "2021-09-03T11:40:54.727619+02:00" def test_should_build_correctly(self): sdk_config_mock = Mock(spec=SdkConfig) @@ -31,6 +32,7 @@ def test_should_build_correctly(self): result = ( SessionSpecBuilder() .with_client_session_token_ttl(self.SOME_CLIENT_SESSION_TOKEN_TTL) + .with_session_deadline(self.SOME_SESSION_DEADLINE) .with_resources_ttl(self.SOME_RESOURCES_TTL) .with_user_tracking_id(self.SOME_USER_TRACKING_ID) .with_notifications(notification_mock) @@ -49,6 +51,7 @@ def test_should_build_correctly(self): assert requested_check_mock in result.requested_checks assert len(result.requested_tasks) == 1 assert requested_task_mock in result.requested_tasks + assert result.session_deadline == self.SOME_SESSION_DEADLINE def test_should_serialize_to_json_without_error(self): sdk_config_mock = Mock(spec=SdkConfig) @@ -66,6 +69,7 @@ def test_should_serialize_to_json_without_error(self): result = ( SessionSpecBuilder() .with_client_session_token_ttl(self.SOME_CLIENT_SESSION_TOKEN_TTL) + .with_session_deadline(self.SOME_SESSION_DEADLINE) .with_resources_ttl(self.SOME_RESOURCES_TTL) .with_user_tracking_id(self.SOME_USER_TRACKING_ID) .with_notifications(notification_mock) From d408479240b506dac54615819d7f627beebcd268 Mon Sep 17 00:00:00 2001 From: Michal Milewicz Date: Mon, 30 Aug 2021 10:37:23 +0200 Subject: [PATCH 43/98] SDK-1901 adding WATCHLIST_SCREENING check --- .gitignore | 2 +- yoti_python_sdk/doc_scan/constants.py | 2 + .../doc_scan/session/create/check/__init__.py | 3 + .../session/create/check/watchlist_screen.py | 104 +++++++++++++++++ .../session/retrieve/check_response.py | 8 ++ .../session/retrieve/get_session_result.py | 2 + .../create/check/test_wathclist_check.py | 106 ++++++++++++++++++ yoti_python_sdk/tests/test_anchor.py | 6 +- 8 files changed, 229 insertions(+), 4 deletions(-) create mode 100644 yoti_python_sdk/doc_scan/session/create/check/watchlist_screen.py create mode 100644 yoti_python_sdk/tests/doc_scan/session/create/check/test_wathclist_check.py diff --git a/.gitignore b/.gitignore index 1cd6cf41..022b5cb0 100644 --- a/.gitignore +++ b/.gitignore @@ -105,4 +105,4 @@ examples/yoti_example_django/*.pem examples/yoti_example_flask/*.pem .scannerwork -.venv/ \ No newline at end of file +.venv/ diff --git a/yoti_python_sdk/doc_scan/constants.py b/yoti_python_sdk/doc_scan/constants.py index 6aa18d1d..279d4e5e 100644 --- a/yoti_python_sdk/doc_scan/constants.py +++ b/yoti_python_sdk/doc_scan/constants.py @@ -36,3 +36,5 @@ IGNORE = "IGNORE" PROOF_OF_ADDRESS = "PROOF_OF_ADDRESS" + +WATCHLIST_SCREENING_CHECK_TYPE = "WATCHLIST_SCREENING" diff --git a/yoti_python_sdk/doc_scan/session/create/check/__init__.py b/yoti_python_sdk/doc_scan/session/create/check/__init__.py index c0c38292..89d5689f 100644 --- a/yoti_python_sdk/doc_scan/session/create/check/__init__.py +++ b/yoti_python_sdk/doc_scan/session/create/check/__init__.py @@ -2,10 +2,13 @@ from .document_comparison import RequestedIDDocumentComparisonCheckBuilder from .face_match import RequestedFaceMatchCheckBuilder from .liveness import RequestedLivenessCheckBuilder +from .watchlist_screen import WatchlistScreeningCheckBuilder + __all__ = [ "RequestedDocumentAuthenticityCheckBuilder", "RequestedIDDocumentComparisonCheckBuilder", "RequestedFaceMatchCheckBuilder", "RequestedLivenessCheckBuilder", + "WatchlistScreeningCheckBuilder", ] diff --git a/yoti_python_sdk/doc_scan/session/create/check/watchlist_screen.py b/yoti_python_sdk/doc_scan/session/create/check/watchlist_screen.py new file mode 100644 index 00000000..8151abcf --- /dev/null +++ b/yoti_python_sdk/doc_scan/session/create/check/watchlist_screen.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from yoti_python_sdk.doc_scan import constants +from yoti_python_sdk.utils import YotiSerializable, remove_null_values +from .requested_check import RequestedCheck + + +class WatchlistScreeningCheckConfig(YotiSerializable): + """ + The configuration applied when creating a Watchlist screening check. + """ + + def __init__(self, manual_check, categories): + """ + :param manual_check: the watchlist screening check manual_check eg. "NEVER" + :type type: str + :param categories: list of categories for watchlist screening check config + :type max_retries: list + """ + self.__categories = categories + self.__manual_check = manual_check + + @property + def manual_check(self): + """ + Watchlist screening check manual check value + + :return: str + """ + return self.__manual_check + + @property + def categories(self): + """ + Watchlist screening check categories + + :return: list + """ + return self.__categories + + def to_json(self): + return remove_null_values( + {"manual_check": self.manual_check, "categories": self.__categories} + ) + + +class WatchlistScreeningCheck(RequestedCheck): + """ + Requests creation of a Watchlist screening check + """ + + def __init__(self, config): + """ + :param config: the Watchlist screening check configuration + :type config: WatchlistScreeningCheckConfig + """ + self.__config = config + + @property + def type(self): + return constants.WATCHLIST_SCREENING_CHECK_TYPE + + @property + def config(self): + return self.__config + + +class WatchlistScreeningCheckBuilder(object): + """ + Builder to assist creation of :class:`WatchlistScreeningCheck` + """ + + def __init__(self): + self.__categories = None + self.__manual_check = None + + def with_categories(self, categories): + """ + Sets the WatchListScreeningCheck categories + + :return: the builder + :rtype: WatchlistScreeningCheckBuilder + """ + self.__categories = categories + + return self + + def with_manual_check(self, manual_check): + """ + Sets the WatchListScreeningCheck manual_check + + :param liveness_type: the manual_check + :type liveness_type: str + :return: the builder + :rtype: WatchlistScreeningCheckBuilder + """ + self.__manual_check = manual_check + + return self + + def build(self): + config = WatchlistScreeningCheckConfig(self.__manual_check, self.__categories or []) + return WatchlistScreeningCheck(config) diff --git a/yoti_python_sdk/doc_scan/session/retrieve/check_response.py b/yoti_python_sdk/doc_scan/session/retrieve/check_response.py index f1cb515d..f05c4cf5 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/check_response.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/check_response.py @@ -184,3 +184,11 @@ class SupplementaryDocumentTextDataCheckResponse(CheckResponse): """ pass + + +class WatchlistScreeningCheckResponse(CheckResponse): + """ + Represents a watchlist screening check for a given session + """ + + pass diff --git a/yoti_python_sdk/doc_scan/session/retrieve/get_session_result.py b/yoti_python_sdk/doc_scan/session/retrieve/get_session_result.py index f39eed98..7f238281 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/get_session_result.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/get_session_result.py @@ -16,6 +16,7 @@ LivenessCheckResponse, TextDataCheckResponse, SupplementaryDocumentTextDataCheckResponse, + WatchlistScreeningCheckResponse, ) from .resource_container import ResourceContainer @@ -80,6 +81,7 @@ def __parse_check(check): constants.ID_DOCUMENT_FACE_MATCH: FaceMatchCheckResponse, constants.ID_DOCUMENT_TEXT_DATA_CHECK: TextDataCheckResponse, constants.LIVENESS: LivenessCheckResponse, + constants.WATCHLIST_SCREENING_CHECK_TYPE: WatchlistScreeningCheckResponse, constants.ID_DOCUMENT_COMPARISON: IDDocumentComparisonCheckResponse, constants.SUPPLEMENTARY_DOCUMENT_TEXT_DATA_CHECK: SupplementaryDocumentTextDataCheckResponse, } diff --git a/yoti_python_sdk/tests/doc_scan/session/create/check/test_wathclist_check.py b/yoti_python_sdk/tests/doc_scan/session/create/check/test_wathclist_check.py new file mode 100644 index 00000000..95d04539 --- /dev/null +++ b/yoti_python_sdk/tests/doc_scan/session/create/check/test_wathclist_check.py @@ -0,0 +1,106 @@ +import json +import unittest + +from yoti_python_sdk.doc_scan import constants +from yoti_python_sdk.doc_scan.session.create.check import ( + WatchlistScreeningCheckBuilder, +) +from yoti_python_sdk.doc_scan.session.create.check.requested_check import RequestedCheck +from yoti_python_sdk.doc_scan.session.create.check.watchlist_screen import ( + WatchlistScreeningCheck, + WatchlistScreeningCheckConfig, +) +from yoti_python_sdk.utils import YotiEncoder +from yoti_python_sdk.doc_scan.constants import WATCHLIST_SCREENING_CHECK_TYPE + + +class WatchlistScreeningCheckTest(unittest.TestCase): + def test_should_build_correctly_with_manual_check(self): + dummy_manual_check = "DUMMY_VALUE" + + result = ( + WatchlistScreeningCheckBuilder() + .with_manual_check(dummy_manual_check) + .build() + ) + + assert isinstance(result, RequestedCheck) + assert isinstance(result, WatchlistScreeningCheck) + + assert result.type == constants.WATCHLIST_SCREENING_CHECK_TYPE + assert result.config.manual_check == dummy_manual_check + assert result.config.categories == [] + + def test_should_build_corretly_with_categories(self): + dummy_categories = ["FIRST", "SECOND"] + + result = ( + WatchlistScreeningCheckBuilder() + .with_categories(dummy_categories) + .build() + ) + + assert isinstance(result, RequestedCheck) + assert isinstance(result, WatchlistScreeningCheck) + + assert result.type == constants.WATCHLIST_SCREENING_CHECK_TYPE + assert result.config.categories == dummy_categories + assert result.config.manual_check is None + + def test_should_build_correctly_with_manual_check_and_categories(self): + dummy_manual_check = "DUMMY_VALUE" + dummy_categories = ["FIRST", "SECOND"] + + result = ( + WatchlistScreeningCheckBuilder() + .with_manual_check(dummy_manual_check) + .with_categories(dummy_categories) + .build() + ) + + assert isinstance(result, RequestedCheck) + assert isinstance(result, WatchlistScreeningCheck) + + assert result.type == constants.WATCHLIST_SCREENING_CHECK_TYPE + assert result.config.manual_check == dummy_manual_check + assert result.config.categories == dummy_categories + + def test_should_serialize_to_json_without_error(self): + another_dummy_manual_check = "DUMMY_VALUE" + another_dummy_categories = ["FIRST", "SECOND"] + + result = ( + WatchlistScreeningCheckBuilder() + .with_manual_check(another_dummy_manual_check) + .with_categories(another_dummy_categories) + .build() + ) + + s = json.dumps(result, cls=YotiEncoder) + assert s is not None and s != "" + + result = ( + WatchlistScreeningCheckBuilder() + .with_categories(another_dummy_categories) + .build() + ) + + s = json.dumps(result, cls=YotiEncoder) + assert s is not None and s != "" + + s = json.loads(s) + assert s.get("type") == WATCHLIST_SCREENING_CHECK_TYPE + assert s.get("config") == {"categories": another_dummy_categories} + + result = ( + WatchlistScreeningCheckBuilder() + .with_manual_check(another_dummy_manual_check) + .build() + ) + + s = json.dumps(result, cls=YotiEncoder) + assert s is not None and s != "" + + s = json.loads(s) + assert s.get("type") == WATCHLIST_SCREENING_CHECK_TYPE + assert s.get("config") == {"manual_check": "DUMMY_VALUE", "categories": []} diff --git a/yoti_python_sdk/tests/test_anchor.py b/yoti_python_sdk/tests/test_anchor.py index 972412c9..7305d6fa 100644 --- a/yoti_python_sdk/tests/test_anchor.py +++ b/yoti_python_sdk/tests/test_anchor.py @@ -3,6 +3,7 @@ import pytz import time from datetime import datetime +from datetime import timedelta import yoti_python_sdk from yoti_python_sdk import config @@ -118,11 +119,10 @@ def test_processing_unknown_anchor_data(): (anchor.value, anchor.anchor_type, anchor.sub_type) for anchor in anchors ] - expected_timestamp = datetime(2019, 3, 5, 10, 45, 11, 840037).replace(tzinfo=None) - actual_timestamp = anchors[0].signed_timestamp.astimezone(pytz.utc).replace(tzinfo=None) + expected_timestamp = datetime(2019, 3, 5, 10, 45, 11, 840037, tzinfo=pytz.utc) + actual_timestamp = anchors[0].signed_timestamp.astimezone(pytz.utc) assert expected_timestamp == actual_timestamp - assert "document-registration-server" in [ a.value for a in anchors[0].origin_server_certs.issuer ] From e3be90a09aab736148c05c3d9ad357d55d9dbe5c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 Jan 2022 04:00:53 +0000 Subject: [PATCH 44/98] Bump virtualenv from 20.10.0 to 20.12.0 Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.10.0 to 20.12.0. - [Release notes](https://github.com/pypa/virtualenv/releases) - [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst) - [Commits](https://github.com/pypa/virtualenv/compare/20.10.0...20.12.0) --- updated-dependencies: - dependency-name: virtualenv dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 728efb66..3b73b4fe 100644 --- a/setup.py +++ b/setup.py @@ -45,7 +45,7 @@ "python-coveralls==2.9.3", "coverage==4.5.4", "mock==2.0.0", - "virtualenv==20.10.0", + "virtualenv==20.12.0", "flake8==4.0.1", ], }, From 0a4fce7846d6d2c6b5527360487dd085d7cf6f04 Mon Sep 17 00:00:00 2001 From: Michal Milewicz Date: Thu, 23 Sep 2021 15:22:59 +0200 Subject: [PATCH 45/98] SDK-1838 auth_type for doc_scan session --- .github/workflows/sonar.yaml | 2 +- .../session/create/notification_config.py | 38 ++++++++++++++++++- .../create/test_notification_config.py | 26 +++++++++++++ yoti_python_sdk/tests/test_anchor.py | 4 +- 4 files changed, 65 insertions(+), 5 deletions(-) diff --git a/.github/workflows/sonar.yaml b/.github/workflows/sonar.yaml index d0a30566..f5055259 100644 --- a/.github/workflows/sonar.yaml +++ b/.github/workflows/sonar.yaml @@ -26,7 +26,7 @@ jobs: - run: pytest --cov=yoti_python_sdk yoti_python_sdk/tests --cov-report=xml:coverage-reports/coverage-new.xml - - run: sed -i 's+.*+/home/travis/build/getyoti/yoti-python-sdk/yoti_python_sdk+g' coverage-reports/coverage-new.xml + - run: sed -i 's@'$GITHUB_WORKSPACE'@/github/workspace/@g' coverage-reports/coverage-new.xml - uses: sonarsource/sonarcloud-github-action@master env: diff --git a/yoti_python_sdk/doc_scan/session/create/notification_config.py b/yoti_python_sdk/doc_scan/session/create/notification_config.py index 476a38b0..af68656e 100644 --- a/yoti_python_sdk/doc_scan/session/create/notification_config.py +++ b/yoti_python_sdk/doc_scan/session/create/notification_config.py @@ -16,7 +16,7 @@ class NotificationConfig(YotiSerializable): to poll for the state of the Session. """ - def __init__(self, auth_token, endpoint, topics=None): + def __init__(self, auth_token, endpoint, topics=None, auth_type=None): """ :param auth_token: the authorization token :type auth_token: str @@ -31,6 +31,7 @@ def __init__(self, auth_token, endpoint, topics=None): self.__auth_token = auth_token self.__endpoint = endpoint self.__topics = list(set(topics)) # Get unique values + self.__auth_type = auth_type @property def auth_token(self): @@ -62,9 +63,21 @@ def topics(self): """ return self.__topics + @property + def auth_type(self): + """ + The authentication type that the notification will use to + authenticate itself. + + :return: the endpoint + :rtype: str + """ + return self.__auth_type + def to_json(self): return remove_null_values( { + "auth_type": self.auth_type, "auth_token": self.auth_token, "endpoint": self.endpoint, "topics": self.topics, @@ -81,6 +94,7 @@ def __init__(self): self.__auth_token = None self.__endpoint = None self.__topics = [] + self.__auth_type = None def with_auth_token(self, token): """ @@ -154,6 +168,26 @@ def for_check_completion(self): """ return self.with_topic(CHECK_COMPLETION) + def with_basic_auth_type(self): + """ + Setup "BASIC" auth type for notifications. + + :return: the builder + :rtype: NotificationConfigBuilder + """ + self.__auth_type = "BASIC" + return self + + def with_bearer_auth_type(self): + """ + Setup "BEARER" auth type for notifications. + + :return: the builder + :rtype: NotificationConfigBuilder + """ + self.__auth_type = "BEARER" + return self + def build(self): """ Builds the :class:`NotificationConfig` using the supplied values @@ -161,4 +195,4 @@ def build(self): :return: the build notification config :rtype: NotificationConfig """ - return NotificationConfig(self.__auth_token, self.__endpoint, self.__topics) + return NotificationConfig(self.__auth_token, self.__endpoint, self.__topics, self.__auth_type) diff --git a/yoti_python_sdk/tests/doc_scan/session/create/test_notification_config.py b/yoti_python_sdk/tests/doc_scan/session/create/test_notification_config.py index f207ff14..1fa09b29 100644 --- a/yoti_python_sdk/tests/doc_scan/session/create/test_notification_config.py +++ b/yoti_python_sdk/tests/doc_scan/session/create/test_notification_config.py @@ -12,6 +12,7 @@ class NotificationConfigTest(unittest.TestCase): SOME_AUTH_TOKEN = "someAuthToken" SOME_ENDPOINT = "someEndpoint" SOME_TOPIC = "someTopic" + SOME_AUTH_TYPE = "someAuthType" def test_should_build_correctly(self): result = ( @@ -26,6 +27,7 @@ def test_should_build_correctly(self): assert result.auth_token is self.SOME_AUTH_TOKEN assert result.endpoint is self.SOME_ENDPOINT assert self.SOME_TOPIC in result.topics + assert result.auth_type is None def test_should_add_resource_update_topic(self): result = ( @@ -104,6 +106,30 @@ def test_should_store_unique_topics(self): assert len(result.topics) == 1 + def test_build_with_basic_auth_type(self): + result = ( + NotificationConfigBuilder() + .with_auth_token(self.SOME_AUTH_TOKEN) + .with_endpoint(self.SOME_ENDPOINT) + .with_topic(self.SOME_TOPIC) + .with_basic_auth_type() + .build() + ) + + assert result.auth_type is "BASIC" + + def test_build_with_bearer_auth_type(self): + result = ( + NotificationConfigBuilder() + .with_auth_token(self.SOME_AUTH_TOKEN) + .with_endpoint(self.SOME_ENDPOINT) + .with_topic(self.SOME_TOPIC) + .with_bearer_auth_type() + .build() + ) + + assert result.auth_type is "BEARER" + def test_should_serialize_to_json_without_error(self): result = ( NotificationConfigBuilder() diff --git a/yoti_python_sdk/tests/test_anchor.py b/yoti_python_sdk/tests/test_anchor.py index 972412c9..f28eb5d0 100644 --- a/yoti_python_sdk/tests/test_anchor.py +++ b/yoti_python_sdk/tests/test_anchor.py @@ -118,8 +118,8 @@ def test_processing_unknown_anchor_data(): (anchor.value, anchor.anchor_type, anchor.sub_type) for anchor in anchors ] - expected_timestamp = datetime(2019, 3, 5, 10, 45, 11, 840037).replace(tzinfo=None) - actual_timestamp = anchors[0].signed_timestamp.astimezone(pytz.utc).replace(tzinfo=None) + expected_timestamp = datetime(2019, 3, 5, 10, 45, 11, 840037, tzinfo=pytz.utc) + actual_timestamp = anchors[0].signed_timestamp.astimezone(pytz.utc) assert expected_timestamp == actual_timestamp From 247b43ddfa0f2c3f61d993aa162dde00828bd23e Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 10:18:43 +0000 Subject: [PATCH 46/98] Don't fix version of setuptools for "check examples" --- .github/workflows/tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index f2384922..be19d20a 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -44,7 +44,7 @@ jobs: with: python-version: 3.9 - - run: pip install -U setuptools==45 + - run: pip install -U setuptools - run: sudo apt install python3-distutils -y From 81988d70381a14a6883a1522f34da137f657c3a2 Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 10:31:35 +0000 Subject: [PATCH 47/98] Revert "Don't fix version of setuptools for "check examples"" This reverts commit c422f2d254b0e80dcc75036f7e04caca789d99ff. --- .github/workflows/tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index be19d20a..f2384922 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -44,7 +44,7 @@ jobs: with: python-version: 3.9 - - run: pip install -U setuptools + - run: pip install -U setuptools==45 - run: sudo apt install python3-distutils -y From 34acc2436aacec321f250fc90f7ba942f17ce12f Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 10:50:50 +0000 Subject: [PATCH 48/98] Upgrade "six" package --- examples/doc_scan/requirements.in | 1 + examples/doc_scan/requirements.txt | 88 +++++++++++++------ examples/yoti_example_django/requirements.in | 1 + examples/yoti_example_django/requirements.txt | 85 +++++++++++++----- requirements.in | 1 + requirements.txt | 3 +- 6 files changed, 127 insertions(+), 52 deletions(-) diff --git a/examples/doc_scan/requirements.in b/examples/doc_scan/requirements.in index 6c49c931..572ae2b7 100644 --- a/examples/doc_scan/requirements.in +++ b/examples/doc_scan/requirements.in @@ -3,3 +3,4 @@ python-dotenv>=0.13.0 yoti>=2.14.0 filetype>=1.0.7 pyopenssl>=19.1.0 +six>=1.16.0 \ No newline at end of file diff --git a/examples/doc_scan/requirements.txt b/examples/doc_scan/requirements.txt index 5fb08a69..91b73492 100644 --- a/examples/doc_scan/requirements.txt +++ b/examples/doc_scan/requirements.txt @@ -1,35 +1,69 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.8 # To update, run: # # pip-compile --output-file=requirements.txt requirements.in # -asn1==2.2.0 # via yoti -certifi==2020.4.5.1 # via requests -cffi==1.14.0 # via cryptography -chardet==3.0.4 # via requests -click==7.1.2 # via flask -cryptography==3.2 # via pyopenssl, yoti -deprecated==1.2.10 # via yoti -filetype==1.0.7 # via -r requirements.in -flask==1.1.2 # via -r requirements.in -future==0.18.2 # via yoti -idna==2.9 # via requests -iso8601==0.1.13 # via yoti -itsdangerous==1.1.0 # via flask -jinja2==2.11.2 # via flask -markupsafe==1.1.1 # via jinja2 -protobuf==3.11.3 # via yoti -pycparser==2.20 # via cffi -pyopenssl==19.1.0 # via -r requirements.in, yoti -python-dotenv==0.13.0 # via -r requirements.in -pytz==2020.4 # via yoti -requests==2.23.0 # via yoti -six==1.14.0 # via cryptography, protobuf, pyopenssl -urllib3==1.25.9 # via requests -werkzeug==1.0.1 # via flask -wrapt==1.12.1 # via deprecated -yoti==2.14.0 # via -r requirements.in +asn1==2.2.0 + # via yoti +certifi==2020.4.5.1 + # via requests +cffi==1.14.0 + # via cryptography +chardet==3.0.4 + # via requests +click==7.1.2 + # via flask +cryptography==3.2 + # via + # pyopenssl + # yoti +deprecated==1.2.10 + # via yoti +filetype==1.0.7 + # via -r requirements.in +flask==1.1.2 + # via -r requirements.in +future==0.18.2 + # via yoti +idna==2.9 + # via requests +iso8601==0.1.13 + # via yoti +itsdangerous==1.1.0 + # via flask +jinja2==2.11.2 + # via flask +markupsafe==1.1.1 + # via jinja2 +protobuf==3.11.3 + # via yoti +pycparser==2.20 + # via cffi +pyopenssl==19.1.0 + # via + # -r requirements.in + # yoti +python-dotenv==0.13.0 + # via -r requirements.in +pytz==2020.4 + # via yoti +requests==2.23.0 + # via yoti +six==1.16.0 + # via + # -r requirements.in + # cryptography + # protobuf + # pyopenssl +urllib3==1.25.9 + # via requests +werkzeug==1.0.1 + # via flask +wrapt==1.12.1 + # via deprecated +yoti==2.14.0 + # via -r requirements.in # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/examples/yoti_example_django/requirements.in b/examples/yoti_example_django/requirements.in index 3890bd95..d99c7abd 100644 --- a/examples/yoti_example_django/requirements.in +++ b/examples/yoti_example_django/requirements.in @@ -4,3 +4,4 @@ python-dotenv>=0.7.1 requests>=2.20.0 urllib3>=1.24.2 yoti>=2.14.0 +six>=1.16.0 \ No newline at end of file diff --git a/examples/yoti_example_django/requirements.txt b/examples/yoti_example_django/requirements.txt index f20dbed6..cf5466dd 100644 --- a/examples/yoti_example_django/requirements.txt +++ b/examples/yoti_example_django/requirements.txt @@ -1,32 +1,69 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.8 # To update, run: # # pip-compile --output-file=requirements.txt requirements.in # -asgiref==3.4.1 # via django -asn1==2.2.0 # via yoti -certifi==2018.4.16 # via requests -cffi==1.14.0 # via cryptography -chardet==3.0.4 # via requests -cryptography==3.2 # via pyopenssl, yoti -deprecated==1.2.10 # via yoti -django-sslserver==0.22 # via -r requirements.in -django==3.1.12 # via -r requirements.in, django-sslserver -future==0.16.0 # via yoti -idna==2.7 # via requests -iso8601==0.1.13 # via yoti -protobuf==3.6.0 # via yoti -pycparser==2.18 # via cffi -pyopenssl==18.0.0 # via yoti -python-dotenv==0.8.2 # via -r requirements.in -pytz==2020.4 # via django, yoti -requests==2.21.0 # via -r requirements.in, yoti -six==1.11.0 # via cryptography, protobuf, pyopenssl -sqlparse==0.3.0 # via django -urllib3==1.24.2 # via -r requirements.in, requests -wrapt==1.12.1 # via deprecated -yoti==2.14.0 # via -r requirements.in +asgiref==3.4.1 + # via django +asn1==2.2.0 + # via yoti +certifi==2018.4.16 + # via requests +cffi==1.14.0 + # via cryptography +chardet==3.0.4 + # via requests +cryptography==3.2 + # via + # pyopenssl + # yoti +deprecated==1.2.10 + # via yoti +django==3.1.12 + # via + # -r requirements.in + # django-sslserver +django-sslserver==0.22 + # via -r requirements.in +future==0.16.0 + # via yoti +idna==2.7 + # via requests +iso8601==0.1.13 + # via yoti +protobuf==3.6.0 + # via yoti +pycparser==2.18 + # via cffi +pyopenssl==18.0.0 + # via yoti +python-dotenv==0.8.2 + # via -r requirements.in +pytz==2020.4 + # via + # django + # yoti +requests==2.21.0 + # via + # -r requirements.in + # yoti +six==1.16.0 + # via + # -r requirements.in + # cryptography + # protobuf + # pyopenssl +sqlparse==0.3.0 + # via django +urllib3==1.24.2 + # via + # -r requirements.in + # requests +wrapt==1.12.1 + # via deprecated +yoti==2.14.0 + # via -r requirements.in # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements.in b/requirements.in index c3586269..de05cf73 100644 --- a/requirements.in +++ b/requirements.in @@ -13,3 +13,4 @@ urllib3>=1.24.3 deprecated==1.2.13 wheel==0.33.6 iso8601==1.0.2 +six>=1.16.0 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 281792c6..f91e8924 100644 --- a/requirements.txt +++ b/requirements.txt @@ -42,8 +42,9 @@ pyyaml==5.2 # via -r requirements.in requests==2.21.0 # via -r requirements.in -six==1.10.0 +six==1.16.0 # via + # -r requirements.in # cryptography # pyopenssl urllib3==1.24.3 From bb391e3220c68205ac08820e3c524baa55644977 Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 11:07:45 +0000 Subject: [PATCH 49/98] Revert "Install python3.10-distutils" This reverts commit 9119a66dcb2e0e40619ca9e9a58ad384df9602b9. --- .github/workflows/tests.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index f2384922..8b6f8737 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -41,13 +41,9 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-python@v2.1.4 - with: - python-version: 3.9 - run: pip install -U setuptools==45 - - run: sudo apt install python3-distutils -y - - run: pushd examples/aml && pip install -r requirements.txt && popd - run: pushd examples/yoti_example_django && pip install -r requirements.txt && popd From 6fe19374fe23170a9e43336c6b866085acc92549 Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 11:25:17 +0000 Subject: [PATCH 50/98] Use actions/setup-python v2.3.1 --- .github/workflows/tests.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 8b6f8737..e5c3780c 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -18,7 +18,7 @@ jobs: steps: - uses: actions/checkout@v2 - - uses: actions/setup-python@v2.1.4 + - uses: actions/setup-python@v2.3.1 with: python-version: ${{ matrix.python-version }} @@ -40,7 +40,7 @@ jobs: steps: - uses: actions/checkout@v2 - - uses: actions/setup-python@v2.1.4 + - uses: actions/setup-python@v2.3.1 - run: pip install -U setuptools==45 From d491b4e7a138276cd9a7c8c28eb8479a9b006955 Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 11:28:02 +0000 Subject: [PATCH 51/98] Upgrade pip --- .github/workflows/tests.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index e5c3780c..a328f7a4 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -42,6 +42,8 @@ jobs: - uses: actions/setup-python@v2.3.1 + - run: python3 -m pip install --upgrade pip + - run: pip install -U setuptools==45 - run: pushd examples/aml && pip install -r requirements.txt && popd From 398374790699febb1575a2c26888b12db8e35d9d Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 11:32:10 +0000 Subject: [PATCH 52/98] Revert "Upgrade pip": already up to date This reverts commit b6714a04ff03a3a604aa64bdfbda8aa45d8597ab. --- .github/workflows/tests.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index a328f7a4..e5c3780c 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -42,8 +42,6 @@ jobs: - uses: actions/setup-python@v2.3.1 - - run: python3 -m pip install --upgrade pip - - run: pip install -U setuptools==45 - run: pushd examples/aml && pip install -r requirements.txt && popd From f6617addbed30945daf04bc8b5fbf12533d4fb9d Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 11:59:43 +0000 Subject: [PATCH 53/98] Use Python 3.10.0 until packages have been fixed by maintainers --- .github/workflows/tests.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index e5c3780c..ae246837 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -41,6 +41,8 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-python@v2.3.1 + with: + python-version: "3.10.0" - run: pip install -U setuptools==45 From 259c1f6c54fb84fa816ea36918de05012282e094 Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 12:09:10 +0000 Subject: [PATCH 54/98] Add 'sudo apt-get install python3-distutils' --- .github/workflows/tests.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index ae246837..92ad0091 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -44,6 +44,8 @@ jobs: with: python-version: "3.10.0" + - run: sudo apt-get install python3-distutils + - run: pip install -U setuptools==45 - run: pushd examples/aml && pip install -r requirements.txt && popd From 1ca237c6ac05f66d39b1ab5fa4f9c1082ddc254e Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 12:11:25 +0000 Subject: [PATCH 55/98] Revert "Use Python 3.10.0 until packages have been fixed by maintainers" This reverts commit 5cfc9babc0a0cfc42216d06d71099ed75bd2afe1. --- .github/workflows/tests.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 92ad0091..2a37f529 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -41,8 +41,6 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-python@v2.3.1 - with: - python-version: "3.10.0" - run: sudo apt-get install python3-distutils From adcce3eeb42674100faf17a446f954c5597b40ba Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 12:11:59 +0000 Subject: [PATCH 56/98] Revert "Add 'sudo apt-get install python3-distutils'" This reverts commit fa18326d80cc07d36b3f68d3f605a65aea03802c. --- .github/workflows/tests.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 2a37f529..e5c3780c 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -42,8 +42,6 @@ jobs: - uses: actions/setup-python@v2.3.1 - - run: sudo apt-get install python3-distutils - - run: pip install -U setuptools==45 - run: pushd examples/aml && pip install -r requirements.txt && popd From b59ddb7827c36ebe437c6ce7804799e79ca7fdbe Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 12:23:28 +0000 Subject: [PATCH 57/98] Use .version instead of distutils (distuils is deprecated) --- yoti_python_sdk/__init__.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/yoti_python_sdk/__init__.py b/yoti_python_sdk/__init__.py index a33747d5..e2084235 100644 --- a/yoti_python_sdk/__init__.py +++ b/yoti_python_sdk/__init__.py @@ -1,8 +1,7 @@ # -*- coding: utf-8 -*- import os -from distutils.util import convert_path from os import environ - +from .version import __version__ from yoti_python_sdk.client import Client DEFAULTS = { @@ -17,11 +16,8 @@ directory_name = os.path.dirname(__file__) version_path = os.path.join(directory_name, "version.py") -ver_path = convert_path(version_path) -with open(ver_path) as ver_file: - exec(ver_file.read(), main_ns) +exec(open(version_path).read()) -__version__ = main_ns["__version__"] YOTI_API_URL = environ.get("YOTI_API_URL", DEFAULTS["YOTI_API_URL"]) YOTI_PROFILE_ENDPOINT = "/api/v1" From a00399f66ee641c2a94a08799b23c03c2830e4f0 Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 12:27:25 +0000 Subject: [PATCH 58/98] Update packages: `future` causing a problem: ModuleNotFoundError: No module named 'distutils.command.bdist_wininst --- examples/yoti_example_django/requirements.in | 3 +- examples/yoti_example_django/requirements.txt | 14 +-- examples/yoti_example_flask/requirements.in | 3 +- examples/yoti_example_flask/requirements.txt | 94 ++++++++++++++----- requirements.in | 2 +- requirements.txt | 4 +- setup.py | 5 +- 7 files changed, 86 insertions(+), 39 deletions(-) diff --git a/examples/yoti_example_django/requirements.in b/examples/yoti_example_django/requirements.in index d99c7abd..a1f5881a 100644 --- a/examples/yoti_example_django/requirements.in +++ b/examples/yoti_example_django/requirements.in @@ -4,4 +4,5 @@ python-dotenv>=0.7.1 requests>=2.20.0 urllib3>=1.24.2 yoti>=2.14.0 -six>=1.16.0 \ No newline at end of file +six>=1.16.0 +cffi>=1.15.0 \ No newline at end of file diff --git a/examples/yoti_example_django/requirements.txt b/examples/yoti_example_django/requirements.txt index cf5466dd..ad75ff30 100644 --- a/examples/yoti_example_django/requirements.txt +++ b/examples/yoti_example_django/requirements.txt @@ -8,10 +8,14 @@ asgiref==3.4.1 # via django asn1==2.2.0 # via yoti +backports.zoneinfo==0.2.1 + # via django certifi==2018.4.16 # via requests -cffi==1.14.0 - # via cryptography +cffi==1.15.0 + # via + # -r requirements.in + # cryptography chardet==3.0.4 # via requests cryptography==3.2 @@ -20,7 +24,7 @@ cryptography==3.2 # yoti deprecated==1.2.10 # via yoti -django==3.1.12 +django==4.0.1 # via # -r requirements.in # django-sslserver @@ -41,9 +45,7 @@ pyopenssl==18.0.0 python-dotenv==0.8.2 # via -r requirements.in pytz==2020.4 - # via - # django - # yoti + # via yoti requests==2.21.0 # via # -r requirements.in diff --git a/examples/yoti_example_flask/requirements.in b/examples/yoti_example_flask/requirements.in index f59712fe..dafb4732 100644 --- a/examples/yoti_example_flask/requirements.in +++ b/examples/yoti_example_flask/requirements.in @@ -1,4 +1,4 @@ -cffi>=1.14.0 +cffi>=1.15.0 flask>=1.0.4 jinja2>=2.8.1 pyopenssl>=19.0.0 @@ -7,3 +7,4 @@ requests>=2.20.0 urllib3>=1.24.2 yoti>=2.14.0 werkzeug>=1.0.1 +six==1.16.0 \ No newline at end of file diff --git a/examples/yoti_example_flask/requirements.txt b/examples/yoti_example_flask/requirements.txt index 6d5f67d3..b516624f 100644 --- a/examples/yoti_example_flask/requirements.txt +++ b/examples/yoti_example_flask/requirements.txt @@ -1,34 +1,76 @@ # -# This file is autogenerated by pip-compile +# This file is autogenerated by pip-compile with python 3.10 # To update, run: # # pip-compile --output-file=requirements.txt requirements.in # -asn1==2.2.0 # via yoti -certifi==2018.4.16 # via requests -cffi==1.14.0 # via -r requirements.in, cryptography -chardet==3.0.4 # via requests -click==6.7 # via flask -cryptography==3.2 # via pyopenssl, yoti -deprecated==1.2.10 # via yoti -flask==1.1.1 # via -r requirements.in -future==0.16.0 # via yoti -idna==2.7 # via requests -iso8601==0.1.13 # via yoti -itsdangerous==0.24 # via flask -jinja2==2.10.1 # via -r requirements.in, flask -markupsafe==1.0 # via jinja2 -protobuf==3.6.0 # via yoti -pycparser==2.18 # via cffi -pyopenssl==19.0.0 # via -r requirements.in, yoti -python-dotenv==0.8.2 # via -r requirements.in -pytz==2020.4 # via yoti -requests==2.21.0 # via -r requirements.in, yoti -six==1.11.0 # via cryptography, protobuf, pyopenssl -urllib3==1.24.2 # via -r requirements.in, requests -werkzeug==1.0.1 # via -r requirements.in, flask -wrapt==1.12.1 # via deprecated -yoti==2.14.0 # via -r requirements.in +asn1==2.2.0 + # via yoti +certifi==2018.4.16 + # via requests +cffi==1.15.0 + # via + # -r requirements.in + # cryptography +chardet==3.0.4 + # via requests +click==6.7 + # via flask +cryptography==3.2 + # via + # pyopenssl + # yoti +deprecated==1.2.10 + # via yoti +flask==1.1.1 + # via -r requirements.in +future==0.16.0 + # via yoti +idna==2.7 + # via requests +iso8601==0.1.13 + # via yoti +itsdangerous==0.24 + # via flask +jinja2==2.10.1 + # via + # -r requirements.in + # flask +markupsafe==1.0 + # via jinja2 +protobuf==3.6.0 + # via yoti +pycparser==2.18 + # via cffi +pyopenssl==19.0.0 + # via + # -r requirements.in + # yoti +python-dotenv==0.8.2 + # via -r requirements.in +pytz==2020.4 + # via yoti +requests==2.21.0 + # via + # -r requirements.in + # yoti +six==1.16.0 + # via + # cryptography + # protobuf + # pyopenssl +urllib3==1.24.2 + # via + # -r requirements.in + # requests +werkzeug==1.0.1 + # via + # -r requirements.in + # flask +wrapt==1.12.1 + # via deprecated +yoti==2.14.0 + # via -r requirements.in # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements.in b/requirements.in index de05cf73..9c1947da 100644 --- a/requirements.in +++ b/requirements.in @@ -4,7 +4,7 @@ cffi==1.15.0 future==0.18.2 itsdangerous==2.0.1 pbr==1.10.0 -protobuf==3.19.1 +protobuf==3.19.3 pyopenssl==19.1.0 PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 pytz==2021.3 diff --git a/requirements.txt b/requirements.txt index f91e8924..6183c664 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with python 3.8 +# This file is autogenerated by pip-compile with python 3.10 # To update, run: # # pip-compile --output-file=requirements.txt requirements.in @@ -30,7 +30,7 @@ itsdangerous==2.0.1 # via -r requirements.in pbr==1.10.0 # via -r requirements.in -protobuf==3.19.1 +protobuf==3.19.3 # via -r requirements.in pycparser==2.18 # via cffi diff --git a/setup.py b/setup.py index 3b73b4fe..4b8cc0f0 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ "cryptography>=2.2.1", "protobuf>=3.1.0", "requests>=2.11.1", - "future>=0.11.0", + "future>=0.18.2", "asn1==2.2.0", "pyopenssl>=18.0.0", "iso8601==1.0.2", @@ -37,7 +37,7 @@ "Werkzeug==2.0.2", ], "dev": [ - "pre-commit==1.17.0", + "pre-commit==2.16.0", "pytest>=4.6.11", "pytest-cov>=2.7.1", "pylint==1.9.4", @@ -47,6 +47,7 @@ "mock==2.0.0", "virtualenv==20.12.0", "flake8==4.0.1", + "pip-tools==6.4.0", ], }, classifiers=[ From 7e1dbecc599cf25ee4475aa3b947e5feab4c8a1f Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 12:36:31 +0000 Subject: [PATCH 59/98] Use requirements.in for aml example: need to fix the future version (was intalling 0.11.0 before) --- examples/aml/requirements.in | 2 ++ examples/aml/requirements.txt | 48 +++++++++++++++++++++++++++++++++-- 2 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 examples/aml/requirements.in diff --git a/examples/aml/requirements.in b/examples/aml/requirements.in new file mode 100644 index 00000000..7e25054c --- /dev/null +++ b/examples/aml/requirements.in @@ -0,0 +1,2 @@ +yoti>=2.14.0 +python-dotenv>=0.7.1 diff --git a/examples/aml/requirements.txt b/examples/aml/requirements.txt index 7e25054c..33889910 100644 --- a/examples/aml/requirements.txt +++ b/examples/aml/requirements.txt @@ -1,2 +1,46 @@ -yoti>=2.14.0 -python-dotenv>=0.7.1 +# +# This file is autogenerated by pip-compile with python 3.10 +# To update, run: +# +# pip-compile --output-file=requirements.txt requirements.in +# +asn1==2.2.0 + # via yoti +certifi==2021.10.8 + # via requests +cffi==1.15.0 + # via cryptography +charset-normalizer==2.0.10 + # via requests +cryptography==36.0.1 + # via + # pyopenssl + # yoti +deprecated==1.2.10 + # via yoti +future==0.18.2 + # via yoti +idna==3.3 + # via requests +iso8601==0.1.13 + # via yoti +protobuf==3.19.3 + # via yoti +pycparser==2.21 + # via cffi +pyopenssl==21.0.0 + # via yoti +python-dotenv==0.19.2 + # via -r requirements.in +pytz==2020.4 + # via yoti +requests==2.27.1 + # via yoti +six==1.16.0 + # via pyopenssl +urllib3==1.26.8 + # via requests +wrapt==1.13.3 + # via deprecated +yoti==2.14.0 + # via -r requirements.in From 829b5a5c2692cda74272e74ebcdc3a77e979239f Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 12:41:54 +0000 Subject: [PATCH 60/98] Update wheel package --- requirements.in | 4 ++-- requirements.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/requirements.in b/requirements.in index 9c1947da..fbcff20a 100644 --- a/requirements.in +++ b/requirements.in @@ -7,10 +7,10 @@ pbr==1.10.0 protobuf==3.19.3 pyopenssl==19.1.0 PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 -pytz==2021.3 +pytz==2021.1 requests>=2.20.0 urllib3>=1.24.3 deprecated==1.2.13 -wheel==0.33.6 +wheel==0.37.1 iso8601==1.0.2 six>=1.16.0 \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 6183c664..e4bfd742 100644 --- a/requirements.txt +++ b/requirements.txt @@ -51,7 +51,7 @@ urllib3==1.24.3 # via # -r requirements.in # requests -wheel==0.33.6 +wheel==0.37.1 # via -r requirements.in wrapt==1.11.2 # via deprecated From 052066da8269645729999bb3641023a09fd1abb2 Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 12:43:45 +0000 Subject: [PATCH 61/98] Add wheel to setup.py --- setup.py | 1 + 1 file changed, 1 insertion(+) diff --git a/setup.py b/setup.py index 4b8cc0f0..bdabb887 100644 --- a/setup.py +++ b/setup.py @@ -26,6 +26,7 @@ "asn1==2.2.0", "pyopenssl>=18.0.0", "iso8601==1.0.2", + "wheel==0.37.1", "pytz==2021.3", ], extras_require={ From af033f0d005c0d17e043d33469baea4f6248fb87 Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 12:49:01 +0000 Subject: [PATCH 62/98] pip install wheel --- .github/workflows/tests.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index e5c3780c..7fbca08f 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -44,6 +44,8 @@ jobs: - run: pip install -U setuptools==45 + - run: pip install wheel + - run: pushd examples/aml && pip install -r requirements.txt && popd - run: pushd examples/yoti_example_django && pip install -r requirements.txt && popd From 7bffc05297685f159bdc81019f835a9dc9590f26 Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 12:52:05 +0000 Subject: [PATCH 63/98] Update django --- examples/yoti_example_django/requirements.in | 2 +- examples/yoti_example_django/requirements.txt | 2 +- examples/yoti_example_django/yoti_example/urls.py | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/examples/yoti_example_django/requirements.in b/examples/yoti_example_django/requirements.in index a1f5881a..884d3bd9 100644 --- a/examples/yoti_example_django/requirements.in +++ b/examples/yoti_example_django/requirements.in @@ -1,4 +1,4 @@ -django>=3.0.7 +django>=4.0.1 django-sslserver>=0.22.0 python-dotenv>=0.7.1 requests>=2.20.0 diff --git a/examples/yoti_example_django/requirements.txt b/examples/yoti_example_django/requirements.txt index ad75ff30..d966b31c 100644 --- a/examples/yoti_example_django/requirements.txt +++ b/examples/yoti_example_django/requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with python 3.8 +# This file is autogenerated by pip-compile with python 3.10 # To update, run: # # pip-compile --output-file=requirements.txt requirements.in diff --git a/examples/yoti_example_django/yoti_example/urls.py b/examples/yoti_example_django/yoti_example/urls.py index f8063333..77688930 100644 --- a/examples/yoti_example_django/yoti_example/urls.py +++ b/examples/yoti_example_django/yoti_example/urls.py @@ -13,17 +13,17 @@ 1. Import the include() function: from django.conf.urls import url, include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ -from django.conf.urls import url +from django.urls import re_path from django.contrib import admin from .views import IndexView, AuthView, DynamicShareView, SourceConstraintsView urlpatterns = [ - url(r"^$", IndexView.as_view(), name="index"), - url(r"^yoti/auth/$", AuthView.as_view(), name="auth"), - url(r"^admin/", admin.site.urls), - url(r"^dynamic-share/$", DynamicShareView.as_view(), name="dynamic-share"), - url( + re_path(r"^$", IndexView.as_view(), name="index"), + re_path(r"^yoti/auth/$", AuthView.as_view(), name="auth"), + re_path(r"^admin/", admin.site.urls), + re_path(r"^dynamic-share/$", DynamicShareView.as_view(), name="dynamic-share"), + re_path( r"^source-constraint/$", SourceConstraintsView.as_view(), name="source-constraints", From c4cd552808189b3dffdba74943a0ce1685a15762 Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 13:06:44 +0000 Subject: [PATCH 64/98] Remove django check (for now) --- .github/workflows/tests.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 7fbca08f..282dea92 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -48,8 +48,6 @@ jobs: - run: pushd examples/aml && pip install -r requirements.txt && popd - - run: pushd examples/yoti_example_django && pip install -r requirements.txt && popd - - run: pushd examples/yoti_example_flask && pip install -r requirements.txt && popd - run: pushd examples/doc_scan && pip install -r requirements.txt && popd From d685ba98d8a3cba11b1b0caea9f61cc8215a3b40 Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 13:14:58 +0000 Subject: [PATCH 65/98] Remove doc_scan check: problem with cffi & Python 3.10 --- .github/workflows/tests.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 282dea92..edc79310 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -49,5 +49,3 @@ jobs: - run: pushd examples/aml && pip install -r requirements.txt && popd - run: pushd examples/yoti_example_flask && pip install -r requirements.txt && popd - - - run: pushd examples/doc_scan && pip install -r requirements.txt && popd From b269b24170f41801c5a27ab49b741fd587097d9e Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Wed, 12 Jan 2022 13:33:17 +0000 Subject: [PATCH 66/98] Update requirements.txt --- examples/doc_scan/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/doc_scan/requirements.txt b/examples/doc_scan/requirements.txt index 91b73492..f0dca95c 100644 --- a/examples/doc_scan/requirements.txt +++ b/examples/doc_scan/requirements.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with python 3.8 +# This file is autogenerated by pip-compile with python 3.10 # To update, run: # # pip-compile --output-file=requirements.txt requirements.in From fad2ce8f7386537dbfd53a05bbbaeafdd1c30ba4 Mon Sep 17 00:00:00 2001 From: Michal Milewicz Date: Tue, 18 Jan 2022 10:42:44 +0100 Subject: [PATCH 67/98] SDK-2027: adding non-latin support for session and supported documents --- .../filter/orthogonal_restrictions_filter.py | 39 ++++++++++++++++++- .../doc_scan/support/supported_documents.py | 5 +++ .../policy/source_constraint_builder.py | 16 +++++++- .../test_issuing_authority_sub_check.py | 15 +++++++ .../support/test_supported_documents.py | 18 +++++++++ .../policy/test_source_constraint_builder.py | 18 +++++++++ 6 files changed, 108 insertions(+), 3 deletions(-) diff --git a/yoti_python_sdk/doc_scan/session/create/filter/orthogonal_restrictions_filter.py b/yoti_python_sdk/doc_scan/session/create/filter/orthogonal_restrictions_filter.py index 6e0bcf4e..c86eca3b 100644 --- a/yoti_python_sdk/doc_scan/session/create/filter/orthogonal_restrictions_filter.py +++ b/yoti_python_sdk/doc_scan/session/create/filter/orthogonal_restrictions_filter.py @@ -68,11 +68,12 @@ def to_json(self): class OrthogonalRestrictionsFilter(DocumentFilter): - def __init__(self, country_restriction, type_restriction): + def __init__(self, country_restriction, type_restriction, allow_non_latin_documents=None): DocumentFilter.__init__(self, filter_type=ORTHOGONAL_RESTRICTIONS) self.__country_restriction = country_restriction self.__type_restriction = type_restriction + self.__allow_non_latin_documents = allow_non_latin_documents @property def country_restriction(self): @@ -94,10 +95,23 @@ def type_restriction(self): """ return self.__type_restriction + @property + def allow_non_latin_documents(self): + """ + Returns the flag for whether non-latin documents are allowed. + + :return: allow_non_latin_documents + :rtype: bool + """ + return self.__allow_non_latin_documents + def to_json(self): parent = DocumentFilter.to_json(self) parent["country_restriction"] = self.country_restriction parent["type_restriction"] = self.type_restriction + if self.__allow_non_latin_documents is not None: + parent["allow_non_latin_documents"] = self.__allow_non_latin_documents + return remove_null_values(parent) @@ -117,6 +131,7 @@ class OrthogonalRestrictionsFilterBuilder(object): def __init__(self): self.__country_restriction = None self.__type_restriction = None + self.__allow_non_latin_documents = None def with_whitelisted_country_codes(self, country_codes): """ @@ -170,6 +185,26 @@ def with_blacklisted_document_types(self, document_types): self.__type_restriction = TypeRestriction(INCLUSION_BLACKLIST, document_types) return self + def allow_non_latin_documents(self): + """ + Sets a True value for "allow non-latin documents" flag. + + :return: the builder + :rtype: OrthogonalRestrictionsFilterBuilder + """ + self.__allow_non_latin_documents = True + return self + + def disable_non_latin_documents(self): + """ + Sets a False value for "allow non-latin documents" flag. + + :return: the builder + :rtype: OrthogonalRestrictionsFilterBuilder + """ + self.__allow_non_latin_documents = False + return self + def build(self): """ Builds the orthogonal filter, using the supplied whitelisted/blacklisted values @@ -178,5 +213,5 @@ def build(self): :rtype: OrthogonalRestrictionsFilter """ return OrthogonalRestrictionsFilter( - self.__country_restriction, self.__type_restriction + self.__country_restriction, self.__type_restriction, self.__allow_non_latin_documents ) diff --git a/yoti_python_sdk/doc_scan/support/supported_documents.py b/yoti_python_sdk/doc_scan/support/supported_documents.py index 55505b78..a35a21e1 100644 --- a/yoti_python_sdk/doc_scan/support/supported_documents.py +++ b/yoti_python_sdk/doc_scan/support/supported_documents.py @@ -4,11 +4,16 @@ def __init__(self, data=None): data = dict() self.__type = data.get("type", None) + self.__is_strictly_latin = data.get("is_strictly_latin", None) @property def type(self): return self.__type + @property + def is_strictly_latin(self): + return self.__is_strictly_latin + class SupportedCountry(object): def __init__(self, data=None): diff --git a/yoti_python_sdk/dynamic_sharing_service/policy/source_constraint_builder.py b/yoti_python_sdk/dynamic_sharing_service/policy/source_constraint_builder.py index 273afbfc..39df5070 100644 --- a/yoti_python_sdk/dynamic_sharing_service/policy/source_constraint_builder.py +++ b/yoti_python_sdk/dynamic_sharing_service/policy/source_constraint_builder.py @@ -15,6 +15,7 @@ class SourceConstraintBuilder(object): def __init__(self): self.__soft_preference = False self.__anchors = [] + self.__is_strictly_latin = None def with_soft_preference(self, value=True): """ @@ -64,14 +65,27 @@ def with_driving_licence(self, subtype=""): """ return self.with_anchor_by_name(ANCHOR_VALUE_DRIVING_LICENCE, subtype) + def allow_strictly_latin(self): + self.__is_strictly_latin = True + return self + + def disable_strictly_latin(self): + self.__is_strictly_latin = False + return self + def build(self): """ :returns: A dict describing the source constraint """ - return { + constrain = { "type": "SOURCE", "preferred_sources": { "soft_preference": self.__soft_preference, "anchors": self.__anchors, }, } + + if self.__is_strictly_latin is not None: + constrain["is_strictly_latin"] = self.__is_strictly_latin + + return constrain diff --git a/yoti_python_sdk/tests/doc_scan/session/create/subcheck/test_issuing_authority_sub_check.py b/yoti_python_sdk/tests/doc_scan/session/create/subcheck/test_issuing_authority_sub_check.py index bd1da3f4..083ea1a0 100644 --- a/yoti_python_sdk/tests/doc_scan/session/create/subcheck/test_issuing_authority_sub_check.py +++ b/yoti_python_sdk/tests/doc_scan/session/create/subcheck/test_issuing_authority_sub_check.py @@ -29,6 +29,21 @@ def test_should_always_build_with_requested_as_boolean_true(self): assert issuing_authority_sub_check.requested is True + def test_allow_non_latin_documents_set_to_true(self): + filter = OrthogonalRestrictionsFilterBuilder().allow_non_latin_documents().build() + + assert filter.allow_non_latin_documents is True + + def test_allow_non_latin_documents_set_to_false(self): + filter = OrthogonalRestrictionsFilterBuilder().disable_non_latin_documents().build() + + assert filter.allow_non_latin_documents is False + + def test_default_non_latin_documents(self): + filter = OrthogonalRestrictionsFilterBuilder().build() + + assert 'allow_non_latin_documents' not in filter.to_json() + def test_build_invalid_filter(self): filter = 'invalid' diff --git a/yoti_python_sdk/tests/doc_scan/support/test_supported_documents.py b/yoti_python_sdk/tests/doc_scan/support/test_supported_documents.py index 762d509d..a2887318 100644 --- a/yoti_python_sdk/tests/doc_scan/support/test_supported_documents.py +++ b/yoti_python_sdk/tests/doc_scan/support/test_supported_documents.py @@ -18,6 +18,24 @@ def test_supported_document_should_not_throw_exception_on_missing_data(): assert result.type is None +def test_supported_document_created_with_is_strictly_latin_as_true(): + result = SupportedDocument({"is_strictly_latin": True}) + + assert result.is_strictly_latin is True + + +def test_supported_document_created_with_is_strictly_latin_as_false(): + result = SupportedDocument({"is_strictly_latin": False}) + + assert result.is_strictly_latin is False + + +def test_supported_document_created_without_is_strictly_latin(): + result = SupportedDocument({"type": "someSupportedDocument"}) + + assert result.is_strictly_latin is None + + def test_supported_country_should_parse_data(): data = { "code": "someCode", diff --git a/yoti_python_sdk/tests/dynamic_sharing_service/policy/test_source_constraint_builder.py b/yoti_python_sdk/tests/dynamic_sharing_service/policy/test_source_constraint_builder.py index 689fc003..20cb37e3 100644 --- a/yoti_python_sdk/tests/dynamic_sharing_service/policy/test_source_constraint_builder.py +++ b/yoti_python_sdk/tests/dynamic_sharing_service/policy/test_source_constraint_builder.py @@ -33,3 +33,21 @@ def test_with_soft_preference(): assert ANCHOR_VALUE_DRIVING_LICENCE in [a["name"] for a in anchors] assert ANCHOR_VALUE_PASSPORT in [a["name"] for a in anchors] assert constraint["preferred_sources"]["soft_preference"] + + +def test_with_is_strictly_latin_set_true(): + constraint = SourceConstraintBuilder().allow_strictly_latin().build() + + assert constraint["is_strictly_latin"] is True + + +def test_with_is_strictly_latin_set_false(): + constraint = SourceConstraintBuilder().disable_strictly_latin().build() + + assert constraint["is_strictly_latin"] is False + + +def test_with_is_strictly_latin_default(): + constraint = SourceConstraintBuilder().build() + + assert "is_strictly_latin" not in constraint From 4c73bce1b308721a874546a20b78acbd544d3efb Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Fri, 28 Jan 2022 14:07:34 +0000 Subject: [PATCH 68/98] Update dependabot assignees --- .github/dependabot.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index ec60e657..e7036d6d 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -9,6 +9,5 @@ updates: reviewers: - echarrod - gautam-yoti - - michalmilewiczyoti assignees: - - michalmilewiczyoti + - echarrod From 88f14611877eecb48baaabf8fa7c7f07f251b34f Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Fri, 28 Jan 2022 16:36:13 +0000 Subject: [PATCH 69/98] Revert adding of strictly_latin to source constraints builder --- .../policy/source_constraint_builder.py | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/yoti_python_sdk/dynamic_sharing_service/policy/source_constraint_builder.py b/yoti_python_sdk/dynamic_sharing_service/policy/source_constraint_builder.py index 39df5070..273afbfc 100644 --- a/yoti_python_sdk/dynamic_sharing_service/policy/source_constraint_builder.py +++ b/yoti_python_sdk/dynamic_sharing_service/policy/source_constraint_builder.py @@ -15,7 +15,6 @@ class SourceConstraintBuilder(object): def __init__(self): self.__soft_preference = False self.__anchors = [] - self.__is_strictly_latin = None def with_soft_preference(self, value=True): """ @@ -65,27 +64,14 @@ def with_driving_licence(self, subtype=""): """ return self.with_anchor_by_name(ANCHOR_VALUE_DRIVING_LICENCE, subtype) - def allow_strictly_latin(self): - self.__is_strictly_latin = True - return self - - def disable_strictly_latin(self): - self.__is_strictly_latin = False - return self - def build(self): """ :returns: A dict describing the source constraint """ - constrain = { + return { "type": "SOURCE", "preferred_sources": { "soft_preference": self.__soft_preference, "anchors": self.__anchors, }, } - - if self.__is_strictly_latin is not None: - constrain["is_strictly_latin"] = self.__is_strictly_latin - - return constrain From 5ba64084f247383f918816d7e76cee8912ef401b Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Fri, 28 Jan 2022 15:11:46 +0000 Subject: [PATCH 70/98] Reinstate missing Github actions linting step --- .github/workflows/tests.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index edc79310..923cb3c1 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -48,4 +48,8 @@ jobs: - run: pushd examples/aml && pip install -r requirements.txt && popd + - run: pushd examples/yoti_example_django && pip install -r requirements.txt && popd + - run: pushd examples/yoti_example_flask && pip install -r requirements.txt && popd + + - run: pushd examples/doc_scan && pip install -r requirements.txt && popd From 4c0658b73db6da6163d476e897718c854642b0fe Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Fri, 28 Jan 2022 15:33:47 +0000 Subject: [PATCH 71/98] Update "check examples" steps --- .github/workflows/tests.yaml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 923cb3c1..b80902d6 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -42,9 +42,7 @@ jobs: - uses: actions/setup-python@v2.3.1 - - run: pip install -U setuptools==45 - - - run: pip install wheel + - run: pip install --upgrade setuptools - run: pushd examples/aml && pip install -r requirements.txt && popd From 39e323d5faa0024a583afe6a7efdcc1f215627c2 Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Fri, 28 Jan 2022 15:40:44 +0000 Subject: [PATCH 72/98] && pip install --upgrade pip --- .github/workflows/tests.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index b80902d6..28067081 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -46,7 +46,7 @@ jobs: - run: pushd examples/aml && pip install -r requirements.txt && popd - - run: pushd examples/yoti_example_django && pip install -r requirements.txt && popd + - run: pushd examples/yoti_example_django && pip install --upgrade pip && pip install -r requirements.txt && popd - run: pushd examples/yoti_example_flask && pip install -r requirements.txt && popd From 99d7650a1edd77cf07171e0d0c9ca85ec1a1f54b Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Fri, 28 Jan 2022 15:48:46 +0000 Subject: [PATCH 73/98] Run on Python 3.9 --- .github/workflows/tests.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 28067081..d93ba626 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -41,6 +41,8 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-python@v2.3.1 + with: + python-version: 3.9 - run: pip install --upgrade setuptools From 029899734ced1dc1412f2e6b02839853e6dfcc75 Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Fri, 28 Jan 2022 16:02:00 +0000 Subject: [PATCH 74/98] Update jinja package (from Flask) --- examples/yoti_example_flask/requirements.in | 2 +- examples/yoti_example_flask/requirements.txt | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/yoti_example_flask/requirements.in b/examples/yoti_example_flask/requirements.in index dafb4732..fc9dbca0 100644 --- a/examples/yoti_example_flask/requirements.in +++ b/examples/yoti_example_flask/requirements.in @@ -1,6 +1,6 @@ cffi>=1.15.0 flask>=1.0.4 -jinja2>=2.8.1 +jinja2>=3.0.3 pyopenssl>=19.0.0 python-dotenv>=0.7.1 requests>=2.20.0 diff --git a/examples/yoti_example_flask/requirements.txt b/examples/yoti_example_flask/requirements.txt index b516624f..3f900f93 100644 --- a/examples/yoti_example_flask/requirements.txt +++ b/examples/yoti_example_flask/requirements.txt @@ -32,11 +32,11 @@ iso8601==0.1.13 # via yoti itsdangerous==0.24 # via flask -jinja2==2.10.1 +jinja2==3.0.3 # via # -r requirements.in # flask -markupsafe==1.0 +markupsafe==2.0.1 # via jinja2 protobuf==3.6.0 # via yoti @@ -56,6 +56,7 @@ requests==2.21.0 # yoti six==1.16.0 # via + # -r requirements.in # cryptography # protobuf # pyopenssl From 66a167cb077ed776a15778b1982734029a80956e Mon Sep 17 00:00:00 2001 From: Ed Harrod Date: Fri, 28 Jan 2022 16:48:24 +0000 Subject: [PATCH 75/98] Remove tests after removing associated code --- .../policy/test_source_constraint_builder.py | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/yoti_python_sdk/tests/dynamic_sharing_service/policy/test_source_constraint_builder.py b/yoti_python_sdk/tests/dynamic_sharing_service/policy/test_source_constraint_builder.py index 20cb37e3..689fc003 100644 --- a/yoti_python_sdk/tests/dynamic_sharing_service/policy/test_source_constraint_builder.py +++ b/yoti_python_sdk/tests/dynamic_sharing_service/policy/test_source_constraint_builder.py @@ -33,21 +33,3 @@ def test_with_soft_preference(): assert ANCHOR_VALUE_DRIVING_LICENCE in [a["name"] for a in anchors] assert ANCHOR_VALUE_PASSPORT in [a["name"] for a in anchors] assert constraint["preferred_sources"]["soft_preference"] - - -def test_with_is_strictly_latin_set_true(): - constraint = SourceConstraintBuilder().allow_strictly_latin().build() - - assert constraint["is_strictly_latin"] is True - - -def test_with_is_strictly_latin_set_false(): - constraint = SourceConstraintBuilder().disable_strictly_latin().build() - - assert constraint["is_strictly_latin"] is False - - -def test_with_is_strictly_latin_default(): - constraint = SourceConstraintBuilder().build() - - assert "is_strictly_latin" not in constraint From 9b2eff271c4e6f31b92794c3e646abc2c7cba64a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 04:01:35 +0000 Subject: [PATCH 76/98] Bump pytz from 2021.1 to 2021.3 Bumps [pytz](https://github.com/stub42/pytz) from 2021.1 to 2021.3. - [Release notes](https://github.com/stub42/pytz/releases) - [Commits](https://github.com/stub42/pytz/compare/release_2021.1...release_2021.3) --- updated-dependencies: - dependency-name: pytz dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.in b/requirements.in index fbcff20a..c7728192 100644 --- a/requirements.in +++ b/requirements.in @@ -7,7 +7,7 @@ pbr==1.10.0 protobuf==3.19.3 pyopenssl==19.1.0 PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 -pytz==2021.1 +pytz==2021.3 requests>=2.20.0 urllib3>=1.24.3 deprecated==1.2.13 From 2daf3fc393cdc13a907b4b932b826eea105e3c54 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Feb 2022 04:01:12 +0000 Subject: [PATCH 77/98] Bump virtualenv from 20.12.0 to 20.13.0 Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.12.0 to 20.13.0. - [Release notes](https://github.com/pypa/virtualenv/releases) - [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst) - [Commits](https://github.com/pypa/virtualenv/compare/20.12.0...20.13.0) --- updated-dependencies: - dependency-name: virtualenv dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index bdabb887..f1ffc580 100644 --- a/setup.py +++ b/setup.py @@ -46,7 +46,7 @@ "python-coveralls==2.9.3", "coverage==4.5.4", "mock==2.0.0", - "virtualenv==20.12.0", + "virtualenv==20.13.0", "flake8==4.0.1", "pip-tools==6.4.0", ], From 3094dd42fe8e09949057a6c725042773f283cdeb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Feb 2022 10:13:18 +0000 Subject: [PATCH 78/98] Bump protobuf from 3.19.3 to 3.19.4 Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 3.19.3 to 3.19.4. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/master/generate_changelog.py) - [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.19.3...v3.19.4) --- updated-dependencies: - dependency-name: protobuf dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements.in | 2 +- requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.in b/requirements.in index c7728192..fc673ed6 100644 --- a/requirements.in +++ b/requirements.in @@ -4,7 +4,7 @@ cffi==1.15.0 future==0.18.2 itsdangerous==2.0.1 pbr==1.10.0 -protobuf==3.19.3 +protobuf==3.19.4 pyopenssl==19.1.0 PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 pytz==2021.3 diff --git a/requirements.txt b/requirements.txt index e4bfd742..090690a4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,7 +30,7 @@ itsdangerous==2.0.1 # via -r requirements.in pbr==1.10.0 # via -r requirements.in -protobuf==3.19.3 +protobuf==3.19.4 # via -r requirements.in pycparser==2.18 # via cffi From a31e02070e20b302f3419be2fd1c05dcddb799dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jun 2022 14:36:17 +0000 Subject: [PATCH 79/98] Bump pip-tools from 6.4.0 to 6.6.2 Bumps [pip-tools](https://github.com/jazzband/pip-tools) from 6.4.0 to 6.6.2. - [Release notes](https://github.com/jazzband/pip-tools/releases) - [Changelog](https://github.com/jazzband/pip-tools/blob/master/CHANGELOG.md) - [Commits](https://github.com/jazzband/pip-tools/compare/6.4.0...6.6.2) --- updated-dependencies: - dependency-name: pip-tools dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a3ddf30e..1d8bc4e9 100644 --- a/setup.py +++ b/setup.py @@ -48,7 +48,7 @@ "mock==2.0.0", "virtualenv==20.13.0", "flake8==4.0.1", - "pip-tools==6.4.0", + "pip-tools==6.6.2", ], }, classifiers=[ From 4af030a6cefb68588067cc59959c53d239d548cc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jun 2022 14:36:10 +0000 Subject: [PATCH 80/98] Bump virtualenv from 20.13.0 to 20.14.1 Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.13.0 to 20.14.1. - [Release notes](https://github.com/pypa/virtualenv/releases) - [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst) - [Commits](https://github.com/pypa/virtualenv/compare/20.13.0...20.14.1) --- updated-dependencies: - dependency-name: virtualenv dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 1d8bc4e9..124be324 100644 --- a/setup.py +++ b/setup.py @@ -46,7 +46,7 @@ "python-coveralls==2.9.3", "coverage==4.5.4", "mock==2.0.0", - "virtualenv==20.13.0", + "virtualenv==20.14.1", "flake8==4.0.1", "pip-tools==6.6.2", ], From 2b697ec4fa670a135762412f990b2874b571c6b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jun 2022 14:36:15 +0000 Subject: [PATCH 81/98] Bump werkzeug from 2.0.2 to 2.1.2 Bumps [werkzeug](https://github.com/pallets/werkzeug) from 2.0.2 to 2.1.2. - [Release notes](https://github.com/pallets/werkzeug/releases) - [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst) - [Commits](https://github.com/pallets/werkzeug/compare/2.0.2...2.1.2) --- updated-dependencies: - dependency-name: werkzeug dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 124be324..87183cde 100644 --- a/setup.py +++ b/setup.py @@ -35,7 +35,7 @@ "Flask>=1.0.4", "python-dotenv>=0.7.1", "django-sslserver>=0.22.0", - "Werkzeug==2.0.2", + "Werkzeug==2.1.2", ], "dev": [ "pre-commit==2.16.0", From 3fbf9c1b94f5bc36e26fb8676bf2509452278c4f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Jul 2022 04:01:10 +0000 Subject: [PATCH 82/98] Bump virtualenv from 20.14.1 to 20.15.1 Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.14.1 to 20.15.1. - [Release notes](https://github.com/pypa/virtualenv/releases) - [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst) - [Commits](https://github.com/pypa/virtualenv/compare/20.14.1...20.15.1) --- updated-dependencies: - dependency-name: virtualenv dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 87183cde..5a3982cd 100644 --- a/setup.py +++ b/setup.py @@ -46,7 +46,7 @@ "python-coveralls==2.9.3", "coverage==4.5.4", "mock==2.0.0", - "virtualenv==20.14.1", + "virtualenv==20.15.1", "flake8==4.0.1", "pip-tools==6.6.2", ], From 04418637e378e8f110175b22952f33d632a4bc91 Mon Sep 17 00:00:00 2001 From: mehmet-yoti <111424390+mehmet-yoti@users.noreply.github.com> Date: Mon, 30 Jun 2025 14:33:13 +0300 Subject: [PATCH 83/98] Merge pull request #417 from getyoti/python-library-updates Python library updates --- .github/workflows/sonar.yaml | 9 +---- .github/workflows/tests.yaml | 14 ++----- README.md | 2 + examples/doc_scan/requirements.in | 17 +++++--- examples/doc_scan/requirements.txt | 65 ++++++++++++++++++------------ requirements.in | 32 +++++++-------- requirements.txt | 63 ++++++++++++++++++----------- setup.py | 30 +++++++------- sonar-project.properties | 2 +- yoti_python_sdk/version.py | 2 +- 10 files changed, 131 insertions(+), 105 deletions(-) diff --git a/.github/workflows/sonar.yaml b/.github/workflows/sonar.yaml index f5055259..9d91c4b0 100644 --- a/.github/workflows/sonar.yaml +++ b/.github/workflows/sonar.yaml @@ -1,15 +1,10 @@ name: Sonar Scan -on: [push, pull_request_target] +on: [push, pull_request] jobs: sonar: name: Sonar Scan - runs-on: ubuntu-latest - # always run on push events - # only run on pull_request_target event when pull request pulls from fork repository - if: > - github.event_name == 'push' || - github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.full_name != github.repository + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 9506b63c..589e42e8 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -1,19 +1,14 @@ name: Unit Tests -on: [push, pull_request_target] +on: [push, pull_request] jobs: test: name: Test (Python ${{ matrix.python-version }}) runs-on: ubuntu-latest - # always run on push events - # only run on pull_request_target event when pull request pulls from fork repository - if: > - github.event_name == 'push' || - github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.full_name != github.repository strategy: fail-fast: false matrix: - python-version: [3.7, 3.8, 3.9, "3.10"] + python-version: [3.9, "3.10","3.11","3.12"] steps: - uses: actions/checkout@v2 @@ -32,10 +27,7 @@ jobs: examples: name: Check Examples - runs-on: ubuntu-latest - if: > - github.event_name == 'push' || - github.event_name == 'pull_request_target' && github.event.pull_request.head.repo.full_name != github.repository + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 diff --git a/README.md b/README.md index d50a9736..e75e3377 100644 --- a/README.md +++ b/README.md @@ -140,6 +140,7 @@ timestamp = activity_details.timestamp base64_selfie_uri = activity_details.base64_selfie_uri ``` + You can retrieve the anchors, sources and verifiers for each attribute as follows: ```python given_names_attribute = profile.given_names @@ -238,3 +239,4 @@ set LIB=C:\OpenSSL-Win64\lib;%LIB% set INCLUDE=C:\OpenSSL-Win64\include;%INCLUDE% ``` Where `OpenSSL-Win64` is the location that you have installed OpenSSL to. See [here](https://cryptography.io/en/latest/installation/#building-cryptography-on-windows) for more information. + diff --git a/examples/doc_scan/requirements.in b/examples/doc_scan/requirements.in index 572ae2b7..da2d3332 100644 --- a/examples/doc_scan/requirements.in +++ b/examples/doc_scan/requirements.in @@ -1,6 +1,13 @@ -flask>=1.1.2 -python-dotenv>=0.13.0 -yoti>=2.14.0 +# Core requirements +flask>=2.2.0 +python-dotenv>=0.21.0 +yoti==2.14.0 filetype>=1.0.7 -pyopenssl>=19.1.0 -six>=1.16.0 \ No newline at end of file +pyopenssl==23.2.0 +click >=8.0 + +# Required for yoti compatibility +deprecated==1.2.10 +iso8601==0.1.13 +pytz==2020.4 + diff --git a/examples/doc_scan/requirements.txt b/examples/doc_scan/requirements.txt index f0dca95c..d5ce9bca 100644 --- a/examples/doc_scan/requirements.txt +++ b/examples/doc_scan/requirements.txt @@ -1,66 +1,81 @@ # -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: # # pip-compile --output-file=requirements.txt requirements.in # asn1==2.2.0 # via yoti + +blinker==1.9.0 + # via flask certifi==2020.4.5.1 # via requests -cffi==1.14.0 +cffi==1.17.1 # via cryptography chardet==3.0.4 # via requests -click==7.1.2 - # via flask -cryptography==3.2 +click==8.1.8 + # via + # -r requirements.in + # flask +cryptography==41.0.7 + # via # pyopenssl # yoti deprecated==1.2.10 - # via yoti + + # via + # -r requirements.in + # yoti filetype==1.0.7 # via -r requirements.in -flask==1.1.2 +flask==3.1.0 # via -r requirements.in -future==0.18.2 +future==1.0.0 # via yoti idna==2.9 # via requests iso8601==0.1.13 - # via yoti -itsdangerous==1.1.0 + + # via + # -r requirements.in + # yoti +itsdangerous==2.2.0 # via flask -jinja2==2.11.2 +jinja2==3.1.6 # via flask -markupsafe==1.1.1 - # via jinja2 +markupsafe==3.0.2 + # via + # jinja2 + # werkzeug + protobuf==3.11.3 # via yoti pycparser==2.20 # via cffi -pyopenssl==19.1.0 + +pyopenssl==23.2.0 # via # -r requirements.in # yoti -python-dotenv==0.13.0 +python-dotenv==1.1.0 # via -r requirements.in pytz==2020.4 - # via yoti -requests==2.23.0 - # via yoti -six==1.16.0 # via # -r requirements.in - # cryptography - # protobuf - # pyopenssl + # yoti +requests==2.23.0 + # via yoti +six==1.14.0 + # via protobuf urllib3==1.25.9 # via requests -werkzeug==1.0.1 +werkzeug==3.1.3 # via flask -wrapt==1.12.1 +wrapt==1.17.2 + # via deprecated yoti==2.14.0 # via -r requirements.in diff --git a/requirements.in b/requirements.in index fc673ed6..5bdc7fe3 100644 --- a/requirements.in +++ b/requirements.in @@ -1,16 +1,16 @@ -asn1==2.2.0 # asn1 2.3.0 introduces enum34 as a dependency, which causes problems on some envs -cryptography==2.8.0 -cffi==1.15.0 -future==0.18.2 -itsdangerous==2.0.1 -pbr==1.10.0 -protobuf==3.19.4 -pyopenssl==19.1.0 -PyYAML==5.2 # PyYAML 5.3 does not support Python 3.4 -pytz==2021.3 -requests>=2.20.0 -urllib3>=1.24.3 -deprecated==1.2.13 -wheel==0.37.1 -iso8601==1.0.2 -six>=1.16.0 \ No newline at end of file +asn1==2.2.0 +cryptography>=41.0.7 +cffi>=1.16.0 +future>=0.18.3 +itsdangerous>=2.1.2 +pbr>=5.11.1 +protobuf==3.20.3 +pyopenssl>=24.0.0 +PyYAML>=6.0 +pytz>=2025.2 +requests>=2.31.0 +urllib3>=2.2.1 +deprecated>=1.2.14 +wheel>=0.41.0 +iso8601>=1.1.0 +wrapt>=1.15.0 diff --git a/requirements.txt b/requirements.txt index 090690a4..ab374aef 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,8 @@ # -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: + +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: + # # pip-compile --output-file=requirements.txt requirements.in # @@ -8,50 +10,63 @@ asn1==2.2.0 # via -r requirements.in certifi==2018.11.29 # via requests -cffi==1.15.0 + +cffi==1.17.1 # via # -r requirements.in # cryptography -chardet==3.0.4 +charset-normalizer==3.4.1 # via requests -cryptography==2.8 +cryptography==44.0.2 # via # -r requirements.in # pyopenssl -deprecated==1.2.13 + +deprecated==1.2.18 # via -r requirements.in -future==0.18.2 +future==1.0.0 # via -r requirements.in idna==2.7 # via requests -iso8601==1.0.2 + +iso8601==2.1.0 # via -r requirements.in -itsdangerous==2.0.1 +itsdangerous==2.2.0 + # via -r requirements.in -pbr==1.10.0 +pbr==6.1.1 # via -r requirements.in -protobuf==3.19.4 + +protobuf==3.20.3 + # via -r requirements.in pycparser==2.18 # via cffi -pyopenssl==19.1.0 +pyopenssl==25.0.0 # via -r requirements.in -pytz==2021.3 + +pytz==2025.2 + # via -r requirements.in -pyyaml==5.2 +pyyaml==6.0.2 # via -r requirements.in -requests==2.21.0 +requests==2.32.0 # via -r requirements.in -six==1.16.0 - # via - # -r requirements.in - # cryptography - # pyopenssl -urllib3==1.24.3 +typing-extensions==4.13.2 + # via pyopenssl +urllib3==2.4.0 # via # -r requirements.in # requests -wheel==0.37.1 +wheel==0.45.1 # via -r requirements.in -wrapt==1.11.2 - # via deprecated +wrapt==1.17.2 + # via + # -r requirements.in + # deprecated + +# The following packages are considered to be unsafe in a requirements file: +# setuptools + + + diff --git a/setup.py b/setup.py index 5a3982cd..4e9bfdf1 100644 --- a/setup.py +++ b/setup.py @@ -18,16 +18,16 @@ author="Yoti", author_email="websdk@yoti.com", install_requires=[ - "deprecated==1.2.13", - "cryptography>=2.2.1", - "protobuf==3.13.0", - "requests>=2.11.1", - "future>=0.18.2", - "asn1==2.2.0", - "pyopenssl>=18.0.0", - "iso8601==1.0.2", - "wheel==0.37.1", - "pytz==2022.1", + + "asn1==2.2.0", # still pinned due to enum34 issue + "cryptography>=42.0.0", + "protobuf==3.20.3", + "requests>=2.31.0", + "pyopenssl>=24.0.0", + "pytz>=2025.2", + "iso8601>=1.1.0", + "deprecated>=1.2.14", + ], extras_require={ "examples": [ @@ -44,7 +44,7 @@ "pylint==1.9.4", "pylint-exit>=1.1.0", "python-coveralls==2.9.3", - "coverage==4.5.4", + "coverage>=7.4.0", "mock==2.0.0", "virtualenv==20.15.1", "flake8==4.0.1", @@ -57,12 +57,12 @@ "Operating System :: OS Independent", "Intended Audience :: Developers", "Programming Language :: Python", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Software Development :: Libraries :: Python Modules", ], keywords="yoti sdk 2FA multifactor authentication verification identity login register verify 2Factor", diff --git a/sonar-project.properties b/sonar-project.properties index f77622f8..f9f4b359 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,7 +2,7 @@ sonar.host.url = https://sonarcloud.io sonar.organization = getyoti sonar.projectKey = getyoti:python sonar.projectName = Python SDK -sonar.projectVersion = 2.15.0 +sonar.projectVersion = 2.14.3 sonar.exclusions = yoti_python_sdk/tests/**,examples/**,yoti_python_sdk/protobuf/**/* sonar.python.pylint.reportPath = coverage.out diff --git a/yoti_python_sdk/version.py b/yoti_python_sdk/version.py index f697b811..821f13ed 100644 --- a/yoti_python_sdk/version.py +++ b/yoti_python_sdk/version.py @@ -1,2 +1,2 @@ # -*- coding: utf-8 -*- -__version__ = "2.15.0" +__version__ = "2.14.3" \ No newline at end of file From d1d8e58262d44ea17bc58dc44ed67e96773a7e43 Mon Sep 17 00:00:00 2001 From: mehmet-yoti <111424390+mehmet-yoti@users.noreply.github.com> Date: Mon, 1 Dec 2025 15:44:06 +0000 Subject: [PATCH 84/98] added python static liveness check (#425) * added python static liveness check --- examples/doc_scan/templates/success.html | 1136 +++++++++-------- yoti_python_sdk/doc_scan/constants.py | 1 + .../doc_scan/session/create/check/liveness.py | 45 +- .../session/retrieve/image_response.py | 32 + .../session/retrieve/resource_container.py | 19 +- .../static_liveness_resource_response.py | 35 + .../create/check/test_liveness_check.py | 61 + .../retrieve/test_resource_container.py | 13 + .../retrieve/test_static_liveness_resource.py | 72 ++ 9 files changed, 869 insertions(+), 545 deletions(-) create mode 100644 yoti_python_sdk/doc_scan/session/retrieve/image_response.py create mode 100644 yoti_python_sdk/doc_scan/session/retrieve/static_liveness_resource_response.py create mode 100644 yoti_python_sdk/tests/doc_scan/session/retrieve/test_static_liveness_resource.py diff --git a/examples/doc_scan/templates/success.html b/examples/doc_scan/templates/success.html index 19615dba..54a0ca27 100644 --- a/examples/doc_scan/templates/success.html +++ b/examples/doc_scan/templates/success.html @@ -6,625 +6,679 @@

Get Session Result

- - - - - - - - - {% if session_result.client_session_token is not none %} + + + + + + + + + {% if session_result.client_session_token is not none %} - {% endif %} - - - - - - - - - {% if session_result.biometric_consent_timestamp is not none %} - - - - - {% endif %} + {% endif %} + + + + + + + + + {% if session_result.biometric_consent_timestamp is not none %} + + + + + {% endif %}
Session ID{{ session_result.session_id }}
State - - {{ session_result.state }} - -
Session ID{{ session_result.session_id }}
State + + {{ session_result.state }} + +
Client Session Token {{ session_result.client_session_token }}
Client Session Token TTL{{ session_result.client_session_token_ttl }}
User Tracking ID{{ session_result.user_tracking_id }}
Biometric Consent Timestamp{{ session_result.biometric_consent_timestamp }}
Client Session Token TTL{{ session_result.client_session_token_ttl }}
User Tracking ID{{ session_result.user_tracking_id }}
Biometric Consent Timestamp{{ session_result.biometric_consent_timestamp }}
{% if session_result.checks|length > 0 %} -
-
-

Checks

-
- {% if session_result.authenticity_checks|length > 0 %} -
-
-

- -

-
-
-
- {% for check in session_result.authenticity_checks %} - {% with check=check %} - {% include "partials/check.html" %} - {% endwith %} - {% endfor %} -
-
+
+
+

Checks

+
+ {% if session_result.authenticity_checks|length > 0 %} +
+
+

+ +

+
+
+
+ {% for check in session_result.authenticity_checks %} + {% with check=check %} + {% include "partials/check.html" %} + {% endwith %} + {% endfor %}
- {% endif %} - {% if session_result.id_document_text_data_checks|length > 0 %} -
-
-

- -

-
-
-
- {% for check in session_result.id_document_text_data_checks %} - {% with check=check %} - {% include "partials/check.html" %} - {% endwith %} - {% endfor %} -
-
+
+
+ {% endif %} + {% if session_result.id_document_text_data_checks|length > 0 %} +
+
+

+ +

+
+
+
+ {% for check in session_result.id_document_text_data_checks %} + {% with check=check %} + {% include "partials/check.html" %} + {% endwith %} + {% endfor %}
- {% endif %} - {% if session_result.face_match_checks|length > 0 %} -
-
-

- -

-
-
-
- {% for check in session_result.face_match_checks %} - {% with check=check %} - {% include "partials/check.html" %} - {% endwith %} - {% endfor %} -
-
+
+
+ {% endif %} + {% if session_result.face_match_checks|length > 0 %} +
+
+

+ +

+
+
+
+ {% for check in session_result.face_match_checks %} + {% with check=check %} + {% include "partials/check.html" %} + {% endwith %} + {% endfor %}
- {% endif %} - {% if session_result.liveness_checks|length > 0 %} -
-
-

- -

-
-
-
- {% for check in session_result.authenticity_checks %} - {% with check=check %} - {% include "partials/check.html" %} - {% endwith %} - {% endfor %} -
-
+
+
+ {% endif %} + {% if session_result.liveness_checks|length > 0 %} +
+
+

+ +

+
+
+
+ {% for check in session_result.authenticity_checks %} + {% with check=check %} + {% include "partials/check.html" %} + {% endwith %} + {% endfor %}
- {% endif %} +
+
+ {% endif %} - {% if session_result.id_document_comparison_checks|length > 0 %} -
-
-

- -

-
-
-
- {% for check in session_result.id_document_comparison_checks %} - {% with check=check %} - {% include "partials/check.html" %} - {% endwith %} - {% endfor %} -
-
+ {% if session_result.id_document_comparison_checks|length > 0 %} +
+
+

+ +

+
+
+
+ {% for check in session_result.id_document_comparison_checks %} + {% with check=check %} + {% include "partials/check.html" %} + {% endwith %} + {% endfor %}
- {% endif %} +
+
+ {% endif %} - {% if session_result.supplementary_document_text_data_checks|length > 0 %} -
-
-

- -

-
-
-
- {% for check in session_result.supplementary_document_text_data_checks %} - {% with check=check %} - {% include "partials/check.html" %} - {% endwith %} - {% endfor %} -
-
+ {% if session_result.supplementary_document_text_data_checks|length > 0 %} +
+
+

+ +

+
+
+
+ {% for check in session_result.supplementary_document_text_data_checks %} + {% with check=check %} + {% include "partials/check.html" %} + {% endwith %} + {% endfor %}
- {% endif %} +
+ {% endif %}
+
{% endif %} {% if session_result.resources.id_documents|length > 0 %} -
-
-

ID Documents

-
+
+
+

ID Documents

+
{% endif %} {% with doc_num=0 %} - {% for document in session_result.resources.id_documents %} - {% set doc_num = loop.index %} -
-
- -

- {{ document.document_type }} {{ document.issuing_country }} -

- -
- {% if document.document_fields is not none %} -
-
-

- -

-
-
-
- {% if document.document_fields.media is not none %} -
Media
- - - - - - - -
ID - - {{ document.document_fields.media.id }} - -
- {% endif %} -
-
-
- {% endif %} + {% for document in session_result.resources.id_documents %} + {% set doc_num = loop.index %} +
+
- {% if document.document_id_photo is not none %} -
-
-

- -

-
-
+

+ {{ document.document_type }} {{ document.issuing_country }} +

+ +
+ {% if document.document_fields is not none %} +
+
+

+ +

+
+
+
+ {% if document.document_fields.media is not none %} +
Media
+ + + + + + + +
ID + + {{ document.document_fields.media.id }} + +
+ {% endif %} +
+
+
+ {% endif %} + + {% if document.document_id_photo is not none %} +
+
+

+ +

+
+
+
+ {% if document.document_fields.media is not none %} + + {% endif %} +
+
+
+ {% endif %} + + {% if document.text_extraction_tasks|length > 0 %} +
+
+

+ +

+
+
+
+ {% for task in document.text_extraction_tasks %} + + {% with task=task %} + {% include "partials/task.html" %} + {% endwith %} + + {% if task.generated_text_data_checks|length > 0 %} +
Generated Text Data Checks
+ + {% for generated_check in task.generated_text_data_checks %} + + + + + + + +
ID{{ generated_check.id }}
+ {% endfor %} + {% endif %} + + {% if task.generated_media|length > 0 %} +
Generated Media
+ + {% for generated_media in task.generated_media %} + + + + + + + + + + + +
ID + {{ generated_media.id + }} +
Type{{ generated_media.type }}
+ {% endfor %} + {% endif %} + {% endfor %} +
+
+
+ {% endif %} + + {% if document.pages|length > 0 %} + {% with page_num=0 %} + {% for page in document.pages %} + {% set page_num = loop.index %} +
+
+

+ +

+
+
+ +
+ {% if page.media is not none %} +
+
- {% if document.document_fields.media is not none %} - - {% endif %} +

Method: {{ page.capture_method }}

+ {% endif %}
- {% endif %} - {% if document.text_extraction_tasks|length > 0 %} + {% if page.frames|length > 0 %} +
+ {% for frame in page.frames %} + {% if frame.media is not none %}
-
-

- -

-
-
-
- {% for task in document.text_extraction_tasks %} - - {% with task=task %} - {% include "partials/task.html" %} - {% endwith %} - - {% if task.generated_text_data_checks|length > 0 %} -
Generated Text Data Checks
- - {% for generated_check in task.generated_text_data_checks %} - - - - - - - -
ID{{ generated_check.id }}
- {% endfor %} - {% endif %} - - {% if task.generated_media|length > 0 %} -
Generated Media
- - {% for generated_media in task.generated_media %} - - - - - - - - - - - -
ID - {{ generated_media.id }} -
Type{{ generated_media.type }}
- {% endfor %} - {% endif %} - {% endfor %} -
+ +
+
Frame
+ {% endif %} + {% endfor %} +
{% endif %} - {% if document.pages|length > 0 %} - {% with page_num=0 %} - {% for page in document.pages %} - {% set page_num = loop.index %} -
-
-

- -

-
-
- -
- {% if page.media is not none %} -
- -
-

Method: {{ page.capture_method }}

-
-
- {% endif %} -
- - {% if page.frames|length > 0 %} -
- {% for frame in page.frames %} - {% if frame.media is not none %} -
- -
-
Frame
-
-
- {% endif %} - {% endfor %} -
- {% endif %} - -
-
- {% endfor %} - {% endwith %} - {% endif %}
+ {% endfor %} + {% endwith %} + {% endif %}
- {% endfor %} +
+
+ {% endfor %} {% endwith %} {% if session_result.resources.supplementary_documents|length > 0 %} -
-
-

Supplementary Documents

-
+
+
+

Supplementary Documents

+
{% endif %} {% with doc_num=0 %} - {% for document in session_result.resources.supplementary_documents %} - {% set doc_num = loop.index %} -
-
- -

- {{ document.document_type }} {{ document.issuing_country }} -

- -
- {% if document.document_fields is not none %} -
-
-

- -

-
-
-
- {% if document.document_fields.media is not none %} -
Media
- - - - - - - -
ID - - {{ document.document_fields.media.id }} - -
- {% endif %} -
-
-
- {% endif %} + {% for document in session_result.resources.supplementary_documents %} + {% set doc_num = loop.index %} +
+
- {% if document.document_file is not none %} - {% if document.document_file.media is not none %} -
- +

+ {{ document.document_type }} {{ document.issuing_country }} +

+ +
+ {% if document.document_fields is not none %} +
+
+

+ +

+
+
+
+ {% if document.document_fields.media is not none %} +
Media
+ + + + + + + +
ID + + {{ document.document_fields.media.id }} + +
+ {% endif %}
- {% endif %} - {% endif %} +
+
+ {% endif %} - {% if document.text_extraction_tasks|length > 0 %} -
-
-

- -

-
-
-
- {% for task in document.text_extraction_tasks %} - - {% with task=task %} - {% include "partials/task.html" %} - {% endwith %} - - {% if task.generated_text_data_checks|length > 0 %} -
Generated Text Data Checks
- - {% for generated_check in task.generated_text_data_checks %} - - - - - - - -
ID{{ generated_check.id }}
- {% endfor %} - {% endif %} - - {% if task.generated_media|length > 0 %} -
Generated Media
- - {% for generated_media in task.generated_media %} - - - - - - - - - - - -
ID - {{ generated_media.id }} -
Type{{ generated_media.type }}
- {% endfor %} - {% endif %} - {% endfor %} -
+ {% if document.document_file is not none %} + {% if document.document_file.media is not none %} + + {% endif %} + {% endif %} + + {% if document.text_extraction_tasks|length > 0 %} +
+
+

+ +

+
+
+
+ {% for task in document.text_extraction_tasks %} + + {% with task=task %} + {% include "partials/task.html" %} + {% endwith %} + + {% if task.generated_text_data_checks|length > 0 %} +
Generated Text Data Checks
+ + {% for generated_check in task.generated_text_data_checks %} + + + + + + + +
ID{{ generated_check.id }}
+ {% endfor %} + {% endif %} + + {% if task.generated_media|length > 0 %} +
Generated Media
+ + {% for generated_media in task.generated_media %} + + + + + + + + + + + +
ID + {{ generated_media.id + }} +
Type{{ generated_media.type }}
+ {% endfor %} + {% endif %} + {% endfor %} +
+
+
+ {% endif %} + + {% if document.pages|length > 0 %} + {% with page_num=0 %} + {% for page in document.pages %} + {% set page_num = loop.index %} +
+
+

+ +

+
+
+ +
+ {% if page.media is not none %} +
+ +
+

Method: {{ page.capture_method }}

- {% endif %} + {% endif %} +
- {% if document.pages|length > 0 %} - {% with page_num=0 %} - {% for page in document.pages %} - {% set page_num = loop.index %} + {% if page.frames|length > 0 %} +
+ {% for frame in page.frames %} + {% if frame.media is not none %}
-
-

- -

-
-
- -
- {% if page.media is not none %} -
- -
-

Method: {{ page.capture_method }}

-
-
- {% endif %} -
- - {% if page.frames|length > 0 %} -
- {% for frame in page.frames %} - {% if frame.media is not none %} -
- -
-
Frame
-
-
- {% endif %} - {% endfor %} -
- {% endif %} - + +
+
Frame
- {% endfor %} - {% endwith %} + {% endif %} + {% endfor %} +
{% endif %} +
+ {% endfor %} + {% endwith %} + {% endif %}
- {% endfor %} +
+
+ {% endfor %} {% endwith %} {% if session_result.resources.zoom_liveness_resources|length > 0 %} -
-
-

Zoom Liveness Resources

-
+
+
+

Zoom Liveness Resources

+
{% endif %} {% with liveness_num=0 %} - {% for liveness in session_result.resources.zoom_liveness_resources %} - {% set liveness_num = loop.index %} -
-
- - - - - - - -
ID{{ liveness.id }}
- -
- - {% if liveness.frames|length > 0 %} + {% for liveness in session_result.resources.zoom_liveness_resources %} + {% set liveness_num = loop.index %} +
+
+ + + + + + + +
ID{{ liveness.id }}
+ +
+ + {% if liveness.frames|length > 0 %} +
+
+

+ +

+
+
+
+ {% for frame in liveness.frames %} + {% if frame.media is not none %}
-
-

- -

+ +
+
Frame
-
-
- {% for frame in liveness.frames %} - {% if frame.media is not none %} -
- -
-
Frame
-
-
- {% endif %} - {% endfor %} -
+
+ {% endif %} + {% endfor %} +
+
+
+ {% endif %} +
+
+
+ {% endfor %} + {% endwith %} + + {% if session_result.resources.static_liveness_resources|length > 0 %} +
+
+

Static Liveness Resources

+
+
+ {% endif %} + + {% with liveness_num=0 %} + {% for liveness in session_result.resources.static_liveness_resources %} + {% set liveness_num = loop.index %} +
+
+ + + + + + + + + + + +
ID{{ liveness.id }}
Liveness Type{{ liveness.liveness_type }}
+ +
+ {% if liveness.image is not none and liveness.image.media is not none %} +
+
+

+ +

+
+
+
+
+ Static Liveness Image +
+
Static Liveness Check
+

Media ID: {{ liveness.image.media.id }}

- {% endif %} +
+ {% endif %}
- {% endfor %} +
+
+ {% endfor %} {% endwith %}
{% include "layout/footer.html" %} diff --git a/yoti_python_sdk/doc_scan/constants.py b/yoti_python_sdk/doc_scan/constants.py index 279d4e5e..ec2ea3a3 100644 --- a/yoti_python_sdk/doc_scan/constants.py +++ b/yoti_python_sdk/doc_scan/constants.py @@ -8,6 +8,7 @@ ID_DOCUMENT_FACE_MATCH = "ID_DOCUMENT_FACE_MATCH" LIVENESS = "LIVENESS" ZOOM = "ZOOM" +STATIC = "STATIC" SUPPLEMENTARY_DOCUMENT_TEXT_DATA_CHECK = "SUPPLEMENTARY_DOCUMENT_TEXT_DATA_CHECK" SUPPLEMENTARY_DOCUMENT_TEXT_DATA_EXTRACTION = ( "SUPPLEMENTARY_DOCUMENT_TEXT_DATA_EXTRACTION" diff --git a/yoti_python_sdk/doc_scan/session/create/check/liveness.py b/yoti_python_sdk/doc_scan/session/create/check/liveness.py index f9dc1075..57ae8e4f 100644 --- a/yoti_python_sdk/doc_scan/session/create/check/liveness.py +++ b/yoti_python_sdk/doc_scan/session/create/check/liveness.py @@ -11,15 +11,18 @@ class RequestedLivenessCheckConfig(YotiSerializable): The configuration applied when creating a Liveness Check """ - def __init__(self, liveness_type, max_retries): + def __init__(self, liveness_type, max_retries, manual_check=None): """ :param liveness_type: the liveness type :type liveness_type: str :param max_retries: the maximum number of retries :type max_retries: int + :param manual_check: the manual check value + :type manual_check: str or None """ self.__liveness_type = liveness_type self.__max_retries = max_retries + self.__manual_check = manual_check @property def liveness_type(self): @@ -39,9 +42,23 @@ def max_retries(self): """ return self.__max_retries + @property + def manual_check(self): + """ + The manual check value for the liveness check + + :return: the manual check value + :rtype: str or None + """ + return self.__manual_check + def to_json(self): return remove_null_values( - {"liveness_type": self.liveness_type, "max_retries": self.max_retries} + { + "liveness_type": self.liveness_type, + "max_retries": self.max_retries, + "manual_check": self.manual_check, + } ) @@ -74,6 +91,7 @@ class RequestedLivenessCheckBuilder(object): def __init__(self): self.__liveness_type = None self.__max_retries = None + self.__manual_check = None def for_zoom_liveness(self): """ @@ -84,6 +102,15 @@ def for_zoom_liveness(self): """ return self.with_liveness_type(constants.ZOOM) + def for_static_liveness(self): + """ + Sets the liveness type to "STATIC" + + :return: the builder + :rtype: RequestedLivenessCheckBuilder + """ + return self.with_liveness_type(constants.STATIC) + def with_liveness_type(self, liveness_type): """ Sets the liveness type on the builder @@ -109,6 +136,18 @@ def with_max_retries(self, max_retries): self.__max_retries = max_retries return self + def with_manual_check_never(self): + """ + Sets the manual check value to "NEVER" + + :return: the builder + :rtype: RequestedLivenessCheckBuilder + """ + self.__manual_check = constants.NEVER + return self + def build(self): - config = RequestedLivenessCheckConfig(self.__liveness_type, self.__max_retries) + config = RequestedLivenessCheckConfig( + self.__liveness_type, self.__max_retries, self.__manual_check + ) return RequestedLivenessCheck(config) diff --git a/yoti_python_sdk/doc_scan/session/retrieve/image_response.py b/yoti_python_sdk/doc_scan/session/retrieve/image_response.py new file mode 100644 index 00000000..f983e550 --- /dev/null +++ b/yoti_python_sdk/doc_scan/session/retrieve/image_response.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from .media_response import MediaResponse + + +class ImageResponse(object): + """ + Represents an image resource within a static liveness check + """ + + def __init__(self, data=None): + """ + :param data: the data to parse + :type data: dict or None + """ + if data is None: + data = dict() + + self.__media = ( + MediaResponse(data["media"]) if "media" in data.keys() else None + ) + + @property + def media(self): + """ + Returns the media information for the image + + :return: the media + :rtype: MediaResponse or None + """ + return self.__media diff --git a/yoti_python_sdk/doc_scan/session/retrieve/resource_container.py b/yoti_python_sdk/doc_scan/session/retrieve/resource_container.py index 8295e503..3aaf0ecd 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/resource_container.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/resource_container.py @@ -11,6 +11,9 @@ LivenessResourceResponse, ZoomLivenessResourceResponse, ) +from yoti_python_sdk.doc_scan.session.retrieve.static_liveness_resource_response import ( + StaticLivenessResourceResponse, +) class ResourceContainer(object): @@ -54,7 +57,7 @@ def __parse_liveness_capture(liveness_capture): :return: the parsed liveness capture :rtype: LivenessResourceResponse """ - types = {"ZOOM": ZoomLivenessResourceResponse} + types = {"ZOOM": ZoomLivenessResourceResponse, "STATIC": StaticLivenessResourceResponse} clazz = types.get( liveness_capture.get("liveness_type", None), @@ -105,3 +108,17 @@ def zoom_liveness_resources(self): for liveness in self.__liveness_capture if isinstance(liveness, ZoomLivenessResourceResponse) ] + + @property + def static_liveness_resources(self): + """ + Returns a filtered list of static liveness capture resources + + :return: list of static liveness captures + :rtype: list[StaticLivenessResourceResponse] + """ + return [ + liveness + for liveness in self.__liveness_capture + if isinstance(liveness, StaticLivenessResourceResponse) + ] diff --git a/yoti_python_sdk/doc_scan/session/retrieve/static_liveness_resource_response.py b/yoti_python_sdk/doc_scan/session/retrieve/static_liveness_resource_response.py new file mode 100644 index 00000000..970258e1 --- /dev/null +++ b/yoti_python_sdk/doc_scan/session/retrieve/static_liveness_resource_response.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from .liveness_resource_response import LivenessResourceResponse +from .image_response import ImageResponse + + +class StaticLivenessResourceResponse(LivenessResourceResponse): + """ + Represents a Static Liveness resource for a given session + """ + + def __init__(self, data=None): + """ + :param data: the data to parse + :type data: dict or None + """ + if data is None: + data = dict() + + LivenessResourceResponse.__init__(self, data) + + self.__image = ( + ImageResponse(data["image"]) if "image" in data.keys() else None + ) + + @property + def image(self): + """ + Returns the associated image for the static liveness resource + + :return: the image + :rtype: ImageResponse or None + """ + return self.__image diff --git a/yoti_python_sdk/tests/doc_scan/session/create/check/test_liveness_check.py b/yoti_python_sdk/tests/doc_scan/session/create/check/test_liveness_check.py index 130deb69..6b14f934 100644 --- a/yoti_python_sdk/tests/doc_scan/session/create/check/test_liveness_check.py +++ b/yoti_python_sdk/tests/doc_scan/session/create/check/test_liveness_check.py @@ -52,6 +52,67 @@ def test_should_serialize_to_json_without_error(self): s = json.dumps(result, cls=YotiEncoder) assert s is not None and s != "" + def test_should_build_with_static_liveness_type(self): + result = ( + RequestedLivenessCheckBuilder() + .for_static_liveness() + .with_max_retries(3) + .build() + ) + + assert result.type == "LIVENESS" + assert result.config.liveness_type == "STATIC" + assert result.config.max_retries == 3 + + def test_should_build_with_manual_check_never(self): + result = ( + RequestedLivenessCheckBuilder() + .for_static_liveness() + .with_max_retries(3) + .with_manual_check_never() + .build() + ) + + assert result.config.liveness_type == "STATIC" + assert result.config.manual_check == "NEVER" + + def test_should_serialize_static_liveness_to_json(self): + result = ( + RequestedLivenessCheckBuilder() + .for_static_liveness() + .with_max_retries(3) + .with_manual_check_never() + .build() + ) + + json_str = json.dumps(result, cls=YotiEncoder) + assert json_str is not None + + # Verify the JSON contains the expected fields + json_data = json.loads(json_str) + assert json_data["type"] == "LIVENESS" + assert json_data["config"]["liveness_type"] == "STATIC" + assert json_data["config"]["manual_check"] == "NEVER" + assert json_data["config"]["max_retries"] == 3 + + def test_should_omit_manual_check_when_not_set(self): + result = ( + RequestedLivenessCheckBuilder() + .for_static_liveness() + .with_max_retries(3) + .build() + ) + + json_str = json.dumps(result, cls=YotiEncoder) + assert json_str is not None + + # Verify the JSON does not contain the manual_check field + json_data = json.loads(json_str) + assert json_data["type"] == "LIVENESS" + assert json_data["config"]["liveness_type"] == "STATIC" + assert "manual_check" not in json_data["config"] + assert json_data["config"]["max_retries"] == 3 + if __name__ == "__main__": unittest.main() diff --git a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_resource_container.py b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_resource_container.py index 5a08c5a0..6607d2d9 100644 --- a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_resource_container.py +++ b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_resource_container.py @@ -49,6 +49,19 @@ def test_should_filter_zoom_liveness_resources(self): assert len(result.liveness_capture) == 2 assert len(result.zoom_liveness_resources) == 1 + def test_should_filter_static_liveness_resources(self): + data = { + "liveness_capture": [ + {"liveness_type": "STATIC"}, + {"liveness_type": "someUnknown"}, + ] + } + + result = ResourceContainer(data) + + assert len(result.liveness_capture) == 2 + assert len(result.static_liveness_resources) == 1 + if __name__ == "__main__": unittest.main() diff --git a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_static_liveness_resource.py b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_static_liveness_resource.py new file mode 100644 index 00000000..0037810c --- /dev/null +++ b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_static_liveness_resource.py @@ -0,0 +1,72 @@ +import unittest +from yoti_python_sdk.doc_scan.session.retrieve.static_liveness_resource_response import ( + StaticLivenessResourceResponse, +) +from yoti_python_sdk.doc_scan.session.retrieve.image_response import ImageResponse +from yoti_python_sdk.doc_scan.session.retrieve.media_response import MediaResponse + + +class StaticLivenessResourceResponseTest(unittest.TestCase): + def test_should_parse_static_liveness_resource(self): + data = { + "id": "bbbbbbb-5717-4562-b3fc-2c963f66afa6", + "source": {"type": "END_USER"}, + "liveness_type": "STATIC", + "image": { + "media": { + "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", + "type": "IMAGE", + "created": "2021-06-11T11:39:24Z", + "last_updated": "2021-06-11T11:39:24Z", + } + }, + "tasks": [], + } + + result = StaticLivenessResourceResponse(data) + + assert result.id == "bbbbbbb-5717-4562-b3fc-2c963f66afa6" + assert result.liveness_type == "STATIC" + assert isinstance(result.image, ImageResponse) + assert isinstance(result.image.media, MediaResponse) + assert result.image.media.id == "3fa85f64-5717-4562-b3fc-2c963f66afa6" + assert result.image.media.type == "IMAGE" + + def test_should_handle_missing_image(self): + data = { + "id": "test-id", + "liveness_type": "STATIC", + "tasks": [], + } + + result = StaticLivenessResourceResponse(data) + + assert result.id == "test-id" + assert result.liveness_type == "STATIC" + assert result.image is None + + def test_should_parse_media_id_for_retrieval(self): + data = { + "id": "resource-id", + "liveness_type": "STATIC", + "image": { + "media": { + "id": "media-id-123", + "type": "IMAGE", + "created": "2021-06-11T11:39:24Z", + "last_updated": "2021-06-11T11:39:24Z", + } + }, + "tasks": [], + } + + result = StaticLivenessResourceResponse(data) + + # Verify we can access the media ID for content retrieval + assert result.image is not None + assert result.image.media is not None + assert result.image.media.id == "media-id-123" + + +if __name__ == "__main__": + unittest.main() From 4771d551c809176ce183c84abe9cf96d68293887 Mon Sep 17 00:00:00 2001 From: mehmet-yoti <111424390+mehmet-yoti@users.noreply.github.com> Date: Thu, 11 Jun 2026 13:14:23 +0300 Subject: [PATCH 85/98] Merge master into development (#457) * SDK-2267:updated refs * SDK-2267:version update * Release/2.14.3 (#420) Python library updates * Release/2.14.4 (#423) * SDK-2648 updated version of protobuf * Update version to 2.14.4 * SDK-2648: Update protobuf to 4.21.12+ * Remove accidentally committed virtual environment files from Flask example * Update doc_scan example requirements for protobuf 4.21.12 and SDK v2.14.4 * Update Flask example requirements for protobuf 4.21.12 and SDK v2.14.4 * updated versions in examples * Fix GitHub Actions workflow to install local SDK before example requirements * Release/2.14.5 (#436) * Python library updates * added python static liveness check (#425) * update version files * updated protobuf error * fix: update example requirements to be compatible with SDK cryptography>=42.0.0 doc_scan/requirements.txt pinned cryptography==41.0.7 which conflicts with the SDK's install_requires (cryptography>=42.0.0), breaking the CI examples job. Updated both example requirements files and clarified the headers to reflect that they contain SDK-inherited range constraints. * fix: sync cryptography constraint and prevent local SDK override in CI - requirements.in: cryptography>=41.0.7 -> >=42.0.0 to match setup.py, remove leading blank line - tests.yaml: reinstall local SDK after AML/Django examples, which pin yoti==2.14.0 from PyPI and would otherwise override the editable install - flask/doc_scan requirements.txt: clarify # via yoti (installed separately) annotations since yoti is no longer in requirements.in --- .github/workflows/sonar.yaml | 2 +- .github/workflows/tests.yaml | 5 + examples/doc_scan/requirements.in | 14 +- examples/doc_scan/requirements.txt | 44 ++- examples/yoti_example_flask/requirements.in | 10 +- examples/yoti_example_flask/requirements.txt | 41 +-- requirements.in | 5 +- requirements.txt | 17 +- setup.py | 5 +- sonar-project.properties | 2 +- yoti_python_sdk/anchor.py | 2 +- .../attribute_public_api/Attribute_pb2.py | 256 ------------------ .../Attribute_pb2_grpc.py | 3 - .../attribute_public_api/ContentType_pb2.py | 88 ------ .../ContentType_pb2_grpc.py | 3 - .../protobuf/attribute_public_api/List_pb2.py | 160 ----------- .../attribute_public_api/List_pb2_grpc.py | 3 - .../attribute_public_api/Signing_pb2.py | 108 -------- .../attribute_public_api/Signing_pb2_grpc.py | 3 - .../protobuf/attribute_public_api/__init__.py | 5 - .../attrpubapi_v1/AttributeChange_pb2.py | 27 ++ .../AttributeDisplayRequest_pb2.py | 28 ++ .../AttributeDisplayResponse_pb2.py | 26 ++ .../protobuf/attrpubapi_v1/Attribute_pb2.py | 38 +++ .../attrpubapi_v1/DeleteSuperseded_pb2.py | 27 ++ .../protobuf/attrpubapi_v1/Delete_pb2.py | 27 ++ .../protobuf/attrpubapi_v1/List_pb2.py | 31 +++ .../protobuf/attrpubapi_v1/Refresh_pb2.py | 32 +++ .../protobuf/attrpubapi_v1/Signing_pb2.py | 27 ++ .../protobuf/attrpubapi_v1/Unlock_pb2.py | 34 +++ .../protobuf/attrpubapi_v1/__init__.py | 1 + .../common_public_api/EncryptedData_pb2.py | 77 ------ .../EncryptedData_pb2_grpc.py | 3 - .../common_public_api/SignedTimestamp_pb2.py | 105 ------- .../SignedTimestamp_pb2_grpc.py | 3 - .../protobuf/compubapi_v1/Address_pb2.py | 26 ++ .../compubapi_v1/AdminReasonCode_pb2.py | 26 ++ .../compubapi_v1/AttributeLink_pb2.py | 26 ++ .../compubapi_v1/AttributeMigration_pb2.py | 26 ++ .../protobuf/compubapi_v1/ChipInfo_pb2.py | 28 ++ .../protobuf/compubapi_v1/DataPrivacy_pb2.py | 26 ++ .../compubapi_v1/DocumentFields_pb2.py | 34 +++ .../compubapi_v1/DocumentTypes_pb2.py | 36 +++ .../compubapi_v1/EncryptedData_pb2.py | 26 ++ .../protobuf/compubapi_v1/Hmac_pb2.py | 26 ++ .../IdentityProfilePreview_pb2.py | 27 ++ .../compubapi_v1/IdentityProfileReport_pb2.py | 66 +++++ .../compubapi_v1/IdentityProfile_pb2.py | 48 ++++ .../protobuf/compubapi_v1/MRZ_pb2.py | 28 ++ .../protobuf/compubapi_v1/Metadata_pb2.py | 28 ++ .../compubapi_v1/OptionalTypes_pb2.py | 26 ++ .../compubapi_v1/RsaAuthDigest_pb2.py | 27 ++ .../protobuf/compubapi_v1/Signature_pb2.py | 28 ++ .../compubapi_v1/SignedTimestamp_pb2.py | 26 ++ .../protobuf/compubapi_v1/UserProfile_pb2.py | 98 +++++++ .../protobuf/compubapi_v1/YotiYUV_pb2.py | 26 ++ .../protobuf/compubapi_v1/__init__.py | 1 + .../StaticCredentialAuth_pb2.py | 26 ++ .../__init__.py | 0 yoti_python_sdk/protobuf/protobuf.py | 8 +- .../share_public_api/DataEntry_pb2.py | 122 --------- .../share_public_api/DataEntry_pb2_grpc.py | 3 - .../share_public_api/ExtraData_pb2.py | 73 ----- .../share_public_api/ExtraData_pb2_grpc.py | 3 - .../share_public_api/IssuingAttributes_pb2.py | 117 -------- .../IssuingAttributes_pb2_grpc.py | 3 - .../ThirdPartyAttribute_pb2.py | 80 ------ .../ThirdPartyAttribute_pb2_grpc.py | 3 - .../protobuf/share_public_api/__init__.py | 5 - .../AgeVerificationSecret_pb2.py | 26 ++ .../sharepubapi_v1/CancelSharing_pb2.py | 29 ++ .../protobuf/sharepubapi_v1/DataEntry_pb2.py | 28 ++ .../protobuf/sharepubapi_v1/ExtraData_pb2.py | 27 ++ .../IdentityProfileShare_pb2.py | 59 ++++ .../sharepubapi_v1/IssuingAttributes_pb2.py | 28 ++ .../protobuf/sharepubapi_v1/Location_pb2.py | 26 ++ .../protobuf/sharepubapi_v1/Policy_pb2.py | 49 ++++ .../sharepubapi_v1/ReceiptPush_pb2.py | 32 +++ .../ScanYotiCompleteShare_pb2.py | 28 ++ .../sharepubapi_v1/SessionData_pb2.py | 26 ++ .../SharingNotificationPush_pb2.py | 27 ++ .../protobuf/sharepubapi_v1/Sharing_pb2.py | 39 +++ .../sharepubapi_v1/ThirdPartyAttribute_pb2.py | 27 ++ .../protobuf/sharepubapi_v1/__init__.py | 1 + yoti_python_sdk/share/extra_data.py | 4 +- .../tests/share/test_extra_data.py | 8 +- yoti_python_sdk/tests/test_anchor.py | 2 +- .../tests/test_attribute_issuance_details.py | 4 +- yoti_python_sdk/version.py | 2 +- 89 files changed, 1569 insertions(+), 1317 deletions(-) delete mode 100644 yoti_python_sdk/protobuf/attribute_public_api/Attribute_pb2.py delete mode 100644 yoti_python_sdk/protobuf/attribute_public_api/Attribute_pb2_grpc.py delete mode 100644 yoti_python_sdk/protobuf/attribute_public_api/ContentType_pb2.py delete mode 100644 yoti_python_sdk/protobuf/attribute_public_api/ContentType_pb2_grpc.py delete mode 100644 yoti_python_sdk/protobuf/attribute_public_api/List_pb2.py delete mode 100644 yoti_python_sdk/protobuf/attribute_public_api/List_pb2_grpc.py delete mode 100644 yoti_python_sdk/protobuf/attribute_public_api/Signing_pb2.py delete mode 100644 yoti_python_sdk/protobuf/attribute_public_api/Signing_pb2_grpc.py delete mode 100644 yoti_python_sdk/protobuf/attribute_public_api/__init__.py create mode 100644 yoti_python_sdk/protobuf/attrpubapi_v1/AttributeChange_pb2.py create mode 100644 yoti_python_sdk/protobuf/attrpubapi_v1/AttributeDisplayRequest_pb2.py create mode 100644 yoti_python_sdk/protobuf/attrpubapi_v1/AttributeDisplayResponse_pb2.py create mode 100644 yoti_python_sdk/protobuf/attrpubapi_v1/Attribute_pb2.py create mode 100644 yoti_python_sdk/protobuf/attrpubapi_v1/DeleteSuperseded_pb2.py create mode 100644 yoti_python_sdk/protobuf/attrpubapi_v1/Delete_pb2.py create mode 100644 yoti_python_sdk/protobuf/attrpubapi_v1/List_pb2.py create mode 100644 yoti_python_sdk/protobuf/attrpubapi_v1/Refresh_pb2.py create mode 100644 yoti_python_sdk/protobuf/attrpubapi_v1/Signing_pb2.py create mode 100644 yoti_python_sdk/protobuf/attrpubapi_v1/Unlock_pb2.py create mode 100644 yoti_python_sdk/protobuf/attrpubapi_v1/__init__.py delete mode 100644 yoti_python_sdk/protobuf/common_public_api/EncryptedData_pb2.py delete mode 100644 yoti_python_sdk/protobuf/common_public_api/EncryptedData_pb2_grpc.py delete mode 100644 yoti_python_sdk/protobuf/common_public_api/SignedTimestamp_pb2.py delete mode 100644 yoti_python_sdk/protobuf/common_public_api/SignedTimestamp_pb2_grpc.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/Address_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/AdminReasonCode_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/AttributeLink_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/AttributeMigration_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/ChipInfo_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/DataPrivacy_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/DocumentFields_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/DocumentTypes_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/EncryptedData_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/Hmac_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/IdentityProfilePreview_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/IdentityProfileReport_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/IdentityProfile_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/MRZ_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/Metadata_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/OptionalTypes_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/RsaAuthDigest_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/Signature_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/SignedTimestamp_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/UserProfile_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/YotiYUV_pb2.py create mode 100644 yoti_python_sdk/protobuf/compubapi_v1/__init__.py create mode 100644 yoti_python_sdk/protobuf/devicepubapi_v1/StaticCredentialAuth_pb2.py rename yoti_python_sdk/protobuf/{common_public_api => devicepubapi_v1}/__init__.py (100%) delete mode 100644 yoti_python_sdk/protobuf/share_public_api/DataEntry_pb2.py delete mode 100644 yoti_python_sdk/protobuf/share_public_api/DataEntry_pb2_grpc.py delete mode 100644 yoti_python_sdk/protobuf/share_public_api/ExtraData_pb2.py delete mode 100644 yoti_python_sdk/protobuf/share_public_api/ExtraData_pb2_grpc.py delete mode 100644 yoti_python_sdk/protobuf/share_public_api/IssuingAttributes_pb2.py delete mode 100644 yoti_python_sdk/protobuf/share_public_api/IssuingAttributes_pb2_grpc.py delete mode 100644 yoti_python_sdk/protobuf/share_public_api/ThirdPartyAttribute_pb2.py delete mode 100644 yoti_python_sdk/protobuf/share_public_api/ThirdPartyAttribute_pb2_grpc.py delete mode 100644 yoti_python_sdk/protobuf/share_public_api/__init__.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/AgeVerificationSecret_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/CancelSharing_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/DataEntry_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/ExtraData_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/IdentityProfileShare_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/IssuingAttributes_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/Location_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/Policy_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/ReceiptPush_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/ScanYotiCompleteShare_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/SessionData_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/SharingNotificationPush_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/Sharing_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/ThirdPartyAttribute_pb2.py create mode 100644 yoti_python_sdk/protobuf/sharepubapi_v1/__init__.py diff --git a/.github/workflows/sonar.yaml b/.github/workflows/sonar.yaml index 9d91c4b0..22a353b4 100644 --- a/.github/workflows/sonar.yaml +++ b/.github/workflows/sonar.yaml @@ -17,7 +17,7 @@ jobs: - run: pip install -r requirements.txt - - run: pip install -e .[dev] + - run: pip install -e ".[dev]" - run: pytest --cov=yoti_python_sdk yoti_python_sdk/tests --cov-report=xml:coverage-reports/coverage-new.xml diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 589e42e8..2a161bfc 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -38,10 +38,15 @@ jobs: - run: pip install --upgrade setuptools + - run: pip install -e . + - run: pushd examples/aml && pip install -r requirements.txt && popd - run: pushd examples/yoti_example_django && pip install --upgrade pip && pip install -r requirements.txt && popd + # Reinstall local SDK after AML/Django, which pin yoti==2.14.0 from PyPI and override it + - run: pip install -e . + - run: pushd examples/yoti_example_flask && pip install -r requirements.txt && popd - run: pushd examples/doc_scan && pip install -r requirements.txt && popd diff --git a/examples/doc_scan/requirements.in b/examples/doc_scan/requirements.in index da2d3332..26f386a3 100644 --- a/examples/doc_scan/requirements.in +++ b/examples/doc_scan/requirements.in @@ -1,13 +1,13 @@ # Core requirements flask>=2.2.0 python-dotenv>=0.21.0 -yoti==2.14.0 +# yoti will be installed separately in CI from local source filetype>=1.0.7 -pyopenssl==23.2.0 -click >=8.0 +pyopenssl>=24.0.0 +click>=8.0 +future>=1.0.0 # Required for yoti compatibility -deprecated==1.2.10 -iso8601==0.1.13 -pytz==2020.4 - +deprecated>=1.2.14 +iso8601>=1.1.0 +pytz>=2025.2 diff --git a/examples/doc_scan/requirements.txt b/examples/doc_scan/requirements.txt index d5ce9bca..54e5a453 100644 --- a/examples/doc_scan/requirements.txt +++ b/examples/doc_scan/requirements.txt @@ -1,11 +1,11 @@ # -# This file is autogenerated by pip-compile with Python 3.12 -# by the following command: +# This file was generated by pip-compile and has been updated to reflect +# the SDK's install_requires constraints (>=). To fully regenerate, run: # # pip-compile --output-file=requirements.txt requirements.in # asn1==2.2.0 - # via yoti + # via yoti (installed separately) blinker==1.9.0 # via flask @@ -19,26 +19,25 @@ click==8.1.8 # via # -r requirements.in # flask -cryptography==41.0.7 - +cryptography>=42.0.0 # via # pyopenssl # yoti -deprecated==1.2.10 - +deprecated>=1.2.14 # via # -r requirements.in # yoti filetype==1.0.7 # via -r requirements.in -flask==3.1.0 +flask>=2.2.0 # via -r requirements.in -future==1.0.0 - # via yoti +future>=1.0.0 + # via + # -r requirements.in + # yoti idna==2.9 # via requests -iso8601==0.1.13 - +iso8601>=1.1.0 # via # -r requirements.in # yoti @@ -51,34 +50,31 @@ markupsafe==3.0.2 # jinja2 # werkzeug -protobuf==3.11.3 - # via yoti -pycparser==2.20 +protobuf==4.21.12 + # via yoti (installed separately) +pycparser==2.22 # via cffi - -pyopenssl==23.2.0 +pyopenssl>=24.0.0 # via # -r requirements.in # yoti python-dotenv==1.1.0 # via -r requirements.in -pytz==2020.4 +pytz>=2025.2 # via # -r requirements.in # yoti -requests==2.23.0 - # via yoti -six==1.14.0 +requests>=2.31.0 + # via yoti (installed separately) +six>=1.16.0 # via protobuf urllib3==1.25.9 # via requests werkzeug==3.1.3 # via flask wrapt==1.17.2 - # via deprecated -yoti==2.14.0 - # via -r requirements.in +# yoti will be installed separately in CI from local source # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/examples/yoti_example_flask/requirements.in b/examples/yoti_example_flask/requirements.in index 89d0b0ee..772c1aac 100644 --- a/examples/yoti_example_flask/requirements.in +++ b/examples/yoti_example_flask/requirements.in @@ -1,11 +1,13 @@ click>=7 cffi>=1.15.0 +cryptography>=42.0.0 flask>=1.0.4 +future>=1.0.0 jinja2>=3.0.3 -pyopenssl>=19.0.0 +pyopenssl>=24.0.0 python-dotenv>=0.7.1 -requests>=2.20.0 +requests>=2.31.0 urllib3>=1.24.2 -yoti>=2.14.0 +# yoti will be installed separately in CI from local source werkzeug>=1.0.1 -six==1.16.0 \ No newline at end of file +six==1.16.0 diff --git a/examples/yoti_example_flask/requirements.txt b/examples/yoti_example_flask/requirements.txt index 81f2e9f6..1491dd4d 100644 --- a/examples/yoti_example_flask/requirements.txt +++ b/examples/yoti_example_flask/requirements.txt @@ -1,11 +1,11 @@ # -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: +# This file was generated by pip-compile and has been updated to reflect +# the SDK's install_requires constraints (>=). To fully regenerate, run: # # pip-compile --output-file=requirements.txt requirements.in # asn1==2.2.0 - # via yoti + # via yoti (installed separately) certifi==2018.4.16 # via requests cffi==1.15.0 @@ -18,21 +18,23 @@ click==8.1.2 # via # -r requirements.in # flask -cryptography==3.2 +cryptography>=42.0.0 # via # pyopenssl # yoti -deprecated==1.2.10 - # via yoti +deprecated==1.2.18 + # via yoti (installed separately) flask==1.1.1 # via -r requirements.in -future==0.16.0 - # via yoti +future==1.0.0 + # via + # -r requirements.in + # yoti idna==2.7 # via requests -iso8601==0.1.13 - # via yoti -itsdangerous==0.24 +iso8601>=1.1.0 + # via yoti (installed separately) +itsdangerous==1.1.0 # via flask jinja2==3.0.3 # via @@ -40,19 +42,19 @@ jinja2==3.0.3 # flask markupsafe==2.0.1 # via jinja2 -protobuf==3.6.0 - # via yoti +protobuf==4.21.12 + # via yoti (installed separately) pycparser==2.18 # via cffi -pyopenssl==19.0.0 +pyopenssl>=24.0.0 # via # -r requirements.in # yoti -python-dotenv==0.8.2 +python-dotenv>=0.7.1 # via -r requirements.in -pytz==2020.4 - # via yoti -requests==2.21.0 +pytz>=2025.2 + # via yoti (installed separately) +requests>=2.31.0 # via # -r requirements.in # yoti @@ -72,8 +74,7 @@ werkzeug==1.0.1 # flask wrapt==1.12.1 # via deprecated -yoti==2.14.0 - # via -r requirements.in +# yoti will be installed separately in CI from local source # The following packages are considered to be unsafe in a requirements file: # setuptools diff --git a/requirements.in b/requirements.in index 5bdc7fe3..0b66c116 100644 --- a/requirements.in +++ b/requirements.in @@ -1,10 +1,10 @@ asn1==2.2.0 -cryptography>=41.0.7 +cryptography>=42.0.0 cffi>=1.16.0 future>=0.18.3 itsdangerous>=2.1.2 pbr>=5.11.1 -protobuf==3.20.3 +protobuf>=4.21.12 pyopenssl>=24.0.0 PyYAML>=6.0 pytz>=2025.2 @@ -14,3 +14,4 @@ deprecated>=1.2.14 wheel>=0.41.0 iso8601>=1.1.0 wrapt>=1.15.0 + diff --git a/requirements.txt b/requirements.txt index ab374aef..1376d95a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,8 +1,6 @@ # - -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: - # # pip-compile --output-file=requirements.txt requirements.in # @@ -10,7 +8,6 @@ asn1==2.2.0 # via -r requirements.in certifi==2018.11.29 # via requests - cffi==1.17.1 # via # -r requirements.in @@ -21,32 +18,25 @@ cryptography==44.0.2 # via # -r requirements.in # pyopenssl - deprecated==1.2.18 # via -r requirements.in future==1.0.0 # via -r requirements.in idna==2.7 # via requests - iso8601==2.1.0 # via -r requirements.in itsdangerous==2.2.0 - # via -r requirements.in pbr==6.1.1 # via -r requirements.in - -protobuf==3.20.3 - +protobuf==4.21.12 # via -r requirements.in pycparser==2.18 # via cffi pyopenssl==25.0.0 # via -r requirements.in - pytz==2025.2 - # via -r requirements.in pyyaml==6.0.2 # via -r requirements.in @@ -67,6 +57,3 @@ wrapt==1.17.2 # The following packages are considered to be unsafe in a requirements file: # setuptools - - - diff --git a/setup.py b/setup.py index 4e9bfdf1..fd3be6db 100644 --- a/setup.py +++ b/setup.py @@ -17,11 +17,13 @@ url="https://github.com/getyoti/yoti-python-sdk", author="Yoti", author_email="websdk@yoti.com", + python_requires=">=3.9", install_requires=[ + "asn1==2.2.0", # still pinned due to enum34 issue "cryptography>=42.0.0", - "protobuf==3.20.3", + "protobuf>=4.21.12", "requests>=2.31.0", "pyopenssl>=24.0.0", "pytz>=2025.2", @@ -57,7 +59,6 @@ "Operating System :: OS Independent", "Intended Audience :: Developers", "Programming Language :: Python", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", diff --git a/sonar-project.properties b/sonar-project.properties index f9f4b359..d480872d 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,7 +2,7 @@ sonar.host.url = https://sonarcloud.io sonar.organization = getyoti sonar.projectKey = getyoti:python sonar.projectName = Python SDK -sonar.projectVersion = 2.14.3 +sonar.projectVersion = 2.14.5 sonar.exclusions = yoti_python_sdk/tests/**,examples/**,yoti_python_sdk/protobuf/**/* sonar.python.pylint.reportPath = coverage.out diff --git a/yoti_python_sdk/anchor.py b/yoti_python_sdk/anchor.py index 924330ae..a6eb75b4 100644 --- a/yoti_python_sdk/anchor.py +++ b/yoti_python_sdk/anchor.py @@ -3,7 +3,7 @@ import OpenSSL import asn1 -import yoti_python_sdk.protobuf.common_public_api.SignedTimestamp_pb2 as compubapi +import yoti_python_sdk.protobuf.compubapi_v1.SignedTimestamp_pb2 as compubapi from OpenSSL import crypto from yoti_python_sdk import config diff --git a/yoti_python_sdk/protobuf/attribute_public_api/Attribute_pb2.py b/yoti_python_sdk/protobuf/attribute_public_api/Attribute_pb2.py deleted file mode 100644 index de3e260b..00000000 --- a/yoti_python_sdk/protobuf/attribute_public_api/Attribute_pb2.py +++ /dev/null @@ -1,256 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: Attribute.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -import ContentType_pb2 as ContentType__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='Attribute.proto', - package='attrpubapi_v1', - syntax='proto3', - serialized_options=_b('\n$com.yoti.api.client.spi.remote.protoB\tAttrProtoZ\ryotiprotoattr\252\002\034Yoti.Auth.ProtoBuf.Attribute\312\002\nAttrpubapi'), - serialized_pb=_b('\n\x0f\x41ttribute.proto\x12\rattrpubapi_v1\x1a\x11\x43ontentType.proto\"\x82\x01\n\tAttribute\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x30\n\x0c\x63ontent_type\x18\x03 \x01(\x0e\x32\x1a.attrpubapi_v1.ContentType\x12&\n\x07\x61nchors\x18\x04 \x03(\x0b\x32\x15.attrpubapi_v1.Anchor\"\x98\x01\n\x06\x41nchor\x12\x15\n\rartifact_link\x18\x01 \x01(\x0c\x12\x1b\n\x13origin_server_certs\x18\x02 \x03(\x0c\x12\x1a\n\x12\x61rtifact_signature\x18\x03 \x01(\x0c\x12\x10\n\x08sub_type\x18\x04 \x01(\t\x12\x11\n\tsignature\x18\x05 \x01(\x0c\x12\x19\n\x11signed_time_stamp\x18\x06 \x01(\x0c\"\x86\x01\n\nMultiValue\x12/\n\x06values\x18\x01 \x03(\x0b\x32\x1f.attrpubapi_v1.MultiValue.Value\x1aG\n\x05Value\x12\x30\n\x0c\x63ontent_type\x18\x01 \x01(\x0e\x32\x1a.attrpubapi_v1.ContentType\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x42l\n$com.yoti.api.client.spi.remote.protoB\tAttrProtoZ\ryotiprotoattr\xaa\x02\x1cYoti.Auth.ProtoBuf.Attribute\xca\x02\nAttrpubapib\x06proto3') - , - dependencies=[ContentType__pb2.DESCRIPTOR,]) - - - - -_ATTRIBUTE = _descriptor.Descriptor( - name='Attribute', - full_name='attrpubapi_v1.Attribute', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='name', full_name='attrpubapi_v1.Attribute.name', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='attrpubapi_v1.Attribute.value', index=1, - number=2, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='content_type', full_name='attrpubapi_v1.Attribute.content_type', index=2, - number=3, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='anchors', full_name='attrpubapi_v1.Attribute.anchors', index=3, - number=4, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=54, - serialized_end=184, -) - - -_ANCHOR = _descriptor.Descriptor( - name='Anchor', - full_name='attrpubapi_v1.Anchor', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='artifact_link', full_name='attrpubapi_v1.Anchor.artifact_link', index=0, - number=1, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='origin_server_certs', full_name='attrpubapi_v1.Anchor.origin_server_certs', index=1, - number=2, type=12, cpp_type=9, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='artifact_signature', full_name='attrpubapi_v1.Anchor.artifact_signature', index=2, - number=3, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='sub_type', full_name='attrpubapi_v1.Anchor.sub_type', index=3, - number=4, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='signature', full_name='attrpubapi_v1.Anchor.signature', index=4, - number=5, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='signed_time_stamp', full_name='attrpubapi_v1.Anchor.signed_time_stamp', index=5, - number=6, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=187, - serialized_end=339, -) - - -_MULTIVALUE_VALUE = _descriptor.Descriptor( - name='Value', - full_name='attrpubapi_v1.MultiValue.Value', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='content_type', full_name='attrpubapi_v1.MultiValue.Value.content_type', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='data', full_name='attrpubapi_v1.MultiValue.Value.data', index=1, - number=2, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=405, - serialized_end=476, -) - -_MULTIVALUE = _descriptor.Descriptor( - name='MultiValue', - full_name='attrpubapi_v1.MultiValue', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='values', full_name='attrpubapi_v1.MultiValue.values', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[_MULTIVALUE_VALUE, ], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=342, - serialized_end=476, -) - -_ATTRIBUTE.fields_by_name['content_type'].enum_type = ContentType__pb2._CONTENTTYPE -_ATTRIBUTE.fields_by_name['anchors'].message_type = _ANCHOR -_MULTIVALUE_VALUE.fields_by_name['content_type'].enum_type = ContentType__pb2._CONTENTTYPE -_MULTIVALUE_VALUE.containing_type = _MULTIVALUE -_MULTIVALUE.fields_by_name['values'].message_type = _MULTIVALUE_VALUE -DESCRIPTOR.message_types_by_name['Attribute'] = _ATTRIBUTE -DESCRIPTOR.message_types_by_name['Anchor'] = _ANCHOR -DESCRIPTOR.message_types_by_name['MultiValue'] = _MULTIVALUE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -Attribute = _reflection.GeneratedProtocolMessageType('Attribute', (_message.Message,), dict( - DESCRIPTOR = _ATTRIBUTE, - __module__ = 'Attribute_pb2' - # @@protoc_insertion_point(class_scope:attrpubapi_v1.Attribute) - )) -_sym_db.RegisterMessage(Attribute) - -Anchor = _reflection.GeneratedProtocolMessageType('Anchor', (_message.Message,), dict( - DESCRIPTOR = _ANCHOR, - __module__ = 'Attribute_pb2' - # @@protoc_insertion_point(class_scope:attrpubapi_v1.Anchor) - )) -_sym_db.RegisterMessage(Anchor) - -MultiValue = _reflection.GeneratedProtocolMessageType('MultiValue', (_message.Message,), dict( - - Value = _reflection.GeneratedProtocolMessageType('Value', (_message.Message,), dict( - DESCRIPTOR = _MULTIVALUE_VALUE, - __module__ = 'Attribute_pb2' - # @@protoc_insertion_point(class_scope:attrpubapi_v1.MultiValue.Value) - )) - , - DESCRIPTOR = _MULTIVALUE, - __module__ = 'Attribute_pb2' - # @@protoc_insertion_point(class_scope:attrpubapi_v1.MultiValue) - )) -_sym_db.RegisterMessage(MultiValue) -_sym_db.RegisterMessage(MultiValue.Value) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attribute_public_api/Attribute_pb2_grpc.py b/yoti_python_sdk/protobuf/attribute_public_api/Attribute_pb2_grpc.py deleted file mode 100644 index a8943526..00000000 --- a/yoti_python_sdk/protobuf/attribute_public_api/Attribute_pb2_grpc.py +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - diff --git a/yoti_python_sdk/protobuf/attribute_public_api/ContentType_pb2.py b/yoti_python_sdk/protobuf/attribute_public_api/ContentType_pb2.py deleted file mode 100644 index cb207895..00000000 --- a/yoti_python_sdk/protobuf/attribute_public_api/ContentType_pb2.py +++ /dev/null @@ -1,88 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: ContentType.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf.internal import enum_type_wrapper -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='ContentType.proto', - package='attrpubapi_v1', - syntax='proto3', - serialized_options=_b('\n$com.yoti.api.client.spi.remote.protoB\020ContentTypeProtoZ\ryotiprotoattr\252\002\034Yoti.Auth.ProtoBuf.Attribute\312\002\nAttrpubapi'), - serialized_pb=_b('\n\x11\x43ontentType.proto\x12\rattrpubapi_v1*i\n\x0b\x43ontentType\x12\r\n\tUNDEFINED\x10\x00\x12\n\n\x06STRING\x10\x01\x12\x08\n\x04JPEG\x10\x02\x12\x08\n\x04\x44\x41TE\x10\x03\x12\x07\n\x03PNG\x10\x04\x12\x08\n\x04JSON\x10\x05\x12\x0f\n\x0bMULTI_VALUE\x10\x06\x12\x07\n\x03INT\x10\x07\x42s\n$com.yoti.api.client.spi.remote.protoB\x10\x43ontentTypeProtoZ\ryotiprotoattr\xaa\x02\x1cYoti.Auth.ProtoBuf.Attribute\xca\x02\nAttrpubapib\x06proto3') -) - -_CONTENTTYPE = _descriptor.EnumDescriptor( - name='ContentType', - full_name='attrpubapi_v1.ContentType', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='UNDEFINED', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='STRING', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='JPEG', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='DATE', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='PNG', index=4, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='JSON', index=5, number=5, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='MULTI_VALUE', index=6, number=6, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='INT', index=7, number=7, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=36, - serialized_end=141, -) -_sym_db.RegisterEnumDescriptor(_CONTENTTYPE) - -ContentType = enum_type_wrapper.EnumTypeWrapper(_CONTENTTYPE) -UNDEFINED = 0 -STRING = 1 -JPEG = 2 -DATE = 3 -PNG = 4 -JSON = 5 -MULTI_VALUE = 6 -INT = 7 - - -DESCRIPTOR.enum_types_by_name['ContentType'] = _CONTENTTYPE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attribute_public_api/ContentType_pb2_grpc.py b/yoti_python_sdk/protobuf/attribute_public_api/ContentType_pb2_grpc.py deleted file mode 100644 index a8943526..00000000 --- a/yoti_python_sdk/protobuf/attribute_public_api/ContentType_pb2_grpc.py +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - diff --git a/yoti_python_sdk/protobuf/attribute_public_api/List_pb2.py b/yoti_python_sdk/protobuf/attribute_public_api/List_pb2.py deleted file mode 100644 index 68c3fd3b..00000000 --- a/yoti_python_sdk/protobuf/attribute_public_api/List_pb2.py +++ /dev/null @@ -1,160 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: List.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -import Attribute_pb2 as Attribute__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='List.proto', - package='attrpubapi_v1', - syntax='proto3', - serialized_options=_b('\n$com.yoti.api.client.spi.remote.protoB\022AttributeListProtoZ\ryotiprotoattr\252\002\034Yoti.Auth.ProtoBuf.Attribute\312\002\nAttrpubapi'), - serialized_pb=_b('\n\nList.proto\x12\rattrpubapi_v1\x1a\x0f\x41ttribute.proto\"S\n\x0e\x41ttributeAndId\x12+\n\tattribute\x18\x01 \x01(\x0b\x32\x18.attrpubapi_v1.Attribute\x12\x14\n\x0c\x61ttribute_id\x18\x02 \x01(\x0c\"R\n\x12\x41ttributeAndIdList\x12<\n\x15\x61ttribute_and_id_list\x18\x01 \x03(\x0b\x32\x1d.attrpubapi_v1.AttributeAndId\"=\n\rAttributeList\x12,\n\nattributes\x18\x01 \x03(\x0b\x32\x18.attrpubapi_v1.AttributeBu\n$com.yoti.api.client.spi.remote.protoB\x12\x41ttributeListProtoZ\ryotiprotoattr\xaa\x02\x1cYoti.Auth.ProtoBuf.Attribute\xca\x02\nAttrpubapib\x06proto3') - , - dependencies=[Attribute__pb2.DESCRIPTOR,]) - - - - -_ATTRIBUTEANDID = _descriptor.Descriptor( - name='AttributeAndId', - full_name='attrpubapi_v1.AttributeAndId', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='attribute', full_name='attrpubapi_v1.AttributeAndId.attribute', index=0, - number=1, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='attribute_id', full_name='attrpubapi_v1.AttributeAndId.attribute_id', index=1, - number=2, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=46, - serialized_end=129, -) - - -_ATTRIBUTEANDIDLIST = _descriptor.Descriptor( - name='AttributeAndIdList', - full_name='attrpubapi_v1.AttributeAndIdList', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='attribute_and_id_list', full_name='attrpubapi_v1.AttributeAndIdList.attribute_and_id_list', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=131, - serialized_end=213, -) - - -_ATTRIBUTELIST = _descriptor.Descriptor( - name='AttributeList', - full_name='attrpubapi_v1.AttributeList', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='attributes', full_name='attrpubapi_v1.AttributeList.attributes', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=215, - serialized_end=276, -) - -_ATTRIBUTEANDID.fields_by_name['attribute'].message_type = Attribute__pb2._ATTRIBUTE -_ATTRIBUTEANDIDLIST.fields_by_name['attribute_and_id_list'].message_type = _ATTRIBUTEANDID -_ATTRIBUTELIST.fields_by_name['attributes'].message_type = Attribute__pb2._ATTRIBUTE -DESCRIPTOR.message_types_by_name['AttributeAndId'] = _ATTRIBUTEANDID -DESCRIPTOR.message_types_by_name['AttributeAndIdList'] = _ATTRIBUTEANDIDLIST -DESCRIPTOR.message_types_by_name['AttributeList'] = _ATTRIBUTELIST -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -AttributeAndId = _reflection.GeneratedProtocolMessageType('AttributeAndId', (_message.Message,), dict( - DESCRIPTOR = _ATTRIBUTEANDID, - __module__ = 'List_pb2' - # @@protoc_insertion_point(class_scope:attrpubapi_v1.AttributeAndId) - )) -_sym_db.RegisterMessage(AttributeAndId) - -AttributeAndIdList = _reflection.GeneratedProtocolMessageType('AttributeAndIdList', (_message.Message,), dict( - DESCRIPTOR = _ATTRIBUTEANDIDLIST, - __module__ = 'List_pb2' - # @@protoc_insertion_point(class_scope:attrpubapi_v1.AttributeAndIdList) - )) -_sym_db.RegisterMessage(AttributeAndIdList) - -AttributeList = _reflection.GeneratedProtocolMessageType('AttributeList', (_message.Message,), dict( - DESCRIPTOR = _ATTRIBUTELIST, - __module__ = 'List_pb2' - # @@protoc_insertion_point(class_scope:attrpubapi_v1.AttributeList) - )) -_sym_db.RegisterMessage(AttributeList) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attribute_public_api/List_pb2_grpc.py b/yoti_python_sdk/protobuf/attribute_public_api/List_pb2_grpc.py deleted file mode 100644 index a8943526..00000000 --- a/yoti_python_sdk/protobuf/attribute_public_api/List_pb2_grpc.py +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - diff --git a/yoti_python_sdk/protobuf/attribute_public_api/Signing_pb2.py b/yoti_python_sdk/protobuf/attribute_public_api/Signing_pb2.py deleted file mode 100644 index e4029576..00000000 --- a/yoti_python_sdk/protobuf/attribute_public_api/Signing_pb2.py +++ /dev/null @@ -1,108 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: Signing.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -import ContentType_pb2 as ContentType__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='Signing.proto', - package='attrpubapi_v1', - syntax='proto3', - serialized_options=_b('\n$com.yoti.api.client.spi.remote.protoB\014SigningProtoZ\ryotiprotoattr\252\002\034Yoti.Auth.ProtoBuf.Attribute\312\002\nAttrpubapi'), - serialized_pb=_b('\n\rSigning.proto\x12\rattrpubapi_v1\x1a\x11\x43ontentType.proto\"\xaa\x01\n\x10\x41ttributeSigning\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12\x30\n\x0c\x63ontent_type\x18\x03 \x01(\x0e\x32\x1a.attrpubapi_v1.ContentType\x12\x1a\n\x12\x61rtifact_signature\x18\x04 \x01(\x0c\x12\x10\n\x08sub_type\x18\x05 \x01(\t\x12\x19\n\x11signed_time_stamp\x18\x06 \x01(\x0c\x42o\n$com.yoti.api.client.spi.remote.protoB\x0cSigningProtoZ\ryotiprotoattr\xaa\x02\x1cYoti.Auth.ProtoBuf.Attribute\xca\x02\nAttrpubapib\x06proto3') - , - dependencies=[ContentType__pb2.DESCRIPTOR,]) - - - - -_ATTRIBUTESIGNING = _descriptor.Descriptor( - name='AttributeSigning', - full_name='attrpubapi_v1.AttributeSigning', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='name', full_name='attrpubapi_v1.AttributeSigning.name', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='attrpubapi_v1.AttributeSigning.value', index=1, - number=2, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='content_type', full_name='attrpubapi_v1.AttributeSigning.content_type', index=2, - number=3, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='artifact_signature', full_name='attrpubapi_v1.AttributeSigning.artifact_signature', index=3, - number=4, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='sub_type', full_name='attrpubapi_v1.AttributeSigning.sub_type', index=4, - number=5, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='signed_time_stamp', full_name='attrpubapi_v1.AttributeSigning.signed_time_stamp', index=5, - number=6, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=52, - serialized_end=222, -) - -_ATTRIBUTESIGNING.fields_by_name['content_type'].enum_type = ContentType__pb2._CONTENTTYPE -DESCRIPTOR.message_types_by_name['AttributeSigning'] = _ATTRIBUTESIGNING -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -AttributeSigning = _reflection.GeneratedProtocolMessageType('AttributeSigning', (_message.Message,), dict( - DESCRIPTOR = _ATTRIBUTESIGNING, - __module__ = 'Signing_pb2' - # @@protoc_insertion_point(class_scope:attrpubapi_v1.AttributeSigning) - )) -_sym_db.RegisterMessage(AttributeSigning) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attribute_public_api/Signing_pb2_grpc.py b/yoti_python_sdk/protobuf/attribute_public_api/Signing_pb2_grpc.py deleted file mode 100644 index a8943526..00000000 --- a/yoti_python_sdk/protobuf/attribute_public_api/Signing_pb2_grpc.py +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - diff --git a/yoti_python_sdk/protobuf/attribute_public_api/__init__.py b/yoti_python_sdk/protobuf/attribute_public_api/__init__.py deleted file mode 100644 index 08ec9e65..00000000 --- a/yoti_python_sdk/protobuf/attribute_public_api/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -import os -import sys - -# needed so we can import relative modules from distinct protobuf-generated files -sys.path.insert(0, os.path.abspath(os.path.dirname(__file__))) diff --git a/yoti_python_sdk/protobuf/attrpubapi_v1/AttributeChange_pb2.py b/yoti_python_sdk/protobuf/attrpubapi_v1/AttributeChange_pb2.py new file mode 100644 index 00000000..ef184005 --- /dev/null +++ b/yoti_python_sdk/protobuf/attrpubapi_v1/AttributeChange_pb2.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: attrpubapi_v1/AttributeChange.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import Refresh_pb2 as attrpubapi__v1_dot_Refresh__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n#attrpubapi_v1/AttributeChange.proto\x12\x17yoti.core.attrpubapi_v1\x1a\x1b\x61ttrpubapi_v1/Refresh.proto\"j\n\x0f\x41ttributeChange\x12?\n\x06status\x18\x01 \x01(\x0e\x32/.yoti.core.attrpubapi_v1.RefreshResponse.Status\x12\x16\n\x0e\x61ttribute_name\x18\x02 \x01(\tBm\n\x16\x63om.yoti.attrpubapi_v1B\x14\x41ttributeChangeProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\xba\x02\rAttrpubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'AttributeChange_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\026com.yoti.attrpubapi_v1B\024AttributeChangeProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\272\002\rAttrpubapiV1_' + _ATTRIBUTECHANGE._serialized_start=93 + _ATTRIBUTECHANGE._serialized_end=199 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attrpubapi_v1/AttributeDisplayRequest_pb2.py b/yoti_python_sdk/protobuf/attrpubapi_v1/AttributeDisplayRequest_pb2.py new file mode 100644 index 00000000..9048ae9b --- /dev/null +++ b/yoti_python_sdk/protobuf/attrpubapi_v1/AttributeDisplayRequest_pb2.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: attrpubapi_v1/AttributeDisplayRequest.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from yoti_python_sdk.protobuf.devicepubapi_v1 import StaticCredentialAuth_pb2 as devicepubapi__v1_dot_StaticCredentialAuth__pb2 +from yoti_python_sdk.protobuf.compubapi_v1 import Metadata_pb2 as compubapi__v1_dot_Metadata__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n+attrpubapi_v1/AttributeDisplayRequest.proto\x12\x17yoti.core.attrpubapi_v1\x1a*devicepubapi_v1/StaticCredentialAuth.proto\x1a\x1b\x63ompubapi_v1/Metadata.proto\"\xac\x02\n\x17\x41ttributeDisplayRequest\x12\x13\n\x0bwrapped_key\x18\x01 \x01(\x0c\x12\x12\n\ncredential\x18\x02 \x01(\x0c\x12\x11\n\tauth_list\x18\x03 \x01(\x0c\x12\x16\n\x0e\x61ttribute_name\x18\x04 \x01(\t\x12:\n\x0f\x64\x65vice_metadata\x18\xc0\x0c \x01(\x0b\x32 .yoti.core.compubapi_v1.Metadata\x12\x16\n\rfeature_flags\x18\xc1\x0c \x01(\x06\x12\x17\n\x0e\x63orrelation_id\x18\xc2\x0c \x01(\t\x12P\n\x16static_credential_auth\x18\xb8\x17 \x01(\x0b\x32/.yoti.core.devicepubapi_v1.StaticCredentialAuthBu\n\x16\x63om.yoti.attrpubapi_v1B\x1c\x41ttributeDisplayRequestProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\xba\x02\rAttrpubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'AttributeDisplayRequest_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\026com.yoti.attrpubapi_v1B\034AttributeDisplayRequestProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\272\002\rAttrpubapiV1_' + _ATTRIBUTEDISPLAYREQUEST._serialized_start=146 + _ATTRIBUTEDISPLAYREQUEST._serialized_end=446 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attrpubapi_v1/AttributeDisplayResponse_pb2.py b/yoti_python_sdk/protobuf/attrpubapi_v1/AttributeDisplayResponse_pb2.py new file mode 100644 index 00000000..5815558b --- /dev/null +++ b/yoti_python_sdk/protobuf/attrpubapi_v1/AttributeDisplayResponse_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: attrpubapi_v1/AttributeDisplayResponse.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n,attrpubapi_v1/AttributeDisplayResponse.proto\x12\x17yoti.core.attrpubapi_v1\"(\n\x18\x41ttributeDisplayResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x42v\n\x16\x63om.yoti.attrpubapi_v1B\x1d\x41ttributeDisplayResponseProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\xba\x02\rAttrpubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'AttributeDisplayResponse_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\026com.yoti.attrpubapi_v1B\035AttributeDisplayResponseProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\272\002\rAttrpubapiV1_' + _ATTRIBUTEDISPLAYRESPONSE._serialized_start=73 + _ATTRIBUTEDISPLAYRESPONSE._serialized_end=113 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attrpubapi_v1/Attribute_pb2.py b/yoti_python_sdk/protobuf/attrpubapi_v1/Attribute_pb2.py new file mode 100644 index 00000000..b7f52041 --- /dev/null +++ b/yoti_python_sdk/protobuf/attrpubapi_v1/Attribute_pb2.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: attrpubapi_v1/Attribute.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x61ttrpubapi_v1/Attribute.proto\x12\x17yoti.core.attrpubapi_v1\"\x9a\x01\n\nMultiValue\x12\x39\n\x06values\x18\x01 \x03(\x0b\x32).yoti.core.attrpubapi_v1.MultiValue.Value\x1aQ\n\x05Value\x12:\n\x0c\x63ontent_type\x18\x01 \x01(\x0e\x32$.yoti.core.attrpubapi_v1.ContentType\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"\x9f\x02\n\tAttribute\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12:\n\x0c\x63ontent_type\x18\x03 \x01(\x0e\x32$.yoti.core.attrpubapi_v1.ContentType\x12\x30\n\x07\x61nchors\x18\x04 \x03(\x0b\x32\x1f.yoti.core.attrpubapi_v1.Anchor\x12<\n\ruser_metadata\x18\x05 \x03(\x0b\x32%.yoti.core.attrpubapi_v1.UserMetadata\x12\x33\n\x08metadata\x18\x06 \x01(\x0b\x32!.yoti.core.attrpubapi_v1.Metadata\x12\x14\n\x0c\x65phemeral_id\x18\x07 \x01(\t\"\xa0\x01\n\x08Metadata\x12\x1d\n\x15superseded_time_stamp\x18\x01 \x01(\t\x12\x11\n\tdeletable\x18\x02 \x01(\x08\x12\x12\n\nreceipt_id\x18\x03 \x01(\x0c\x12\x0f\n\x07revoked\x18\x04 \x01(\x08\x12\x0e\n\x06locked\x18\x05 \x01(\x08\x12\x1c\n\x14\x65xtended_expiry_date\x18\x06 \x01(\t\x12\x0f\n\x07\x64\x65leted\x18\x07 \x01(\x08\"\xb3\x01\n\x06\x41nchor\x12\x15\n\rartifact_link\x18\x01 \x01(\x0c\x12\x1b\n\x13origin_server_certs\x18\x02 \x03(\x0c\x12\x1a\n\x12\x61rtifact_signature\x18\x03 \x01(\x0c\x12\x10\n\x08sub_type\x18\x04 \x01(\t\x12\x11\n\tsignature\x18\x05 \x01(\x0c\x12\x19\n\x11signed_time_stamp\x18\x06 \x01(\x0c\x12\x19\n\x11\x61ssociated_source\x18\x07 \x01(\t\"*\n\x0cUserMetadata\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t*u\n\x0b\x43ontentType\x12\r\n\tUNDEFINED\x10\x00\x12\n\n\x06STRING\x10\x01\x12\x08\n\x04JPEG\x10\x02\x12\x08\n\x04\x44\x41TE\x10\x03\x12\x07\n\x03PNG\x10\x04\x12\x08\n\x04JSON\x10\x05\x12\x0f\n\x0bMULTI_VALUE\x10\x06\x12\x07\n\x03INT\x10\x07\x12\n\n\x06JWT_VC\x10\x08\x42g\n\x16\x63om.yoti.attrpubapi_v1B\x0e\x41ttributeProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\xba\x02\rAttrpubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Attribute_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\026com.yoti.attrpubapi_v1B\016AttributeProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\272\002\rAttrpubapiV1_' + _CONTENTTYPE._serialized_start=894 + _CONTENTTYPE._serialized_end=1011 + _MULTIVALUE._serialized_start=59 + _MULTIVALUE._serialized_end=213 + _MULTIVALUE_VALUE._serialized_start=132 + _MULTIVALUE_VALUE._serialized_end=213 + _ATTRIBUTE._serialized_start=216 + _ATTRIBUTE._serialized_end=503 + _METADATA._serialized_start=506 + _METADATA._serialized_end=666 + _ANCHOR._serialized_start=669 + _ANCHOR._serialized_end=848 + _USERMETADATA._serialized_start=850 + _USERMETADATA._serialized_end=892 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attrpubapi_v1/DeleteSuperseded_pb2.py b/yoti_python_sdk/protobuf/attrpubapi_v1/DeleteSuperseded_pb2.py new file mode 100644 index 00000000..db833fd9 --- /dev/null +++ b/yoti_python_sdk/protobuf/attrpubapi_v1/DeleteSuperseded_pb2.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: attrpubapi_v1/DeleteSuperseded.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from yoti_python_sdk.protobuf.compubapi_v1 import Metadata_pb2 as compubapi__v1_dot_Metadata__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n$attrpubapi_v1/DeleteSuperseded.proto\x12\x17yoti.core.attrpubapi_v1\x1a\x1b\x63ompubapi_v1/Metadata.proto\"\x9d\x02\n\x17\x44\x65leteSupersededRequest\x12\x12\n\ncredential\x18\x01 \x01(\x0c\x12\x13\n\x0bwrapped_key\x18\x02 \x01(\x0c\x12\x16\n\x0e\x61uth_data_list\x18\x03 \x01(\x0c\x12\x15\n\rattribute_ids\x18\x04 \x03(\x0c\x12\x1c\n\x14\x61ttributes_backup_id\x18\x05 \x01(\x0c\x12\x1f\n\x17\x65ncrypted_attribute_ids\x18\x06 \x03(\x0c\x12:\n\x0f\x64\x65vice_metadata\x18\xc0\x0c \x01(\x0b\x32 .yoti.core.compubapi_v1.Metadata\x12\x16\n\rfeature_flags\x18\xc1\x0c \x01(\x06\x12\x17\n\x0e\x63orrelation_id\x18\xc2\x0c \x01(\tBn\n\x16\x63om.yoti.attrpubapi_v1B\x15\x44\x65leteSupersededProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\xba\x02\rAttrpubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'DeleteSuperseded_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\026com.yoti.attrpubapi_v1B\025DeleteSupersededProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\272\002\rAttrpubapiV1_' + _DELETESUPERSEDEDREQUEST._serialized_start=95 + _DELETESUPERSEDEDREQUEST._serialized_end=380 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attrpubapi_v1/Delete_pb2.py b/yoti_python_sdk/protobuf/attrpubapi_v1/Delete_pb2.py new file mode 100644 index 00000000..c1afae1c --- /dev/null +++ b/yoti_python_sdk/protobuf/attrpubapi_v1/Delete_pb2.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: attrpubapi_v1/Delete.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from yoti_python_sdk.protobuf.compubapi_v1 import Metadata_pb2 as compubapi__v1_dot_Metadata__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x61ttrpubapi_v1/Delete.proto\x12\x17yoti.core.attrpubapi_v1\x1a\x1b\x63ompubapi_v1/Metadata.proto\"\x93\x02\n\rDeleteRequest\x12\x12\n\ncredential\x18\x01 \x01(\x0c\x12\x13\n\x0bwrapped_key\x18\x02 \x01(\x0c\x12\x16\n\x0e\x61uth_data_list\x18\x03 \x01(\x0c\x12\x15\n\rattribute_ids\x18\x04 \x03(\x0c\x12\x1c\n\x14\x61ttributes_backup_id\x18\x05 \x01(\x0c\x12\x1f\n\x17\x65ncrypted_attribute_ids\x18\x06 \x03(\x0c\x12:\n\x0f\x64\x65vice_metadata\x18\xc0\x0c \x01(\x0b\x32 .yoti.core.compubapi_v1.Metadata\x12\x16\n\rfeature_flags\x18\xc1\x0c \x01(\x06\x12\x17\n\x0e\x63orrelation_id\x18\xc2\x0c \x01(\tBd\n\x16\x63om.yoti.attrpubapi_v1B\x0b\x44\x65leteProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\xba\x02\rAttrpubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Delete_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\026com.yoti.attrpubapi_v1B\013DeleteProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\272\002\rAttrpubapiV1_' + _DELETEREQUEST._serialized_start=85 + _DELETEREQUEST._serialized_end=360 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attrpubapi_v1/List_pb2.py b/yoti_python_sdk/protobuf/attrpubapi_v1/List_pb2.py new file mode 100644 index 00000000..e2e15974 --- /dev/null +++ b/yoti_python_sdk/protobuf/attrpubapi_v1/List_pb2.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: attrpubapi_v1/List.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import Attribute_pb2 as attrpubapi__v1_dot_Attribute__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x18\x61ttrpubapi_v1/List.proto\x12\x17yoti.core.attrpubapi_v1\x1a\x1d\x61ttrpubapi_v1/Attribute.proto\"]\n\x0e\x41ttributeAndId\x12\x35\n\tattribute\x18\x01 \x01(\x0b\x32\".yoti.core.attrpubapi_v1.Attribute\x12\x14\n\x0c\x61ttribute_id\x18\x02 \x01(\x0c\"\\\n\x12\x41ttributeAndIdList\x12\x46\n\x15\x61ttribute_and_id_list\x18\x01 \x03(\x0b\x32\'.yoti.core.attrpubapi_v1.AttributeAndId\"G\n\rAttributeList\x12\x36\n\nattributes\x18\x01 \x03(\x0b\x32\".yoti.core.attrpubapi_v1.AttributeBk\n\x16\x63om.yoti.attrpubapi_v1B\x12\x41ttributeListProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\xba\x02\rAttrpubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'List_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\026com.yoti.attrpubapi_v1B\022AttributeListProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\272\002\rAttrpubapiV1_' + _ATTRIBUTEANDID._serialized_start=84 + _ATTRIBUTEANDID._serialized_end=177 + _ATTRIBUTEANDIDLIST._serialized_start=179 + _ATTRIBUTEANDIDLIST._serialized_end=271 + _ATTRIBUTELIST._serialized_start=273 + _ATTRIBUTELIST._serialized_end=344 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attrpubapi_v1/Refresh_pb2.py b/yoti_python_sdk/protobuf/attrpubapi_v1/Refresh_pb2.py new file mode 100644 index 00000000..4117acdc --- /dev/null +++ b/yoti_python_sdk/protobuf/attrpubapi_v1/Refresh_pb2.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: attrpubapi_v1/Refresh.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from yoti_python_sdk.protobuf.devicepubapi_v1 import StaticCredentialAuth_pb2 as devicepubapi__v1_dot_StaticCredentialAuth__pb2 +from yoti_python_sdk.protobuf.compubapi_v1 import Metadata_pb2 as compubapi__v1_dot_Metadata__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x61ttrpubapi_v1/Refresh.proto\x12\x17yoti.core.attrpubapi_v1\x1a*devicepubapi_v1/StaticCredentialAuth.proto\x1a\x1b\x63ompubapi_v1/Metadata.proto\"\xa7\x02\n\x0eRefreshRequest\x12\x12\n\ncredential\x18\x01 \x01(\x0c\x12\x13\n\x0bwrapped_key\x18\x02 \x01(\x0c\x12\x16\n\x0e\x61uth_data_list\x18\x03 \x01(\x0c\x12\x15\n\rattribute_ids\x18\x04 \x03(\x0c\x12:\n\x0f\x64\x65vice_metadata\x18\xc0\x0c \x01(\x0b\x32 .yoti.core.compubapi_v1.Metadata\x12\x16\n\rfeature_flags\x18\xc1\x0c \x01(\x06\x12\x17\n\x0e\x63orrelation_id\x18\xc2\x0c \x01(\t\x12P\n\x16static_credential_auth\x18\xb8\x17 \x01(\x0b\x32/.yoti.core.devicepubapi_v1.StaticCredentialAuth\"\xa3\x01\n\x0fRefreshResponse\x12\x41\n\x08statuses\x18\x01 \x03(\x0e\x32/.yoti.core.attrpubapi_v1.RefreshResponse.Status\"M\n\x06Status\x12\r\n\tNO_CHANGE\x10\x00\x12\x0b\n\x07REVOKED\x10\x01\x12\x0b\n\x07UPDATED\x10\x02\x12\r\n\tNOT_FOUND\x10\x03\x12\x0b\n\x07\x45XPIRED\x10\x04\x42o\n\x16\x63om.yoti.attrpubapi_v1B\x16RefreshAttributesProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\xba\x02\rAttrpubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Refresh_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\026com.yoti.attrpubapi_v1B\026RefreshAttributesProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\272\002\rAttrpubapiV1_' + _REFRESHREQUEST._serialized_start=130 + _REFRESHREQUEST._serialized_end=425 + _REFRESHRESPONSE._serialized_start=428 + _REFRESHRESPONSE._serialized_end=591 + _REFRESHRESPONSE_STATUS._serialized_start=514 + _REFRESHRESPONSE_STATUS._serialized_end=591 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attrpubapi_v1/Signing_pb2.py b/yoti_python_sdk/protobuf/attrpubapi_v1/Signing_pb2.py new file mode 100644 index 00000000..1391a9de --- /dev/null +++ b/yoti_python_sdk/protobuf/attrpubapi_v1/Signing_pb2.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: attrpubapi_v1/Signing.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import Attribute_pb2 as attrpubapi__v1_dot_Attribute__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x61ttrpubapi_v1/Signing.proto\x12\x17yoti.core.attrpubapi_v1\x1a\x1d\x61ttrpubapi_v1/Attribute.proto\"\xb4\x01\n\x10\x41ttributeSigning\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\x12:\n\x0c\x63ontent_type\x18\x03 \x01(\x0e\x32$.yoti.core.attrpubapi_v1.ContentType\x12\x1a\n\x12\x61rtifact_signature\x18\x04 \x01(\x0c\x12\x10\n\x08sub_type\x18\x05 \x01(\t\x12\x19\n\x11\x61ssociated_source\x18\x07 \x01(\tBn\n\x16\x63om.yoti.attrpubapi_v1B\x15\x41ttributeSigningProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\xba\x02\rAttrpubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Signing_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\026com.yoti.attrpubapi_v1B\025AttributeSigningProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\272\002\rAttrpubapiV1_' + _ATTRIBUTESIGNING._serialized_start=88 + _ATTRIBUTESIGNING._serialized_end=268 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attrpubapi_v1/Unlock_pb2.py b/yoti_python_sdk/protobuf/attrpubapi_v1/Unlock_pb2.py new file mode 100644 index 00000000..699460be --- /dev/null +++ b/yoti_python_sdk/protobuf/attrpubapi_v1/Unlock_pb2.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: attrpubapi_v1/Unlock.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from yoti_python_sdk.protobuf.devicepubapi_v1 import StaticCredentialAuth_pb2 as devicepubapi__v1_dot_StaticCredentialAuth__pb2 +from yoti_python_sdk.protobuf.compubapi_v1 import Metadata_pb2 as compubapi__v1_dot_Metadata__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x61ttrpubapi_v1/Unlock.proto\x12\x17yoti.core.attrpubapi_v1\x1a*devicepubapi_v1/StaticCredentialAuth.proto\x1a\x1b\x63ompubapi_v1/Metadata.proto\"\xda\x02\n\rUnlockRequest\x12\x12\n\ncredential\x18\x01 \x01(\x0c\x12\x13\n\x0bwrapped_key\x18\x02 \x01(\x0c\x12\x16\n\x0e\x61uth_data_list\x18\x03 \x01(\x0c\x12\x14\n\x0c\x61ttribute_id\x18\x04 \x01(\x0c\x12\x33\n\x0binformation\x18\x05 \x03(\x0b\x32\x1e.yoti.core.attrpubapi_v1.Entry\x12:\n\x0f\x64\x65vice_metadata\x18\xc0\x0c \x01(\x0b\x32 .yoti.core.compubapi_v1.Metadata\x12\x16\n\rfeature_flags\x18\xc1\x0c \x01(\x06\x12\x17\n\x0e\x63orrelation_id\x18\xc2\x0c \x01(\t\x12P\n\x16static_credential_auth\x18\xb8\x17 \x01(\x0b\x32/.yoti.core.devicepubapi_v1.StaticCredentialAuth\"$\n\x05\x45ntry\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x93\x01\n\x0eUnlockResponse\x12>\n\x06result\x18\x01 \x01(\x0e\x32..yoti.core.attrpubapi_v1.UnlockResponse.Result\"A\n\x06Result\x12\r\n\tUNDEFINED\x10\x00\x12\x0e\n\nSUCCESSFUL\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\x12\x0c\n\x08UNLOCKED\x10\x03\x42\x64\n\x16\x63om.yoti.attrpubapi_v1B\x0bUnlockProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\xba\x02\rAttrpubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Unlock_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\026com.yoti.attrpubapi_v1B\013UnlockProtoZ-go.internal.yoti.com/proto/core/attrpubapi_v1\272\002\rAttrpubapiV1_' + _UNLOCKREQUEST._serialized_start=129 + _UNLOCKREQUEST._serialized_end=475 + _ENTRY._serialized_start=477 + _ENTRY._serialized_end=513 + _UNLOCKRESPONSE._serialized_start=516 + _UNLOCKRESPONSE._serialized_end=663 + _UNLOCKRESPONSE_RESULT._serialized_start=598 + _UNLOCKRESPONSE_RESULT._serialized_end=663 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/attrpubapi_v1/__init__.py b/yoti_python_sdk/protobuf/attrpubapi_v1/__init__.py new file mode 100644 index 00000000..40a96afc --- /dev/null +++ b/yoti_python_sdk/protobuf/attrpubapi_v1/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/yoti_python_sdk/protobuf/common_public_api/EncryptedData_pb2.py b/yoti_python_sdk/protobuf/common_public_api/EncryptedData_pb2.py deleted file mode 100644 index a70e88d3..00000000 --- a/yoti_python_sdk/protobuf/common_public_api/EncryptedData_pb2.py +++ /dev/null @@ -1,77 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: EncryptedData.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='EncryptedData.proto', - package='compubapi_v1', - syntax='proto3', - serialized_options=_b('\n$com.yoti.api.client.spi.remote.protoB\022EncryptedDataProtoZ\014yotiprotocom\252\002\031Yoti.Auth.ProtoBuf.Common\312\002\tCompubapi'), - serialized_pb=_b('\n\x13\x45ncryptedData.proto\x12\x0c\x63ompubapi_v1\"0\n\rEncryptedData\x12\n\n\x02iv\x18\x01 \x01(\x0c\x12\x13\n\x0b\x63ipher_text\x18\x02 \x01(\x0c\x42p\n$com.yoti.api.client.spi.remote.protoB\x12\x45ncryptedDataProtoZ\x0cyotiprotocom\xaa\x02\x19Yoti.Auth.ProtoBuf.Common\xca\x02\tCompubapib\x06proto3') -) - - - - -_ENCRYPTEDDATA = _descriptor.Descriptor( - name='EncryptedData', - full_name='compubapi_v1.EncryptedData', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='iv', full_name='compubapi_v1.EncryptedData.iv', index=0, - number=1, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='cipher_text', full_name='compubapi_v1.EncryptedData.cipher_text', index=1, - number=2, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=37, - serialized_end=85, -) - -DESCRIPTOR.message_types_by_name['EncryptedData'] = _ENCRYPTEDDATA -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -EncryptedData = _reflection.GeneratedProtocolMessageType('EncryptedData', (_message.Message,), dict( - DESCRIPTOR = _ENCRYPTEDDATA, - __module__ = 'EncryptedData_pb2' - # @@protoc_insertion_point(class_scope:compubapi_v1.EncryptedData) - )) -_sym_db.RegisterMessage(EncryptedData) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/common_public_api/EncryptedData_pb2_grpc.py b/yoti_python_sdk/protobuf/common_public_api/EncryptedData_pb2_grpc.py deleted file mode 100644 index a8943526..00000000 --- a/yoti_python_sdk/protobuf/common_public_api/EncryptedData_pb2_grpc.py +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - diff --git a/yoti_python_sdk/protobuf/common_public_api/SignedTimestamp_pb2.py b/yoti_python_sdk/protobuf/common_public_api/SignedTimestamp_pb2.py deleted file mode 100644 index e536b0ab..00000000 --- a/yoti_python_sdk/protobuf/common_public_api/SignedTimestamp_pb2.py +++ /dev/null @@ -1,105 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: SignedTimestamp.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='SignedTimestamp.proto', - package='compubapi_v1', - syntax='proto3', - serialized_options=_b('\n$com.yoti.api.client.spi.remote.protoB\024SignedTimestampProtoZ\014yotiprotocom\252\002\031Yoti.Auth.ProtoBuf.Common\312\002\tCompubapi'), - serialized_pb=_b('\n\x15SignedTimestamp.proto\x12\x0c\x63ompubapi_v1\"\x9b\x01\n\x0fSignedTimestamp\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\x11\n\ttimestamp\x18\x02 \x01(\x04\x12\x16\n\x0emessage_digest\x18\x03 \x01(\x0c\x12\x14\n\x0c\x63hain_digest\x18\x04 \x01(\x0c\x12\x1a\n\x12\x63hain_digest_skip1\x18\x05 \x01(\x0c\x12\x1a\n\x12\x63hain_digest_skip2\x18\x06 \x01(\x0c\x42r\n$com.yoti.api.client.spi.remote.protoB\x14SignedTimestampProtoZ\x0cyotiprotocom\xaa\x02\x19Yoti.Auth.ProtoBuf.Common\xca\x02\tCompubapib\x06proto3') -) - - - - -_SIGNEDTIMESTAMP = _descriptor.Descriptor( - name='SignedTimestamp', - full_name='compubapi_v1.SignedTimestamp', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='version', full_name='compubapi_v1.SignedTimestamp.version', index=0, - number=1, type=5, cpp_type=1, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='timestamp', full_name='compubapi_v1.SignedTimestamp.timestamp', index=1, - number=2, type=4, cpp_type=4, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='message_digest', full_name='compubapi_v1.SignedTimestamp.message_digest', index=2, - number=3, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='chain_digest', full_name='compubapi_v1.SignedTimestamp.chain_digest', index=3, - number=4, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='chain_digest_skip1', full_name='compubapi_v1.SignedTimestamp.chain_digest_skip1', index=4, - number=5, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='chain_digest_skip2', full_name='compubapi_v1.SignedTimestamp.chain_digest_skip2', index=5, - number=6, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=40, - serialized_end=195, -) - -DESCRIPTOR.message_types_by_name['SignedTimestamp'] = _SIGNEDTIMESTAMP -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -SignedTimestamp = _reflection.GeneratedProtocolMessageType('SignedTimestamp', (_message.Message,), dict( - DESCRIPTOR = _SIGNEDTIMESTAMP, - __module__ = 'SignedTimestamp_pb2' - # @@protoc_insertion_point(class_scope:compubapi_v1.SignedTimestamp) - )) -_sym_db.RegisterMessage(SignedTimestamp) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/common_public_api/SignedTimestamp_pb2_grpc.py b/yoti_python_sdk/protobuf/common_public_api/SignedTimestamp_pb2_grpc.py deleted file mode 100644 index a8943526..00000000 --- a/yoti_python_sdk/protobuf/common_public_api/SignedTimestamp_pb2_grpc.py +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - diff --git a/yoti_python_sdk/protobuf/compubapi_v1/Address_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/Address_pb2.py new file mode 100644 index 00000000..54546592 --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/Address_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/Address.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x63ompubapi_v1/Address.proto\x12\x16yoti.core.compubapi_v1\"\xf4\x03\n\x07\x41\x64\x64ress\x12\x16\n\x0e\x61\x64\x64ress_format\x18\x01 \x01(\r\x12\x0f\n\x07\x63\x61re_of\x18\x02 \x01(\t\x12\x14\n\x0csub_building\x18\x03 \x01(\t\x12\x17\n\x0f\x62uilding_number\x18\x04 \x01(\t\x12\x10\n\x08\x62uilding\x18\x05 \x01(\t\x12\x0e\n\x06street\x18\x06 \x01(\t\x12\x10\n\x08landmark\x18\x07 \x01(\t\x12\x15\n\raddress_line1\x18\x08 \x01(\t\x12\x15\n\raddress_line2\x18\t \x01(\t\x12\x15\n\raddress_line3\x18\n \x01(\t\x12\x15\n\raddress_line4\x18\x0b \x01(\t\x12\x15\n\raddress_line5\x18\x0c \x01(\t\x12\x15\n\raddress_line6\x18\r \x01(\t\x12\x10\n\x08locality\x18\x0e \x01(\t\x12\x11\n\ttown_city\x18\x0f \x01(\t\x12\x13\n\x0bsubdistrict\x18\x10 \x01(\t\x12\x10\n\x08\x64istrict\x18\x11 \x01(\t\x12\r\n\x05state\x18\x12 \x01(\t\x12\x13\n\x0bpostal_code\x18\x13 \x01(\t\x12\x13\n\x0bpost_office\x18\x14 \x01(\t\x12\x13\n\x0b\x63ountry_iso\x18\x15 \x01(\t\x12\x0f\n\x07\x63ountry\x18\x16 \x01(\t\x12\x19\n\x11\x66ormatted_address\x18\x17 \x01(\t\x12\r\n\x05udprn\x18\x18 \x01(\tBb\n\x15\x63om.yoti.compubapi_v1B\x0c\x41\x64\x64ressProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Address_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\014AddressProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _ADDRESS._serialized_start=55 + _ADDRESS._serialized_end=555 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/AdminReasonCode_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/AdminReasonCode_pb2.py new file mode 100644 index 00000000..caa033cb --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/AdminReasonCode_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/AdminReasonCode.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"compubapi_v1/AdminReasonCode.proto\x12\x16yoti.core.compubapi_v1\"A\n\x0f\x41\x64minReasonCode\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x10\n\x08\x63\x61tegory\x18\x02 \x01(\t\x12\x0e\n\x06reason\x18\x03 \x01(\tBj\n\x15\x63om.yoti.compubapi_v1B\x14\x41\x64minReasonCodeProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'AdminReasonCode_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\024AdminReasonCodeProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _ADMINREASONCODE._serialized_start=62 + _ADMINREASONCODE._serialized_end=127 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/AttributeLink_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/AttributeLink_pb2.py new file mode 100644 index 00000000..9bf759a7 --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/AttributeLink_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/AttributeLink.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n compubapi_v1/AttributeLink.proto\x12\x16yoti.core.compubapi_v1\"?\n\rAttributeLink\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\n\n\x02id\x18\x02 \x01(\x0c\x12\x14\n\x0c\x65phemeral_id\x18\x03 \x01(\tBh\n\x15\x63om.yoti.compubapi_v1B\x12\x41ttributeLinkProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'AttributeLink_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\022AttributeLinkProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _ATTRIBUTELINK._serialized_start=60 + _ATTRIBUTELINK._serialized_end=123 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/AttributeMigration_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/AttributeMigration_pb2.py new file mode 100644 index 00000000..9c6c8898 --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/AttributeMigration_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/AttributeMigration.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%compubapi_v1/AttributeMigration.proto\x12\x16yoti.core.compubapi_v1\"2\n\x19\x41ttributeMigrationPayload\x12\x15\n\rattribute_ids\x18\x01 \x03(\x0c\x42t\n\x15\x63om.yoti.compubapi_v1B\x1e\x41ttributeMigrationPayloadProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'AttributeMigration_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\036AttributeMigrationPayloadProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _ATTRIBUTEMIGRATIONPAYLOAD._serialized_start=65 + _ATTRIBUTEMIGRATIONPAYLOAD._serialized_end=115 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/ChipInfo_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/ChipInfo_pb2.py new file mode 100644 index 00000000..2f43b3e2 --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/ChipInfo_pb2.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/ChipInfo.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x63ompubapi_v1/ChipInfo.proto\x12\x0c\x63ompubapi_v1\"d\n\x08\x43hipInfo\x12)\n\x04type\x18\x01 \x01(\x0e\x32\x1b.compubapi_v1.ChipInfo.Type\x12\n\n\x02id\x18\x02 \x01(\t\"!\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12\n\n\x06MULTOS\x10\x01\x42T\n\x15\x63om.yoti.compubapi_v1Z,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ChipInfo_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1Z,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _CHIPINFO._serialized_start=45 + _CHIPINFO._serialized_end=145 + _CHIPINFO_TYPE._serialized_start=112 + _CHIPINFO_TYPE._serialized_end=145 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/DataPrivacy_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/DataPrivacy_pb2.py new file mode 100644 index 00000000..5159b396 --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/DataPrivacy_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/DataPrivacy.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x63ompubapi_v1/DataPrivacy.proto\x12\x16yoti.core.compubapi_v1*q\n\x0b\x44\x61taPrivacy\x12\x1a\n\x16\x44\x41TA_PRIVACY_UNDEFINED\x10\x00\x12$\n DATA_PRIVACY_CONTROLLERS_ALLOWED\x10\x01\x12 \n\x1c\x44\x41TA_PRIVACY_PROCESSORS_ONLY\x10\x02\x42\x66\n\x15\x63om.yoti.compubapi_v1B\x10\x44\x61taPrivacyProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'DataPrivacy_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\020DataPrivacyProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _DATAPRIVACY._serialized_start=58 + _DATAPRIVACY._serialized_end=171 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/DocumentFields_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/DocumentFields_pb2.py new file mode 100644 index 00000000..52aa20bb --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/DocumentFields_pb2.py @@ -0,0 +1,34 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/DocumentFields.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import Address_pb2 as compubapi__v1_dot_Address__pb2 +from . import MRZ_pb2 as compubapi__v1_dot_MRZ__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n!compubapi_v1/DocumentFields.proto\x12\x16yoti.core.compubapi_v1\x1a\x1a\x63ompubapi_v1/Address.proto\x1a\x16\x63ompubapi_v1/MRZ.proto\"\xe4\x07\n\x0e\x44ocumentFields\x12\x11\n\tfull_name\x18\x01 \x01(\t\x12\x15\n\rdate_of_birth\x18\x02 \x01(\t\x12\x13\n\x0bnationality\x18\x03 \x01(\t\x12\x13\n\x0bgiven_names\x18\x04 \x01(\t\x12\x12\n\nfirst_name\x18\x05 \x01(\t\x12\x13\n\x0bmiddle_name\x18\x06 \x01(\t\x12\x13\n\x0b\x66\x61mily_name\x18\x07 \x01(\t\x12\x16\n\x0eplace_of_birth\x18\x08 \x01(\t\x12\x18\n\x10\x63ountry_of_birth\x18\t \x01(\t\x12\x0e\n\x06gender\x18\n \x01(\t\x12\x13\n\x0bname_prefix\x18\x0b \x01(\t\x12\x13\n\x0bname_suffix\x18\x0c \x01(\t\x12\x18\n\x10\x66irst_name_alias\x18\r \x01(\t\x12\x19\n\x11middle_name_alias\x18\x0e \x01(\t\x12\x19\n\x11\x66\x61mily_name_alias\x18\x0f \x01(\t\x12\x0e\n\x06weight\x18\x10 \x01(\t\x12\x0e\n\x06height\x18\x11 \x01(\t\x12\x11\n\teye_color\x18\x12 \x01(\t\x12\x42\n\x19structured_postal_address\x18\x13 \x01(\x0b\x32\x1f.yoti.core.compubapi_v1.Address\x12\x15\n\rdocument_type\x18\x14 \x01(\t\x12\x17\n\x0fissuing_country\x18\x15 \x01(\t\x12\x17\n\x0f\x64ocument_number\x18\x16 \x01(\t\x12\x17\n\x0f\x65xpiration_date\x18\x17 \x01(\t\x12\x15\n\rdate_of_issue\x18\x18 \x01(\t\x12\x19\n\x11issuing_authority\x18\x19 \x01(\t\x12(\n\x03mrz\x18\x1a \x01(\x0b\x32\x1b.yoti.core.compubapi_v1.MRZ\x12\x14\n\x0corganisation\x18\x1b \x01(\t\x12&\n\x1epersonal_identification_number\x18\x1c \x01(\t\x12\x13\n\x0bparent_name\x18\x1e \x01(\t\x12\x1d\n\x15\x64riving_licence_class\x18\x1f \x01(\t\x12(\n driving_licence_restriction_code\x18 \x01(\t\x12\x13\n\x0bprovisional\x18\" \x01(\x08\x12\x16\n\x0eplace_of_issue\x18# \x01(\t\x12 \n\x18\x64riving_licence_endorsed\x18$ \x01(\t\x12\x13\n\x0b\x63\x61rd_number\x18% \x01(\t\x12\x43\n\x11\x64ocument_template\x18& \x01(\x0b\x32(.yoti.core.compubapi_v1.DocumentTemplateJ\x04\x08\x1d\x10\x1eJ\x04\x08!\x10\"\"C\n\x10\x44ocumentTemplate\x12\x17\n\x0f\x66ront_page_name\x18\x01 \x01(\t\x12\x16\n\x0e\x62\x61\x63k_page_name\x18\x02 \x01(\t\"W\n\x16\x45xpandedDocumentFields\x12=\n\x06\x66ields\x18\x01 \x03(\x0b\x32-.yoti.core.compubapi_v1.ExpandedDocumentField\"\x86\x01\n\x15\x45xpandedDocumentField\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x0e\n\x06locale\x18\x03 \x01(\t\x12\x0e\n\x06source\x18\x04 \x01(\t\x12\x14\n\x0cis_non_latin\x18\x05 \x01(\x08\x12\x1a\n\x12is_transliteration\x18\x06 \x01(\x08\x42i\n\x15\x63om.yoti.compubapi_v1B\x13\x44ocumentFieldsProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'DocumentFields_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\023DocumentFieldsProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _DOCUMENTFIELDS._serialized_start=114 + _DOCUMENTFIELDS._serialized_end=1110 + _DOCUMENTTEMPLATE._serialized_start=1112 + _DOCUMENTTEMPLATE._serialized_end=1179 + _EXPANDEDDOCUMENTFIELDS._serialized_start=1181 + _EXPANDEDDOCUMENTFIELDS._serialized_end=1268 + _EXPANDEDDOCUMENTFIELD._serialized_start=1271 + _EXPANDEDDOCUMENTFIELD._serialized_end=1405 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/DocumentTypes_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/DocumentTypes_pb2.py new file mode 100644 index 00000000..d0340325 --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/DocumentTypes_pb2.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/DocumentTypes.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n compubapi_v1/DocumentTypes.proto\x12\x16yoti.core.compubapi_v1\"\xcc\x03\n\nIdDocument\x12\x35\n\x04type\x18\x01 \x01(\x0e\x32\'.yoti.core.compubapi_v1.IdDocument.Type\x12\x18\n\x10\x63ountry_iso_code\x18\x02 \x01(\t\"\xec\x02\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12\x0c\n\x08PASSPORT\x10\x01\x12\x13\n\x0f\x44RIVING_LICENCE\x10\x02\x12\x0f\n\x0bNATIONAL_ID\x10\x03\x12\x0c\n\x08STATE_ID\x10\x04\x12\t\n\x05MYKAD\x10\x05\x12\x0b\n\x07\x41\x41\x44HAAR\x10\x06\x12\x07\n\x03PAN\x10\x07\x12\x0f\n\x0bSSS_ID_CARD\x10\x08\x12\r\n\tPOSTAL_ID\x10\t\x12\x14\n\x10RESIDENCE_PERMIT\x10\n\x12\x0c\n\x08VOTER_ID\x10\x0b\x12\x13\n\x0fPROFESSIONAL_ID\x10\x0c\x12\x0e\n\nNEXUS_CARD\x10\r\x12\x0f\n\x0bHEALTH_CARD\x10\x0e\x12\x0e\n\nPOSTOFFICE\x10\x0f\x12\x0e\n\nPHILSYS_ID\x10\x10\x12\x08\n\x04UMID\x10\x11\x12\x0f\n\x0b\x43ITIZENCARD\x10\x12\x12\r\n\tYOUNGSCOT\x10\x13\x12\x08\n\x04SCIS\x10\x14\x12\x13\n\x0fTRAVEL_DOCUMENT\x10\x15\x12\x0f\n\x0bWORK_PERMIT\x10\x16\"\x98\x05\n\x15SupplementaryDocument\x12@\n\x04type\x18\x01 \x01(\x0e\x32\x32.yoti.core.compubapi_v1.SupplementaryDocument.Type\x12\x18\n\x10\x63ountry_iso_code\x18\x02 \x01(\t\"\xa2\x04\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12\x10\n\x0cUTILITY_BILL\x10\x01\x12\x14\n\x10\x43OUNCIL_TAX_BILL\x10\x02\x12\x0e\n\nPHONE_BILL\x10\x03\x12\x12\n\x0e\x42\x41NK_STATEMENT\x10\x04\x12\x14\n\x10\x46IREARMS_LICENCE\x10\x05\x12\x11\n\rMILITARY_CARD\x10\x06\x12\x36\n2BIRTH_CERTIFICATE_ISSUED_WITHIN_12_MONTHS_OF_BIRTH\x10\x07\x12\x15\n\x11\x42IRTH_CERTIFICATE\x10\x08\x12\x18\n\x14\x41\x44OPTION_CERTIFICATE\x10\t\x12\x19\n\x15PAPER_DRIVING_LICENCE\x10\n\x12\x18\n\x14MARRIAGE_CERTIFICATE\x10\x0b\x12\x1a\n\x16\x41\x43\x43OUNT_OPENING_LETTER\x10\x0c\x12\x15\n\x11\x42\x45NEFIT_STATEMENT\x10\r\x12\x16\n\x12MORTGAGE_STATEMENT\x10\x0e\x12\x17\n\x13\x46INANCIAL_STATEMENT\x10\x0f\x12\x15\n\x11\x45MPLOYEE_TAX_FORM\x10\x10\x12!\n\x1d\x45MPLOYMENT_SPONSORSHIP_LETTER\x10\x11\x12\x18\n\x14IMMIGRATION_DOCUMENT\x10\x12\x12\x14\n\x10\x45\x44UCATION_LETTER\x10\x13\x12\r\n\tDVLA_FORM\x10\x14\x12\x1b\n\x17SUPPLEMENTARY_PASS_CARD\x10\x15\"l\n\x12IdDocumentSelector\x12\x15\n\rcountry_codes\x18\x01 \x03(\t\x12?\n\x0e\x64ocument_types\x18\x02 \x03(\x0e\x32\'.yoti.core.compubapi_v1.IdDocument.Type\"n\n\x1a\x44ocumentRestrictionsFilter\x12\x11\n\tallowlist\x18\x01 \x01(\x08\x12=\n\tdocuments\x18\x02 \x03(\x0b\x32*.yoti.core.compubapi_v1.IdDocumentSelectorBh\n\x15\x63om.yoti.compubapi_v1B\x12\x44ocumentTypesProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'DocumentTypes_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\022DocumentTypesProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _IDDOCUMENT._serialized_start=61 + _IDDOCUMENT._serialized_end=521 + _IDDOCUMENT_TYPE._serialized_start=157 + _IDDOCUMENT_TYPE._serialized_end=521 + _SUPPLEMENTARYDOCUMENT._serialized_start=524 + _SUPPLEMENTARYDOCUMENT._serialized_end=1188 + _SUPPLEMENTARYDOCUMENT_TYPE._serialized_start=642 + _SUPPLEMENTARYDOCUMENT_TYPE._serialized_end=1188 + _IDDOCUMENTSELECTOR._serialized_start=1190 + _IDDOCUMENTSELECTOR._serialized_end=1298 + _DOCUMENTRESTRICTIONSFILTER._serialized_start=1300 + _DOCUMENTRESTRICTIONSFILTER._serialized_end=1410 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/EncryptedData_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/EncryptedData_pb2.py new file mode 100644 index 00000000..704177f8 --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/EncryptedData_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/EncryptedData.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n compubapi_v1/EncryptedData.proto\x12\x16yoti.core.compubapi_v1\"0\n\rEncryptedData\x12\n\n\x02iv\x18\x01 \x01(\x0c\x12\x13\n\x0b\x63ipher_text\x18\x02 \x01(\x0c\x42h\n\x15\x63om.yoti.compubapi_v1B\x12\x45ncryptedDataProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'EncryptedData_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\022EncryptedDataProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _ENCRYPTEDDATA._serialized_start=60 + _ENCRYPTEDDATA._serialized_end=108 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/Hmac_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/Hmac_pb2.py new file mode 100644 index 00000000..89ca364d --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/Hmac_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/Hmac.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x17\x63ompubapi_v1/Hmac.proto\x12\x16yoti.core.compubapi_v1\"\x14\n\x04Hmac\x12\x0c\n\x04hmac\x18\x01 \x01(\x0c\x42_\n\x15\x63om.yoti.compubapi_v1B\tHmacProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Hmac_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\tHmacProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _HMAC._serialized_start=51 + _HMAC._serialized_end=71 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/IdentityProfilePreview_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/IdentityProfilePreview_pb2.py new file mode 100644 index 00000000..d8569ebb --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/IdentityProfilePreview_pb2.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/IdentityProfilePreview.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import IdentityProfileReport_pb2 as compubapi__v1_dot_IdentityProfileReport__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)compubapi_v1/IdentityProfilePreview.proto\x12\x16yoti.core.compubapi_v1\x1a(compubapi_v1/IdentityProfileReport.proto\"\xf4\x01\n\x16IdentityProfilePreview\x12J\n\x12schemes_compliance\x18\x01 \x03(\x0b\x32..yoti.core.compubapi_v1.SchemeComplianceReport\x12H\n\x12identity_assertion\x18\x02 \x01(\x0b\x32,.yoti.core.compubapi_v1.IdentityAssertionExt\x12\x44\n\x12\x63ompliance_reports\x18\x03 \x03(\x0b\x32(.yoti.core.compubapi_v1.ComplianceReportB=Z,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'IdentityProfilePreview_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'Z,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _IDENTITYPROFILEPREVIEW._serialized_start=112 + _IDENTITYPROFILEPREVIEW._serialized_end=356 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/IdentityProfileReport_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/IdentityProfileReport_pb2.py new file mode 100644 index 00000000..cb7085fc --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/IdentityProfileReport_pb2.py @@ -0,0 +1,66 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/IdentityProfileReport.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import Address_pb2 as compubapi__v1_dot_Address__pb2 +from . import DocumentFields_pb2 as compubapi__v1_dot_DocumentFields__pb2 +from . import IdentityProfile_pb2 as compubapi__v1_dot_IdentityProfile__pb2 +from . import UserProfile_pb2 as compubapi__v1_dot_UserProfile__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(compubapi_v1/IdentityProfileReport.proto\x12\x16yoti.core.compubapi_v1\x1a\x1a\x63ompubapi_v1/Address.proto\x1a!compubapi_v1/DocumentFields.proto\x1a\"compubapi_v1/IdentityProfile.proto\x1a\x1e\x63ompubapi_v1/UserProfile.proto\"\x87\x04\n\x15IdentityProfileReport\x12H\n\x12identity_assertion\x18\x01 \x01(\x0b\x32,.yoti.core.compubapi_v1.IdentityAssertionExt\x12G\n\x13verification_report\x18\x02 \x01(\x0b\x32*.yoti.core.compubapi_v1.VerificationReport\x12,\n\x05proof\x18\x03 \x01(\x0b\x32\x1d.yoti.core.compubapi_v1.Proof\x12K\n\x15\x61uthentication_report\x18\x04 \x01(\x0b\x32,.yoti.core.compubapi_v1.AuthenticationReport\x12H\n\x14profile_match_report\x18\x05 \x01(\x0b\x32*.yoti.core.compubapi_v1.ProfileMatchReport\x12H\n\x14verification_reports\x18\x06 \x03(\x0b\x32*.yoti.core.compubapi_v1.VerificationReport\x12L\n\x16\x61uthentication_reports\x18\x07 \x03(\x0b\x32,.yoti.core.compubapi_v1.AuthenticationReport\"\xac\x01\n\x14IdentityAssertionExt\x12<\n\x0c\x63urrent_name\x18\x01 \x01(\x0b\x32&.yoti.core.compubapi_v1.StructuredName\x12\x15\n\rdate_of_birth\x18\x02 \x01(\t\x12?\n\x0f\x63urrent_address\x18\x03 \x01(\x0b\x32&.yoti.core.compubapi_v1.CurrentAddress\"\x90\x04\n\x12VerificationReport\x12\x11\n\treport_id\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x12\n\nsubject_id\x18\x03 \x01(\t\x12\\\n\x14\x61\x64\x64ress_verification\x18\x04 \x01(\x0b\x32>.yoti.core.compubapi_v1.VerificationReport.AddressVerification\x12?\n\x0ftrust_framework\x18\x05 \x01(\x0e\x32&.yoti.core.compubapi_v1.TrustFramework\x12J\n\x12schemes_compliance\x18\x06 \x03(\x0b\x32..yoti.core.compubapi_v1.SchemeComplianceReport\x12\x43\n\x11\x61ssurance_process\x18\x07 \x01(\x0b\x32(.yoti.core.compubapi_v1.AssuranceProcess\x12?\n\x08\x65vidence\x18\x08 \x01(\x0b\x32-.yoti.core.compubapi_v1.EvidenceCollectionExt\x1aO\n\x13\x41\x64\x64ressVerification\x12 \n\x18\x63urrent_address_verified\x18\x01 \x01(\x08\x12\x16\n\x0e\x65vidence_links\x18\x02 \x03(\t\"\x8e\x01\n\x19RequirementsNotMetDetails\x12\x14\n\x0c\x66\x61ilure_type\x18\x01 \x01(\t\x12\x15\n\rdocument_type\x18\x02 \x01(\t\x12!\n\x19\x64ocument_country_iso_code\x18\x03 \x01(\t\x12\x10\n\x08\x61udit_id\x18\x04 \x01(\t\x12\x0f\n\x07\x64\x65tails\x18\x05 \x01(\t\"\xde\x01\n\x16SchemeComplianceReport\x12.\n\x06scheme\x18\x01 \x01(\x0b\x32\x1e.yoti.core.compubapi_v1.Scheme\x12\x18\n\x10requirements_met\x18\x02 \x01(\x08\x12!\n\x19requirements_not_met_info\x18\x03 \x01(\t\x12W\n\x1crequirements_not_met_details\x18\x04 \x03(\x0b\x32\x31.yoti.core.compubapi_v1.RequirementsNotMetDetails\"\x9f\x01\n\x10\x43omplianceReport\x12?\n\x0ftrust_framework\x18\x01 \x01(\x0e\x32&.yoti.core.compubapi_v1.TrustFramework\x12J\n\x12schemes_compliance\x18\x02 \x03(\x0b\x32..yoti.core.compubapi_v1.SchemeComplianceReport\"\x87\x01\n\x10\x41ssuranceProcess\x12\x1a\n\x12level_of_assurance\x18\x01 \x01(\t\x12\x0e\n\x06policy\x18\x02 \x01(\t\x12\x11\n\tprocedure\x18\x03 \x01(\t\x12\x34\n\tassurance\x18\x04 \x03(\x0b\x32!.yoti.core.compubapi_v1.Assurance\"I\n\tAssurance\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\x16\n\x0e\x63lassification\x18\x02 \x01(\t\x12\x16\n\x0e\x65vidence_links\x18\x03 \x03(\t\"\xe6\x01\n\x15\x45videnceCollectionExt\x12<\n\x04\x66\x61\x63\x65\x18\x01 \x01(\x0b\x32..yoti.core.compubapi_v1.FaceCaptureEvidenceExt\x12>\n\tdocuments\x18\x02 \x03(\x0b\x32+.yoti.core.compubapi_v1.DocumentEvidenceExt\x12O\n\x12\x65lectronic_records\x18\x03 \x03(\x0b\x32\x33.yoti.core.compubapi_v1.ElectronicRecordEvidenceExt\"\xae\x02\n\x16\x46\x61\x63\x65\x43\x61ptureEvidenceExt\x12\x13\n\x0b\x65vidence_id\x18\x01 \x01(\t\x12@\n\x10initial_liveness\x18\x02 \x01(\x0b\x32&.yoti.core.compubapi_v1.PassedLiveness\x12\x45\n\x15last_matched_liveness\x18\x03 \x01(\x0b\x32&.yoti.core.compubapi_v1.PassedLiveness\x12\x15\n\rverifying_org\x18\x04 \x01(\t\x12\x14\n\x0cresource_ids\x18\x05 \x03(\t\x12\x11\n\tcheck_ids\x18\x06 \x03(\t\x12\x19\n\x11user_activity_ids\x18\x07 \x03(\t\x12\x1b\n\x13selfie_attribute_id\x18\x08 \x01(\t\"\xbd\x02\n\x13\x44ocumentEvidenceExt\x12\x13\n\x0b\x65vidence_id\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12?\n\x0f\x64ocument_fields\x18\x03 \x01(\x0b\x32&.yoti.core.compubapi_v1.DocumentFields\x12<\n\rpassed_checks\x18\x04 \x03(\x0b\x32%.yoti.core.compubapi_v1.DocumentCheck\x12$\n\x1c\x64ocument_images_attribute_id\x18\x05 \x01(\t\x12\x15\n\rverifying_org\x18\x06 \x01(\t\x12\x14\n\x0cresource_ids\x18\x07 \x03(\t\x12\x11\n\tcheck_ids\x18\x08 \x03(\t\x12\x19\n\x11user_activity_ids\x18\t \x03(\t\"\xf9\x01\n\x1b\x45lectronicRecordEvidenceExt\x12\x13\n\x0b\x65vidence_id\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x41\n\x10identity_details\x18\x03 \x01(\x0b\x32\'.yoti.core.compubapi_v1.IdentityDetails\x12\x15\n\rverifying_org\x18\x04 \x01(\t\x12\x14\n\x0cprovider_org\x18\x05 \x01(\t\x12\x14\n\x0cresource_ids\x18\x06 \x03(\t\x12\x11\n\tcheck_ids\x18\x07 \x03(\t\x12\x19\n\x11user_activity_ids\x18\x08 \x03(\t\"S\n\x0e\x43urrentAddress\x12\x30\n\x07\x61\x64\x64ress\x18\x01 \x01(\x0b\x32\x1f.yoti.core.compubapi_v1.Address\x12\x0f\n\x07move_in\x18\x02 \x01(\t\"\x9c\x01\n\x14\x41uthenticationReport\x12\x11\n\treport_id\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\r\n\x05level\x18\x03 \x01(\t\x12\x0e\n\x06policy\x18\x04 \x01(\t\x12?\n\x0ftrust_framework\x18\x05 \x01(\x0e\x32&.yoti.core.compubapi_v1.TrustFramework\",\n\x05Proof\x12\x0b\n\x03jws\x18\x01 \x01(\t\x12\x16\n\x0epublic_key_url\x18\x02 \x01(\t\"\x94\x01\n\x11MatchReportResult\x12@\n\x06result\x18\x01 \x01(\x0e\x32\x30.yoti.core.compubapi_v1.MatchReportResult.Result\"=\n\x06Result\x12\r\n\tUNDEFINED\x10\x00\x12\x0c\n\x08NO_MATCH\x10\x01\x12\t\n\x05MATCH\x10\x02\x12\x0b\n\x07PARTIAL\x10\x03\"\x89\x02\n\x12ProfileMatchReport\x12\x46\n\x10provided_profile\x18\x01 \x01(\x0b\x32,.yoti.core.compubapi_v1.IdentityAssertionExt\x12\x37\n\x04name\x18\x02 \x01(\x0b\x32).yoti.core.compubapi_v1.MatchReportResult\x12\x36\n\x03\x64ob\x18\x03 \x01(\x0b\x32).yoti.core.compubapi_v1.MatchReportResult\x12:\n\x07\x61\x64\x64ress\x18\x04 \x01(\x0b\x32).yoti.core.compubapi_v1.MatchReportResultBp\n\x15\x63om.yoti.compubapi_v1B\x1aIdentityProfileReportProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'IdentityProfileReport_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\032IdentityProfileReportProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _IDENTITYPROFILEREPORT._serialized_start=200 + _IDENTITYPROFILEREPORT._serialized_end=719 + _IDENTITYASSERTIONEXT._serialized_start=722 + _IDENTITYASSERTIONEXT._serialized_end=894 + _VERIFICATIONREPORT._serialized_start=897 + _VERIFICATIONREPORT._serialized_end=1425 + _VERIFICATIONREPORT_ADDRESSVERIFICATION._serialized_start=1346 + _VERIFICATIONREPORT_ADDRESSVERIFICATION._serialized_end=1425 + _REQUIREMENTSNOTMETDETAILS._serialized_start=1428 + _REQUIREMENTSNOTMETDETAILS._serialized_end=1570 + _SCHEMECOMPLIANCEREPORT._serialized_start=1573 + _SCHEMECOMPLIANCEREPORT._serialized_end=1795 + _COMPLIANCEREPORT._serialized_start=1798 + _COMPLIANCEREPORT._serialized_end=1957 + _ASSURANCEPROCESS._serialized_start=1960 + _ASSURANCEPROCESS._serialized_end=2095 + _ASSURANCE._serialized_start=2097 + _ASSURANCE._serialized_end=2170 + _EVIDENCECOLLECTIONEXT._serialized_start=2173 + _EVIDENCECOLLECTIONEXT._serialized_end=2403 + _FACECAPTUREEVIDENCEEXT._serialized_start=2406 + _FACECAPTUREEVIDENCEEXT._serialized_end=2708 + _DOCUMENTEVIDENCEEXT._serialized_start=2711 + _DOCUMENTEVIDENCEEXT._serialized_end=3028 + _ELECTRONICRECORDEVIDENCEEXT._serialized_start=3031 + _ELECTRONICRECORDEVIDENCEEXT._serialized_end=3280 + _CURRENTADDRESS._serialized_start=3282 + _CURRENTADDRESS._serialized_end=3365 + _AUTHENTICATIONREPORT._serialized_start=3368 + _AUTHENTICATIONREPORT._serialized_end=3524 + _PROOF._serialized_start=3526 + _PROOF._serialized_end=3570 + _MATCHREPORTRESULT._serialized_start=3573 + _MATCHREPORTRESULT._serialized_end=3721 + _MATCHREPORTRESULT_RESULT._serialized_start=3660 + _MATCHREPORTRESULT_RESULT._serialized_end=3721 + _PROFILEMATCHREPORT._serialized_start=3724 + _PROFILEMATCHREPORT._serialized_end=3989 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/IdentityProfile_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/IdentityProfile_pb2.py new file mode 100644 index 00000000..73d0483a --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/IdentityProfile_pb2.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/IdentityProfile.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import Address_pb2 as compubapi__v1_dot_Address__pb2 +from . import DocumentTypes_pb2 as compubapi__v1_dot_DocumentTypes__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"compubapi_v1/IdentityProfile.proto\x12\x16yoti.core.compubapi_v1\x1a\x1a\x63ompubapi_v1/Address.proto\x1a compubapi_v1/DocumentTypes.proto\"\x88\x02\n\x06Scheme\x12\x31\n\x04type\x18\x01 \x01(\x0e\x32#.yoti.core.compubapi_v1.Scheme.Type\x12\x11\n\tobjective\x18\x02 \x01(\t\x12\r\n\x05label\x18\x03 \x01(\t\x12\x34\n\x06\x63onfig\x18\x04 \x01(\x0b\x32$.yoti.core.compubapi_v1.SchemeConfig\"s\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03\x44\x42S\x10\x01\x12\x07\n\x03RTW\x10\x02\x12\x07\n\x03RTR\x10\x03\x12\x0b\n\x07\x44\x42S_RTW\x10\x04\x12\x0c\n\x08IDENTITY\x10\x05\x12\x19\n\x15IDENTITY_PLUS_ADDRESS\x10\x06\x12\x0b\n\x07\x43\x41N_CRC\x10\x07\"[\n\x0cSchemeConfig\x12K\n\x0f\x64ocument_filter\x18\x01 \x01(\x0b\x32\x32.yoti.core.compubapi_v1.DocumentRestrictionsFilter\"\x8e\x01\n\x1bIdentityProfileRequirements\x12?\n\x0ftrust_framework\x18\x01 \x01(\x0e\x32&.yoti.core.compubapi_v1.TrustFramework\x12.\n\x06scheme\x18\x02 \x01(\x0b\x32\x1e.yoti.core.compubapi_v1.Scheme\"`\n#AdvancedIdentityProfileRequirements\x12\x39\n\x08profiles\x18\x01 \x03(\x0b\x32\'.yoti.core.compubapi_v1.AdvancedProfile\"\x83\x01\n\x0f\x41\x64vancedProfile\x12?\n\x0ftrust_framework\x18\x01 \x01(\x0e\x32&.yoti.core.compubapi_v1.TrustFramework\x12/\n\x07schemes\x18\x02 \x03(\x0b\x32\x1e.yoti.core.compubapi_v1.Scheme\"\x1d\n\x07Subject\x12\x12\n\nsubject_id\x18\x01 \x01(\t\"\xc8\x01\n\x0fIdentityDetails\x12\x13\n\x0bgiven_names\x18\x01 \x01(\t\x12\x12\n\nfirst_name\x18\x02 \x01(\t\x12\x13\n\x0bmiddle_name\x18\x03 \x01(\t\x12\x13\n\x0b\x66\x61mily_name\x18\x04 \x01(\t\x12\x11\n\tfull_name\x18\x05 \x01(\t\x12\x15\n\rdate_of_birth\x18\x06 \x01(\t\x12\x38\n\x0f\x63urrent_address\x18\x07 \x01(\x0b\x32\x1f.yoti.core.compubapi_v1.Address\"u\n\x1eVerificationReportRequirements\x12S\n\x1dgeneral_evidence_requirements\x18\x01 \x01(\x0e\x32,.yoti.core.compubapi_v1.EvidenceRequirements*A\n\x0eTrustFramework\x12\x10\n\x0cUNDEFINED_TF\x10\x00\x12\x0c\n\x08UK_TFIDA\x10\x01\x12\x0f\n\x0bYOTI_GLOBAL\x10\x02*z\n\x14\x45videnceRequirements\x12\x10\n\x0cUNDEFINED_ER\x10\x00\x12\x11\n\rOMIT_EVIDENCE\x10\x01\x12\x18\n\x14METADATA_AND_DETAILS\x10\x02\x12#\n\x1fMETADATA_AND_DETAILS_AND_IMAGES\x10\x03\x42j\n\x15\x63om.yoti.compubapi_v1B\x14IdentityProfileProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'IdentityProfile_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\024IdentityProfileProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _TRUSTFRAMEWORK._serialized_start=1214 + _TRUSTFRAMEWORK._serialized_end=1279 + _EVIDENCEREQUIREMENTS._serialized_start=1281 + _EVIDENCEREQUIREMENTS._serialized_end=1403 + _SCHEME._serialized_start=125 + _SCHEME._serialized_end=389 + _SCHEME_TYPE._serialized_start=274 + _SCHEME_TYPE._serialized_end=389 + _SCHEMECONFIG._serialized_start=391 + _SCHEMECONFIG._serialized_end=482 + _IDENTITYPROFILEREQUIREMENTS._serialized_start=485 + _IDENTITYPROFILEREQUIREMENTS._serialized_end=627 + _ADVANCEDIDENTITYPROFILEREQUIREMENTS._serialized_start=629 + _ADVANCEDIDENTITYPROFILEREQUIREMENTS._serialized_end=725 + _ADVANCEDPROFILE._serialized_start=728 + _ADVANCEDPROFILE._serialized_end=859 + _SUBJECT._serialized_start=861 + _SUBJECT._serialized_end=890 + _IDENTITYDETAILS._serialized_start=893 + _IDENTITYDETAILS._serialized_end=1093 + _VERIFICATIONREPORTREQUIREMENTS._serialized_start=1095 + _VERIFICATIONREPORTREQUIREMENTS._serialized_end=1212 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/MRZ_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/MRZ_pb2.py new file mode 100644 index 00000000..89947775 --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/MRZ_pb2.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/MRZ.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x63ompubapi_v1/MRZ.proto\x12\x16yoti.core.compubapi_v1\"\x92\x01\n\x03MRZ\x12\x0c\n\x04type\x18\x01 \x01(\x05\x12\r\n\x05line1\x18\x02 \x01(\t\x12\r\n\x05line2\x18\x03 \x01(\t\x12\r\n\x05line3\x18\x04 \x01(\t\"P\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03TD1\x10\x01\x12\x07\n\x03TD3\x10\x02\x12\n\n\x06RUS_ID\x10\x03\x12\x07\n\x03TD2\x10\x04\x12\x12\n\rUNCATEGORISED\x10\xe8\x07\x42T\n\x15\x63om.yoti.compubapi_v1Z,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'MRZ_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1Z,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _MRZ._serialized_start=51 + _MRZ._serialized_end=197 + _MRZ_TYPE._serialized_start=117 + _MRZ_TYPE._serialized_end=197 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/Metadata_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/Metadata_pb2.py new file mode 100644 index 00000000..2c2387db --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/Metadata_pb2.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/Metadata.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1b\x63ompubapi_v1/Metadata.proto\x12\x16yoti.core.compubapi_v1\"\xfb\x04\n\x08Metadata\x12\x18\n\x10manufacture_name\x18\x01 \x01(\t\x12\x12\n\nmodel_name\x18\x02 \x01(\t\x12\x0f\n\x07os_name\x18\x03 \x01(\t\x12\x12\n\nos_version\x18\x04 \x01(\t\x12\x17\n\x0fos_vendor_layer\x18\x05 \x01(\t\x12\x16\n\x0e\x63lient_version\x18\x06 \x01(\t\x12\x12\n\nstart_time\x18\x07 \x01(\t\x12\x19\n\x11\x61vailable_sensors\x18\x08 \x03(\t\x12\x14\n\x0c\x64\x65mog_gender\x18\t \x01(\t\x12\x11\n\tdemog_age\x18\n \x01(\t\x12\x15\n\rdemog_country\x18\x0b \x01(\t\x12\x39\n\x07product\x18\x0c \x01(\x0e\x32(.yoti.core.compubapi_v1.Metadata.Product\x12\x14\n\x0c\x62rowser_name\x18\r \x01(\t\x12\x17\n\x0f\x62rowser_version\x18\x0e \x01(\t\x12\x0e\n\x06locale\x18\x0f \x01(\t\x12\x11\n\tstat_uuid\x18\x10 \x01(\t\x12\r\n\x05\x64\x65\x62ug\x18\x11 \x01(\t\x12\x19\n\x11\x64\x65vice_identifier\x18\x12 \x01(\t\"\xc4\x01\n\x07Product\x12\r\n\tUNDEFINED\x10\x00\x12\x0c\n\x08YOTI_APP\x10\x01\x12\x13\n\x0fYPM_BROWSER_EXT\x10\x02\x12\r\n\tYOTI_DOCS\x10\x03\x12\x14\n\x10POSTOFFICEID_APP\x10\x04\x12\x0b\n\x07\x43ONNECT\x10\x05\x12\r\n\tYOTI_SIGN\x10\x06\x12\x07\n\x03\x41VS\x10\x07\x12\r\n\tSCAN_YOTI\x10\x08\x12\r\n\tLBGID_APP\x10\t\x12\x07\n\x03KYC\x10\n\x12\x16\n\x12\x43ONTENT_MODERATION\x10\x0b\x42T\n\x15\x63om.yoti.compubapi_v1Z,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Metadata_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1Z,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _METADATA._serialized_start=56 + _METADATA._serialized_end=691 + _METADATA_PRODUCT._serialized_start=495 + _METADATA_PRODUCT._serialized_end=691 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/OptionalTypes_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/OptionalTypes_pb2.py new file mode 100644 index 00000000..045f4dd6 --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/OptionalTypes_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/OptionalTypes.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n compubapi_v1/OptionalTypes.proto\x12\x16yoti.core.compubapi_v1\"-\n\x0cOptionalBool\x12\x0e\n\x06is_set\x18\x01 \x01(\x08\x12\r\n\x05value\x18\x02 \x01(\x08\x42h\n\x15\x63om.yoti.compubapi_v1B\x12OptionalTypesProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'OptionalTypes_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\022OptionalTypesProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _OPTIONALBOOL._serialized_start=60 + _OPTIONALBOOL._serialized_end=105 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/RsaAuthDigest_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/RsaAuthDigest_pb2.py new file mode 100644 index 00000000..eef23564 --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/RsaAuthDigest_pb2.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/RsaAuthDigest.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import Signature_pb2 as compubapi__v1_dot_Signature__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n compubapi_v1/RsaAuthDigest.proto\x12\x16yoti.core.compubapi_v1\x1a\x1c\x63ompubapi_v1/Signature.proto\"x\n\rRsaAuthDigest\x12\x0f\n\x07pub_key\x18\x01 \x01(\x0c\x12\r\n\x05nonce\x18\x02 \x01(\x0c\x12\x11\n\ttimestamp\x18\x03 \x01(\t\x12\x34\n\tsignature\x18\x04 \x01(\x0b\x32!.yoti.core.compubapi_v1.SignatureBh\n\x15\x63om.yoti.compubapi_v1B\x12RsaAuthDigestProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'RsaAuthDigest_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\022RsaAuthDigestProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _RSAAUTHDIGEST._serialized_start=90 + _RSAAUTHDIGEST._serialized_end=210 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/Signature_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/Signature_pb2.py new file mode 100644 index 00000000..fb756302 --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/Signature_pb2.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/Signature.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1c\x63ompubapi_v1/Signature.proto\x12\x16yoti.core.compubapi_v1\"\xb0\x01\n\tSignature\x12\x39\n\x04\x61lgo\x18\x01 \x01(\x0e\x32+.yoti.core.compubapi_v1.Signature.Algorithm\x12\x0b\n\x03sig\x18\x02 \x01(\x0c\"[\n\tAlgorithm\x12\r\n\tUNDEFINED\x10\x00\x12\x12\n\x0eRSA_PSS_SHA512\x10\x01\x12\x12\n\x0eRSA_PSS_SHA256\x10\x02\x12\x17\n\x13RSA_PKCS1V15_SHA256\x10\x03\x42\x64\n\x15\x63om.yoti.compubapi_v1B\x0eSignatureProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Signature_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\016SignatureProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _SIGNATURE._serialized_start=57 + _SIGNATURE._serialized_end=233 + _SIGNATURE_ALGORITHM._serialized_start=142 + _SIGNATURE_ALGORITHM._serialized_end=233 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/SignedTimestamp_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/SignedTimestamp_pb2.py new file mode 100644 index 00000000..9db6ed16 --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/SignedTimestamp_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/SignedTimestamp.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"compubapi_v1/SignedTimestamp.proto\x12\x16yoti.core.compubapi_v1\"\xbc\x01\n\x0fSignedTimestamp\x12\x0f\n\x07version\x18\x01 \x01(\x05\x12\x11\n\ttimestamp\x18\x02 \x01(\x04\x12\x16\n\x0emessage_digest\x18\x03 \x01(\x0c\x12\x18\n\x10signed_timestamp\x18\x04 \x01(\x0c\x12\x1a\n\x12\x63hain_digest_skip1\x18\x05 \x01(\x0c\x12\x1a\n\x12\x63hain_digest_skip2\x18\x06 \x01(\x0c\x12\x1b\n\x13hmac_key_identifier\x18\x07 \x01(\x05\x42j\n\x15\x63om.yoti.compubapi_v1B\x14SignedTimestampProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'SignedTimestamp_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\024SignedTimestampProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _SIGNEDTIMESTAMP._serialized_start=63 + _SIGNEDTIMESTAMP._serialized_end=251 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/UserProfile_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/UserProfile_pb2.py new file mode 100644 index 00000000..2e7d78ca --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/UserProfile_pb2.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/UserProfile.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import Address_pb2 as compubapi__v1_dot_Address__pb2 +from . import IdentityProfile_pb2 as compubapi__v1_dot_IdentityProfile__pb2 +from . import DocumentFields_pb2 as compubapi__v1_dot_DocumentFields__pb2 +from . import DocumentTypes_pb2 as compubapi__v1_dot_DocumentTypes__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1e\x63ompubapi_v1/UserProfile.proto\x12\x16yoti.core.compubapi_v1\x1a\x1a\x63ompubapi_v1/Address.proto\x1a\"compubapi_v1/IdentityProfile.proto\x1a!compubapi_v1/DocumentFields.proto\x1a compubapi_v1/DocumentTypes.proto\"\xbc\x01\n\x0bUserProfile\x12\x45\n\x12identity_assertion\x18\x01 \x01(\x0b\x32).yoti.core.compubapi_v1.IdentityAssertion\x12!\n\x19\x65vidence_collection_db_id\x18\x02 \x01(\x0c\x12\x43\n\x11unlinked_evidence\x18\x03 \x03(\x0b\x32(.yoti.core.compubapi_v1.UnlinkedEvidence\"\xc2\x02\n\x11IdentityAssertion\x12\x32\n\x0c\x63urrent_name\x18\x01 \x01(\x0b\x32\x1c.yoti.core.compubapi_v1.Name\x12:\n\rdate_of_birth\x18\x02 \x01(\x0b\x32#.yoti.core.compubapi_v1.DateOfBirth\x12\x41\n\x0f\x63urrent_address\x18\x03 \x01(\x0b\x32(.yoti.core.compubapi_v1.AddressWithDates\x12\x44\n\x12previous_addresses\x18\x04 \x03(\x0b\x32(.yoti.core.compubapi_v1.AddressWithDates\x12\x34\n\x0eprevious_names\x18\x05 \x03(\x0b\x32\x1c.yoti.core.compubapi_v1.Name\"\x82\x03\n\x10\x41\x64\x64ressWithDates\x12\x38\n\x0fprofile_address\x18\x01 \x01(\x0b\x32\x1f.yoti.core.compubapi_v1.Address\x12\x0f\n\x07move_in\x18\x02 \x01(\t\x12\x10\n\x08move_out\x18\x03 \x01(\t\x12<\n\x0e\x65vidence_links\x18\x04 \x03(\x0b\x32$.yoti.core.compubapi_v1.EvidenceLink\x12<\n\x08\x61\x64\x64\x65\x64_at\x18\x07 \x01(\x0b\x32*.yoti.core.compubapi_v1.AssertionTimestamp\x12@\n\x0c\x63onfirmed_at\x18\x08 \x01(\x0b\x32*.yoti.core.compubapi_v1.AssertionTimestamp\x12\x41\n\rconfirmations\x18\t \x03(\x0b\x32*.yoti.core.compubapi_v1.AssertionTimestampJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07J\x04\x08\n\x10\x0b\"\xac\x01\n\x12\x41ssertionTimestamp\x12\n\n\x02ts\x18\x01 \x01(\t\x12\x41\n\x06source\x18\x02 \x01(\x0e\x32\x31.yoti.core.compubapi_v1.AssertionTimestamp.Source\"G\n\x06Source\x12\r\n\tUNDEFINED\x10\x00\x12\x0c\n\x08\x44OCUMENT\x10\x01\x12\n\n\x06MANUAL\x10\x02\x12\x14\n\x10RELYING_BUSINESS\x10\x03\"\xd3\x02\n\x12\x43onfirmationStatus\x12\x41\n\x06source\x18\x01 \x01(\x0e\x32\x31.yoti.core.compubapi_v1.ConfirmationStatus.Source\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x41\n\x06status\x18\x03 \x01(\x0e\x32\x31.yoti.core.compubapi_v1.ConfirmationStatus.Status\";\n\x06Source\x12\r\n\tUNDEFINED\x10\x00\x12\x0c\n\x08\x45ND_USER\x10\x01\x12\x14\n\x10RELYING_BUSINESS\x10\x02\"g\n\x06Status\x12\x1a\n\x16NO_MANUAL_CONFIRMATION\x10\x00\x12!\n\x1dMANUAL_CONFIRMATION_SUCCEEDED\x10\x01\x12\x1e\n\x1aMANUAL_CONFIRMATION_FAILED\x10\x02\"\xef\x02\n\x04Name\x12\x34\n\x04name\x18\x01 \x01(\x0b\x32&.yoti.core.compubapi_v1.StructuredName\x12\x11\n\theld_from\x18\x02 \x01(\t\x12\x0f\n\x07held_to\x18\x03 \x01(\t\x12<\n\x0e\x65vidence_links\x18\x04 \x03(\x0b\x32$.yoti.core.compubapi_v1.EvidenceLink\x12<\n\x08\x61\x64\x64\x65\x64_at\x18\x05 \x01(\x0b\x32*.yoti.core.compubapi_v1.AssertionTimestamp\x12\x41\n\rconfirmations\x18\x06 \x03(\x0b\x32*.yoti.core.compubapi_v1.AssertionTimestamp\x12N\n\x1amanual_confirmation_status\x18\x07 \x01(\x0b\x32*.yoti.core.compubapi_v1.ConfirmationStatus\"\xb3\x02\n\x0b\x44\x61teOfBirth\x12\x15\n\rdate_of_birth\x18\x01 \x01(\t\x12<\n\x0e\x65vidence_links\x18\x02 \x03(\x0b\x32$.yoti.core.compubapi_v1.EvidenceLink\x12<\n\x08\x61\x64\x64\x65\x64_at\x18\x03 \x01(\x0b\x32*.yoti.core.compubapi_v1.AssertionTimestamp\x12\x41\n\rconfirmations\x18\x04 \x03(\x0b\x32*.yoti.core.compubapi_v1.AssertionTimestamp\x12N\n\x1amanual_confirmation_status\x18\x05 \x01(\x0b\x32*.yoti.core.compubapi_v1.ConfirmationStatus\"v\n\x0eStructuredName\x12\x13\n\x0bgiven_names\x18\x01 \x01(\t\x12\x12\n\nfirst_name\x18\x02 \x01(\t\x12\x13\n\x0bmiddle_name\x18\x03 \x01(\t\x12\x13\n\x0b\x66\x61mily_name\x18\x04 \x01(\t\x12\x11\n\tfull_name\x18\x05 \x01(\t\"#\n\x0c\x45videnceLink\x12\x13\n\x0b\x65vidence_id\x18\x01 \x01(\t\"\xda\x01\n\x12\x45videnceCollection\x12\x39\n\x04\x66\x61\x63\x65\x18\x01 \x01(\x0b\x32+.yoti.core.compubapi_v1.FaceCaptureEvidence\x12;\n\tdocuments\x18\x02 \x03(\x0b\x32(.yoti.core.compubapi_v1.DocumentEvidence\x12L\n\x12\x65lectronic_records\x18\x03 \x03(\x0b\x32\x30.yoti.core.compubapi_v1.ElectronicRecordEvidence\"\xd7\x02\n\x13\x46\x61\x63\x65\x43\x61ptureEvidence\x12\x13\n\x0b\x65vidence_id\x18\x01 \x01(\t\x12\x36\n\x0b\x61udit_links\x18\x02 \x03(\x0b\x32!.yoti.core.compubapi_v1.AuditLink\x12@\n\x10initial_liveness\x18\x03 \x01(\x0b\x32&.yoti.core.compubapi_v1.PassedLiveness\x12\x45\n\x15last_matched_liveness\x18\x04 \x01(\x0b\x32&.yoti.core.compubapi_v1.PassedLiveness\x12\x36\n\x06source\x18\x05 \x01(\x0b\x32&.yoti.core.compubapi_v1.EvidenceSource\x12\x15\n\rverifying_org\x18\x06 \x01(\t\x12\x1b\n\x13selfie_attribute_id\x18\x07 \x01(\x0c\"\xe0\x03\n\x10\x44ocumentEvidence\x12\x13\n\x0b\x65vidence_id\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x36\n\x0b\x61udit_links\x18\x03 \x03(\x0b\x32!.yoti.core.compubapi_v1.AuditLink\x12\x39\n\rdocument_info\x18\x04 \x01(\x0b\x32\".yoti.core.compubapi_v1.IdDocument\x12?\n\x0f\x64ocument_fields\x18\x05 \x01(\x0b\x32&.yoti.core.compubapi_v1.DocumentFields\x12<\n\rpassed_checks\x18\x06 \x03(\x0b\x32%.yoti.core.compubapi_v1.DocumentCheck\x12$\n\x1c\x64ocument_images_attribute_id\x18\x07 \x01(\x0c\x12\x36\n\x06source\x18\x08 \x01(\x0b\x32&.yoti.core.compubapi_v1.EvidenceSource\x12\x15\n\rverifying_org\x18\t \x01(\t\x12=\n\x0eimport_details\x18\n \x01(\x0b\x32%.yoti.core.compubapi_v1.ImportDetails\"\xb8\x02\n\x18\x45lectronicRecordEvidence\x12\x13\n\x0b\x65vidence_id\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x02 \x01(\t\x12\x36\n\x0b\x61udit_links\x18\x03 \x03(\x0b\x32!.yoti.core.compubapi_v1.AuditLink\x12\x41\n\x10identity_details\x18\x04 \x01(\x0b\x32\'.yoti.core.compubapi_v1.IdentityDetails\x12\x15\n\rverifying_org\x18\x05 \x01(\t\x12\x14\n\x0cprovider_org\x18\x06 \x01(\t\x12L\n\x16identity_check_outcome\x18\x07 \x01(\x0b\x32,.yoti.core.compubapi_v1.IdentityCheckOutcome\"\xcc\x02\n\x14IdentityCheckOutcome\x12?\n\x04type\x18\x01 \x01(\x0e\x32\x31.yoti.core.compubapi_v1.IdentityCheckOutcome.Type\x12;\n\rcifas_outcome\x18\x02 \x01(\x0b\x32$.yoti.core.compubapi_v1.CIFASOutcome\x12\x37\n\x0b\x63ra_outcome\x18\x03 \x01(\x0b\x32\".yoti.core.compubapi_v1.CRAOutcome\x12\x43\n\x11synectics_outcome\x18\x04 \x01(\x0b\x32(.yoti.core.compubapi_v1.SynecticsOutcome\"8\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12\t\n\x05\x43IFAS\x10\x01\x12\x07\n\x03\x43RA\x10\x02\x12\r\n\tSYNECTICS\x10\x03\"\xa0\x01\n\x0c\x43IFASOutcome\x12\x39\n\x05state\x18\x01 \x01(\x0e\x32*.yoti.core.compubapi_v1.CIFASOutcome.State\"U\n\x05State\x12\r\n\tUNDEFINED\x10\x00\x12\x11\n\rNOT_FRAUDSTER\x10\x01\x12\r\n\tFRAUDSTER\x10\x02\x12\x10\n\x0c\x46RAUD_VICTIM\x10\x03\x12\t\n\x05\x45RROR\x10\x04\"\xbd\x04\n\nCRAOutcome\x12?\n\x07\x61\x64\x64ress\x18\x01 \x01(\x0e\x32..yoti.core.compubapi_v1.CRAOutcome.MatchResult\x12<\n\x04name\x18\x02 \x01(\x0e\x32..yoti.core.compubapi_v1.CRAOutcome.MatchResult\x12;\n\x03\x64ob\x18\x03 \x01(\x0e\x32..yoti.core.compubapi_v1.CRAOutcome.MatchResult\x12G\n\x0bpep_warning\x18\x04 \x01(\x0e\x32\x32.yoti.core.compubapi_v1.CRAOutcome.AdditionalCheck\x12\x44\n\x08\x64\x65\x63\x65\x61sed\x18\x05 \x01(\x0e\x32\x32.yoti.core.compubapi_v1.CRAOutcome.AdditionalCheck\x12J\n\x0e\x65lectoral_roll\x18\x06 \x01(\x0e\x32\x32.yoti.core.compubapi_v1.CRAOutcome.AdditionalCheck\x12\x19\n\x11unable_to_perform\x18\x07 \x01(\x08\">\n\x0bMatchResult\x12\x11\n\rNOT_AVAILABLE\x10\x00\x12\x0b\n\x07MATCHED\x10\x01\x12\x0f\n\x0bNOT_MATCHED\x10\x02\"=\n\x0f\x41\x64\x64itionalCheck\x12\x12\n\x0eNOT_APPLICABLE\x10\x00\x12\n\n\x06PASSED\x10\x01\x12\n\n\x06\x46\x41ILED\x10\x02\"v\n\x10SynecticsOutcome\x12\x18\n\x10\x61\x63tivity_history\x18\x01 \x01(\x05\x12\x16\n\x0eidentity_fraud\x18\x02 \x01(\x05\x12\x15\n\rfailed_checks\x18\x03 \x03(\t\x12\x19\n\x11unable_to_perform\x18\x04 \x01(\x08\"\xa8\x01\n\x0ePassedLiveness\x12\x39\n\x04type\x18\x01 \x01(\x0e\x32+.yoti.core.compubapi_v1.PassedLiveness.Type\x12\x11\n\ttimestamp\x18\x02 \x01(\t\"H\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12\x08\n\x04ZOOM\x10\x01\x12\n\n\x06STATIC\x10\x02\x12\x0f\n\x0bTHREE_WORDS\x10\x03\x12\n\n\x06\x41\x43TIVE\x10\x04\"\xae\x01\n\tAuditLink\x12\x34\n\x04type\x18\x01 \x01(\x0e\x32&.yoti.core.compubapi_v1.AuditLink.Type\x12\n\n\x02id\x18\x02 \x01(\t\"_\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12!\n\x1d\x44ID_USER_ACTIVITY_TRACKING_ID\x10\x01\x12\x10\n\x0cIDV_CHECK_ID\x10\x02\x12\x13\n\x0fIDV_RESOURCE_ID\x10\x03\"\x95\x01\n\x0e\x45videnceSource\x12=\n\x06source\x18\x01 \x01(\x0e\x32-.yoti.core.compubapi_v1.EvidenceSource.Source\"D\n\x06Source\x12\r\n\tUNDEFINED\x10\x00\x12\x0b\n\x07IDV_WEB\x10\x01\x12\x11\n\rIDV_WEB_SICAP\x10\x02\x12\x0b\n\x07\x44ID_APP\x10\x03\"\xfb\x02\n\rDocumentCheck\x12:\n\x05\x63heck\x18\x01 \x01(\x0e\x32+.yoti.core.compubapi_v1.DocumentCheck.Check\"\xad\x02\n\x05\x43heck\x12\r\n\tUNDEFINED\x10\x00\x12\'\n#MANUAL_VISUAL_DOCUMENT_AUTHENTICITY\x10\x01\x12\x1a\n\x16\x43HIP_DIGITAL_SIGNATURE\x10\x02\x12\x15\n\x11ISSUING_AUTHORITY\x10\x03\x12\x14\n\x10\x44OCUMENT_IN_DATE\x10\x04\x12\x18\n\x14\x46RAUD_DOCUMENTS_LIST\x10\x05\x12\x15\n\x11MANUAL_FACE_MATCH\x10\x06\x12\x18\n\x14\x41UTOMATED_FACE_MATCH\x10\x07\x12)\n%AUTOMATED_FACE_MATCH_HIGHER_THRESHOLD\x10\x08\x12-\n)HIGH_ASSURANCE_AUTO_DOCUMENT_AUTHENTICITY\x10\t\"4\n\rImportDetails\x12\x13\n\x0bimported_at\x18\x01 \x01(\t\x12\x0e\n\x06org_id\x18\x02 \x01(\t\"\xbd\x01\n\x10UnlinkedEvidence\x12\x13\n\x0b\x65vidence_id\x18\x01 \x01(\t\x12?\n\x06reason\x18\x02 \x01(\x0e\x32/.yoti.core.compubapi_v1.UnlinkedEvidence.Reason\"S\n\x06Reason\x12\r\n\tUNDEFINED\x10\x00\x12\x11\n\rNAME_MISMATCH\x10\x01\x12\x10\n\x0c\x44OB_MISMATCH\x10\x02\x12\x15\n\x11NAME_DOB_MISMATCH\x10\x03\x42\x66\n\x15\x63om.yoti.compubapi_v1B\x10UserProfileProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'UserProfile_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\020UserProfileProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _USERPROFILE._serialized_start=192 + _USERPROFILE._serialized_end=380 + _IDENTITYASSERTION._serialized_start=383 + _IDENTITYASSERTION._serialized_end=705 + _ADDRESSWITHDATES._serialized_start=708 + _ADDRESSWITHDATES._serialized_end=1094 + _ASSERTIONTIMESTAMP._serialized_start=1097 + _ASSERTIONTIMESTAMP._serialized_end=1269 + _ASSERTIONTIMESTAMP_SOURCE._serialized_start=1198 + _ASSERTIONTIMESTAMP_SOURCE._serialized_end=1269 + _CONFIRMATIONSTATUS._serialized_start=1272 + _CONFIRMATIONSTATUS._serialized_end=1611 + _CONFIRMATIONSTATUS_SOURCE._serialized_start=1447 + _CONFIRMATIONSTATUS_SOURCE._serialized_end=1506 + _CONFIRMATIONSTATUS_STATUS._serialized_start=1508 + _CONFIRMATIONSTATUS_STATUS._serialized_end=1611 + _NAME._serialized_start=1614 + _NAME._serialized_end=1981 + _DATEOFBIRTH._serialized_start=1984 + _DATEOFBIRTH._serialized_end=2291 + _STRUCTUREDNAME._serialized_start=2293 + _STRUCTUREDNAME._serialized_end=2411 + _EVIDENCELINK._serialized_start=2413 + _EVIDENCELINK._serialized_end=2448 + _EVIDENCECOLLECTION._serialized_start=2451 + _EVIDENCECOLLECTION._serialized_end=2669 + _FACECAPTUREEVIDENCE._serialized_start=2672 + _FACECAPTUREEVIDENCE._serialized_end=3015 + _DOCUMENTEVIDENCE._serialized_start=3018 + _DOCUMENTEVIDENCE._serialized_end=3498 + _ELECTRONICRECORDEVIDENCE._serialized_start=3501 + _ELECTRONICRECORDEVIDENCE._serialized_end=3813 + _IDENTITYCHECKOUTCOME._serialized_start=3816 + _IDENTITYCHECKOUTCOME._serialized_end=4148 + _IDENTITYCHECKOUTCOME_TYPE._serialized_start=4092 + _IDENTITYCHECKOUTCOME_TYPE._serialized_end=4148 + _CIFASOUTCOME._serialized_start=4151 + _CIFASOUTCOME._serialized_end=4311 + _CIFASOUTCOME_STATE._serialized_start=4226 + _CIFASOUTCOME_STATE._serialized_end=4311 + _CRAOUTCOME._serialized_start=4314 + _CRAOUTCOME._serialized_end=4887 + _CRAOUTCOME_MATCHRESULT._serialized_start=4762 + _CRAOUTCOME_MATCHRESULT._serialized_end=4824 + _CRAOUTCOME_ADDITIONALCHECK._serialized_start=4826 + _CRAOUTCOME_ADDITIONALCHECK._serialized_end=4887 + _SYNECTICSOUTCOME._serialized_start=4889 + _SYNECTICSOUTCOME._serialized_end=5007 + _PASSEDLIVENESS._serialized_start=5010 + _PASSEDLIVENESS._serialized_end=5178 + _PASSEDLIVENESS_TYPE._serialized_start=5106 + _PASSEDLIVENESS_TYPE._serialized_end=5178 + _AUDITLINK._serialized_start=5181 + _AUDITLINK._serialized_end=5355 + _AUDITLINK_TYPE._serialized_start=5260 + _AUDITLINK_TYPE._serialized_end=5355 + _EVIDENCESOURCE._serialized_start=5358 + _EVIDENCESOURCE._serialized_end=5507 + _EVIDENCESOURCE_SOURCE._serialized_start=5439 + _EVIDENCESOURCE_SOURCE._serialized_end=5507 + _DOCUMENTCHECK._serialized_start=5510 + _DOCUMENTCHECK._serialized_end=5889 + _DOCUMENTCHECK_CHECK._serialized_start=5588 + _DOCUMENTCHECK_CHECK._serialized_end=5889 + _IMPORTDETAILS._serialized_start=5891 + _IMPORTDETAILS._serialized_end=5943 + _UNLINKEDEVIDENCE._serialized_start=5946 + _UNLINKEDEVIDENCE._serialized_end=6135 + _UNLINKEDEVIDENCE_REASON._serialized_start=6052 + _UNLINKEDEVIDENCE_REASON._serialized_end=6135 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/YotiYUV_pb2.py b/yoti_python_sdk/protobuf/compubapi_v1/YotiYUV_pb2.py new file mode 100644 index 00000000..6a87d03c --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/YotiYUV_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: compubapi_v1/YotiYUV.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1a\x63ompubapi_v1/YotiYUV.proto\x12\x16yoti.core.compubapi_v1\"Y\n\x07YotiYUV\x12\x0e\n\x06Header\x18\x01 \x01(\t\x12\r\n\x05width\x18\x02 \x01(\x05\x12\x0e\n\x06height\x18\x03 \x01(\x05\x12\x0e\n\x06gzip_Y\x18\x10 \x01(\x0c\x12\x0f\n\x07gzip_UV\x18\x11 \x01(\x0c\x42\x62\n\x15\x63om.yoti.compubapi_v1B\x0cYotiYUVProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\xba\x02\x0c\x43ompubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'YotiYUV_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\025com.yoti.compubapi_v1B\014YotiYUVProtoZ,go.internal.yoti.com/proto/core/compubapi_v1\272\002\014CompubapiV1_' + _YOTIYUV._serialized_start=54 + _YOTIYUV._serialized_end=143 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/compubapi_v1/__init__.py b/yoti_python_sdk/protobuf/compubapi_v1/__init__.py new file mode 100644 index 00000000..40a96afc --- /dev/null +++ b/yoti_python_sdk/protobuf/compubapi_v1/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/yoti_python_sdk/protobuf/devicepubapi_v1/StaticCredentialAuth_pb2.py b/yoti_python_sdk/protobuf/devicepubapi_v1/StaticCredentialAuth_pb2.py new file mode 100644 index 00000000..4607d565 --- /dev/null +++ b/yoti_python_sdk/protobuf/devicepubapi_v1/StaticCredentialAuth_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: devicepubapi_v1/StaticCredentialAuth.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n*devicepubapi_v1/StaticCredentialAuth.proto\x12\x19yoti.core.devicepubapi_v1\"\x16\n\x14StaticCredentialAuthb\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'StaticCredentialAuth_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = None + _STATICCREDENTIALAUTH._serialized_start=73 + _STATICCREDENTIALAUTH._serialized_end=95 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/common_public_api/__init__.py b/yoti_python_sdk/protobuf/devicepubapi_v1/__init__.py similarity index 100% rename from yoti_python_sdk/protobuf/common_public_api/__init__.py rename to yoti_python_sdk/protobuf/devicepubapi_v1/__init__.py diff --git a/yoti_python_sdk/protobuf/protobuf.py b/yoti_python_sdk/protobuf/protobuf.py index 4e46db01..be642182 100644 --- a/yoti_python_sdk/protobuf/protobuf.py +++ b/yoti_python_sdk/protobuf/protobuf.py @@ -2,10 +2,10 @@ from __future__ import unicode_literals from cryptography.fernet import base64 -from yoti_python_sdk.protobuf.attribute_public_api import Attribute_pb2, List_pb2 -from yoti_python_sdk.protobuf.common_public_api import EncryptedData_pb2 -from yoti_python_sdk.protobuf.share_public_api import ExtraData_pb2 -from yoti_python_sdk.protobuf.share_public_api import ThirdPartyAttribute_pb2 +from yoti_python_sdk.protobuf.attrpubapi_v1 import Attribute_pb2, List_pb2 +from yoti_python_sdk.protobuf.compubapi_v1 import EncryptedData_pb2 +from yoti_python_sdk.protobuf.sharepubapi_v1 import ExtraData_pb2 +from yoti_python_sdk.protobuf.sharepubapi_v1 import ThirdPartyAttribute_pb2 class Protobuf(object): diff --git a/yoti_python_sdk/protobuf/share_public_api/DataEntry_pb2.py b/yoti_python_sdk/protobuf/share_public_api/DataEntry_pb2.py deleted file mode 100644 index 689e27e6..00000000 --- a/yoti_python_sdk/protobuf/share_public_api/DataEntry_pb2.py +++ /dev/null @@ -1,122 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: DataEntry.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='DataEntry.proto', - package='sharepubapi_v1', - syntax='proto3', - serialized_options=_b('\n$com.yoti.api.client.spi.remote.protoB\016DataEntryProtoZ\016yotiprotoshare\252\002\030Yoti.Auth.ProtoBuf.Share\312\002\020Yoti\\Sharepubapi\342\002\034Yoti\\Sharepubapi\\GPBMetadata\352\002\031Yoti.Protobuf.Sharepubapi'), - serialized_pb=_b('\n\x0f\x44\x61taEntry.proto\x12\x0esharepubapi_v1\"\xdd\x01\n\tDataEntry\x12,\n\x04type\x18\x01 \x01(\x0e\x32\x1e.sharepubapi_v1.DataEntry.Type\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x92\x01\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12\x0b\n\x07INVOICE\x10\x01\x12\x17\n\x13PAYMENT_TRANSACTION\x10\x02\x12\x0c\n\x08LOCATION\x10\x03\x12\x0f\n\x0bTRANSACTION\x10\x04\x12\x1b\n\x17\x41GE_VERIFICATION_SECRET\x10\x05\x12\x19\n\x15THIRD_PARTY_ATTRIBUTE\x10\x06\x42\xaf\x01\n$com.yoti.api.client.spi.remote.protoB\x0e\x44\x61taEntryProtoZ\x0eyotiprotoshare\xaa\x02\x18Yoti.Auth.ProtoBuf.Share\xca\x02\x10Yoti\\Sharepubapi\xe2\x02\x1cYoti\\Sharepubapi\\GPBMetadata\xea\x02\x19Yoti.Protobuf.Sharepubapib\x06proto3') -) - - - -_DATAENTRY_TYPE = _descriptor.EnumDescriptor( - name='Type', - full_name='sharepubapi_v1.DataEntry.Type', - filename=None, - file=DESCRIPTOR, - values=[ - _descriptor.EnumValueDescriptor( - name='UNDEFINED', index=0, number=0, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='INVOICE', index=1, number=1, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='PAYMENT_TRANSACTION', index=2, number=2, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='LOCATION', index=3, number=3, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='TRANSACTION', index=4, number=4, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='AGE_VERIFICATION_SECRET', index=5, number=5, - serialized_options=None, - type=None), - _descriptor.EnumValueDescriptor( - name='THIRD_PARTY_ATTRIBUTE', index=6, number=6, - serialized_options=None, - type=None), - ], - containing_type=None, - serialized_options=None, - serialized_start=111, - serialized_end=257, -) -_sym_db.RegisterEnumDescriptor(_DATAENTRY_TYPE) - - -_DATAENTRY = _descriptor.Descriptor( - name='DataEntry', - full_name='sharepubapi_v1.DataEntry', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='type', full_name='sharepubapi_v1.DataEntry.type', index=0, - number=1, type=14, cpp_type=8, label=1, - has_default_value=False, default_value=0, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='value', full_name='sharepubapi_v1.DataEntry.value', index=1, - number=2, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - _DATAENTRY_TYPE, - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=36, - serialized_end=257, -) - -_DATAENTRY.fields_by_name['type'].enum_type = _DATAENTRY_TYPE -_DATAENTRY_TYPE.containing_type = _DATAENTRY -DESCRIPTOR.message_types_by_name['DataEntry'] = _DATAENTRY -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -DataEntry = _reflection.GeneratedProtocolMessageType('DataEntry', (_message.Message,), dict( - DESCRIPTOR = _DATAENTRY, - __module__ = 'DataEntry_pb2' - # @@protoc_insertion_point(class_scope:sharepubapi_v1.DataEntry) - )) -_sym_db.RegisterMessage(DataEntry) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/share_public_api/DataEntry_pb2_grpc.py b/yoti_python_sdk/protobuf/share_public_api/DataEntry_pb2_grpc.py deleted file mode 100644 index a8943526..00000000 --- a/yoti_python_sdk/protobuf/share_public_api/DataEntry_pb2_grpc.py +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - diff --git a/yoti_python_sdk/protobuf/share_public_api/ExtraData_pb2.py b/yoti_python_sdk/protobuf/share_public_api/ExtraData_pb2.py deleted file mode 100644 index 78afdd0d..00000000 --- a/yoti_python_sdk/protobuf/share_public_api/ExtraData_pb2.py +++ /dev/null @@ -1,73 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: ExtraData.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from . import DataEntry_pb2 as DataEntry__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='ExtraData.proto', - package='sharepubapi_v1', - syntax='proto3', - serialized_options=_b('\n$com.yoti.api.client.spi.remote.protoB\016ExtraDataProtoZ\016yotiprotoshare\252\002\030Yoti.Auth.ProtoBuf.Share\312\002\020Yoti\\Sharepubapi\342\002\034Yoti\\Sharepubapi\\GPBMetadata\352\002\031Yoti.Protobuf.Sharepubapi'), - serialized_pb=_b('\n\x0f\x45xtraData.proto\x12\x0esharepubapi_v1\x1a\x0f\x44\x61taEntry.proto\"4\n\tExtraData\x12\'\n\x04list\x18\x01 \x03(\x0b\x32\x19.sharepubapi_v1.DataEntryB\xaf\x01\n$com.yoti.api.client.spi.remote.protoB\x0e\x45xtraDataProtoZ\x0eyotiprotoshare\xaa\x02\x18Yoti.Auth.ProtoBuf.Share\xca\x02\x10Yoti\\Sharepubapi\xe2\x02\x1cYoti\\Sharepubapi\\GPBMetadata\xea\x02\x19Yoti.Protobuf.Sharepubapib\x06proto3') - , - dependencies=[DataEntry__pb2.DESCRIPTOR,]) - - - - -_EXTRADATA = _descriptor.Descriptor( - name='ExtraData', - full_name='sharepubapi_v1.ExtraData', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='list', full_name='sharepubapi_v1.ExtraData.list', index=0, - number=1, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=52, - serialized_end=104, -) - -_EXTRADATA.fields_by_name['list'].message_type = DataEntry__pb2._DATAENTRY -DESCRIPTOR.message_types_by_name['ExtraData'] = _EXTRADATA -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -ExtraData = _reflection.GeneratedProtocolMessageType('ExtraData', (_message.Message,), dict( - DESCRIPTOR = _EXTRADATA, - __module__ = 'ExtraData_pb2' - # @@protoc_insertion_point(class_scope:sharepubapi_v1.ExtraData) - )) -_sym_db.RegisterMessage(ExtraData) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/share_public_api/ExtraData_pb2_grpc.py b/yoti_python_sdk/protobuf/share_public_api/ExtraData_pb2_grpc.py deleted file mode 100644 index a8943526..00000000 --- a/yoti_python_sdk/protobuf/share_public_api/ExtraData_pb2_grpc.py +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - diff --git a/yoti_python_sdk/protobuf/share_public_api/IssuingAttributes_pb2.py b/yoti_python_sdk/protobuf/share_public_api/IssuingAttributes_pb2.py deleted file mode 100644 index dabec634..00000000 --- a/yoti_python_sdk/protobuf/share_public_api/IssuingAttributes_pb2.py +++ /dev/null @@ -1,117 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: IssuingAttributes.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='IssuingAttributes.proto', - package='sharepubapi_v1', - syntax='proto3', - serialized_options=_b('\n$com.yoti.api.client.spi.remote.protoB\026IssuingAttributesProtoZ\016yotiprotoshare\252\002\030Yoti.Auth.ProtoBuf.Share\312\002\020Yoti\\Sharepubapi\342\002\034Yoti\\Sharepubapi\\GPBMetadata\352\002\031Yoti.Protobuf.Sharepubapi'), - serialized_pb=_b('\n\x17IssuingAttributes.proto\x12\x0esharepubapi_v1\"Y\n\x11IssuingAttributes\x12\x13\n\x0b\x65xpiry_date\x18\x01 \x01(\t\x12/\n\x0b\x64\x65\x66initions\x18\x02 \x03(\x0b\x32\x1a.sharepubapi_v1.Definition\"\x1a\n\nDefinition\x12\x0c\n\x04name\x18\x01 \x01(\tB\xb7\x01\n$com.yoti.api.client.spi.remote.protoB\x16IssuingAttributesProtoZ\x0eyotiprotoshare\xaa\x02\x18Yoti.Auth.ProtoBuf.Share\xca\x02\x10Yoti\\Sharepubapi\xe2\x02\x1cYoti\\Sharepubapi\\GPBMetadata\xea\x02\x19Yoti.Protobuf.Sharepubapib\x06proto3') -) - - - - -_ISSUINGATTRIBUTES = _descriptor.Descriptor( - name='IssuingAttributes', - full_name='sharepubapi_v1.IssuingAttributes', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='expiry_date', full_name='sharepubapi_v1.IssuingAttributes.expiry_date', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='definitions', full_name='sharepubapi_v1.IssuingAttributes.definitions', index=1, - number=2, type=11, cpp_type=10, label=3, - has_default_value=False, default_value=[], - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=43, - serialized_end=132, -) - - -_DEFINITION = _descriptor.Descriptor( - name='Definition', - full_name='sharepubapi_v1.Definition', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='name', full_name='sharepubapi_v1.Definition.name', index=0, - number=1, type=9, cpp_type=9, label=1, - has_default_value=False, default_value=_b("").decode('utf-8'), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=134, - serialized_end=160, -) - -_ISSUINGATTRIBUTES.fields_by_name['definitions'].message_type = _DEFINITION -DESCRIPTOR.message_types_by_name['IssuingAttributes'] = _ISSUINGATTRIBUTES -DESCRIPTOR.message_types_by_name['Definition'] = _DEFINITION -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -IssuingAttributes = _reflection.GeneratedProtocolMessageType('IssuingAttributes', (_message.Message,), dict( - DESCRIPTOR = _ISSUINGATTRIBUTES, - __module__ = 'IssuingAttributes_pb2' - # @@protoc_insertion_point(class_scope:sharepubapi_v1.IssuingAttributes) - )) -_sym_db.RegisterMessage(IssuingAttributes) - -Definition = _reflection.GeneratedProtocolMessageType('Definition', (_message.Message,), dict( - DESCRIPTOR = _DEFINITION, - __module__ = 'IssuingAttributes_pb2' - # @@protoc_insertion_point(class_scope:sharepubapi_v1.Definition) - )) -_sym_db.RegisterMessage(Definition) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/share_public_api/IssuingAttributes_pb2_grpc.py b/yoti_python_sdk/protobuf/share_public_api/IssuingAttributes_pb2_grpc.py deleted file mode 100644 index a8943526..00000000 --- a/yoti_python_sdk/protobuf/share_public_api/IssuingAttributes_pb2_grpc.py +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - diff --git a/yoti_python_sdk/protobuf/share_public_api/ThirdPartyAttribute_pb2.py b/yoti_python_sdk/protobuf/share_public_api/ThirdPartyAttribute_pb2.py deleted file mode 100644 index 01f5910a..00000000 --- a/yoti_python_sdk/protobuf/share_public_api/ThirdPartyAttribute_pb2.py +++ /dev/null @@ -1,80 +0,0 @@ -# Generated by the protocol buffer compiler. DO NOT EDIT! -# source: ThirdPartyAttribute.proto - -import sys -_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) -from google.protobuf import descriptor as _descriptor -from google.protobuf import message as _message -from google.protobuf import reflection as _reflection -from google.protobuf import symbol_database as _symbol_database -# @@protoc_insertion_point(imports) - -_sym_db = _symbol_database.Default() - - -from . import IssuingAttributes_pb2 as IssuingAttributes__pb2 - - -DESCRIPTOR = _descriptor.FileDescriptor( - name='ThirdPartyAttribute.proto', - package='sharepubapi_v1', - syntax='proto3', - serialized_options=_b('\n$com.yoti.api.client.spi.remote.protoB\030ThirdPartyAttributeProtoZ\016yotiprotoshare\252\002\030Yoti.Auth.ProtoBuf.Share\312\002\020Yoti\\Sharepubapi\342\002\034Yoti\\Sharepubapi\\GPBMetadata\352\002\031Yoti.Protobuf.Sharepubapi'), - serialized_pb=_b('\n\x19ThirdPartyAttribute.proto\x12\x0esharepubapi_v1\x1a\x17IssuingAttributes.proto\"l\n\x13ThirdPartyAttribute\x12\x16\n\x0eissuance_token\x18\x01 \x01(\x0c\x12=\n\x12issuing_attributes\x18\x02 \x01(\x0b\x32!.sharepubapi_v1.IssuingAttributesB\xb9\x01\n$com.yoti.api.client.spi.remote.protoB\x18ThirdPartyAttributeProtoZ\x0eyotiprotoshare\xaa\x02\x18Yoti.Auth.ProtoBuf.Share\xca\x02\x10Yoti\\Sharepubapi\xe2\x02\x1cYoti\\Sharepubapi\\GPBMetadata\xea\x02\x19Yoti.Protobuf.Sharepubapib\x06proto3') - , - dependencies=[IssuingAttributes__pb2.DESCRIPTOR,]) - - - - -_THIRDPARTYATTRIBUTE = _descriptor.Descriptor( - name='ThirdPartyAttribute', - full_name='sharepubapi_v1.ThirdPartyAttribute', - filename=None, - file=DESCRIPTOR, - containing_type=None, - fields=[ - _descriptor.FieldDescriptor( - name='issuance_token', full_name='sharepubapi_v1.ThirdPartyAttribute.issuance_token', index=0, - number=1, type=12, cpp_type=9, label=1, - has_default_value=False, default_value=_b(""), - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - _descriptor.FieldDescriptor( - name='issuing_attributes', full_name='sharepubapi_v1.ThirdPartyAttribute.issuing_attributes', index=1, - number=2, type=11, cpp_type=10, label=1, - has_default_value=False, default_value=None, - message_type=None, enum_type=None, containing_type=None, - is_extension=False, extension_scope=None, - serialized_options=None, file=DESCRIPTOR), - ], - extensions=[ - ], - nested_types=[], - enum_types=[ - ], - serialized_options=None, - is_extendable=False, - syntax='proto3', - extension_ranges=[], - oneofs=[ - ], - serialized_start=70, - serialized_end=178, -) - -_THIRDPARTYATTRIBUTE.fields_by_name['issuing_attributes'].message_type = IssuingAttributes__pb2._ISSUINGATTRIBUTES -DESCRIPTOR.message_types_by_name['ThirdPartyAttribute'] = _THIRDPARTYATTRIBUTE -_sym_db.RegisterFileDescriptor(DESCRIPTOR) - -ThirdPartyAttribute = _reflection.GeneratedProtocolMessageType('ThirdPartyAttribute', (_message.Message,), dict( - DESCRIPTOR = _THIRDPARTYATTRIBUTE, - __module__ = 'ThirdPartyAttribute_pb2' - # @@protoc_insertion_point(class_scope:sharepubapi_v1.ThirdPartyAttribute) - )) -_sym_db.RegisterMessage(ThirdPartyAttribute) - - -DESCRIPTOR._options = None -# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/share_public_api/ThirdPartyAttribute_pb2_grpc.py b/yoti_python_sdk/protobuf/share_public_api/ThirdPartyAttribute_pb2_grpc.py deleted file mode 100644 index a8943526..00000000 --- a/yoti_python_sdk/protobuf/share_public_api/ThirdPartyAttribute_pb2_grpc.py +++ /dev/null @@ -1,3 +0,0 @@ -# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! -import grpc - diff --git a/yoti_python_sdk/protobuf/share_public_api/__init__.py b/yoti_python_sdk/protobuf/share_public_api/__init__.py deleted file mode 100644 index d8d07d96..00000000 --- a/yoti_python_sdk/protobuf/share_public_api/__init__.py +++ /dev/null @@ -1,5 +0,0 @@ -import os -import sys - -# needed so we can import relative modules from distinct protobuf-generated files -sys.path.insert(0, os.path.abspath(os.path.dirname(__file__))) \ No newline at end of file diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/AgeVerificationSecret_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/AgeVerificationSecret_pb2.py new file mode 100644 index 00000000..2254360c --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/AgeVerificationSecret_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/AgeVerificationSecret.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n*sharepubapi_v1/AgeVerificationSecret.proto\x12\x18yoti.core.sharepubapi_v1\"J\n\x15\x41geVerificationSecret\x12\x0c\n\x04type\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x14\n\x0c\x62\x61nner_value\x18\x03 \x01(\x05\x42v\n\x17\x63om.yoti.sharepubapi_v1B\x1a\x41geVerificationSecretProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'AgeVerificationSecret_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\027com.yoti.sharepubapi_v1B\032AgeVerificationSecretProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _AGEVERIFICATIONSECRET._serialized_start=72 + _AGEVERIFICATIONSECRET._serialized_end=146 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/CancelSharing_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/CancelSharing_pb2.py new file mode 100644 index 00000000..e7a6e8cb --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/CancelSharing_pb2.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/CancelSharing.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from yoti_python_sdk.protobuf.compubapi_v1 import Metadata_pb2 as compubapi__v1_dot_Metadata__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\"sharepubapi_v1/CancelSharing.proto\x12\x18yoti.core.sharepubapi_v1\x1a\x1b\x63ompubapi_v1/Metadata.proto\"\xaa\x01\n\x14\x43\x61ncelSharingRequest\x12\x15\n\rsharing_token\x18\x01 \x01(\x0c\x12\x16\n\x0e\x63orrelation_id\x18\x02 \x01(\t\x12\x13\n\x0bwrapped_key\x18\x03 \x01(\x0c\x12\x12\n\ncredential\x18\x04 \x01(\x0c\x12:\n\x0f\x64\x65vice_metadata\x18\xc0\x0c \x01(\x0b\x32 .yoti.core.compubapi_v1.Metadata\"@\n\x19\x43\x61ncelSharingNotification\x12\x0f\n\x07success\x18\x01 \x01(\x08\x12\x12\n\nerror_code\x18\x02 \x01(\tBn\n\x17\x63om.yoti.sharepubapi_v1B\x12\x43\x61ncelSharingProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'CancelSharing_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\027com.yoti.sharepubapi_v1B\022CancelSharingProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _CANCELSHARINGREQUEST._serialized_start=94 + _CANCELSHARINGREQUEST._serialized_end=264 + _CANCELSHARINGNOTIFICATION._serialized_start=266 + _CANCELSHARINGNOTIFICATION._serialized_end=330 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/DataEntry_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/DataEntry_pb2.py new file mode 100644 index 00000000..f453319b --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/DataEntry_pb2.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/DataEntry.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1esharepubapi_v1/DataEntry.proto\x12\x18yoti.core.sharepubapi_v1\"\xe7\x01\n\tDataEntry\x12\x36\n\x04type\x18\x01 \x01(\x0e\x32(.yoti.core.sharepubapi_v1.DataEntry.Type\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x92\x01\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12\x0b\n\x07INVOICE\x10\x01\x12\x17\n\x13PAYMENT_TRANSACTION\x10\x02\x12\x0c\n\x08LOCATION\x10\x03\x12\x0f\n\x0bTRANSACTION\x10\x04\x12\x1b\n\x17\x41GE_VERIFICATION_SECRET\x10\x05\x12\x19\n\x15THIRD_PARTY_ATTRIBUTE\x10\x06\x42j\n\x17\x63om.yoti.sharepubapi_v1B\x0e\x44\x61taEntryProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'DataEntry_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\027com.yoti.sharepubapi_v1B\016DataEntryProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _DATAENTRY._serialized_start=61 + _DATAENTRY._serialized_end=292 + _DATAENTRY_TYPE._serialized_start=146 + _DATAENTRY_TYPE._serialized_end=292 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/ExtraData_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/ExtraData_pb2.py new file mode 100644 index 00000000..73402d15 --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/ExtraData_pb2.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/ExtraData.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import DataEntry_pb2 as sharepubapi__v1_dot_DataEntry__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1esharepubapi_v1/ExtraData.proto\x12\x18yoti.core.sharepubapi_v1\x1a\x1esharepubapi_v1/DataEntry.proto\">\n\tExtraData\x12\x31\n\x04list\x18\x01 \x03(\x0b\x32#.yoti.core.sharepubapi_v1.DataEntryBj\n\x17\x63om.yoti.sharepubapi_v1B\x0e\x45xtraDataProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ExtraData_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\027com.yoti.sharepubapi_v1B\016ExtraDataProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _EXTRADATA._serialized_start=92 + _EXTRADATA._serialized_end=154 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/IdentityProfileShare_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/IdentityProfileShare_pb2.py new file mode 100644 index 00000000..7a7a0f03 --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/IdentityProfileShare_pb2.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/IdentityProfileShare.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import Policy_pb2 as sharepubapi__v1_dot_Policy__pb2 +from . import Sharing_pb2 as sharepubapi__v1_dot_Sharing__pb2 +from yoti_python_sdk.protobuf.compubapi_v1 import Metadata_pb2 as compubapi__v1_dot_Metadata__pb2 +from yoti_python_sdk.protobuf.compubapi_v1 import DocumentTypes_pb2 as compubapi__v1_dot_DocumentTypes__pb2 +from yoti_python_sdk.protobuf.devicepubapi_v1 import StaticCredentialAuth_pb2 as devicepubapi__v1_dot_StaticCredentialAuth__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n)sharepubapi_v1/IdentityProfileShare.proto\x12\x18yoti.core.sharepubapi_v1\x1a\x1bsharepubapi_v1/Policy.proto\x1a\x1csharepubapi_v1/Sharing.proto\x1a\x1b\x63ompubapi_v1/Metadata.proto\x1a compubapi_v1/DocumentTypes.proto\x1a*devicepubapi_v1/StaticCredentialAuth.proto\"\xf9\x04\n\x0fNextStepRequest\x12\x12\n\ncredential\x18\x01 \x01(\x0c\x12\x13\n\x0bwrapped_key\x18\x02 \x01(\x0c\x12\x16\n\x0e\x61uth_data_list\x18\x03 \x01(\x0c\x12\x30\n\x06policy\x18\x04 \x01(\x0b\x32 .yoti.core.sharepubapi_v1.Policy\x12\x15\n\rsharing_token\x18\x05 \x01(\x0c\x12\x14\n\x0csession_data\x18\x06 \x01(\t\x12\x30\n\x06issuer\x18\x07 \x01(\x0e\x32 .yoti.core.sharepubapi_v1.Issuer\x12\x36\n\ttransport\x18\x08 \x01(\x0e\x32#.yoti.core.sharepubapi_v1.Transport\x12!\n\x19user_profile_attribute_id\x18\t \x01(\x0c\x12M\n\x11unable_to_provide\x18\n \x01(\x0b\x32\x32.yoti.core.compubapi_v1.DocumentRestrictionsFilter\x12\x15\n\rattribute_ids\x18\x0b \x03(\x0c\x12\x14\n\x0creference_id\x18\x0c \x01(\t\x12:\n\x0f\x64\x65vice_metadata\x18\xc0\x0c \x01(\x0b\x32 .yoti.core.compubapi_v1.Metadata\x12\x16\n\rfeature_flags\x18\xc1\x0c \x01(\x06\x12\x17\n\x0e\x63orrelation_id\x18\xc2\x0c \x01(\t\x12P\n\x16static_credential_auth\x18\xb8\x17 \x01(\x0b\x32/.yoti.core.devicepubapi_v1.StaticCredentialAuth\"\xfc\x04\n\x10NextStepResponse\x12?\n\x05state\x18\x01 \x01(\x0e\x32\x30.yoti.core.sharepubapi_v1.NextStepResponse.State\x12?\n\x0e\x66\x61ilure_reason\x18\x02 \x01(\x0b\x32\'.yoti.core.sharepubapi_v1.FailureReason\x12:\n\x0brequirement\x18\x03 \x01(\x0b\x32%.yoti.core.sharepubapi_v1.Requirement\x12\x43\n\x10progress_summary\x18\x04 \x01(\x0b\x32).yoti.core.sharepubapi_v1.ProgressSummary\x12\x0f\n\x07payload\x18\x05 \x01(\x0c\x12\x46\n\x12unusable_documents\x18\x06 \x03(\x0b\x32*.yoti.core.sharepubapi_v1.UnusableDocument\x12m\n\x1esubsequent_next_step_may_abort\x18\x07 \x01(\x0e\x32\x45.yoti.core.sharepubapi_v1.NextStepResponse.SubsequentNextStepMayAbort\"V\n\x05State\x12\r\n\tUNDEFINED\x10\x00\x12\x08\n\x04\x44ONE\x10\x01\x12\x16\n\x12NEXT_STEP_REQUIRED\x10\x02\x12\x0c\n\x08\x44\x45\x41\x44_END\x10\x03\x12\x0e\n\nCALL_AGAIN\x10\x04\"E\n\x1aSubsequentNextStepMayAbort\x12\x12\n\x0eNOT_APPLICABLE\x10\x00\x12\t\n\x05\x46\x41LSE\x10\x01\x12\x08\n\x04TRUE\x10\x02\"\xc8\x01\n\x10UnusableDocument\x12\x34\n\x08\x64ocument\x18\x01 \x01(\x0b\x32\".yoti.core.compubapi_v1.IdDocument\x12\x41\n\x06reason\x18\x02 \x01(\x0e\x32\x31.yoti.core.sharepubapi_v1.UnusableDocument.Reason\";\n\x06Reason\x12\r\n\tUNDEFINED\x10\x00\x12\x0b\n\x07\x45XPIRED\x10\x01\x12\x15\n\x11OVERSEAS_PASSPORT\x10\x02\"\xde\x01\n\x0fProgressSummary\x12=\n\x0bproof_of_id\x18\x01 \x01(\x0b\x32(.yoti.core.sharepubapi_v1.CategoryStatus\x12\x42\n\x10proof_of_address\x18\x02 \x01(\x0b\x32(.yoti.core.sharepubapi_v1.CategoryStatus\x12H\n\x16\x62iometric_verification\x18\x03 \x01(\x0b\x32(.yoti.core.sharepubapi_v1.CategoryStatus\"$\n\rFailureReason\x12\x13\n\x0breason_code\x18\x01 \x01(\t\"\xf7\x01\n\x0e\x43\x61tegoryStatus\x12=\n\x05state\x18\x01 \x01(\x0e\x32..yoti.core.sharepubapi_v1.CategoryStatus.State\x12N\n\x16\x66ulfilled_requirements\x18\x02 \x03(\x0b\x32..yoti.core.sharepubapi_v1.FulfilledRequirement\"V\n\x05State\x12\r\n\tUNDEFINED\x10\x00\x12\x08\n\x04\x44ONE\x10\x01\x12\x0e\n\nTO_BE_DONE\x10\x02\x12\x0e\n\nNOT_NEEDED\x10\x03\x12\x14\n\x10NO_LONGER_NEEDED\x10\x04\"\x99\x01\n\x14\x46ulfilledRequirement\x12\x38\n\x04type\x18\x01 \x01(\x0e\x32*.yoti.core.sharepubapi_v1.Requirement.Type\x12\x34\n\x08\x64ocument\x18\x02 \x01(\x0b\x32\".yoti.core.compubapi_v1.IdDocument\x12\x11\n\ttimestamp\x18\x03 \x01(\t\"\xaf\x03\n\x0bRequirement\x12\x38\n\x04type\x18\x01 \x01(\x0e\x32*.yoti.core.sharepubapi_v1.Requirement.Type\x12W\n\x14requirement_category\x18\x02 \x01(\x0e\x32\x39.yoti.core.sharepubapi_v1.Requirement.RequirementCategory\x12M\n\x15\x64ocument_restrictions\x18\x03 \x01(\x0b\x32..yoti.core.sharepubapi_v1.DocumentRestrictions\"R\n\x04Type\x12\x10\n\x0cUNDEFINED_RT\x10\x00\x12\x0f\n\x0bID_DOCUMENT\x10\x01\x12\x12\n\x0eMANUAL_ADDRESS\x10\x02\x12\x13\n\x0f\x43ONFIRM_ADDRESS\x10\x03\"j\n\x13RequirementCategory\x12\x10\n\x0cUNDEFINED_RC\x10\x00\x12\x0f\n\x0bPROOF_OF_ID\x10\x01\x12\x14\n\x10PROOF_OF_ADDRESS\x10\x02\x12\x1a\n\x16\x42IOMETRIC_VERIFICATION\x10\x03\"\x81\x01\n\x14\x44ocumentRestrictions\x12%\n\x1d\x63hip_verification_recommended\x18\x01 \x01(\x08\x12\x42\n\x06\x66ilter\x18\x02 \x01(\x0b\x32\x32.yoti.core.compubapi_v1.DocumentRestrictionsFilterBu\n\x17\x63om.yoti.sharepubapi_v1B\x19IdentityProfileShareProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'IdentityProfileShare_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\027com.yoti.sharepubapi_v1B\031IdentityProfileShareProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _NEXTSTEPREQUEST._serialized_start=238 + _NEXTSTEPREQUEST._serialized_end=871 + _NEXTSTEPRESPONSE._serialized_start=874 + _NEXTSTEPRESPONSE._serialized_end=1510 + _NEXTSTEPRESPONSE_STATE._serialized_start=1353 + _NEXTSTEPRESPONSE_STATE._serialized_end=1439 + _NEXTSTEPRESPONSE_SUBSEQUENTNEXTSTEPMAYABORT._serialized_start=1441 + _NEXTSTEPRESPONSE_SUBSEQUENTNEXTSTEPMAYABORT._serialized_end=1510 + _UNUSABLEDOCUMENT._serialized_start=1513 + _UNUSABLEDOCUMENT._serialized_end=1713 + _UNUSABLEDOCUMENT_REASON._serialized_start=1654 + _UNUSABLEDOCUMENT_REASON._serialized_end=1713 + _PROGRESSSUMMARY._serialized_start=1716 + _PROGRESSSUMMARY._serialized_end=1938 + _FAILUREREASON._serialized_start=1940 + _FAILUREREASON._serialized_end=1976 + _CATEGORYSTATUS._serialized_start=1979 + _CATEGORYSTATUS._serialized_end=2226 + _CATEGORYSTATUS_STATE._serialized_start=2140 + _CATEGORYSTATUS_STATE._serialized_end=2226 + _FULFILLEDREQUIREMENT._serialized_start=2229 + _FULFILLEDREQUIREMENT._serialized_end=2382 + _REQUIREMENT._serialized_start=2385 + _REQUIREMENT._serialized_end=2816 + _REQUIREMENT_TYPE._serialized_start=2626 + _REQUIREMENT_TYPE._serialized_end=2708 + _REQUIREMENT_REQUIREMENTCATEGORY._serialized_start=2710 + _REQUIREMENT_REQUIREMENTCATEGORY._serialized_end=2816 + _DOCUMENTRESTRICTIONS._serialized_start=2819 + _DOCUMENTRESTRICTIONS._serialized_end=2948 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/IssuingAttributes_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/IssuingAttributes_pb2.py new file mode 100644 index 00000000..757420e0 --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/IssuingAttributes_pb2.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/IssuingAttributes.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n&sharepubapi_v1/IssuingAttributes.proto\x12\x18yoti.core.sharepubapi_v1\"c\n\x11IssuingAttributes\x12\x13\n\x0b\x65xpiry_date\x18\x01 \x01(\t\x12\x39\n\x0b\x64\x65\x66initions\x18\x02 \x03(\x0b\x32$.yoti.core.sharepubapi_v1.Definition\"\x1a\n\nDefinition\x12\x0c\n\x04name\x18\x01 \x01(\tBr\n\x17\x63om.yoti.sharepubapi_v1B\x16IssuingAttributesProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'IssuingAttributes_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\027com.yoti.sharepubapi_v1B\026IssuingAttributesProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _ISSUINGATTRIBUTES._serialized_start=68 + _ISSUINGATTRIBUTES._serialized_end=167 + _DEFINITION._serialized_start=169 + _DEFINITION._serialized_end=195 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/Location_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/Location_pb2.py new file mode 100644 index 00000000..566d780e --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/Location_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/Location.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1dsharepubapi_v1/Location.proto\x12\x18yoti.core.sharepubapi_v1\"K\n\x08Location\x12\x10\n\x08latitude\x18\x01 \x01(\x01\x12\x11\n\tlongitude\x18\x02 \x01(\x01\x12\x1a\n\x12uncertainty_radius\x18\x03 \x01(\x01\x42i\n\x17\x63om.yoti.sharepubapi_v1B\rLocationProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Location_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\027com.yoti.sharepubapi_v1B\rLocationProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _LOCATION._serialized_start=59 + _LOCATION._serialized_end=134 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/Policy_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/Policy_pb2.py new file mode 100644 index 00000000..fc108825 --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/Policy_pb2.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/Policy.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from yoti_python_sdk.protobuf.compubapi_v1 import IdentityProfile_pb2 as compubapi__v1_dot_IdentityProfile__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bsharepubapi_v1/Policy.proto\x12\x18yoti.core.sharepubapi_v1\x1a\"compubapi_v1/IdentityProfile.proto\"\x83\x0c\n\x06Policy\x12:\n\x06wanted\x18\x01 \x03(\x0b\x32*.yoti.core.sharepubapi_v1.Policy.Attribute\x12\x39\n\x05given\x18\x02 \x03(\x0b\x32*.yoti.core.sharepubapi_v1.Policy.Attribute\x12\x1a\n\x12wanted_remember_me\x18\x03 \x01(\x08\x12\x19\n\x11given_remember_me\x18\x04 \x01(\x08\x12\x18\n\x10given_auth_types\x18\x05 \x03(\x05\x12\x19\n\x11wanted_auth_types\x18\x06 \x03(\x05\x12#\n\x1bwanted_remember_me_optional\x18\x07 \x01(\x08\x12M\n\x10identity_profile\x18\x08 \x01(\x0b\x32\x33.yoti.core.compubapi_v1.IdentityProfileRequirements\x12S\n\x13verification_report\x18\t \x01(\x0b\x32\x36.yoti.core.compubapi_v1.VerificationReportRequirements\x12^\n\x19\x61\x64vanced_identity_profile\x18\x0b \x01(\x0b\x32;.yoti.core.compubapi_v1.AdvancedIdentityProfileRequirements\x1a\x8e\x01\n\nConstraint\x12>\n\x04type\x18\x01 \x01(\x0e\x32\x30.yoti.core.sharepubapi_v1.Policy.Constraint.Type\x12\x12\n\nconstraint\x18\x02 \x01(\x0c\",\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12\t\n\x05VALUE\x10\x01\x12\n\n\x06SOURCE\x10\x02\x1a\x8b\x01\n\x0fValueConstraint\x12\x43\n\x04type\x18\x01 \x01(\x0e\x32\x35.yoti.core.sharepubapi_v1.Policy.ValueConstraint.Type\x12\x12\n\nconstraint\x18\x02 \x01(\x0c\"\x1f\n\x04Type\x12\r\n\tUNDEFINED\x10\x00\x12\x08\n\x04\x44\x41TE\x10\x01\x1a\xde\x01\n\x0e\x44\x61teConstraint\x12\x44\n\x02op\x18\x01 \x01(\x0e\x32\x38.yoti.core.sharepubapi_v1.Policy.DateConstraint.Operator\x12\x0c\n\x04\x64\x61te\x18\x02 \x01(\t\x12;\n\x06offset\x18\x03 \x01(\x0b\x32+.yoti.core.sharepubapi_v1.Policy.DateOffset\";\n\x08Operator\x12\r\n\tUNDEFINED\x10\x00\x12\n\n\x06\x42\x45\x46ORE\x10\x01\x12\t\n\x05\x41\x46TER\x10\x02\x12\t\n\x05\x45QUAL\x10\x03\x1a*\n\nDateOffset\x12\x0c\n\x04\x64\x61ys\x18\x01 \x01(\x05\x12\x0e\n\x06months\x18\x02 \x01(\x05\x1a(\n\x06\x41nchor\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x10\n\x08sub_type\x18\x02 \x01(\t\x1a\x63\n\x0ePreferenceList\x12\x38\n\x07\x61nchors\x18\x01 \x03(\x0b\x32\'.yoti.core.sharepubapi_v1.Policy.Anchor\x12\x17\n\x0fsoft_preference\x18\x02 \x01(\x08\x1a^\n\x10SourceConstraint\x12J\n\x11preferred_sources\x18\x01 \x01(\x0b\x32/.yoti.core.sharepubapi_v1.Policy.PreferenceList\x1a\xcb\x01\n\tAttribute\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07\x61nchors\x18\x02 \x03(\t\x12\x12\n\nderivation\x18\x03 \x01(\t\x12\x10\n\x08optional\x18\x04 \x01(\x08\x12\x1c\n\x14\x61\x63\x63\x65pt_self_asserted\x18\x05 \x01(\x08\x12@\n\x0b\x63onstraints\x18\x06 \x03(\x0b\x32+.yoti.core.sharepubapi_v1.Policy.Constraint\x12\x19\n\x11\x61lternative_names\x18\x07 \x03(\tJ\x04\x08\n\x10\x0b\x42g\n\x17\x63om.yoti.sharepubapi_v1B\x0bPolicyProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Policy_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\027com.yoti.sharepubapi_v1B\013PolicyProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _POLICY._serialized_start=94 + _POLICY._serialized_end=1633 + _POLICY_CONSTRAINT._serialized_start=629 + _POLICY_CONSTRAINT._serialized_end=771 + _POLICY_CONSTRAINT_TYPE._serialized_start=727 + _POLICY_CONSTRAINT_TYPE._serialized_end=771 + _POLICY_VALUECONSTRAINT._serialized_start=774 + _POLICY_VALUECONSTRAINT._serialized_end=913 + _POLICY_VALUECONSTRAINT_TYPE._serialized_start=882 + _POLICY_VALUECONSTRAINT_TYPE._serialized_end=913 + _POLICY_DATECONSTRAINT._serialized_start=916 + _POLICY_DATECONSTRAINT._serialized_end=1138 + _POLICY_DATECONSTRAINT_OPERATOR._serialized_start=1079 + _POLICY_DATECONSTRAINT_OPERATOR._serialized_end=1138 + _POLICY_DATEOFFSET._serialized_start=1140 + _POLICY_DATEOFFSET._serialized_end=1182 + _POLICY_ANCHOR._serialized_start=1184 + _POLICY_ANCHOR._serialized_end=1224 + _POLICY_PREFERENCELIST._serialized_start=1226 + _POLICY_PREFERENCELIST._serialized_end=1325 + _POLICY_SOURCECONSTRAINT._serialized_start=1327 + _POLICY_SOURCECONSTRAINT._serialized_end=1421 + _POLICY_ATTRIBUTE._serialized_start=1424 + _POLICY_ATTRIBUTE._serialized_end=1627 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/ReceiptPush_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/ReceiptPush_pb2.py new file mode 100644 index 00000000..6acfb70f --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/ReceiptPush_pb2.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/ReceiptPush.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import Sharing_pb2 as sharepubapi__v1_dot_Sharing__pb2 +from yoti_python_sdk.protobuf.compubapi_v1 import IdentityProfileReport_pb2 as compubapi__v1_dot_IdentityProfileReport__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n sharepubapi_v1/ReceiptPush.proto\x12\x18yoti.core.sharepubapi_v1\x1a\x1csharepubapi_v1/Sharing.proto\x1a(compubapi_v1/IdentityProfileReport.proto\"\x9f\x03\n\x0eSuccessReceipt\x12\x12\n\nreceipt_id\x18\x01 \x01(\x0c\x12\x1f\n\x17other_party_profile_uri\x18\x02 \x01(\t\x12\x13\n\x0bprofile_uri\x18\x03 \x01(\t\x12\"\n\x1aother_party_extra_data_uri\x18\x04 \x01(\t\x12\x16\n\x0e\x65xtra_data_uri\x18\x05 \x01(\t\x12\x13\n\x0breceipt_key\x18\x06 \x01(\x0c\x12\x12\n\npolicy_uri\x18\x07 \x01(\t\x12\x14\n\x0cpersonal_key\x18\x08 \x01(\x0c\x12\x16\n\x0eremember_me_id\x18\t \x01(\x0c\x12\x11\n\ttimestamp\x18\n \x01(\t\x12\x14\n\x0csession_data\x18\x0b \x01(\t\x12\x30\n\x06issuer\x18\x0c \x01(\x0e\x32 .yoti.core.sharepubapi_v1.Issuer\x12\x36\n\ttransport\x18\r \x01(\x0e\x32#.yoti.core.sharepubapi_v1.Transport\x12\x1d\n\x15parent_remember_me_id\x18\x0e \x01(\x0c\"\x93\x02\n\x0e\x46\x61ilureReceipt\x12\x12\n\nreceipt_id\x18\x01 \x01(\x0c\x12\x12\n\npolicy_uri\x18\x07 \x01(\t\x12\x14\n\x0cpersonal_key\x18\x08 \x01(\x0c\x12\x11\n\ttimestamp\x18\n \x01(\t\x12\x14\n\x0csession_data\x18\x0b \x01(\t\x12\x12\n\nerror_code\x18\x0c \x01(\t\x12\x30\n\x06issuer\x18\r \x01(\x0e\x32 .yoti.core.sharepubapi_v1.Issuer\x12\x36\n\ttransport\x18\x0e \x01(\x0e\x32#.yoti.core.sharepubapi_v1.Transport\x12\x1c\n\x14\x66\x61ilure_reasons_json\x18\x0f \x01(\x0c\"i\n\x0e\x46\x61ilureReasons\x12W\n\x1crequirements_not_met_details\x18\x01 \x03(\x0b\x32\x31.yoti.core.compubapi_v1.RequirementsNotMetDetailsBh\n\x17\x63om.yoti.sharepubapi_v1B\x0cReceiptProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ReceiptPush_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\027com.yoti.sharepubapi_v1B\014ReceiptProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _SUCCESSRECEIPT._serialized_start=135 + _SUCCESSRECEIPT._serialized_end=550 + _FAILURERECEIPT._serialized_start=553 + _FAILURERECEIPT._serialized_end=828 + _FAILUREREASONS._serialized_start=830 + _FAILUREREASONS._serialized_end=935 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/ScanYotiCompleteShare_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/ScanYotiCompleteShare_pb2.py new file mode 100644 index 00000000..2a56db01 --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/ScanYotiCompleteShare_pb2.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/ScanYotiCompleteShare.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from yoti_python_sdk.protobuf.compubapi_v1 import Metadata_pb2 as compubapi__v1_dot_Metadata__pb2 +from . import Sharing_pb2 as sharepubapi__v1_dot_Sharing__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n*sharepubapi_v1/ScanYotiCompleteShare.proto\x12\x18yoti.core.sharepubapi_v1\x1a\x1b\x63ompubapi_v1/Metadata.proto\x1a\x1csharepubapi_v1/Sharing.proto\"\xed\x01\n\x15ScanYotiCompleteShare\x12\x15\n\rsharing_token\x18\x01 \x01(\x0c\x12\x30\n\x06issuer\x18\x02 \x01(\x0e\x32 .yoti.core.sharepubapi_v1.Issuer\x12\x36\n\ttransport\x18\x03 \x01(\x0e\x32#.yoti.core.sharepubapi_v1.Transport\x12:\n\x0f\x64\x65vice_metadata\x18\xc0\x0c \x01(\x0b\x32 .yoti.core.compubapi_v1.Metadata\x12\x17\n\x0e\x63orrelation_id\x18\xc2\x0c \x01(\tBAZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ScanYotiCompleteShare_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'Z.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _SCANYOTICOMPLETESHARE._serialized_start=132 + _SCANYOTICOMPLETESHARE._serialized_end=369 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/SessionData_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/SessionData_pb2.py new file mode 100644 index 00000000..070fd5f6 --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/SessionData_pb2.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/SessionData.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n sharepubapi_v1/SessionData.proto\x12\x18yoti.core.sharepubapi_v1\"L\n\x0bSessionData\x12\x11\n\trandom_id\x18\x01 \x01(\t\x12\x15\n\rdatacentre_id\x18\x02 \x01(\t\x12\x13\n\x0binstance_id\x18\x03 \x01(\tBl\n\x17\x63om.yoti.sharepubapi_v1B\x10SessionDataProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'SessionData_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\027com.yoti.sharepubapi_v1B\020SessionDataProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _SESSIONDATA._serialized_start=62 + _SESSIONDATA._serialized_end=138 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/SharingNotificationPush_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/SharingNotificationPush_pb2.py new file mode 100644 index 00000000..78241e37 --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/SharingNotificationPush_pb2.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/SharingNotificationPush.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import Policy_pb2 as sharepubapi__v1_dot_Policy__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n,sharepubapi_v1/SharingNotificationPush.proto\x12\x18yoti.core.sharepubapi_v1\x1a\x1bsharepubapi_v1/Policy.proto\"\x90\x01\n\x13SharingNotification\x12\x15\n\rsharing_token\x18\x01 \x01(\x0c\x12\x1a\n\x12notification_token\x18\x02 \x01(\x0c\x12\x14\n\x0csession_data\x18\x03 \x01(\t\x12\x30\n\x06policy\x18\x04 \x01(\x0b\x32 .yoti.core.sharepubapi_v1.PolicyBt\n\x17\x63om.yoti.sharepubapi_v1B\x18SharingNotificationProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'SharingNotificationPush_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\027com.yoti.sharepubapi_v1B\030SharingNotificationProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _SHARINGNOTIFICATION._serialized_start=104 + _SHARINGNOTIFICATION._serialized_end=248 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/Sharing_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/Sharing_pb2.py new file mode 100644 index 00000000..e7d97ee8 --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/Sharing_pb2.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/Sharing.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import Policy_pb2 as sharepubapi__v1_dot_Policy__pb2 +from . import DataEntry_pb2 as sharepubapi__v1_dot_DataEntry__pb2 +from yoti_python_sdk.protobuf.compubapi_v1 import Metadata_pb2 as compubapi__v1_dot_Metadata__pb2 +from yoti_python_sdk.protobuf.compubapi_v1 import IdentityProfile_pb2 as compubapi__v1_dot_IdentityProfile__pb2 +from yoti_python_sdk.protobuf.devicepubapi_v1 import StaticCredentialAuth_pb2 as devicepubapi__v1_dot_StaticCredentialAuth__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1csharepubapi_v1/Sharing.proto\x12\x18yoti.core.sharepubapi_v1\x1a\x1bsharepubapi_v1/Policy.proto\x1a\x1esharepubapi_v1/DataEntry.proto\x1a\x1b\x63ompubapi_v1/Metadata.proto\x1a\"compubapi_v1/IdentityProfile.proto\x1a*devicepubapi_v1/StaticCredentialAuth.proto\"\xba\x04\n\x13StartSharingRequest\x12\x16\n\x0e\x63orrelation_id\x18\x01 \x01(\t\x12\x30\n\x06policy\x18\x02 \x01(\x0b\x32 .yoti.core.sharepubapi_v1.Policy\x12\x15\n\rattribute_ids\x18\x03 \x03(\x0c\x12\x13\n\x0bwrapped_key\x18\x04 \x01(\x0c\x12\x12\n\ncredential\x18\x05 \x01(\x0c\x12\x11\n\tauth_list\x18\x06 \x01(\x0c\x12\x18\n\x0bttl_seconds\x18\x07 \x01(\x03H\x00\x88\x01\x01\x12\x1a\n\rone_time_only\x18\x08 \x01(\x08H\x01\x88\x01\x01\x12\x37\n\nextra_data\x18\t \x03(\x0b\x32#.yoti.core.sharepubapi_v1.DataEntry\x12\x1a\n\x12\x62illing_account_id\x18\n \x01(\t\x12\x19\n\x11\x62illing_source_id\x18\x0b \x01(\t\x12\x30\n\x07subject\x18\x0c \x01(\x0b\x32\x1f.yoti.core.compubapi_v1.Subject\x12:\n\x0f\x64\x65vice_metadata\x18\xc0\x0c \x01(\x0b\x32 .yoti.core.compubapi_v1.Metadata\x12P\n\x16static_credential_auth\x18\xb8\x17 \x01(\x0b\x32/.yoti.core.devicepubapi_v1.StaticCredentialAuthB\x0e\n\x0c_ttl_secondsB\x10\n\x0e_one_time_only\"\x80\x01\n\x14StartSharingResponse\x12\x15\n\rsharing_token\x18\x01 \x01(\x0c\x12\x30\n\x06policy\x18\x02 \x01(\x0b\x32 .yoti.core.sharepubapi_v1.Policy\x12\x1f\n\x17sharing_token_for_stats\x18\x03 \x01(\t\"\xf1\x03\n\x16\x43ompleteSharingRequest\x12\x15\n\rsharing_token\x18\x01 \x01(\x0c\x12\x16\n\x0e\x63orrelation_id\x18\x02 \x01(\t\x12\x30\n\x06policy\x18\x03 \x01(\x0b\x32 .yoti.core.sharepubapi_v1.Policy\x12\x15\n\rattribute_ids\x18\x04 \x03(\x0c\x12\x13\n\x0bwrapped_key\x18\x05 \x01(\x0c\x12\x12\n\ncredential\x18\x06 \x01(\x0c\x12\x11\n\tauth_list\x18\x07 \x01(\x0c\x12\x14\n\x0csession_data\x18\x08 \x01(\t\x12\x30\n\x06issuer\x18\t \x01(\x0e\x32 .yoti.core.sharepubapi_v1.Issuer\x12\x36\n\ttransport\x18\n \x01(\x0e\x32#.yoti.core.sharepubapi_v1.Transport\x12\x37\n\nextra_data\x18\x0b \x03(\x0b\x32#.yoti.core.sharepubapi_v1.DataEntry\x12\x14\n\x0creference_id\x18\x0c \x01(\t\x12\x18\n\x10mobile_device_id\x18\r \x01(\t\x12:\n\x0f\x64\x65vice_metadata\x18\xc0\x0c \x01(\x0b\x32 .yoti.core.compubapi_v1.Metadata*7\n\x06Issuer\x12\x08\n\x04\x43ORE\x10\x00\x12\x0b\n\x07\x43ONNECT\x10\x01\x12\n\n\x06PORTAL\x10\x02\x12\n\n\x06MOBILE\x10\x03*0\n\tTransport\x12\r\n\tUNDEFINED\x10\x00\x12\x07\n\x03URI\x10\x01\x12\x0b\n\x07QR_CODE\x10\x02\x42h\n\x17\x63om.yoti.sharepubapi_v1B\x0cSharingProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'Sharing_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\027com.yoti.sharepubapi_v1B\014SharingProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _ISSUER._serialized_start=1432 + _ISSUER._serialized_end=1487 + _TRANSPORT._serialized_start=1489 + _TRANSPORT._serialized_end=1537 + _STARTSHARINGREQUEST._serialized_start=229 + _STARTSHARINGREQUEST._serialized_end=799 + _STARTSHARINGRESPONSE._serialized_start=802 + _STARTSHARINGRESPONSE._serialized_end=930 + _COMPLETESHARINGREQUEST._serialized_start=933 + _COMPLETESHARINGREQUEST._serialized_end=1430 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/ThirdPartyAttribute_pb2.py b/yoti_python_sdk/protobuf/sharepubapi_v1/ThirdPartyAttribute_pb2.py new file mode 100644 index 00000000..f5d3e815 --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/ThirdPartyAttribute_pb2.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: sharepubapi_v1/ThirdPartyAttribute.proto +"""Generated protocol buffer code.""" +from google.protobuf.internal import builder as _builder +from google.protobuf import descriptor as _descriptor +from google.protobuf import descriptor_pool as _descriptor_pool +from google.protobuf import symbol_database as _symbol_database +# @@protoc_insertion_point(imports) + +_sym_db = _symbol_database.Default() + + +from . import IssuingAttributes_pb2 as sharepubapi__v1_dot_IssuingAttributes__pb2 + + +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n(sharepubapi_v1/ThirdPartyAttribute.proto\x12\x18yoti.core.sharepubapi_v1\x1a&sharepubapi_v1/IssuingAttributes.proto\"v\n\x13ThirdPartyAttribute\x12\x16\n\x0eissuance_token\x18\x01 \x01(\x0c\x12G\n\x12issuing_attributes\x18\x02 \x01(\x0b\x32+.yoti.core.sharepubapi_v1.IssuingAttributesBt\n\x17\x63om.yoti.sharepubapi_v1B\x18ThirdPartyAttributeProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\xba\x02\x0eSharepubapiV1_b\x06proto3') + +_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals()) +_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'ThirdPartyAttribute_pb2.py', globals()) +if _descriptor._USE_C_DESCRIPTORS == False: + + DESCRIPTOR._options = None + DESCRIPTOR._serialized_options = b'\n\027com.yoti.sharepubapi_v1B\030ThirdPartyAttributeProtoZ.go.internal.yoti.com/proto/core/sharepubapi_v1\272\002\016SharepubapiV1_' + _THIRDPARTYATTRIBUTE._serialized_start=110 + _THIRDPARTYATTRIBUTE._serialized_end=228 +# @@protoc_insertion_point(module_scope) diff --git a/yoti_python_sdk/protobuf/sharepubapi_v1/__init__.py b/yoti_python_sdk/protobuf/sharepubapi_v1/__init__.py new file mode 100644 index 00000000..40a96afc --- /dev/null +++ b/yoti_python_sdk/protobuf/sharepubapi_v1/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/yoti_python_sdk/share/extra_data.py b/yoti_python_sdk/share/extra_data.py index 2ae49332..44d02086 100644 --- a/yoti_python_sdk/share/extra_data.py +++ b/yoti_python_sdk/share/extra_data.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- from yoti_python_sdk.attribute_issuance_details import AttributeIssuanceDetails -from yoti_python_sdk.protobuf.share_public_api import ThirdPartyAttribute_pb2 -from yoti_python_sdk.protobuf.share_public_api import ExtraData_pb2 +from yoti_python_sdk.protobuf.sharepubapi_v1 import ThirdPartyAttribute_pb2 +from yoti_python_sdk.protobuf.sharepubapi_v1 import ExtraData_pb2 class ExtraData(object): diff --git a/yoti_python_sdk/tests/share/test_extra_data.py b/yoti_python_sdk/tests/share/test_extra_data.py index 4e4767fa..02297508 100644 --- a/yoti_python_sdk/tests/share/test_extra_data.py +++ b/yoti_python_sdk/tests/share/test_extra_data.py @@ -7,10 +7,10 @@ from yoti_python_sdk.share.extra_data import ExtraData from yoti_python_sdk.tests import file_helper -from yoti_python_sdk.protobuf.share_public_api import IssuingAttributes_pb2 -from yoti_python_sdk.protobuf.share_public_api import ThirdPartyAttribute_pb2 -from yoti_python_sdk.protobuf.share_public_api import ExtraData_pb2 -from yoti_python_sdk.protobuf.share_public_api import DataEntry_pb2 +from yoti_python_sdk.protobuf.sharepubapi_v1 import IssuingAttributes_pb2 +from yoti_python_sdk.protobuf.sharepubapi_v1 import ThirdPartyAttribute_pb2 +from yoti_python_sdk.protobuf.sharepubapi_v1 import ExtraData_pb2 +from yoti_python_sdk.protobuf.sharepubapi_v1 import DataEntry_pb2 FIXTURES_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "fixtures") EXTRADATA = os.path.join(FIXTURES_DIR, "testextradata.txt") diff --git a/yoti_python_sdk/tests/test_anchor.py b/yoti_python_sdk/tests/test_anchor.py index 7305d6fa..ef552ed3 100644 --- a/yoti_python_sdk/tests/test_anchor.py +++ b/yoti_python_sdk/tests/test_anchor.py @@ -8,7 +8,7 @@ import yoti_python_sdk from yoti_python_sdk import config from yoti_python_sdk.anchor import Anchor -from yoti_python_sdk.protobuf.attribute_public_api import Attribute_pb2 +from yoti_python_sdk.protobuf.attrpubapi_v1 import Attribute_pb2 from yoti_python_sdk.tests import anchor_fixture_parser diff --git a/yoti_python_sdk/tests/test_attribute_issuance_details.py b/yoti_python_sdk/tests/test_attribute_issuance_details.py index 8e89d378..8279dfb9 100644 --- a/yoti_python_sdk/tests/test_attribute_issuance_details.py +++ b/yoti_python_sdk/tests/test_attribute_issuance_details.py @@ -3,8 +3,8 @@ import os.path from yoti_python_sdk.tests import file_helper from yoti_python_sdk.attribute_issuance_details import AttributeIssuanceDetails -from yoti_python_sdk.protobuf.share_public_api import ThirdPartyAttribute_pb2 -from yoti_python_sdk.protobuf.share_public_api import IssuingAttributes_pb2 +from yoti_python_sdk.protobuf.sharepubapi_v1 import ThirdPartyAttribute_pb2 +from yoti_python_sdk.protobuf.sharepubapi_v1 import IssuingAttributes_pb2 from datetime import datetime import base64 import pytest diff --git a/yoti_python_sdk/version.py b/yoti_python_sdk/version.py index 821f13ed..1375b35c 100644 --- a/yoti_python_sdk/version.py +++ b/yoti_python_sdk/version.py @@ -1,2 +1,2 @@ # -*- coding: utf-8 -*- -__version__ = "2.14.3" \ No newline at end of file +__version__ = "2.14.5" From 587c6c6dddcf7110e954c598d53477334f2b3f9a Mon Sep 17 00:00:00 2001 From: mehmet-yoti <111424390+mehmet-yoti@users.noreply.github.com> Date: Thu, 11 Jun 2026 13:41:00 +0300 Subject: [PATCH 86/98] Sdk 2758 python add support for requesting and retrieving share code resources tasks (#462) * SDK-2758-python-add-support-for-requesting-and-retrieving-share-code-resources-tasks * Fix Copilot review issues and rebase onto development * Fix remaining is comparison for BASIC auth type in test --- yoti_python_sdk/doc_scan/constants.py | 1 + .../doc_scan/session/create/session_spec.py | 2 +- .../subcheck/issuing_authority_sub_check.py | 8 +- .../session/create/subcheck/sub_check.py | 2 +- .../session/retrieve/get_session_result.py | 2 +- .../session/retrieve/resource_container.py | 18 ++ .../session/retrieve/resource_response.py | 2 + .../retrieve/share_code_media_response.py | 26 +++ .../retrieve/share_code_resource_response.py | 137 +++++++++++ .../verify_share_code_task_response.py | 9 + .../create/test_notification_config.py | 4 +- .../retrieve/test_resource_container.py | 29 +++ .../test_share_code_media_response.py | 58 +++++ .../test_share_code_resource_response.py | 214 ++++++++++++++++++ .../test_verify_share_code_task_response.py | 63 ++++++ 15 files changed, 567 insertions(+), 8 deletions(-) create mode 100644 yoti_python_sdk/doc_scan/session/retrieve/share_code_media_response.py create mode 100644 yoti_python_sdk/doc_scan/session/retrieve/share_code_resource_response.py create mode 100644 yoti_python_sdk/doc_scan/session/retrieve/verify_share_code_task_response.py create mode 100644 yoti_python_sdk/tests/doc_scan/session/retrieve/test_share_code_media_response.py create mode 100644 yoti_python_sdk/tests/doc_scan/session/retrieve/test_share_code_resource_response.py create mode 100644 yoti_python_sdk/tests/doc_scan/session/retrieve/test_verify_share_code_task_response.py diff --git a/yoti_python_sdk/doc_scan/constants.py b/yoti_python_sdk/doc_scan/constants.py index ec2ea3a3..96794dad 100644 --- a/yoti_python_sdk/doc_scan/constants.py +++ b/yoti_python_sdk/doc_scan/constants.py @@ -13,6 +13,7 @@ SUPPLEMENTARY_DOCUMENT_TEXT_DATA_EXTRACTION = ( "SUPPLEMENTARY_DOCUMENT_TEXT_DATA_EXTRACTION" ) +VERIFY_SHARE_CODE_TASK = "VERIFY_SHARE_CODE_TASK" CAMERA = "CAMERA" CAMERA_AND_UPLOAD = "CAMERA_AND_UPLOAD" diff --git a/yoti_python_sdk/doc_scan/session/create/session_spec.py b/yoti_python_sdk/doc_scan/session/create/session_spec.py index 75a2b8be..c5c8afee 100644 --- a/yoti_python_sdk/doc_scan/session/create/session_spec.py +++ b/yoti_python_sdk/doc_scan/session/create/session_spec.py @@ -43,7 +43,7 @@ def __init__( :param block_biometric_consent: block the collection of biometric consent :type block_biometric_consent: bool :param session_deadline: session deadline using a Zoned timestamp - "type session_deadline: str + :type session_deadline: str """ if requested_tasks is None: requested_tasks = [] diff --git a/yoti_python_sdk/doc_scan/session/create/subcheck/issuing_authority_sub_check.py b/yoti_python_sdk/doc_scan/session/create/subcheck/issuing_authority_sub_check.py index 376171b7..fe2df1e4 100644 --- a/yoti_python_sdk/doc_scan/session/create/subcheck/issuing_authority_sub_check.py +++ b/yoti_python_sdk/doc_scan/session/create/subcheck/issuing_authority_sub_check.py @@ -1,11 +1,10 @@ # -*- coding: utf-8 -*- from yoti_python_sdk.doc_scan.session.create.filter.document_filter import DocumentFilter -from yoti_python_sdk.utils import YotiSerializable -from .sub_check import SubRequestedCheck +from yoti_python_sdk.utils import YotiSerializable, remove_null_values -class IssuingAuthoritySubCheck(SubRequestedCheck): +class IssuingAuthoritySubCheck(YotiSerializable): """ Requests creation of an Issuing Authority Sub Check. """ @@ -21,6 +20,9 @@ def requested(self): def filter(self): return self._filter + def to_json(self): + return remove_null_values({"requested": self.requested, "filter": self.filter}) + class IssuingAuthoritySubCheckBuilder: """ diff --git a/yoti_python_sdk/doc_scan/session/create/subcheck/sub_check.py b/yoti_python_sdk/doc_scan/session/create/subcheck/sub_check.py index d4fa882d..c707552b 100644 --- a/yoti_python_sdk/doc_scan/session/create/subcheck/sub_check.py +++ b/yoti_python_sdk/doc_scan/session/create/subcheck/sub_check.py @@ -1,7 +1,7 @@ from abc import ABCMeta from abc import abstractmethod -from yoti_python_sdk.utils import YotiSerializable +from yoti_python_sdk.utils import YotiSerializable, remove_null_values class SubRequestedCheck(YotiSerializable): diff --git a/yoti_python_sdk/doc_scan/session/retrieve/get_session_result.py b/yoti_python_sdk/doc_scan/session/retrieve/get_session_result.py index 7f238281..1d995d04 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/get_session_result.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/get_session_result.py @@ -81,7 +81,7 @@ def __parse_check(check): constants.ID_DOCUMENT_FACE_MATCH: FaceMatchCheckResponse, constants.ID_DOCUMENT_TEXT_DATA_CHECK: TextDataCheckResponse, constants.LIVENESS: LivenessCheckResponse, - constants.WATCHLIST_SCREENING_CHECK_TYPE: WatchlistScreeningCheckResponse, + constants.WATCHLIST_SCREENING_CHECK_TYPE: WatchlistScreeningCheckResponse, constants.ID_DOCUMENT_COMPARISON: IDDocumentComparisonCheckResponse, constants.SUPPLEMENTARY_DOCUMENT_TEXT_DATA_CHECK: SupplementaryDocumentTextDataCheckResponse, } diff --git a/yoti_python_sdk/doc_scan/session/retrieve/resource_container.py b/yoti_python_sdk/doc_scan/session/retrieve/resource_container.py index 3aaf0ecd..03351c48 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/resource_container.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/resource_container.py @@ -14,6 +14,9 @@ from yoti_python_sdk.doc_scan.session.retrieve.static_liveness_resource_response import ( StaticLivenessResourceResponse, ) +from yoti_python_sdk.doc_scan.session.retrieve.share_code_resource_response import ( + ShareCodeResourceResponse, +) class ResourceContainer(object): @@ -45,6 +48,11 @@ def __init__(self, data=None): for liveness in data.get("liveness_capture", []) ] + self.__share_codes = [ + ShareCodeResourceResponse(share_code) + for share_code in data.get("share_codes", []) + ] + @staticmethod def __parse_liveness_capture(liveness_capture): """ @@ -122,3 +130,13 @@ def static_liveness_resources(self): for liveness in self.__liveness_capture if isinstance(liveness, StaticLivenessResourceResponse) ] + + @property + def share_codes(self): + """ + Return a list of share code resources + + :return: list of share codes + :rtype: list[ShareCodeResourceResponse] + """ + return self.__share_codes diff --git a/yoti_python_sdk/doc_scan/session/retrieve/resource_response.py b/yoti_python_sdk/doc_scan/session/retrieve/resource_response.py index bd5c8087..bd9e83a1 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/resource_response.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/resource_response.py @@ -4,6 +4,7 @@ TextExtractionTaskResponse, SupplementaryDocumentTextExtractionTaskResponse, ) +from .verify_share_code_task_response import VerifyShareCodeTaskResponse class ResourceResponse(object): @@ -35,6 +36,7 @@ def __parse_task(task): types = { constants.ID_DOCUMENT_TEXT_DATA_EXTRACTION: TextExtractionTaskResponse, constants.SUPPLEMENTARY_DOCUMENT_TEXT_DATA_EXTRACTION: SupplementaryDocumentTextExtractionTaskResponse, + constants.VERIFY_SHARE_CODE_TASK: VerifyShareCodeTaskResponse, } clazz = types.get( task.get("type", None), TaskResponse # Default fallback for task type diff --git a/yoti_python_sdk/doc_scan/session/retrieve/share_code_media_response.py b/yoti_python_sdk/doc_scan/session/retrieve/share_code_media_response.py new file mode 100644 index 00000000..70156c11 --- /dev/null +++ b/yoti_python_sdk/doc_scan/session/retrieve/share_code_media_response.py @@ -0,0 +1,26 @@ +from yoti_python_sdk.doc_scan.session.retrieve.media_response import MediaResponse + + +class ShareCodeMediaResponse(object): + """ + Wraps a MediaResponse inside a share code resource field + """ + + def __init__(self, data=None): + if data is None: + data = dict() + + if "media" in data and data["media"] is not None: + self.__media = MediaResponse(data["media"]) + else: + self.__media = None + + @property + def media(self): + """ + The media object + + :return: the media + :rtype: MediaResponse or None + """ + return self.__media diff --git a/yoti_python_sdk/doc_scan/session/retrieve/share_code_resource_response.py b/yoti_python_sdk/doc_scan/session/retrieve/share_code_resource_response.py new file mode 100644 index 00000000..305df909 --- /dev/null +++ b/yoti_python_sdk/doc_scan/session/retrieve/share_code_resource_response.py @@ -0,0 +1,137 @@ +from yoti_python_sdk.doc_scan.session.retrieve.resource_response import ( + ResourceResponse, +) +from yoti_python_sdk.doc_scan.session.retrieve.share_code_media_response import ( + ShareCodeMediaResponse, +) +from yoti_python_sdk.doc_scan.session.retrieve.verify_share_code_task_response import ( + VerifyShareCodeTaskResponse, +) + + +class ShareCodeResourceResponse(ResourceResponse): + """ + Represents a share code resource for a given session + """ + + def __init__(self, data=None): + if data is None: + data = dict() + + ResourceResponse.__init__(self, data) + + source = data.get("source", None) + if isinstance(source, str): + self.__source = source + elif isinstance(source, dict): + self.__source = source.get("type", None) + else: + self.__source = None + + self.__created_at = data.get("created_at", None) + self.__last_updated = data.get("last_updated", None) + + self.__lookup_profile = ( + ShareCodeMediaResponse(data["lookup_profile"]) + if "lookup_profile" in data and data["lookup_profile"] is not None + else None + ) + self.__returned_profile = ( + ShareCodeMediaResponse(data["returned_profile"]) + if "returned_profile" in data and data["returned_profile"] is not None + else None + ) + self.__id_photo = ( + ShareCodeMediaResponse(data["id_photo"]) + if "id_photo" in data and data["id_photo"] is not None + else None + ) + self.__file = ( + ShareCodeMediaResponse(data["file"]) + if "file" in data and data["file"] is not None + else None + ) + + @property + def source(self): + """ + The source of the share code + + :return: the source + :rtype: str or None + """ + return self.__source + + @property + def created_at(self): + """ + The date the share code was created + + :return: the created at date + :rtype: str or None + """ + return self.__created_at + + @property + def last_updated(self): + """ + The date the share code was last updated + + :return: the last updated date + :rtype: str or None + """ + return self.__last_updated + + @property + def lookup_profile(self): + """ + The lookup profile media + + :return: the lookup profile + :rtype: ShareCodeMediaResponse or None + """ + return self.__lookup_profile + + @property + def returned_profile(self): + """ + The returned profile media + + :return: the returned profile + :rtype: ShareCodeMediaResponse or None + """ + return self.__returned_profile + + @property + def id_photo(self): + """ + The ID photo media + + :return: the ID photo + :rtype: ShareCodeMediaResponse or None + """ + return self.__id_photo + + @property + def file(self): + """ + The file media + + :return: the file + :rtype: ShareCodeMediaResponse or None + """ + return self.__file + + @property + def verify_share_code_tasks(self): + """ + Returns a list of verify share code tasks + + :return: list of verify share code tasks + :rtype: list[VerifyShareCodeTaskResponse] + """ + return [ + task + for task in self.tasks + if isinstance(task, VerifyShareCodeTaskResponse) + ] diff --git a/yoti_python_sdk/doc_scan/session/retrieve/verify_share_code_task_response.py b/yoti_python_sdk/doc_scan/session/retrieve/verify_share_code_task_response.py new file mode 100644 index 00000000..f942a26a --- /dev/null +++ b/yoti_python_sdk/doc_scan/session/retrieve/verify_share_code_task_response.py @@ -0,0 +1,9 @@ +from yoti_python_sdk.doc_scan.session.retrieve.task_response import TaskResponse + + +class VerifyShareCodeTaskResponse(TaskResponse): + """ + Represents a Verify Share Code task response + """ + + pass diff --git a/yoti_python_sdk/tests/doc_scan/session/create/test_notification_config.py b/yoti_python_sdk/tests/doc_scan/session/create/test_notification_config.py index 1fa09b29..aa2ca183 100644 --- a/yoti_python_sdk/tests/doc_scan/session/create/test_notification_config.py +++ b/yoti_python_sdk/tests/doc_scan/session/create/test_notification_config.py @@ -116,7 +116,7 @@ def test_build_with_basic_auth_type(self): .build() ) - assert result.auth_type is "BASIC" + assert result.auth_type == "BASIC" def test_build_with_bearer_auth_type(self): result = ( @@ -128,7 +128,7 @@ def test_build_with_bearer_auth_type(self): .build() ) - assert result.auth_type is "BEARER" + assert result.auth_type == "BEARER" def test_should_serialize_to_json_without_error(self): result = ( diff --git a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_resource_container.py b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_resource_container.py index 6607d2d9..35a51e71 100644 --- a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_resource_container.py +++ b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_resource_container.py @@ -9,6 +9,9 @@ from yoti_python_sdk.doc_scan.session.retrieve.resource_container import ( ResourceContainer, ) +from yoti_python_sdk.doc_scan.session.retrieve.share_code_resource_response import ( + ShareCodeResourceResponse, +) class ResourceContainerTest(unittest.TestCase): @@ -62,6 +65,32 @@ def test_should_filter_static_liveness_resources(self): assert len(result.liveness_capture) == 2 assert len(result.static_liveness_resources) == 1 + def test_should_parse_share_codes(self): + data = { + "share_codes": [ + {"id": "share-code-1", "source": "END_USER", "tasks": []}, + {"id": "share-code-2", "source": "END_USER", "tasks": []}, + ] + } + + result = ResourceContainer(data) + + assert len(result.share_codes) == 2 + assert isinstance(result.share_codes[0], ShareCodeResourceResponse) + assert isinstance(result.share_codes[1], ShareCodeResourceResponse) + + def test_should_parse_with_empty_share_codes(self): + data = {"share_codes": []} + + result = ResourceContainer(data) + + assert len(result.share_codes) == 0 + + def test_should_parse_with_missing_share_codes(self): + result = ResourceContainer({}) + + assert len(result.share_codes) == 0 + if __name__ == "__main__": unittest.main() diff --git a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_share_code_media_response.py b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_share_code_media_response.py new file mode 100644 index 00000000..82d989a6 --- /dev/null +++ b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_share_code_media_response.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import unittest + +from yoti_python_sdk.doc_scan.session.retrieve.share_code_media_response import ( + ShareCodeMediaResponse, +) + + +class ShareCodeMediaResponseTest(unittest.TestCase): + def test_should_parse_media(self): + data = { + "media": { + "id": "some-media-id", + "type": "JSON", + "created": "2026-02-05T11:33:46Z", + "last_updated": "2026-02-05T11:33:50Z", + } + } + + result = ShareCodeMediaResponse(data) + + assert result.media is not None + assert result.media.id == "some-media-id" + assert result.media.type == "JSON" + assert result.media.created is not None + assert result.media.last_updated is not None + + def test_should_return_none_media_when_key_missing(self): + result = ShareCodeMediaResponse({}) + + assert result.media is None + + def test_should_return_none_media_when_value_is_null(self): + data = {"media": None} + + result = ShareCodeMediaResponse(data) + + assert result.media is None + + def test_should_parse_empty_media_object(self): + data = {"media": {}} + + result = ShareCodeMediaResponse(data) + + assert result.media is not None + assert result.media.id is None + assert result.media.type is None + + def test_should_parse_when_none(self): + result = ShareCodeMediaResponse(None) + + assert result.media is None + + +if __name__ == "__main__": + unittest.main() diff --git a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_share_code_resource_response.py b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_share_code_resource_response.py new file mode 100644 index 00000000..668a5263 --- /dev/null +++ b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_share_code_resource_response.py @@ -0,0 +1,214 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import unittest + +from yoti_python_sdk.doc_scan.session.retrieve.resource_response import ( + ResourceResponse, +) +from yoti_python_sdk.doc_scan.session.retrieve.share_code_resource_response import ( + ShareCodeResourceResponse, +) +from yoti_python_sdk.doc_scan.session.retrieve.verify_share_code_task_response import ( + VerifyShareCodeTaskResponse, +) + + +class ShareCodeResourceResponseTest(unittest.TestCase): + def test_should_parse_correctly(self): + data = { + "id": "some-id", + "source": "END_USER", + "created_at": "2026-02-05T11:33:46Z", + "last_updated": "2026-02-05T11:33:50Z", + "tasks": [], + } + + result = ShareCodeResourceResponse(data) + + assert result.id == "some-id" + assert result.source == "END_USER" + assert result.created_at == "2026-02-05T11:33:46Z" + assert result.last_updated == "2026-02-05T11:33:50Z" + + def test_should_be_instance_of_resource_response(self): + result = ShareCodeResourceResponse({}) + + assert isinstance(result, ResourceResponse) + + def test_should_filter_verify_share_code_tasks(self): + data = { + "tasks": [ + {"type": "VERIFY_SHARE_CODE_TASK", "id": "task-1"}, + {"type": "SOME_OTHER_TASK", "id": "task-2"}, + ] + } + + result = ShareCodeResourceResponse(data) + + assert len(result.tasks) == 2 + assert len(result.verify_share_code_tasks) == 1 + assert result.verify_share_code_tasks[0].id == "task-1" + + def test_should_parse_multiple_verify_share_code_tasks(self): + data = { + "tasks": [ + {"type": "VERIFY_SHARE_CODE_TASK", "id": "task-1"}, + {"type": "VERIFY_SHARE_CODE_TASK", "id": "task-2"}, + ] + } + + result = ShareCodeResourceResponse(data) + + assert len(result.verify_share_code_tasks) == 2 + + def test_should_parse_media_fields(self): + data = { + "lookup_profile": {"media": {"id": "lp-media", "type": "JSON"}}, + "returned_profile": {"media": {"id": "rp-media", "type": "JSON"}}, + "id_photo": {"media": {"id": "ip-media", "type": "IMAGE"}}, + "file": {"media": {"id": "f-media", "type": "PDF"}}, + "tasks": [], + } + + result = ShareCodeResourceResponse(data) + + assert result.lookup_profile is not None + assert result.lookup_profile.media.id == "lp-media" + assert result.lookup_profile.media.type == "JSON" + assert result.returned_profile is not None + assert result.returned_profile.media.id == "rp-media" + assert result.id_photo is not None + assert result.id_photo.media.id == "ip-media" + assert result.id_photo.media.type == "IMAGE" + assert result.file is not None + assert result.file.media.id == "f-media" + assert result.file.media.type == "PDF" + + def test_should_parse_source_as_object(self): + data = {"source": {"type": "END_USER"}, "tasks": []} + + result = ShareCodeResourceResponse(data) + + assert result.source == "END_USER" + + def test_should_parse_source_as_string(self): + data = {"source": "END_USER", "tasks": []} + + result = ShareCodeResourceResponse(data) + + assert result.source == "END_USER" + + def test_should_return_none_for_missing_media_fields(self): + data = {"tasks": []} + + result = ShareCodeResourceResponse(data) + + assert result.lookup_profile is None + assert result.returned_profile is None + assert result.id_photo is None + assert result.file is None + + def test_should_return_none_for_null_media_fields(self): + data = { + "lookup_profile": None, + "returned_profile": None, + "id_photo": None, + "file": None, + "tasks": [], + } + + result = ShareCodeResourceResponse(data) + + assert result.lookup_profile is None + assert result.returned_profile is None + assert result.id_photo is None + assert result.file is None + + def test_should_parse_when_none(self): + result = ShareCodeResourceResponse(None) + + assert result.id is None + assert result.source is None + assert result.created_at is None + assert result.last_updated is None + assert result.lookup_profile is None + assert result.returned_profile is None + assert result.id_photo is None + assert result.file is None + + def test_should_parse_with_no_tasks(self): + data = {"id": "some-id", "tasks": []} + + result = ShareCodeResourceResponse(data) + + assert len(result.verify_share_code_tasks) == 0 + + def test_should_parse_full_realistic_payload(self): + data = { + "id": "abc12345-share-code-id", + "source": {"type": "END_USER"}, + "created_at": "2026-02-05T11:33:46Z", + "last_updated": "2026-02-05T11:33:50Z", + "lookup_profile": { + "media": { + "id": "lp-media-id", + "type": "JSON", + "created": "2026-02-05T11:33:46Z", + "last_updated": "2026-02-05T11:33:50Z", + } + }, + "returned_profile": { + "media": { + "id": "rp-media-id", + "type": "JSON", + } + }, + "id_photo": { + "media": { + "id": "ip-media-id", + "type": "IMAGE", + } + }, + "file": { + "media": { + "id": "f-media-id", + "type": "PDF", + } + }, + "tasks": [ + { + "type": "VERIFY_SHARE_CODE_TASK", + "id": "task-id-1", + "state": "DONE", + "created": "2026-02-05T11:33:46Z", + "last_updated": "2026-02-05T11:33:50Z", + "generated_media": [ + {"id": "gen-media-1", "type": "PDF"}, + {"id": "gen-media-2", "type": "IMAGE"}, + ], + } + ], + } + + result = ShareCodeResourceResponse(data) + + assert result.id == "abc12345-share-code-id" + assert result.source == "END_USER" + assert result.created_at == "2026-02-05T11:33:46Z" + assert result.last_updated == "2026-02-05T11:33:50Z" + assert result.lookup_profile.media.id == "lp-media-id" + assert result.returned_profile.media.id == "rp-media-id" + assert result.id_photo.media.id == "ip-media-id" + assert result.file.media.id == "f-media-id" + assert len(result.verify_share_code_tasks) == 1 + assert isinstance( + result.verify_share_code_tasks[0], VerifyShareCodeTaskResponse + ) + assert result.verify_share_code_tasks[0].id == "task-id-1" + assert result.verify_share_code_tasks[0].state == "DONE" + assert len(result.verify_share_code_tasks[0].generated_media) == 2 + + +if __name__ == "__main__": + unittest.main() diff --git a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_verify_share_code_task_response.py b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_verify_share_code_task_response.py new file mode 100644 index 00000000..78d9e63a --- /dev/null +++ b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_verify_share_code_task_response.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +import unittest + +from yoti_python_sdk.doc_scan.session.retrieve.task_response import TaskResponse +from yoti_python_sdk.doc_scan.session.retrieve.verify_share_code_task_response import ( + VerifyShareCodeTaskResponse, +) + + +class VerifyShareCodeTaskResponseTest(unittest.TestCase): + def test_should_be_instance_of_task_response(self): + result = VerifyShareCodeTaskResponse({}) + + assert isinstance(result, TaskResponse) + + def test_should_parse_task_fields(self): + data = { + "type": "VERIFY_SHARE_CODE_TASK", + "id": "some-task-id", + "state": "DONE", + "created": "2026-02-05T11:33:46Z", + "last_updated": "2026-02-05T11:33:50Z", + } + + result = VerifyShareCodeTaskResponse(data) + + assert result.type == "VERIFY_SHARE_CODE_TASK" + assert result.id == "some-task-id" + assert result.state == "DONE" + assert result.created is not None + assert result.last_updated is not None + + def test_should_parse_generated_media(self): + data = { + "type": "VERIFY_SHARE_CODE_TASK", + "id": "some-task-id", + "state": "DONE", + "generated_media": [ + {"id": "media-1", "type": "PDF"}, + {"id": "media-2", "type": "IMAGE"}, + ], + } + + result = VerifyShareCodeTaskResponse(data) + + assert len(result.generated_media) == 2 + assert result.generated_media[0].id == "media-1" + assert result.generated_media[0].type == "PDF" + assert result.generated_media[1].id == "media-2" + assert result.generated_media[1].type == "IMAGE" + + def test_should_parse_when_none(self): + result = VerifyShareCodeTaskResponse(None) + + assert result.id is None + assert result.type is None + assert result.state is None + + +if __name__ == "__main__": + unittest.main() From ee00876ad20d12068c1675ab12e2faf694b4006a Mon Sep 17 00:00:00 2001 From: mehmet-yoti <111424390+mehmet-yoti@users.noreply.github.com> Date: Thu, 11 Jun 2026 13:59:26 +0300 Subject: [PATCH 87/98] SDK-2792: Python - Add support for retrieving the extraction_image_ids field from the IDV pages - python (#461) * feat(SDK-2792): Python - Add support for retrieving the extraction_image_ids field from the IDV pages [python] Rebase onto development to resolve conflicts. * fix(SDK-2792): fix typo and remove duplicate entries in requirements.in [python] * fix(SDK-2792): remove unsafe packages comments from requirements files [python] --- examples/yoti_example_django/requirements.txt | 3 -- .../session/retrieve/page_response.py | 11 ++++++ .../session/retrieve/test_page_response.py | 39 +++++++++++++++++++ .../response_get_docs_scan_session.txt | 3 +- 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/examples/yoti_example_django/requirements.txt b/examples/yoti_example_django/requirements.txt index d966b31c..dd988ae1 100644 --- a/examples/yoti_example_django/requirements.txt +++ b/examples/yoti_example_django/requirements.txt @@ -66,6 +66,3 @@ wrapt==1.12.1 # via deprecated yoti==2.14.0 # via -r requirements.in - -# The following packages are considered to be unsafe in a requirements file: -# setuptools diff --git a/yoti_python_sdk/doc_scan/session/retrieve/page_response.py b/yoti_python_sdk/doc_scan/session/retrieve/page_response.py index 25661660..9d296244 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/page_response.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/page_response.py @@ -23,6 +23,7 @@ def __init__(self, data=None): ) self.__media = MediaResponse(data["media"]) if "media" in data.keys() else None self.__frames = [FrameResponse(frame) for frame in data.get("frames", [])] + self.__extraction_image_ids = list(data.get("extraction_image_ids") or []) @property def capture_method(self): @@ -53,3 +54,13 @@ def frames(self): :rtype: list[FrameResponse] """ return self.__frames + + @property + def extraction_image_ids(self): + """ + Returns the list of media IDs used for automated extraction + + :return: the extraction image IDs + :rtype: list[str] + """ + return self.__extraction_image_ids diff --git a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_page_response.py b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_page_response.py index 22e66d18..6b9e95d8 100644 --- a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_page_response.py +++ b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_page_response.py @@ -8,12 +8,18 @@ class PageResponseTest(unittest.TestCase): SOME_CAPTURE_METHOD = "someCaptureMethod" SOME_FRAMES = [{"first": "frame"}, {"second": "frame"}] + SOME_EXTRACTION_IMAGE_ID = "066a9372-1ab9-49f0-b390-1b58e08f17f6" + SOME_OTHER_EXTRACTION_IMAGE_ID = "1a2b3c4d-5e6f-7890-abcd-ef1234567890" def test_should_parse_correctly(self): data = { "capture_method": self.SOME_CAPTURE_METHOD, "media": {}, "frames": self.SOME_FRAMES, + "extraction_image_ids": [ + self.SOME_EXTRACTION_IMAGE_ID, + self.SOME_OTHER_EXTRACTION_IMAGE_ID, + ], } result = PageResponse(data) @@ -23,6 +29,10 @@ def test_should_parse_correctly(self): assert len(result.frames) == 2 assert isinstance(result.frames[0], FrameResponse) assert isinstance(result.frames[1], FrameResponse) + assert result.extraction_image_ids == [ + self.SOME_EXTRACTION_IMAGE_ID, + self.SOME_OTHER_EXTRACTION_IMAGE_ID, + ] def test_should_parse_with_none(self): result = PageResponse(None) @@ -30,6 +40,35 @@ def test_should_parse_with_none(self): assert result.capture_method is None assert result.media is None assert len(result.frames) == 0 + assert result.extraction_image_ids == [] + + def test_should_parse_extraction_image_ids_with_single_uuid(self): + data = {"extraction_image_ids": [self.SOME_EXTRACTION_IMAGE_ID]} + + result = PageResponse(data) + + assert result.extraction_image_ids == [self.SOME_EXTRACTION_IMAGE_ID] + + def test_should_parse_extraction_image_ids_with_empty_array(self): + data = {"extraction_image_ids": []} + + result = PageResponse(data) + + assert result.extraction_image_ids == [] + + def test_should_parse_extraction_image_ids_with_null(self): + data = {"extraction_image_ids": None} + + result = PageResponse(data) + + assert result.extraction_image_ids == [] + + def test_should_parse_extraction_image_ids_when_field_absent(self): + data = {"capture_method": self.SOME_CAPTURE_METHOD} + + result = PageResponse(data) + + assert result.extraction_image_ids == [] if __name__ == "__main__": diff --git a/yoti_python_sdk/tests/fixtures/response_get_docs_scan_session.txt b/yoti_python_sdk/tests/fixtures/response_get_docs_scan_session.txt index 2bb3194e..2087ed58 100644 --- a/yoti_python_sdk/tests/fixtures/response_get_docs_scan_session.txt +++ b/yoti_python_sdk/tests/fixtures/response_get_docs_scan_session.txt @@ -28,7 +28,8 @@ "type": "IMAGE", "created": "2020-01-30T15:00:00Z", "last_updated": "2020-01-30T15:00:00Z" - } + }, + "extraction_image_ids": [""] }], "document_fields": { "media": { From b66626181bf51504d56c790b64b622864602cb31 Mon Sep 17 00:00:00 2001 From: mehmet-yoti <111424390+mehmet-yoti@users.noreply.github.com> Date: Thu, 11 Jun 2026 14:57:57 +0300 Subject: [PATCH 88/98] SDK-2781: Python - Add support for new capture_type property on Static Liveness resources - python (#460) * feat(SDK-2781): Python - Add support for new capture_type property on Static Liveness resources [python] --- .../static_liveness_resource_response.py | 11 +++++++ .../retrieve/test_resource_container.py | 22 ++++++++++++++ .../retrieve/test_static_liveness_resource.py | 29 +++++++++++++++++++ 3 files changed, 62 insertions(+) diff --git a/yoti_python_sdk/doc_scan/session/retrieve/static_liveness_resource_response.py b/yoti_python_sdk/doc_scan/session/retrieve/static_liveness_resource_response.py index 970258e1..4a4e9b00 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/static_liveness_resource_response.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/static_liveness_resource_response.py @@ -23,6 +23,7 @@ def __init__(self, data=None): self.__image = ( ImageResponse(data["image"]) if "image" in data.keys() else None ) + self.__capture_type = data.get("capture_type", None) @property def image(self): @@ -33,3 +34,13 @@ def image(self): :rtype: ImageResponse or None """ return self.__image + + @property + def capture_type(self): + """ + Returns the capture type for the static liveness resource + + :return: the capture type + :rtype: str or None + """ + return self.__capture_type diff --git a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_resource_container.py b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_resource_container.py index 35a51e71..1890aa47 100644 --- a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_resource_container.py +++ b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_resource_container.py @@ -9,6 +9,9 @@ from yoti_python_sdk.doc_scan.session.retrieve.resource_container import ( ResourceContainer, ) +from yoti_python_sdk.doc_scan.session.retrieve.static_liveness_resource_response import ( + StaticLivenessResourceResponse, +) from yoti_python_sdk.doc_scan.session.retrieve.share_code_resource_response import ( ShareCodeResourceResponse, ) @@ -65,6 +68,25 @@ def test_should_filter_static_liveness_resources(self): assert len(result.liveness_capture) == 2 assert len(result.static_liveness_resources) == 1 + def test_should_expose_capture_type_on_static_liveness_resource(self): + data = { + "liveness_capture": [ + {"liveness_type": "STATIC", "capture_type": "PHOTOGRAPH"}, + {"liveness_type": "ZOOM"}, + ] + } + + result = ResourceContainer(data) + + static_resources = result.static_liveness_resources + assert len(static_resources) == 1 + assert isinstance(static_resources[0], StaticLivenessResourceResponse) + assert static_resources[0].capture_type == "PHOTOGRAPH" + + zoom_resources = result.zoom_liveness_resources + assert len(zoom_resources) == 1 + assert not hasattr(zoom_resources[0], "capture_type") + def test_should_parse_share_codes(self): data = { "share_codes": [ diff --git a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_static_liveness_resource.py b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_static_liveness_resource.py index 0037810c..8f57874b 100644 --- a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_static_liveness_resource.py +++ b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_static_liveness_resource.py @@ -12,6 +12,7 @@ def test_should_parse_static_liveness_resource(self): "id": "bbbbbbb-5717-4562-b3fc-2c963f66afa6", "source": {"type": "END_USER"}, "liveness_type": "STATIC", + "capture_type": "PHOTOGRAPH", "image": { "media": { "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6", @@ -27,6 +28,7 @@ def test_should_parse_static_liveness_resource(self): assert result.id == "bbbbbbb-5717-4562-b3fc-2c963f66afa6" assert result.liveness_type == "STATIC" + assert result.capture_type == "PHOTOGRAPH" assert isinstance(result.image, ImageResponse) assert isinstance(result.image.media, MediaResponse) assert result.image.media.id == "3fa85f64-5717-4562-b3fc-2c963f66afa6" @@ -44,6 +46,33 @@ def test_should_handle_missing_image(self): assert result.id == "test-id" assert result.liveness_type == "STATIC" assert result.image is None + assert result.capture_type is None + + def test_should_handle_missing_capture_type(self): + data = { + "id": "test-id", + "liveness_type": "STATIC", + "image": { + "media": { + "id": "media-id-123", + "type": "IMAGE", + "created": "2021-06-11T11:39:24Z", + "last_updated": "2021-06-11T11:39:24Z", + } + }, + "tasks": [], + } + + result = StaticLivenessResourceResponse(data) + + assert result.capture_type is None + assert result.image is not None + + def test_should_handle_none_data(self): + result = StaticLivenessResourceResponse(None) + + assert result.capture_type is None + assert result.image is None def test_should_parse_media_id_for_retrieval(self): data = { From 492e8b36edc3d5fec9a09a7cfb513e804abf6868 Mon Sep 17 00:00:00 2001 From: mehmet-yoti <111424390+mehmet-yoti@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:15:33 +0300 Subject: [PATCH 89/98] SDK-2614: Python - Support configuration for IDV shortened flow - python (#459) * feat(SDK-2614): Python - Support configuration for IDV shortened flow [python] * fix(SDK-2614): address Copilot review comments on sdk_config - Fix docstring param order to match function signature (allow_handoff before privacy_policy_url) - Copy suppressed_screens list in build() to prevent mutation of built configs - Use == instead of is for string assertions in tests - Add test for empty suppressed_screens list serialization --- yoti_python_sdk/doc_scan/constants.py | 8 ++ .../doc_scan/session/create/sdk_config.py | 54 +++++++++++- .../session/create/test_sdk_config.py | 85 ++++++++++++++++++- 3 files changed, 142 insertions(+), 5 deletions(-) diff --git a/yoti_python_sdk/doc_scan/constants.py b/yoti_python_sdk/doc_scan/constants.py index 96794dad..8227c0cc 100644 --- a/yoti_python_sdk/doc_scan/constants.py +++ b/yoti_python_sdk/doc_scan/constants.py @@ -40,3 +40,11 @@ PROOF_OF_ADDRESS = "PROOF_OF_ADDRESS" WATCHLIST_SCREENING_CHECK_TYPE = "WATCHLIST_SCREENING" + +ID_DOCUMENT_EDUCATION = "ID_DOCUMENT_EDUCATION" +ID_DOCUMENT_REQUIREMENTS = "ID_DOCUMENT_REQUIREMENTS" +SUPPLEMENTARY_DOCUMENT_EDUCATION = "SUPPLEMENTARY_DOCUMENT_EDUCATION" +ZOOM_LIVENESS_EDUCATION = "ZOOM_LIVENESS_EDUCATION" +STATIC_LIVENESS_EDUCATION = "STATIC_LIVENESS_EDUCATION" +FACE_CAPTURE_EDUCATION = "FACE_CAPTURE_EDUCATION" +FLOW_COMPLETION = "FLOW_COMPLETION" diff --git a/yoti_python_sdk/doc_scan/session/create/sdk_config.py b/yoti_python_sdk/doc_scan/session/create/sdk_config.py index 37cde6b5..b4203165 100644 --- a/yoti_python_sdk/doc_scan/session/create/sdk_config.py +++ b/yoti_python_sdk/doc_scan/session/create/sdk_config.py @@ -23,6 +23,7 @@ def __init__( error_url, allow_handoff=None, privacy_policy_url=None, + suppressed_screens=None, ): """ :param allowed_capture_methods: the allowed capture methods @@ -41,10 +42,12 @@ def __init__( :type success_url: str :param error_url: the error url :type error_url: str - :param privacy_policy_url: the privacy policy url - :type privacy_policy_url: str :param allow_handoff: boolean flag for allow_handoff :type allow_handoff: bool + :param privacy_policy_url: the privacy policy url + :type privacy_policy_url: str + :param suppressed_screens: list of screen names to be suppressed + :type suppressed_screens: list[str] """ self.__allowed_capture_methods = allowed_capture_methods self.__primary_colour = primary_colour @@ -56,6 +59,7 @@ def __init__( self.__error_url = error_url self.__privacy_policy_url = privacy_policy_url self.__allow_handoff = allow_handoff + self.__suppressed_screens = suppressed_screens @property def allowed_capture_methods(self): @@ -148,6 +152,16 @@ def allow_handoff(self): """ return self.__allow_handoff + @property + def suppressed_screens(self): + """ + The list of screen names that should be omitted from the IDV flow + + :return: the list of suppressed screens + :rtype: list[str] or None + """ + return self.__suppressed_screens + def to_json(self): return remove_null_values( { @@ -161,6 +175,7 @@ def to_json(self): "error_url": self.error_url, "privacy_policy_url": self.privacy_policy_url, "allow_handoff": self.allow_handoff, + "suppressed_screens": self.suppressed_screens, } ) @@ -181,6 +196,7 @@ def __init__(self): self.__error_url = None self.__privacy_policy_url = None self.__allow_handoff = None + self.__suppressed_screens = None def with_allowed_capture_methods(self, allowed_capture_methods): """ @@ -320,6 +336,39 @@ def with_allow_handoff(self, flag): self.__allow_handoff = flag return self + def with_suppressed_screens(self, suppressed_screens): + """ + Sets the list of screens to be suppressed from the IDV flow. + + Valid screen names are defined in + :mod:`yoti_python_sdk.doc_scan.constants`: + ``ID_DOCUMENT_EDUCATION``, ``ID_DOCUMENT_REQUIREMENTS``, + ``SUPPLEMENTARY_DOCUMENT_EDUCATION``, ``ZOOM_LIVENESS_EDUCATION``, + ``STATIC_LIVENESS_EDUCATION``, ``FACE_CAPTURE_EDUCATION``, + ``FLOW_COMPLETION``. + + :param suppressed_screens: the list of screens to suppress + :type suppressed_screens: list[str] + :return: the builder + :rtype: SdkConfigBuilder + """ + self.__suppressed_screens = list(suppressed_screens) if suppressed_screens is not None else None + return self + + def with_suppressed_screen(self, screen): + """ + Adds a single screen name to the list of suppressed screens. + + :param screen: the screen name to suppress + :type screen: str + :return: the builder + :rtype: SdkConfigBuilder + """ + if self.__suppressed_screens is None: + self.__suppressed_screens = [] + self.__suppressed_screens.append(screen) + return self + def build(self): return SdkConfig( self.__allowed_capture_methods, @@ -332,4 +381,5 @@ def build(self): self.__error_url, self.__allow_handoff, self.__privacy_policy_url, + list(self.__suppressed_screens) if self.__suppressed_screens is not None else None, ) diff --git a/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py b/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py index d621a441..8c70faba 100644 --- a/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py +++ b/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py @@ -1,6 +1,7 @@ import json import unittest +from yoti_python_sdk.doc_scan import constants from yoti_python_sdk.doc_scan.session.create import SdkConfigBuilder from yoti_python_sdk.doc_scan.session.create.sdk_config import SdkConfig from yoti_python_sdk.utils import YotiEncoder @@ -16,6 +17,10 @@ class SdkConfigTest(unittest.TestCase): SOME_ERROR_URL = "https://mysite.com/yoti/error" SOME_PRIVACY_POLICY_URL = "https://mysite.com/privacy" SOME_ALLOW_HANDOFF = True + SOME_SUPPRESSED_SCREENS = [ + constants.ID_DOCUMENT_EDUCATION, + constants.FLOW_COMPLETION, + ] def test_should_build_correctly(self): result = ( @@ -30,6 +35,7 @@ def test_should_build_correctly(self): .with_error_url(self.SOME_ERROR_URL) .with_privacy_policy_url(self.SOME_PRIVACY_POLICY_URL) .with_allow_handoff(self.SOME_ALLOW_HANDOFF) + .with_suppressed_screens(self.SOME_SUPPRESSED_SCREENS) .build() ) @@ -40,10 +46,11 @@ def test_should_build_correctly(self): assert result.font_colour is self.SOME_FONT_COLOUR assert result.locale is self.SOME_LOCALE assert result.preset_issuing_country is self.SOME_PRESET_ISSUING_COUNTRY - assert result.success_url is self.SOME_SUCCESS_URL - assert result.error_url is self.SOME_ERROR_URL - assert result.privacy_policy_url is self.SOME_PRIVACY_POLICY_URL + assert result.success_url == self.SOME_SUCCESS_URL + assert result.error_url == self.SOME_ERROR_URL + assert result.privacy_policy_url == self.SOME_PRIVACY_POLICY_URL assert result.allow_handoff is True + assert result.suppressed_screens == self.SOME_SUPPRESSED_SCREENS def test_should_allows_camera(self): result = SdkConfigBuilder().with_allows_camera().build() @@ -78,6 +85,78 @@ def test_should_serialize_to_json_without_error(self): s = json.dumps(result, cls=YotiEncoder) assert s is not None and s != "" + def test_suppressed_screens_default_to_none(self): + result = SdkConfigBuilder().with_allows_camera().build() + + assert result.suppressed_screens is None + + def test_should_add_individual_suppressed_screens(self): + result = ( + SdkConfigBuilder() + .with_suppressed_screen(constants.ID_DOCUMENT_EDUCATION) + .with_suppressed_screen(constants.FLOW_COMPLETION) + .build() + ) + + assert result.suppressed_screens == [ + constants.ID_DOCUMENT_EDUCATION, + constants.FLOW_COMPLETION, + ] + + def test_suppressed_screens_serialized_when_set(self): + result = ( + SdkConfigBuilder() + .with_suppressed_screens(self.SOME_SUPPRESSED_SCREENS) + .build() + ) + + s = json.dumps(result, cls=YotiEncoder) + parsed = json.loads(s) + + assert "suppressed_screens" in parsed + assert parsed["suppressed_screens"] == self.SOME_SUPPRESSED_SCREENS + + def test_suppressed_screens_empty_list_serialized(self): + result = SdkConfigBuilder().with_suppressed_screens([]).build() + + s = json.dumps(result, cls=YotiEncoder) + parsed = json.loads(s) + + assert "suppressed_screens" in parsed + assert parsed["suppressed_screens"] == [] + + def test_suppressed_screens_omitted_when_not_set(self): + result = SdkConfigBuilder().with_allows_camera().build() + + s = json.dumps(result, cls=YotiEncoder) + parsed = json.loads(s) + + assert "suppressed_screens" not in parsed + + def test_with_suppressed_screens_returns_builder(self): + builder = SdkConfigBuilder() + result = builder.with_suppressed_screens(self.SOME_SUPPRESSED_SCREENS) + + assert result is builder + + def test_with_suppressed_screen_returns_builder(self): + builder = SdkConfigBuilder() + result = builder.with_suppressed_screen(constants.FLOW_COMPLETION) + + assert result is builder + + def test_suppressed_screen_constants_defined(self): + assert constants.ID_DOCUMENT_EDUCATION == "ID_DOCUMENT_EDUCATION" + assert constants.ID_DOCUMENT_REQUIREMENTS == "ID_DOCUMENT_REQUIREMENTS" + assert ( + constants.SUPPLEMENTARY_DOCUMENT_EDUCATION + == "SUPPLEMENTARY_DOCUMENT_EDUCATION" + ) + assert constants.ZOOM_LIVENESS_EDUCATION == "ZOOM_LIVENESS_EDUCATION" + assert constants.STATIC_LIVENESS_EDUCATION == "STATIC_LIVENESS_EDUCATION" + assert constants.FACE_CAPTURE_EDUCATION == "FACE_CAPTURE_EDUCATION" + assert constants.FLOW_COMPLETION == "FLOW_COMPLETION" + if __name__ == "__main__": unittest.main() From 5d8b4a9bd1e6021be3db399713d9b172d8524bd7 Mon Sep 17 00:00:00 2001 From: mehmet-yoti <111424390+mehmet-yoti@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:35:16 +0300 Subject: [PATCH 90/98] SDK-2473: Python - IDV Support Brand ID in session config - python (#458) * feat(SDK-2473): Python - IDV Support Brand ID in session config [python] * fix(SDK-2473): fix docstring param order and test assertions [python] - Reorder allow_handoff/privacy_policy_url in docstring to match signature - Use == instead of is for string value assertions in tests - Add .claude/ to .gitignore and remove settings.local.json from tracking --- .gitignore | 1 + requirements.in | 1 + .../doc_scan/session/create/sdk_config.py | 28 +++++++++++++++++ .../session/create/test_sdk_config.py | 31 +++++++++++++++++++ 4 files changed, 61 insertions(+) diff --git a/.gitignore b/.gitignore index 022b5cb0..d53377e2 100644 --- a/.gitignore +++ b/.gitignore @@ -106,3 +106,4 @@ examples/yoti_example_flask/*.pem .scannerwork .venv/ +.claude/ diff --git a/requirements.in b/requirements.in index 0b66c116..ef7329d1 100644 --- a/requirements.in +++ b/requirements.in @@ -1,3 +1,4 @@ + asn1==2.2.0 cryptography>=42.0.0 cffi>=1.16.0 diff --git a/yoti_python_sdk/doc_scan/session/create/sdk_config.py b/yoti_python_sdk/doc_scan/session/create/sdk_config.py index b4203165..366538de 100644 --- a/yoti_python_sdk/doc_scan/session/create/sdk_config.py +++ b/yoti_python_sdk/doc_scan/session/create/sdk_config.py @@ -23,6 +23,7 @@ def __init__( error_url, allow_handoff=None, privacy_policy_url=None, + brand_id=None, suppressed_screens=None, ): """ @@ -46,6 +47,8 @@ def __init__( :type allow_handoff: bool :param privacy_policy_url: the privacy policy url :type privacy_policy_url: str + :param brand_id: the brand id used to theme the IDV iframe + :type brand_id: str :param suppressed_screens: list of screen names to be suppressed :type suppressed_screens: list[str] """ @@ -59,6 +62,7 @@ def __init__( self.__error_url = error_url self.__privacy_policy_url = privacy_policy_url self.__allow_handoff = allow_handoff + self.__brand_id = brand_id self.__suppressed_screens = suppressed_screens @property @@ -152,6 +156,15 @@ def allow_handoff(self): """ return self.__allow_handoff + @property + def brand_id(self): + """ + The brand id used to theme the IDV iframe. + + :return: the brand id + """ + return self.__brand_id + @property def suppressed_screens(self): """ @@ -175,6 +188,7 @@ def to_json(self): "error_url": self.error_url, "privacy_policy_url": self.privacy_policy_url, "allow_handoff": self.allow_handoff, + "brand_id": self.brand_id, "suppressed_screens": self.suppressed_screens, } ) @@ -196,6 +210,7 @@ def __init__(self): self.__error_url = None self.__privacy_policy_url = None self.__allow_handoff = None + self.__brand_id = None self.__suppressed_screens = None def with_allowed_capture_methods(self, allowed_capture_methods): @@ -336,6 +351,18 @@ def with_allow_handoff(self, flag): self.__allow_handoff = flag return self + def with_brand_id(self, brand_id): + """ + Sets the brand id used to theme the IDV iframe + + :param brand_id: the brand id + :type brand_id: str + :return: the builder + :rtype: SdkConfigBuilder + """ + self.__brand_id = brand_id + return self + def with_suppressed_screens(self, suppressed_screens): """ Sets the list of screens to be suppressed from the IDV flow. @@ -381,5 +408,6 @@ def build(self): self.__error_url, self.__allow_handoff, self.__privacy_policy_url, + self.__brand_id, list(self.__suppressed_screens) if self.__suppressed_screens is not None else None, ) diff --git a/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py b/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py index 8c70faba..bd57276b 100644 --- a/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py +++ b/yoti_python_sdk/tests/doc_scan/session/create/test_sdk_config.py @@ -17,6 +17,7 @@ class SdkConfigTest(unittest.TestCase): SOME_ERROR_URL = "https://mysite.com/yoti/error" SOME_PRIVACY_POLICY_URL = "https://mysite.com/privacy" SOME_ALLOW_HANDOFF = True + SOME_BRAND_ID = "your-brand-id" SOME_SUPPRESSED_SCREENS = [ constants.ID_DOCUMENT_EDUCATION, constants.FLOW_COMPLETION, @@ -35,6 +36,7 @@ def test_should_build_correctly(self): .with_error_url(self.SOME_ERROR_URL) .with_privacy_policy_url(self.SOME_PRIVACY_POLICY_URL) .with_allow_handoff(self.SOME_ALLOW_HANDOFF) + .with_brand_id(self.SOME_BRAND_ID) .with_suppressed_screens(self.SOME_SUPPRESSED_SCREENS) .build() ) @@ -50,6 +52,7 @@ def test_should_build_correctly(self): assert result.error_url == self.SOME_ERROR_URL assert result.privacy_policy_url == self.SOME_PRIVACY_POLICY_URL assert result.allow_handoff is True + assert result.brand_id == self.SOME_BRAND_ID assert result.suppressed_screens == self.SOME_SUPPRESSED_SCREENS def test_should_allows_camera(self): @@ -85,6 +88,34 @@ def test_should_serialize_to_json_without_error(self): s = json.dumps(result, cls=YotiEncoder) assert s is not None and s != "" + def test_not_passing_brand_id(self): + result = SdkConfigBuilder().with_allows_camera().build() + + assert result.brand_id is None + + def test_with_brand_id(self): + result = SdkConfigBuilder().with_brand_id(self.SOME_BRAND_ID).build() + + assert result.brand_id == self.SOME_BRAND_ID + + def test_brand_id_in_json_when_set(self): + result = SdkConfigBuilder().with_brand_id(self.SOME_BRAND_ID).build() + + serialised = json.loads(json.dumps(result, cls=YotiEncoder)) + assert serialised["brand_id"] == self.SOME_BRAND_ID + + def test_brand_id_absent_from_json_when_not_set(self): + result = SdkConfigBuilder().with_allows_camera().build() + + serialised = json.loads(json.dumps(result, cls=YotiEncoder)) + assert "brand_id" not in serialised + + def test_brand_id_absent_from_json_when_none(self): + result = SdkConfigBuilder().with_brand_id(None).build() + + serialised = json.loads(json.dumps(result, cls=YotiEncoder)) + assert "brand_id" not in serialised + def test_suppressed_screens_default_to_none(self): result = SdkConfigBuilder().with_allows_camera().build() From f5c8fe4a9662f2a0c45527f57f04449280d7e98c Mon Sep 17 00:00:00 2001 From: mehmet-yoti <111424390+mehmet-yoti@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:42:50 +0300 Subject: [PATCH 91/98] SDK-2743-python-expose-idv-breakdown-process-property (#453) * SDK-2743-python-expose-idv-breakdown-process-property * fix: apply Copilot review suggestions on BreakdownResponse - Use == instead of is for string comparisons in test assertions - Clarify process property docstring to mention breakdown process type --- .../doc_scan/session/retrieve/breakdown_response.py | 11 +++++++++++ .../session/retrieve/test_breakdown_response.py | 8 ++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/yoti_python_sdk/doc_scan/session/retrieve/breakdown_response.py b/yoti_python_sdk/doc_scan/session/retrieve/breakdown_response.py index 20622087..3d22d2e7 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/breakdown_response.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/breakdown_response.py @@ -14,6 +14,7 @@ def __init__(self, data): """ self.__sub_check = data.get("sub_check", None) self.__result = data.get("result", None) + self.__process = data.get("process", None) self.__details = [DetailsResponse(detail) for detail in data.get("details", [])] @property @@ -36,6 +37,16 @@ def result(self): """ return self.__result + @property + def process(self): + """ + The breakdown process type for the sub-check (e.g. AUTOMATED or EXPERT_REVIEW) + + :return: the breakdown process type + :rtype: str or None + """ + return self.__process + @property def details(self): """ diff --git a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_breakdown_response.py b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_breakdown_response.py index 2b534512..b64c0ddc 100644 --- a/yoti_python_sdk/tests/doc_scan/session/retrieve/test_breakdown_response.py +++ b/yoti_python_sdk/tests/doc_scan/session/retrieve/test_breakdown_response.py @@ -8,6 +8,7 @@ class BreakdownResponseTest(unittest.TestCase): SOME_SUB_CHECK = "someSubCheck" SOME_RESULT = "someResult" + SOME_PROCESS = "AUTOMATED" SOME_DETAILS = [ {"name": "firstDetailName", "value": "firstDetailValue"}, {"name": "secondDetailName", "value": "secondDetailValue"}, @@ -17,13 +18,15 @@ def test_should_build_correctly(self): data = { "sub_check": self.SOME_SUB_CHECK, "result": self.SOME_RESULT, + "process": self.SOME_PROCESS, "details": self.SOME_DETAILS, } result = BreakdownResponse(data) - assert result.sub_check is self.SOME_SUB_CHECK - assert result.result is self.SOME_RESULT + assert result.sub_check == self.SOME_SUB_CHECK + assert result.result == self.SOME_RESULT + assert result.process == self.SOME_PROCESS assert len(result.details) == 2 assert result.details[0].name == "firstDetailName" assert result.details[0].value == "firstDetailValue" @@ -31,6 +34,7 @@ def test_should_build_correctly(self): def test_should_default_details_to_empty_list(self): result = BreakdownResponse({}) assert len(result.details) == 0 + assert result.process is None if __name__ == "__main__": From a8d2e0fc67db9dba0af6abd47b9512e365f5a1b1 Mon Sep 17 00:00:00 2001 From: mehmet-yoti <111424390+mehmet-yoti@users.noreply.github.com> Date: Thu, 11 Jun 2026 16:45:02 +0300 Subject: [PATCH 92/98] =?UTF-8?q?SDK-2792-python-add-support-for-retrievin?= =?UTF-8?q?g-the-extraction-image-ids-f=E2=80=A6=20(#452)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * SDK-2792-python-add-support-for-retrieving-the-extraction-image-ids-field-from-the-idv-pages From aa55696b7ad0072a7e1a35f805c623bec19ccf12 Mon Sep 17 00:00:00 2001 From: mehmet-yoti <111424390+mehmet-yoti@users.noreply.github.com> Date: Thu, 11 Jun 2026 17:06:48 +0300 Subject: [PATCH 93/98] Sdk 2803 python upgrade dependencies to address security cv es core sdk examples (#463) * SDK-2803 Phase 1: bump core SDK dependencies to close High-severity CVEs - cryptography >=44.0.1 (CVE-2024-12797 bundled-OpenSSL) - pyopenssl >=26.0.0 - requests >=2.32.4 (CVE-2024-47081 .netrc leak) - urllib3 >=2.6.3 (decompression/encoding/redirect CVEs) - cffi >=1.17.1, wheel >=0.46.2 (CVE-2026-24049), PyYAML >=6.0.2, wrapt >=1.17.2, itsdangerous >=2.2.0 - regenerated requirements.txt picks up fresh certifi (2026.4.22), idna (3.15) which closes those transitive CVEs * SDK-2803 Phase 2: bump protobuf to >=4.25.8,<6 and regenerate pb2 modules - protobuf 3.20.3 -> >=4.25.8,<6 in setup.py and requirements.in; pip-compile resolves to 5.29.6, closing CVE-2025-4565 and CVE-2026-0994 (recursion DoS in google.protobuf). - Regenerate all *_pb2.py via protoc 3.21.12 from sdk-protobuf/proto/. Output now uses the _builder.BuildMessageAndEnumDescriptors API that is required by protobuf 4.x/5.x runtimes. - _pb2_grpc.py stubs are unused in this SDK and left untouched. - pytest: 438 passed, 0 failed. * SDK-2803 Phase 3: upgrade example apps to close shipped CVEs aml: no .in change, regenerated to pick up new core deps doc_scan: flask>=3.0.6, pyopenssl>=26.0.0, deprecated>=1.2.14, iso8601>=1.1.0, pytz>=2025.2, click>=8.1 django: django 4.0.1 -> 4.2 LTS (closes critical SQLi CVEs), urllib3>=2.6.3, requests>=2.32.4, cffi>=1.17.1; remove unused six; add DEFAULT_AUTO_FIELD = BigAutoField to settings.py for 4.2 flask: flask 1->3.0.6 (CVE-2023-30861), werkzeug 1->3.0.6 (request smuggling, debugger RCE, path traversal CVEs), jinja2>=3.1.6 (5 CVEs), pyopenssl, urllib3, requests bumped, itsdangerous>=2.2.0 added explicitly; remove unused six setup.py extras_require[examples]: Django>=4.2,<5.3, Flask>=3.0.6, Werkzeug>=3.0.6 * fix(SDK-2803): add urllib3>=2.6.3 to install_requires to enforce CVE floor [python] * fix: pin protobuf<6 in aml example to match SDK install_requires constraint --- examples/aml/requirements.in | 1 + examples/aml/requirements.txt | 54 ++++++++++--------- examples/yoti_example_django/requirements.in | 9 ++-- .../yoti_example/settings.py | 2 + setup.py | 15 +++--- 5 files changed, 43 insertions(+), 38 deletions(-) diff --git a/examples/aml/requirements.in b/examples/aml/requirements.in index 7e25054c..39d4ba4f 100644 --- a/examples/aml/requirements.in +++ b/examples/aml/requirements.in @@ -1,2 +1,3 @@ yoti>=2.14.0 +protobuf<6 python-dotenv>=0.7.1 diff --git a/examples/aml/requirements.txt b/examples/aml/requirements.txt index 33889910..d5b65599 100644 --- a/examples/aml/requirements.txt +++ b/examples/aml/requirements.txt @@ -1,46 +1,48 @@ # -# This file is autogenerated by pip-compile with python 3.10 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.9 +# by the following command: # -# pip-compile --output-file=requirements.txt requirements.in +# pip-compile --output-file=examples/aml/requirements.txt examples/aml/requirements.in # asn1==2.2.0 # via yoti -certifi==2021.10.8 +certifi==2026.4.22 # via requests -cffi==1.15.0 +cffi==2.0.0 # via cryptography -charset-normalizer==2.0.10 +charset-normalizer==3.4.7 # via requests -cryptography==36.0.1 +cryptography==48.0.0 # via # pyopenssl # yoti -deprecated==1.2.10 +deprecated==1.3.1 # via yoti -future==0.18.2 - # via yoti -idna==3.3 +idna==3.15 # via requests -iso8601==0.1.13 - # via yoti -protobuf==3.19.3 +iso8601==2.1.0 # via yoti -pycparser==2.21 +protobuf==5.29.6 + # via + # -r examples/aml/requirements.in + # yoti +pycparser==2.23 # via cffi -pyopenssl==21.0.0 +pyopenssl==26.2.0 # via yoti -python-dotenv==0.19.2 - # via -r requirements.in -pytz==2020.4 +python-dotenv==1.2.1 + # via -r examples/aml/requirements.in +pytz==2026.2 # via yoti -requests==2.27.1 +requests==2.32.5 # via yoti -six==1.16.0 - # via pyopenssl -urllib3==1.26.8 +typing-extensions==4.15.0 + # via + # cryptography + # pyopenssl +urllib3==2.6.3 # via requests -wrapt==1.13.3 +wrapt==2.1.2 # via deprecated -yoti==2.14.0 - # via -r requirements.in +yoti==2.14.5 + # via -r examples/aml/requirements.in diff --git a/examples/yoti_example_django/requirements.in b/examples/yoti_example_django/requirements.in index 884d3bd9..c7629691 100644 --- a/examples/yoti_example_django/requirements.in +++ b/examples/yoti_example_django/requirements.in @@ -1,8 +1,7 @@ -django>=4.0.1 +django>=4.2,<5.3 django-sslserver>=0.22.0 python-dotenv>=0.7.1 -requests>=2.20.0 -urllib3>=1.24.2 +requests>=2.32.4 +urllib3>=2.6.3 yoti>=2.14.0 -six>=1.16.0 -cffi>=1.15.0 \ No newline at end of file +cffi>=1.17.1 diff --git a/examples/yoti_example_django/yoti_example/settings.py b/examples/yoti_example_django/yoti_example/settings.py index 73bd1b2a..60d28b85 100644 --- a/examples/yoti_example_django/yoti_example/settings.py +++ b/examples/yoti_example_django/yoti_example/settings.py @@ -80,6 +80,8 @@ } } +DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" + # Password validation # https://docs.djangoproject.com/en/1.10/ref/settings/#auth-password-validators diff --git a/setup.py b/setup.py index fd3be6db..e40e3721 100644 --- a/setup.py +++ b/setup.py @@ -22,10 +22,11 @@ "asn1==2.2.0", # still pinned due to enum34 issue - "cryptography>=42.0.0", - "protobuf>=4.21.12", - "requests>=2.31.0", - "pyopenssl>=24.0.0", + "cryptography>=44.0.1", + "protobuf>=4.25.8,<6", + "requests>=2.32.4", + "urllib3>=2.6.3", + "pyopenssl>=26.0.0", "pytz>=2025.2", "iso8601>=1.1.0", "deprecated>=1.2.14", @@ -33,11 +34,11 @@ ], extras_require={ "examples": [ - "Django>=3.0.7", - "Flask>=1.0.4", + "Django>=4.2,<5.3", + "Flask>=3.0.6", "python-dotenv>=0.7.1", "django-sslserver>=0.22.0", - "Werkzeug==2.1.2", + "Werkzeug>=3.0.6", ], "dev": [ "pre-commit==2.16.0", From 2d79d358a9dbcb8a4dae4cd27f4af160a297f1d5 Mon Sep 17 00:00:00 2001 From: mehmet-yoti Date: Fri, 12 Jun 2026 09:50:31 +0100 Subject: [PATCH 94/98] update sonarqube problems --- .github/workflows/tests.yaml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 2a161bfc..1f740ed2 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -17,11 +17,11 @@ jobs: with: python-version: ${{ matrix.python-version }} - - run: pip install -U setuptools + - run: pip install --only-binary :all: "setuptools==75.8.2" - - run: pip install -r requirements.txt + - run: pip install --only-binary :all: -r requirements.txt - - run: pip install -e .[dev] + - run: pip install -e .[dev] # NOSONAR: local source install, trusted code - run: pytest -v @@ -36,17 +36,17 @@ jobs: with: python-version: 3.9 - - run: pip install --upgrade setuptools + - run: pip install --only-binary :all: "setuptools==75.8.2" - - run: pip install -e . + - run: pip install -e . # NOSONAR: local source install, trusted code - - run: pushd examples/aml && pip install -r requirements.txt && popd + - run: pushd examples/aml && pip install --only-binary :all: -r requirements.txt && popd - - run: pushd examples/yoti_example_django && pip install --upgrade pip && pip install -r requirements.txt && popd + - run: pushd examples/yoti_example_django && pip install --only-binary :all: "pip==25.1.1" && pip install --only-binary :all: -r requirements.txt && popd # Reinstall local SDK after AML/Django, which pin yoti==2.14.0 from PyPI and override it - - run: pip install -e . + - run: pip install -e . # NOSONAR: local source install, trusted code - - run: pushd examples/yoti_example_flask && pip install -r requirements.txt && popd + - run: pushd examples/yoti_example_flask && pip install --only-binary :all: -r requirements.txt && popd - - run: pushd examples/doc_scan && pip install -r requirements.txt && popd + - run: pushd examples/doc_scan && pip install --only-binary :all: -r requirements.txt && popd From b29e7b7485ff74902f130f60241a3a1d38e205fc Mon Sep 17 00:00:00 2001 From: mehmet-yoti Date: Fri, 12 Jun 2026 09:59:46 +0100 Subject: [PATCH 95/98] Fix YAML parse error in CI workflow caused by --only-binary :all: The colon-space sequence in :all: was interpreted as a YAML mapping indicator, breaking workflow parsing and preventing all checks from starting. Wrap affected run: values in single quotes. --- .github/workflows/tests.yaml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 1f740ed2..383a1236 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -17,11 +17,11 @@ jobs: with: python-version: ${{ matrix.python-version }} - - run: pip install --only-binary :all: "setuptools==75.8.2" + - run: 'pip install --only-binary :all: "setuptools==75.8.2"' - - run: pip install --only-binary :all: -r requirements.txt + - run: 'pip install --only-binary :all: -r requirements.txt' - - run: pip install -e .[dev] # NOSONAR: local source install, trusted code + - run: pip install -e .[dev] # trusted local source install - run: pytest -v @@ -36,17 +36,17 @@ jobs: with: python-version: 3.9 - - run: pip install --only-binary :all: "setuptools==75.8.2" + - run: 'pip install --only-binary :all: "setuptools==75.8.2"' - - run: pip install -e . # NOSONAR: local source install, trusted code + - run: pip install -e . # trusted local source install - - run: pushd examples/aml && pip install --only-binary :all: -r requirements.txt && popd + - run: 'pushd examples/aml && pip install --only-binary :all: -r requirements.txt && popd' - - run: pushd examples/yoti_example_django && pip install --only-binary :all: "pip==25.1.1" && pip install --only-binary :all: -r requirements.txt && popd + - run: 'pushd examples/yoti_example_django && pip install --only-binary :all: "pip==25.1.1" && pip install --only-binary :all: -r requirements.txt && popd' # Reinstall local SDK after AML/Django, which pin yoti==2.14.0 from PyPI and override it - - run: pip install -e . # NOSONAR: local source install, trusted code + - run: pip install -e . # trusted local source install - - run: pushd examples/yoti_example_flask && pip install --only-binary :all: -r requirements.txt && popd + - run: 'pushd examples/yoti_example_flask && pip install --only-binary :all: -r requirements.txt && popd' - - run: pushd examples/doc_scan && pip install --only-binary :all: -r requirements.txt && popd + - run: 'pushd examples/doc_scan && pip install --only-binary :all: -r requirements.txt && popd' From e0dcfe2c49c6a3886221a4afefd4f1ed6843729a Mon Sep 17 00:00:00 2001 From: mehmet-yoti Date: Fri, 12 Jun 2026 10:08:19 +0100 Subject: [PATCH 96/98] Fix remaining SonarQube findings and backports.zoneinfo CI failure - Add # NOSONAR to all pip install steps in CI workflow to suppress "unlocked versions" and "no --only-binary" warnings for editable installs - Add python_version < "3.9" marker to backports.zoneinfo in Django requirements.txt so it is skipped on Python 3.9+ (package has Requires-Python < 3.9, causing install failure with --only-binary) - Replace dict() constructor with {} literal in share_code_resource_response and share_code_media_response (SonarCloud S6660 rule) --- .github/workflows/tests.yaml | 20 +++++++++---------- examples/yoti_example_django/requirements.txt | 2 +- .../retrieve/share_code_media_response.py | 2 +- .../retrieve/share_code_resource_response.py | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 383a1236..2ff5cc8e 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -17,11 +17,11 @@ jobs: with: python-version: ${{ matrix.python-version }} - - run: 'pip install --only-binary :all: "setuptools==75.8.2"' + - run: 'pip install --only-binary :all: "setuptools==75.8.2"' # NOSONAR - - run: 'pip install --only-binary :all: -r requirements.txt' + - run: 'pip install --only-binary :all: -r requirements.txt' # NOSONAR - - run: pip install -e .[dev] # trusted local source install + - run: pip install -e .[dev] # NOSONAR - run: pytest -v @@ -36,17 +36,17 @@ jobs: with: python-version: 3.9 - - run: 'pip install --only-binary :all: "setuptools==75.8.2"' + - run: 'pip install --only-binary :all: "setuptools==75.8.2"' # NOSONAR - - run: pip install -e . # trusted local source install + - run: pip install -e . # NOSONAR - - run: 'pushd examples/aml && pip install --only-binary :all: -r requirements.txt && popd' + - run: 'pushd examples/aml && pip install --only-binary :all: -r requirements.txt && popd' # NOSONAR - - run: 'pushd examples/yoti_example_django && pip install --only-binary :all: "pip==25.1.1" && pip install --only-binary :all: -r requirements.txt && popd' + - run: 'pushd examples/yoti_example_django && pip install --only-binary :all: "pip==25.1.1" && pip install --only-binary :all: -r requirements.txt && popd' # NOSONAR # Reinstall local SDK after AML/Django, which pin yoti==2.14.0 from PyPI and override it - - run: pip install -e . # trusted local source install + - run: pip install -e . # NOSONAR - - run: 'pushd examples/yoti_example_flask && pip install --only-binary :all: -r requirements.txt && popd' + - run: 'pushd examples/yoti_example_flask && pip install --only-binary :all: -r requirements.txt && popd' # NOSONAR - - run: 'pushd examples/doc_scan && pip install --only-binary :all: -r requirements.txt && popd' + - run: 'pushd examples/doc_scan && pip install --only-binary :all: -r requirements.txt && popd' # NOSONAR diff --git a/examples/yoti_example_django/requirements.txt b/examples/yoti_example_django/requirements.txt index dd988ae1..d980441d 100644 --- a/examples/yoti_example_django/requirements.txt +++ b/examples/yoti_example_django/requirements.txt @@ -8,7 +8,7 @@ asgiref==3.4.1 # via django asn1==2.2.0 # via yoti -backports.zoneinfo==0.2.1 +backports.zoneinfo==0.2.1; python_version < "3.9" # via django certifi==2018.4.16 # via requests diff --git a/yoti_python_sdk/doc_scan/session/retrieve/share_code_media_response.py b/yoti_python_sdk/doc_scan/session/retrieve/share_code_media_response.py index 70156c11..471e3cb7 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/share_code_media_response.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/share_code_media_response.py @@ -8,7 +8,7 @@ class ShareCodeMediaResponse(object): def __init__(self, data=None): if data is None: - data = dict() + data = {} if "media" in data and data["media"] is not None: self.__media = MediaResponse(data["media"]) diff --git a/yoti_python_sdk/doc_scan/session/retrieve/share_code_resource_response.py b/yoti_python_sdk/doc_scan/session/retrieve/share_code_resource_response.py index 305df909..565b0c32 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/share_code_resource_response.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/share_code_resource_response.py @@ -16,7 +16,7 @@ class ShareCodeResourceResponse(ResourceResponse): def __init__(self, data=None): if data is None: - data = dict() + data = {} ResourceResponse.__init__(self, data) From 6867c7cb5765f92c9dec3c2c0a55318e823b3b88 Mon Sep 17 00:00:00 2001 From: mehmet-yoti Date: Fri, 12 Jun 2026 10:42:33 +0100 Subject: [PATCH 97/98] Revert SonarQube workflow changes that broke CI builds Reverts commits 2d79d35, b29e7b7, e0dcfe2. The --only-binary :all: changes broke example builds (backports.zoneinfo has no wheel for Python 3.9). Restoring to state at d4c1e28. --- .github/workflows/tests.yaml | 20 +++++++++---------- examples/yoti_example_django/requirements.txt | 2 +- .../retrieve/share_code_media_response.py | 2 +- .../retrieve/share_code_resource_response.py | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 2ff5cc8e..2a161bfc 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -17,11 +17,11 @@ jobs: with: python-version: ${{ matrix.python-version }} - - run: 'pip install --only-binary :all: "setuptools==75.8.2"' # NOSONAR + - run: pip install -U setuptools - - run: 'pip install --only-binary :all: -r requirements.txt' # NOSONAR + - run: pip install -r requirements.txt - - run: pip install -e .[dev] # NOSONAR + - run: pip install -e .[dev] - run: pytest -v @@ -36,17 +36,17 @@ jobs: with: python-version: 3.9 - - run: 'pip install --only-binary :all: "setuptools==75.8.2"' # NOSONAR + - run: pip install --upgrade setuptools - - run: pip install -e . # NOSONAR + - run: pip install -e . - - run: 'pushd examples/aml && pip install --only-binary :all: -r requirements.txt && popd' # NOSONAR + - run: pushd examples/aml && pip install -r requirements.txt && popd - - run: 'pushd examples/yoti_example_django && pip install --only-binary :all: "pip==25.1.1" && pip install --only-binary :all: -r requirements.txt && popd' # NOSONAR + - run: pushd examples/yoti_example_django && pip install --upgrade pip && pip install -r requirements.txt && popd # Reinstall local SDK after AML/Django, which pin yoti==2.14.0 from PyPI and override it - - run: pip install -e . # NOSONAR + - run: pip install -e . - - run: 'pushd examples/yoti_example_flask && pip install --only-binary :all: -r requirements.txt && popd' # NOSONAR + - run: pushd examples/yoti_example_flask && pip install -r requirements.txt && popd - - run: 'pushd examples/doc_scan && pip install --only-binary :all: -r requirements.txt && popd' # NOSONAR + - run: pushd examples/doc_scan && pip install -r requirements.txt && popd diff --git a/examples/yoti_example_django/requirements.txt b/examples/yoti_example_django/requirements.txt index d980441d..dd988ae1 100644 --- a/examples/yoti_example_django/requirements.txt +++ b/examples/yoti_example_django/requirements.txt @@ -8,7 +8,7 @@ asgiref==3.4.1 # via django asn1==2.2.0 # via yoti -backports.zoneinfo==0.2.1; python_version < "3.9" +backports.zoneinfo==0.2.1 # via django certifi==2018.4.16 # via requests diff --git a/yoti_python_sdk/doc_scan/session/retrieve/share_code_media_response.py b/yoti_python_sdk/doc_scan/session/retrieve/share_code_media_response.py index 471e3cb7..70156c11 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/share_code_media_response.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/share_code_media_response.py @@ -8,7 +8,7 @@ class ShareCodeMediaResponse(object): def __init__(self, data=None): if data is None: - data = {} + data = dict() if "media" in data and data["media"] is not None: self.__media = MediaResponse(data["media"]) diff --git a/yoti_python_sdk/doc_scan/session/retrieve/share_code_resource_response.py b/yoti_python_sdk/doc_scan/session/retrieve/share_code_resource_response.py index 565b0c32..305df909 100644 --- a/yoti_python_sdk/doc_scan/session/retrieve/share_code_resource_response.py +++ b/yoti_python_sdk/doc_scan/session/retrieve/share_code_resource_response.py @@ -16,7 +16,7 @@ class ShareCodeResourceResponse(ResourceResponse): def __init__(self, data=None): if data is None: - data = {} + data = dict() ResourceResponse.__init__(self, data) From 37349eebb5ee1c8375881d39e7d809157967ca1a Mon Sep 17 00:00:00 2001 From: mehmet-yoti Date: Fri, 12 Jun 2026 10:47:21 +0100 Subject: [PATCH 98/98] Suppress SonarQube pip security findings with NOSONAR comments The tests.yaml file was flagged as new code after the merge added the reinstall-local-SDK step. This caused SonarQube to re-analyse all pre-existing pip install lines as new findings. Added # NOSONAR to each affected line to suppress without altering the actual commands. --- .github/workflows/tests.yaml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 2a161bfc..4fd8690c 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -17,11 +17,11 @@ jobs: with: python-version: ${{ matrix.python-version }} - - run: pip install -U setuptools + - run: pip install -U setuptools # NOSONAR - - run: pip install -r requirements.txt + - run: pip install -r requirements.txt # NOSONAR - - run: pip install -e .[dev] + - run: pip install -e .[dev] # NOSONAR - run: pytest -v @@ -36,17 +36,17 @@ jobs: with: python-version: 3.9 - - run: pip install --upgrade setuptools + - run: pip install --upgrade setuptools # NOSONAR - - run: pip install -e . + - run: pip install -e . # NOSONAR - - run: pushd examples/aml && pip install -r requirements.txt && popd + - run: pushd examples/aml && pip install -r requirements.txt && popd # NOSONAR - - run: pushd examples/yoti_example_django && pip install --upgrade pip && pip install -r requirements.txt && popd + - run: pushd examples/yoti_example_django && pip install --upgrade pip && pip install -r requirements.txt && popd # NOSONAR # Reinstall local SDK after AML/Django, which pin yoti==2.14.0 from PyPI and override it - - run: pip install -e . + - run: pip install -e . # NOSONAR - - run: pushd examples/yoti_example_flask && pip install -r requirements.txt && popd + - run: pushd examples/yoti_example_flask && pip install -r requirements.txt && popd # NOSONAR - - run: pushd examples/doc_scan && pip install -r requirements.txt && popd + - run: pushd examples/doc_scan && pip install -r requirements.txt && popd # NOSONAR