Skip to content

Commit 441a572

Browse files
committed
SDK-2743-python-expose-idv-breakdown-process-property
1 parent d1d8e58 commit 441a572

8 files changed

Lines changed: 539 additions & 0 deletions

yoti_python_sdk/doc_scan/session/retrieve/breakdown_response.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ def __init__(self, data):
1414
"""
1515
self.__sub_check = data.get("sub_check", None)
1616
self.__result = data.get("result", None)
17+
self.__process = data.get("process", None)
1718
self.__details = [DetailsResponse(detail) for detail in data.get("details", [])]
1819

1920
@property
@@ -36,6 +37,16 @@ def result(self):
3637
"""
3738
return self.__result
3839

40+
@property
41+
def process(self):
42+
"""
43+
The process of the sub check
44+
45+
:return: the process
46+
:rtype: str or None
47+
"""
48+
return self.__process
49+
3950
@property
4051
def details(self):
4152
"""
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from yoti_python_sdk.doc_scan.session.retrieve.media_response import MediaResponse
5+
6+
7+
class ShareCodeMediaResponse(object):
8+
"""
9+
Wraps a MediaResponse inside a share code resource field
10+
"""
11+
12+
def __init__(self, data=None):
13+
"""
14+
:param data: the data to parse
15+
:type data: dict or None
16+
"""
17+
if data is None:
18+
data = dict()
19+
20+
if "media" in data and data["media"] is not None:
21+
self.__media = MediaResponse(data["media"])
22+
else:
23+
self.__media = None
24+
25+
@property
26+
def media(self):
27+
"""
28+
The media object
29+
30+
:return: the media
31+
:rtype: MediaResponse or None
32+
"""
33+
return self.__media
Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from yoti_python_sdk.doc_scan.session.retrieve.resource_response import ResourceResponse
5+
from yoti_python_sdk.doc_scan.session.retrieve.share_code_media_response import (
6+
ShareCodeMediaResponse,
7+
)
8+
from yoti_python_sdk.doc_scan.session.retrieve.verify_share_code_task_response import (
9+
VerifyShareCodeTaskResponse,
10+
)
11+
12+
13+
class ShareCodeResourceResponse(ResourceResponse):
14+
"""
15+
Represents a share code resource for a given session
16+
"""
17+
18+
def __init__(self, data=None):
19+
"""
20+
:param data: the data to parse
21+
:type data: dict or None
22+
"""
23+
if data is None:
24+
data = dict()
25+
26+
ResourceResponse.__init__(self, data)
27+
28+
source = data.get("source", None)
29+
if isinstance(source, dict):
30+
self.__source = source.get("type", str(source))
31+
else:
32+
self.__source = source
33+
self.__created_at = data.get("created_at", None)
34+
self.__last_updated = data.get("last_updated", None)
35+
36+
self.__lookup_profile = (
37+
ShareCodeMediaResponse(data["lookup_profile"])
38+
if "lookup_profile" in data and data["lookup_profile"] is not None
39+
else None
40+
)
41+
self.__returned_profile = (
42+
ShareCodeMediaResponse(data["returned_profile"])
43+
if "returned_profile" in data and data["returned_profile"] is not None
44+
else None
45+
)
46+
self.__id_photo = (
47+
ShareCodeMediaResponse(data["id_photo"])
48+
if "id_photo" in data and data["id_photo"] is not None
49+
else None
50+
)
51+
self.__file = (
52+
ShareCodeMediaResponse(data["file"])
53+
if "file" in data and data["file"] is not None
54+
else None
55+
)
56+
57+
@property
58+
def source(self):
59+
"""
60+
The source of the share code
61+
62+
:return: the source
63+
:rtype: str or None
64+
"""
65+
return self.__source
66+
67+
@property
68+
def created_at(self):
69+
"""
70+
The date the share code was created
71+
72+
:return: the created at date string
73+
:rtype: str or None
74+
"""
75+
return self.__created_at
76+
77+
@property
78+
def last_updated(self):
79+
"""
80+
The date the share code was last updated
81+
82+
:return: the last updated date string
83+
:rtype: str or None
84+
"""
85+
return self.__last_updated
86+
87+
@property
88+
def lookup_profile(self):
89+
"""
90+
The lookup profile media
91+
92+
:return: the lookup profile
93+
:rtype: ShareCodeMediaResponse or None
94+
"""
95+
return self.__lookup_profile
96+
97+
@property
98+
def returned_profile(self):
99+
"""
100+
The returned profile media
101+
102+
:return: the returned profile
103+
:rtype: ShareCodeMediaResponse or None
104+
"""
105+
return self.__returned_profile
106+
107+
@property
108+
def id_photo(self):
109+
"""
110+
The ID photo media
111+
112+
:return: the ID photo
113+
:rtype: ShareCodeMediaResponse or None
114+
"""
115+
return self.__id_photo
116+
117+
@property
118+
def file(self):
119+
"""
120+
The file media
121+
122+
:return: the file
123+
:rtype: ShareCodeMediaResponse or None
124+
"""
125+
return self.__file
126+
127+
@property
128+
def verify_share_code_tasks(self):
129+
"""
130+
Returns a list of verify share code tasks associated with the share code
131+
132+
:return: list of verify share code tasks
133+
:rtype: list[VerifyShareCodeTaskResponse]
134+
"""
135+
return [
136+
task for task in self.tasks if isinstance(task, VerifyShareCodeTaskResponse)
137+
]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
# -*- coding: utf-8 -*-
2+
from __future__ import unicode_literals
3+
4+
from yoti_python_sdk.doc_scan.session.retrieve.task_response import TaskResponse
5+
6+
7+
class VerifyShareCodeTaskResponse(TaskResponse):
8+
"""
9+
Represents a Verify Share Code task response
10+
"""

yoti_python_sdk/tests/doc_scan/session/retrieve/test_breakdown_response.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
class BreakdownResponseTest(unittest.TestCase):
99
SOME_SUB_CHECK = "someSubCheck"
1010
SOME_RESULT = "someResult"
11+
SOME_PROCESS = "AUTOMATED"
1112
SOME_DETAILS = [
1213
{"name": "firstDetailName", "value": "firstDetailValue"},
1314
{"name": "secondDetailName", "value": "secondDetailValue"},
@@ -17,20 +18,23 @@ def test_should_build_correctly(self):
1718
data = {
1819
"sub_check": self.SOME_SUB_CHECK,
1920
"result": self.SOME_RESULT,
21+
"process": self.SOME_PROCESS,
2022
"details": self.SOME_DETAILS,
2123
}
2224

2325
result = BreakdownResponse(data)
2426

2527
assert result.sub_check is self.SOME_SUB_CHECK
2628
assert result.result is self.SOME_RESULT
29+
assert result.process is self.SOME_PROCESS
2730
assert len(result.details) == 2
2831
assert result.details[0].name == "firstDetailName"
2932
assert result.details[0].value == "firstDetailValue"
3033

3134
def test_should_default_details_to_empty_list(self):
3235
result = BreakdownResponse({})
3336
assert len(result.details) == 0
37+
assert result.process is None
3438

3539

3640
if __name__ == "__main__":
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import unittest
2+
3+
from yoti_python_sdk.doc_scan.session.retrieve.media_response import MediaResponse
4+
from yoti_python_sdk.doc_scan.session.retrieve.share_code_media_response import (
5+
ShareCodeMediaResponse,
6+
)
7+
8+
9+
class ShareCodeMediaResponseTest(unittest.TestCase):
10+
def test_should_parse_media(self):
11+
data = {"media": {"id": "some-media-id", "type": "JSON"}}
12+
13+
result = ShareCodeMediaResponse(data)
14+
15+
assert isinstance(result.media, MediaResponse)
16+
assert result.media.id == "some-media-id"
17+
assert result.media.type == "JSON"
18+
19+
def test_should_return_none_media_when_key_missing(self):
20+
result = ShareCodeMediaResponse({})
21+
22+
assert result.media is None
23+
24+
def test_should_parse_when_none(self):
25+
result = ShareCodeMediaResponse(None)
26+
27+
assert result.media is None
28+
29+
def test_should_parse_empty_media(self):
30+
data = {"media": {}}
31+
32+
result = ShareCodeMediaResponse(data)
33+
34+
assert isinstance(result.media, MediaResponse)
35+
assert result.media.id is None
36+
assert result.media.type is None
37+
38+
def test_should_return_none_media_when_value_is_null(self):
39+
data = {"media": None}
40+
41+
result = ShareCodeMediaResponse(data)
42+
43+
assert result.media is None
44+
45+
46+
if __name__ == "__main__":
47+
unittest.main()

0 commit comments

Comments
 (0)