Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions yoti_python_sdk/doc_scan/session/retrieve/breakdown_response.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -36,6 +37,16 @@ def result(self):
"""
return self.__result

@property
def process(self):
"""
The process of the sub check

:return: the process
:rtype: str or None
"""
return self.__process

@property
def details(self):
"""
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

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):
"""
:param data: the data to parse
:type data: dict or 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
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

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):
"""
:param data: the data to parse
:type data: dict or None
"""
if data is None:
data = dict()

ResourceResponse.__init__(self, data)

source = data.get("source", None)
if isinstance(source, dict):
self.__source = source.get("type", str(source))
else:
self.__source = source
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 string
: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 string
: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 associated with the share code

:return: list of verify share code tasks
:rtype: list[VerifyShareCodeTaskResponse]
"""
return [
task for task in self.tasks if isinstance(task, VerifyShareCodeTaskResponse)
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from yoti_python_sdk.doc_scan.session.retrieve.task_response import TaskResponse


class VerifyShareCodeTaskResponse(TaskResponse):
"""
Represents a Verify Share Code task response
"""
Original file line number Diff line number Diff line change
Expand Up @@ -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"},
Expand All @@ -17,20 +18,23 @@ 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.process is self.SOME_PROCESS
assert len(result.details) == 2
assert result.details[0].name == "firstDetailName"
assert result.details[0].value == "firstDetailValue"

def test_should_default_details_to_empty_list(self):
result = BreakdownResponse({})
assert len(result.details) == 0
assert result.process is None


if __name__ == "__main__":
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import unittest

from yoti_python_sdk.doc_scan.session.retrieve.media_response import MediaResponse
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"}}

result = ShareCodeMediaResponse(data)

assert isinstance(result.media, MediaResponse)
assert result.media.id == "some-media-id"
assert result.media.type == "JSON"

def test_should_return_none_media_when_key_missing(self):
result = ShareCodeMediaResponse({})

assert result.media is None

def test_should_parse_when_none(self):
result = ShareCodeMediaResponse(None)

assert result.media is None

def test_should_parse_empty_media(self):
data = {"media": {}}

result = ShareCodeMediaResponse(data)

assert isinstance(result.media, MediaResponse)
assert result.media.id is None
assert result.media.type is None

def test_should_return_none_media_when_value_is_null(self):
data = {"media": None}

result = ShareCodeMediaResponse(data)

assert result.media is None


if __name__ == "__main__":
unittest.main()
Loading
Loading