Skip to content

Commit 16a0665

Browse files
committed
SDK-1718: Add Document Comparison check, remove instructions for running tests: this is in CONTRIBUTING.md
1 parent 737839a commit 16a0665

File tree

13 files changed

+166
-19
lines changed

13 files changed

+166
-19
lines changed

README.md

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,6 @@ How to manage users
3434
1) [Running the examples](#running-the-examples) -
3535
How to retrieve a Yoti profile using the token
3636

37-
1) [Running the tests](#running-the-tests) -
38-
Running tests for SDK example
39-
4037
1) [API Coverage](#api-coverage) -
4138
Attributes defined
4239

@@ -196,14 +193,6 @@ To run the Flask or Django container:
196193
* [Profile - Flask](examples/yoti_example_flask)
197194
* [Doc Scan](examples/doc_scan)
198195

199-
## Running the Tests
200-
201-
Running the tests is done by the following process, ensuring you are using Python 3.0+:
202-
203-
1. Install dependencies: `pip install -r requirements.txt`
204-
1. Install the SDK and development dependencies: `pip install .[dev]`
205-
1. Execute in the main project dir: `pytest`
206-
207196
## API Coverage
208197

209198
* Activity Details

examples/doc_scan/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@
55
1. Rename the [.env.example](.env.example) file to `.env` and fill in the required configuration values
66
1. Install the dependencies with `pip install -r requirements.txt`
77
1. Start the server `flask run --cert=adhoc`
8-
1. Visit `https://localhost:5000`
8+
1. Visit `https://localhost:5000`

examples/doc_scan/app.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@
44
DocScanClient,
55
RequestedDocumentAuthenticityCheckBuilder,
66
RequestedFaceMatchCheckBuilder,
7+
RequestedIDDocumentComparisonCheckBuilder,
78
RequestedLivenessCheckBuilder,
89
RequestedTextExtractionTaskBuilder,
910
SdkConfigBuilder,
1011
SessionSpecBuilder,
1112
)
1213
from yoti_python_sdk.doc_scan.exception import DocScanException
14+
from yoti_python_sdk.doc_scan.session.create.filter import (
15+
RequiredIdDocumentBuilder,
16+
DocumentRestrictionBuilder,
17+
DocumentRestrictionsFilterBuilder,
18+
)
1319

1420
from .settings import YOTI_APP_BASE_URL, YOTI_CLIENT_SDK_ID, YOTI_KEY_FILE_PATH
1521

@@ -52,18 +58,34 @@ def create_session():
5258
.build()
5359
)
5460
.with_requested_check(
55-
RequestedFaceMatchCheckBuilder().with_manual_check_fallback().build()
61+
RequestedFaceMatchCheckBuilder().with_manual_check_never().build()
5662
)
63+
.with_requested_check(RequestedIDDocumentComparisonCheckBuilder().build())
5764
.with_requested_task(
58-
RequestedTextExtractionTaskBuilder().with_manual_check_always().build()
65+
RequestedTextExtractionTaskBuilder().with_manual_check_never().build()
5966
)
6067
.with_sdk_config(sdk_config)
68+
.with_required_document(build_required_id_document_restriction("PASSPORT"))
69+
.with_required_document(
70+
build_required_id_document_restriction("DRIVING_LICENCE")
71+
)
6172
.build()
6273
)
6374

6475
return doc_scan_client.create_session(session_spec)
6576

6677

78+
def build_required_id_document_restriction(document_type):
79+
document_restriction = (
80+
DocumentRestrictionBuilder().with_document_types([document_type]).build()
81+
)
82+
83+
filter_builder = DocumentRestrictionsFilterBuilder().for_whitelist()
84+
filter_builder.with_document_restriction(document_restriction)
85+
86+
return RequiredIdDocumentBuilder().with_filter(filter_builder.build()).build()
87+
88+
6789
@app.route("/")
6890
def index():
6991
try:

