Skip to content

Commit 705b7f1

Browse files
committed
feat(SDK-2614): Python - Support configuration for IDV shortened flow [python]
1 parent eab6d64 commit 705b7f1

12 files changed

Lines changed: 343 additions & 1 deletion

File tree

yoti_python_sdk/doc_scan/__init__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,16 @@
66
)
77
from .session.create.check.face_match import RequestedFaceMatchCheckBuilder
88
from .session.create.check.liveness import RequestedLivenessCheckBuilder
9+
from .session.create.check.watchlist_screen import WatchlistScreeningCheckBuilder
10+
from .session.create.check.watchlist_advanced_ca import (
11+
WatchlistAdvancedCaProfilesCheckBuilder,
12+
WatchlistAdvancedCaSourcesConfig,
13+
)
914
from .session.create.task.text_extraction import RequestedTextExtractionTaskBuilder
1015
from .session.create.task.supplementary_doc_text_extraction import (
1116
RequestedSupplementaryDocTextExtractionTaskBuilder,
1217
)
18+
from .session.create.task.face_capture import RequestedFaceCaptureTaskBuilder
1319
from .session.create.notification_config import NotificationConfigBuilder
1420
from .session.create.sdk_config import SdkConfigBuilder
1521
from .session.create.session_spec import SessionSpecBuilder
@@ -20,8 +26,12 @@
2026
"RequestedLivenessCheckBuilder",
2127
"RequestedFaceMatchCheckBuilder",
2228
"RequestedIDDocumentComparisonCheckBuilder",
29+
"WatchlistScreeningCheckBuilder",
30+
"WatchlistAdvancedCaProfilesCheckBuilder",
31+
"WatchlistAdvancedCaSourcesConfig",
2332
"RequestedTextExtractionTaskBuilder",
2433
"RequestedSupplementaryDocTextExtractionTaskBuilder",
34+
"RequestedFaceCaptureTaskBuilder",
2535
"SessionSpecBuilder",
2636
"NotificationConfigBuilder",
2737
"SdkConfigBuilder",

yoti_python_sdk/doc_scan/constants.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,14 @@
3939
PROOF_OF_ADDRESS = "PROOF_OF_ADDRESS"
4040

4141
WATCHLIST_SCREENING_CHECK_TYPE = "WATCHLIST_SCREENING"
42+
WATCHLIST_ADVANCED_CA_CHECK_TYPE = "WATCHLIST_ADVANCED_CA"
43+
44+
FACE_CAPTURE = "FACE_CAPTURE"
45+
46+
ID_DOCUMENT_EDUCATION = "ID_DOCUMENT_EDUCATION"
47+
ID_DOCUMENT_REQUIREMENTS = "ID_DOCUMENT_REQUIREMENTS"
48+
SUPPLEMENTARY_DOCUMENT_EDUCATION = "SUPPLEMENTARY_DOCUMENT_EDUCATION"
49+
ZOOM_LIVENESS_EDUCATION = "ZOOM_LIVENESS_EDUCATION"
50+
STATIC_LIVENESS_EDUCATION = "STATIC_LIVENESS_EDUCATION"
51+
FACE_CAPTURE_EDUCATION = "FACE_CAPTURE_EDUCATION"
52+
FLOW_COMPLETION = "FLOW_COMPLETION"

yoti_python_sdk/doc_scan/session/create/check/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from .face_match import RequestedFaceMatchCheckBuilder
44
from .liveness import RequestedLivenessCheckBuilder
55
from .watchlist_screen import WatchlistScreeningCheckBuilder
6+
from .watchlist_advanced_ca import WatchlistAdvancedCaProfilesCheckBuilder
67

78

