Skip to content
Draft
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
2 changes: 2 additions & 0 deletions yoti_python_sdk/doc_scan/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from .session.create.notification_config import NotificationConfigBuilder
from .session.create.sdk_config import SdkConfigBuilder
from .session.create.session_spec import SessionSpecBuilder
from .session.create.filter.required_share_code import RequiredShareCodeBuilder
from .client import DocScanClient

__all__ = [
Expand All @@ -25,5 +26,6 @@
"SessionSpecBuilder",
"NotificationConfigBuilder",
"SdkConfigBuilder",
"RequiredShareCodeBuilder",
"DocScanClient",
]
1 change: 1 addition & 0 deletions yoti_python_sdk/doc_scan/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,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"
Expand Down
2 changes: 2 additions & 0 deletions yoti_python_sdk/doc_scan/session/create/filter/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
from .orthogonal_restrictions_filter import OrthogonalRestrictionsFilterBuilder
from .required_id_document import RequiredIdDocumentBuilder
from .required_supplementary_document import RequiredSupplementaryDocumentBuilder
from .required_share_code import RequiredShareCodeBuilder

__all__ = [
"DocumentRestrictionsFilterBuilder",
"DocumentRestrictionBuilder",
"OrthogonalRestrictionsFilterBuilder",
"RequiredIdDocumentBuilder",
"RequiredSupplementaryDocumentBuilder",
"RequiredShareCodeBuilder",
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from yoti_python_sdk.utils import YotiSerializable, remove_null_values


class RequiredShareCode(YotiSerializable):
"""
Represents a required share code for session creation
"""

def __init__(self, issuer=None, scheme=None):
"""
:param issuer: the issuer of the share code
:type issuer: str or None
:param scheme: the scheme of the share code
:type scheme: str or None
"""
self.__issuer = issuer
self.__scheme = scheme

@property
def issuer(self):
"""
The issuer of the share code

:return: the issuer
:rtype: str or None
"""
return self.__issuer

@property
def scheme(self):
"""
The scheme of the share code

:return: the scheme
:rtype: str or None
"""
return self.__scheme

def to_json(self):
return remove_null_values({
"issuer": self.issuer,
"scheme": self.scheme,
})


class RequiredShareCodeBuilder(object):
"""
Builder used to assist the creation of a required share code.

Example::

required_share_code = (RequiredShareCodeBuilder()
.with_issuer("some-issuer")
.with_scheme("some-scheme")
.build())

"""

def __init__(self):
self.__issuer = None
self.__scheme = None

def with_issuer(self, issuer):
"""
Sets the issuer of the required share code

:param issuer: the issuer
:type issuer: str
:return: the builder
:rtype: RequiredShareCodeBuilder
"""
self.__issuer = issuer
return self

def with_scheme(self, scheme):
"""
Sets the scheme of the required share code

:param scheme: the scheme
:type scheme: str
:return: the builder
:rtype: RequiredShareCodeBuilder
"""
self.__scheme = scheme
return self

def build(self):
"""
Builds a required share code, using the values supplied to the builder

:return: the required share code
:rtype: RequiredShareCode
"""
return RequiredShareCode(self.__issuer, self.__scheme)
33 changes: 32 additions & 1 deletion yoti_python_sdk/doc_scan/session/create/session_spec.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ def __init__(
required_documents=None,
block_biometric_consent=None,
session_deadline=None,
required_share_codes=None,
):
"""
:param client_session_token_ttl: the client session token TTL
Expand All @@ -43,14 +44,18 @@ 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
:param required_share_codes: the list of required share codes
:type required_share_codes: list[RequiredShareCode] or None
"""
if requested_tasks is None:
requested_tasks = []
if requested_checks is None:
requested_checks = []
if required_documents is None:
required_documents = []
if required_share_codes is None:
required_share_codes = []

self.__client_session_token_ttl = client_session_token_ttl
self.__resources_ttl = resources_ttl
Expand All @@ -62,6 +67,7 @@ def __init__(
self.__required_documents = required_documents
self.__block_biometric_consent = block_biometric_consent
self.__session_deadline = session_deadline
self.__required_share_codes = required_share_codes

@property
def client_session_token_ttl(self):
Expand Down Expand Up @@ -166,6 +172,16 @@ def session_deadline(self):
"""
return self.__session_deadline

@property
def required_share_codes(self):
"""
List of required share codes for the session

:return: the list of required share codes
:rtype: list[RequiredShareCode]
"""
return self.__required_share_codes

def to_json(self):
return remove_null_values(
{
Expand All @@ -179,6 +195,7 @@ def to_json(self):
"required_documents": self.required_documents,
"block_biometric_consent": self.block_biometric_consent,
"session_deadline": self.session_deadline,
"required_share_codes": self.required_share_codes,
}
)

Expand All @@ -199,6 +216,7 @@ def __init__(self):
self.__required_documents = []
self.__block_biometric_consent = None
self.__session_deadline = None
self.__required_share_codes = []

def with_client_session_token_ttl(self, value):
"""
Expand Down Expand Up @@ -321,6 +339,18 @@ def with_block_biometric_consent(self, block_biometric_consent):
self.__block_biometric_consent = block_biometric_consent
return self

def with_required_share_code(self, required_share_code):
"""
Adds a required share code to the session specification

:param required_share_code: the required share code
:type required_share_code: RequiredShareCode
:return: the builder
:rtype: SessionSpecBuilder
"""
self.__required_share_codes.append(required_share_code)
return self

def build(self):
"""
Builds a :class:`SessionSpec` using the supplied values
Expand All @@ -339,4 +369,5 @@ def build(self):
self.__required_documents,
self.__block_biometric_consent,
self.__session_deadline,
self.__required_share_codes,
)
18 changes: 18 additions & 0 deletions yoti_python_sdk/doc_scan/session/retrieve/resource_container.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
LivenessResourceResponse,
ZoomLivenessResourceResponse,
)
from yoti_python_sdk.doc_scan.session.retrieve.share_code_resource_response import (
ShareCodeResourceResponse,
)


class ResourceContainer(object):
Expand Down Expand Up @@ -42,6 +45,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):
"""
Expand Down Expand Up @@ -105,3 +113,13 @@ def zoom_liveness_resources(self):
for liveness in self.__liveness_capture
if isinstance(liveness, ZoomLivenessResourceResponse)
]

@property
def share_codes(self):
"""
Return a list of share code resources

:return: list of share codes
:rtype: list[ShareCodeResourceResponse]
"""
return self.__share_codes
Loading