examples/doc_scan/templates/success.html

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,29 @@ <h3 class="mb-0">
134134
</div>
135135
</div>
136136
{% endif %}
137+
138+
{% if session_result.id_document_comparison_checks|length > 0 %}
139+
<div class="card">
140+
<div class="card-header" id="comparison-checks">
141+
<h3 class="mb-0">
142+
<button aria-controls="collapse-comparison-checks" aria-expanded="true" class="btn btn-link"
143+
data-target="#collapse-comparison-checks" data-toggle="collapse"
144+
type="button">
145+
ID Document Comparison Checks
146+
</button>
147+
</h3>
148+
</div>
149+
<div aria-labelledby="comparison-checks" class="collapse" id="collapse-comparison-checks">
150+
<div class="card-body">
151+
{% for check in session_result.id_document_comparison_checks %}
152+
{% with check=check %}
153+
{% include "partials/check.html" %}
154+
{% endwith %}
155+
{% endfor %}
156+
</div>
157+
</div>
158+
</div>
159+
{% endif %}
137160
</div>
138161
</div>
139162
</div>

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
],
3838
"dev": [
3939
"pre-commit==1.17.0",
40-
"pytest>=4.6.0",
40+
"pytest>=4.6.11",
4141
"pytest-cov>=2.7.1",
4242
"pylint==1.9.4",
4343
"pylint-exit>=1.1.0",

yoti_python_sdk/doc_scan/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
from .session.create.check.document_authenticity import (
22
RequestedDocumentAuthenticityCheckBuilder,
33
)
4+
from .session.create.check.document_comparison import (
5+
RequestedIDDocumentComparisonCheckBuilder,
6+
)
47
from .session.create.check.face_match import RequestedFaceMatchCheckBuilder
58
from .session.create.check.liveness import RequestedLivenessCheckBuilder
69
from .session.create.task.text_extraction import RequestedTextExtractionTaskBuilder
@@ -13,6 +16,7 @@
1316
RequestedDocumentAuthenticityCheckBuilder,
1417
RequestedLivenessCheckBuilder,
1518
RequestedFaceMatchCheckBuilder,
19+
RequestedIDDocumentComparisonCheckBuilder,
1620
RequestedTextExtractionTaskBuilder,
1721
SessionSpecBuilder,
1822
NotificationConfigBuilder,

yoti_python_sdk/doc_scan/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from __future__ import unicode_literals
33

44
ID_DOCUMENT_AUTHENTICITY = "ID_DOCUMENT_AUTHENTICITY"
5+
ID_DOCUMENT_COMPARISON = "ID_DOCUMENT_COMPARISON"
56
ID_DOCUMENT_TEXT_DATA_CHECK = "ID_DOCUMENT_TEXT_DATA_CHECK"
67
ID_DOCUMENT_TEXT_DATA_EXTRACTION = "ID_DOCUMENT_TEXT_DATA_EXTRACTION"
78
ID_DOCUMENT_FACE_MATCH = "ID_DOCUMENT_FACE_MATCH"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
from .document_authenticity import RequestedDocumentAuthenticityCheckBuilder
2+
from .document_comparison import RequestedIDDocumentComparisonCheckBuilder
23
from .face_match import RequestedFaceMatchCheckBuilder
34
from .liveness import RequestedLivenessCheckBuilder
45

56
__all__ = [
67
RequestedDocumentAuthenticityCheckBuilder,
8+
RequestedIDDocumentComparisonCheckBuilder,
79
RequestedFaceMatchCheckBuilder,
810
RequestedLivenessCheckBuilder,
911
]
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from yoti_python_sdk.doc_scan.constants import ID_DOCUMENT_COMPARISON
5+
from yoti_python_sdk.utils import YotiSerializable
6+
from .requested_check import RequestedCheck
7+
8+
9+
class RequestedIDDocumentComparisonCheckConfig(YotiSerializable):
10+
"""
11+
The configuration applied when creating a Document Comparison Check
12+
"""
13+
14+
def to_json(self):
15+
return {}
16+
17+
18+
class RequestedIDDocumentComparisonCheck(RequestedCheck):
19+
"""
20+
Requests creation of a Document Comparison Check
21+
"""
22+
23+
def __init__(self, config):
24+
"""
25+
:param config: the requested document Comparison check configuration
26+
:type config: RequestedIDDocumentComparisonCheckConfig
27+
"""
28+
self.__config = config
29+
30+
@property
31+
def type(self):
32+
return ID_DOCUMENT_COMPARISON
33+
34+
@property
35+
def config(self):
36+
return self.__config
37+
38+
39+
class RequestedIDDocumentComparisonCheckBuilder(object):
40+
"""
41+
Builder to assist creation of :class:`RequestedIDDocumentComparisonCheck`
42+
"""
43+
44+
@staticmethod
45+
def build():
46+
config = RequestedIDDocumentComparisonCheckConfig()
47+
return RequestedIDDocumentComparisonCheck(config)

yoti_python_sdk/doc_scan/session/retrieve/check_response.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,15 +148,15 @@ class AuthenticityCheckResponse(CheckResponse):
148148

149149
class FaceMatchCheckResponse(CheckResponse):
150150
"""
151-
Represents a FaceMatch Check for a given session
151+
Represents a FaceMatch check for a given session
152152
"""
153153

154154
pass
155155

156156

157157
class LivenessCheckResponse(CheckResponse):
158158
"""
159-
Represents a Liveness Check for a given session
159+
Represents a Liveness check for a given session
160160
"""
161161

162162
pass
@@ -168,3 +168,11 @@ class TextDataCheckResponse(CheckResponse):
168168
"""
169169

170170
pass
171+
172+
173+
class IDDocumentComparisonCheckResponse(CheckResponse):
174+
"""
175+
Represents an Identity Document Comparison check for a given session
176+
"""
177+
178+
pass

0 commit comments

Comments
 (0)