89
__all__ = [
@@ -11,4 +12,5 @@
1112
"RequestedFaceMatchCheckBuilder",
1213
"RequestedLivenessCheckBuilder",
1314
"WatchlistScreeningCheckBuilder",
15+
"WatchlistAdvancedCaProfilesCheckBuilder",
1416
]
Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from yoti_python_sdk.doc_scan import constants
5+
from yoti_python_sdk.utils import YotiSerializable, remove_null_values
6+
from .requested_check import RequestedCheck
7+
8+
9+
class WatchlistAdvancedCaProfilesCheckConfig(YotiSerializable):
10+
"""
11+
The configuration applied when creating a Watchlist Advanced CA Profiles check.
12+
"""
13+
14+
def __init__(self, remove_deceased=None, share_url=None, sources=None):
15+
"""
16+
:param remove_deceased: whether to remove deceased individuals from results
17+
:type remove_deceased: bool or None
18+
:param share_url: whether to share the URL in results
19+
:type share_url: bool or None
20+
:param sources: the sources configuration
21+
:type sources: WatchlistAdvancedCaSourcesConfig or None
22+
"""
23+
self.__remove_deceased = remove_deceased
24+
self.__share_url = share_url
25+
self.__sources = sources
26+
27+
@property
28+
def remove_deceased(self):
29+
"""
30+
Whether deceased individuals are removed from results
31+
32+
:return: remove deceased flag
33+
:rtype: bool or None
34+
"""
35+
return self.__remove_deceased
36+
37+
@property
38+
def share_url(self):
39+
"""
40+
Whether the URL is shared in results
41+
42+
:return: share URL flag
43+
:rtype: bool or None
44+
"""
45+
return self.__share_url
46+
47+
@property
48+
def sources(self):
49+
"""
50+
The sources configuration for the advanced CA profiles check
51+
52+
:return: the sources configuration
53+
:rtype: WatchlistAdvancedCaSourcesConfig or None
54+
"""
55+
return self.__sources
56+
57+
def to_json(self):
58+
return remove_null_values(
59+
{
60+
"remove_deceased": self.__remove_deceased,
61+
"share_url": self.__share_url,
62+
"sources": self.__sources,
63+
}
64+
)
65+
66+
67+
class WatchlistAdvancedCaSourcesConfig(YotiSerializable):
68+
"""
69+
Configures the sources for a Watchlist Advanced CA Profiles check.
70+
"""
71+
72+
def __init__(self, types=None):
73+
"""
74+
:param types: the list of source types to check against
75+
:type types: list[str] or None
76+
"""
77+
self.__types = types or []
78+
79+
@property
80+
def types(self):
81+
"""
82+
The list of source types
83+
84+
:return: the source types
85+
:rtype: list[str]
86+
"""
87+
return self.__types
88+
89+
def to_json(self):
90+
return remove_null_values({"types": self.__types})
91+
92+
93+
class WatchlistAdvancedCaProfilesCheck(RequestedCheck):
94+
"""
95+
Requests creation of a Watchlist Advanced CA Profiles check
96+
"""
97+
98+
def __init__(self, config):
99+
"""
100+
:param config: the Watchlist Advanced CA Profiles check configuration
101+
:type config: WatchlistAdvancedCaProfilesCheckConfig
102+
"""
103+
self.__config = config
104+
105+
@property
106+
def type(self):
107+
return constants.WATCHLIST_ADVANCED_CA_CHECK_TYPE
108+
109+
@property
110+
def config(self):
111+
return self.__config
112+
113+
114+
class WatchlistAdvancedCaProfilesCheckBuilder(object):
115+
"""
116+
Builder to assist creation of :class:`WatchlistAdvancedCaProfilesCheck`
117+
"""
118+
119+
def __init__(self):
120+
self.__remove_deceased = None
121+
self.__share_url = None
122+
self.__sources = None
123+
124+
def with_remove_deceased(self, remove_deceased):
125+
"""
126+
Sets whether deceased individuals should be removed from results
127+
128+
:param remove_deceased: the remove deceased flag
129+
:type remove_deceased: bool
130+
:return: the builder
131+
:rtype: WatchlistAdvancedCaProfilesCheckBuilder
132+
"""
133+
self.__remove_deceased = remove_deceased
134+
return self
135+
136+
def with_share_url(self, share_url):
137+
"""
138+
Sets whether the URL should be shared in results
139+
140+
:param share_url: the share URL flag
141+
:type share_url: bool
142+
:return: the builder
143+
:rtype: WatchlistAdvancedCaProfilesCheckBuilder
144+
"""
145+
self.__share_url = share_url
146+
return self
147+
148+
def with_sources(self, sources):
149+
"""
150+
Sets the sources configuration for the check
151+
152+
:param sources: the sources configuration
153+
:type sources: WatchlistAdvancedCaSourcesConfig
154+
:return: the builder
155+
:rtype: WatchlistAdvancedCaProfilesCheckBuilder
156+
"""
157+
self.__sources = sources
158+
return self
159+
160+
def build(self):
161+
config = WatchlistAdvancedCaProfilesCheckConfig(
162+
self.__remove_deceased, self.__share_url, self.__sources
163+
)
164+
return WatchlistAdvancedCaProfilesCheck(config)

yoti_python_sdk/doc_scan/session/create/sdk_config.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ def __init__(
2323
error_url,
2424
allow_handoff=None,
2525
privacy_policy_url=None,
26+
suppressed_screens=None,
2627
):
2728
"""
2829
:param allowed_capture_methods: the allowed capture methods
@@ -45,6 +46,8 @@ def __init__(
4546
:type privacy_policy_url: str
4647
:param allow_handoff: boolean flag for allow_handoff
4748
:type allow_handoff: bool
49+
:param suppressed_screens: the screens to suppress in the IDV flow
50+
:type suppressed_screens: list[str]
4851
"""
4952
self.__allowed_capture_methods = allowed_capture_methods
5053
self.__primary_colour = primary_colour
@@ -56,6 +59,7 @@ def __init__(
5659
self.__error_url = error_url
5760
self.__privacy_policy_url = privacy_policy_url
5861
self.__allow_handoff = allow_handoff
62+
self.__suppressed_screens = suppressed_screens
5963

6064
@property
6165
def allowed_capture_methods(self):
@@ -148,6 +152,15 @@ def allow_handoff(self):
148152
"""
149153
return self.__allow_handoff
150154

155+
@property
156+
def suppressed_screens(self):
157+
"""
158+
The screens to suppress in the IDV flow.
159+
160+
:return: the suppressed screens
161+
"""
162+
return self.__suppressed_screens
163+
151164
def to_json(self):
152165
return remove_null_values(
153166
{
@@ -161,6 +174,7 @@ def to_json(self):
161174
"error_url": self.error_url,
162175
"privacy_policy_url": self.privacy_policy_url,
163176
"allow_handoff": self.allow_handoff,
177+
"suppressed_screens": self.suppressed_screens,
164178
}
165179
)
166180

@@ -181,6 +195,7 @@ def __init__(self):
181195
self.__error_url = None
182196
self.__privacy_policy_url = None
183197
self.__allow_handoff = None
198+
self.__suppressed_screens = None
184199

185200
def with_allowed_capture_methods(self, allowed_capture_methods):
186201
"""
@@ -320,6 +335,18 @@ def with_allow_handoff(self, flag):
320335
self.__allow_handoff = flag
321336
return self
322337

338+
def with_suppressed_screens(self, screens):
339+
"""
340+
Sets the screens to suppress in the IDV flow
341+
342+
:param screens: the suppressed screen identifiers
343+
:type screens: list[str]
344+
:return: the builder
345+
:rtype: SdkConfigBuilder
346+
"""
347+
self.__suppressed_screens = screens
348+
return self
349+
323350
def build(self):
324351
return SdkConfig(
325352
self.__allowed_capture_methods,
@@ -332,4 +359,5 @@ def build(self):
332359
self.__error_url,
333360
self.__allow_handoff,
334361
self.__privacy_policy_url,
362+
self.__suppressed_screens,
335363
)

yoti_python_sdk/doc_scan/session/create/task/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
from .supplementary_doc_text_extraction import (
33
RequestedSupplementaryDocTextExtractionTaskBuilder,
44
)
5+
from .face_capture import RequestedFaceCaptureTaskBuilder
56

67
__all__ = [
78
"RequestedTextExtractionTaskBuilder",
89
"RequestedSupplementaryDocTextExtractionTaskBuilder",
10+
"RequestedFaceCaptureTaskBuilder",
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 import constants
5+
from yoti_python_sdk.utils import YotiSerializable
6+
from .requested_task import RequestedTask
7+
8+
9+
class RequestedFaceCaptureTaskConfig(YotiSerializable):
10+
"""
11+
The configuration applied when creating a Face Capture Task
12+
"""
13+
14+
def to_json(self):
15+
return {}
16+
17+
18+
class RequestedFaceCaptureTask(RequestedTask):
19+
"""
20+
Requests creation of a Face Capture Task
21+
"""
22+
23+
def __init__(self, config):
24+
"""
25+
:param config: the face capture task configuration
26+
:type config: RequestedFaceCaptureTaskConfig
27+
"""
28+
self.__config = config
29+
30+
@property
31+
def type(self):
32+
return constants.FACE_CAPTURE
33+
34+
@property
35+
def config(self):
36+
return self.__config
37+
38+
39+
class RequestedFaceCaptureTaskBuilder(object):
40+
"""
41+
Builder to assist creation of :class:`RequestedFaceCaptureTask`
42+
"""
43+
44+
@staticmethod
45+
def build():
46+
config = RequestedFaceCaptureTaskConfig()
47+
return RequestedFaceCaptureTask(config)

yoti_python_sdk/doc_scan/session/retrieve/check_response.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,3 +192,11 @@ class WatchlistScreeningCheckResponse(CheckResponse):
192192
"""
193193

194194
pass
195+
196+
197+
class WatchlistAdvancedCaProfilesCheckResponse(CheckResponse):
198+
"""
199+
Represents a Watchlist Advanced CA Profiles check for a given session
200+
"""
201+
202+
pass

0 commit comments

Comments
 (0)