Skip to content

Commit deb6a81

Browse files
committed
SDK-1772: Add support for document page frames
1 parent 8149586 commit deb6a81

File tree

3 files changed

+62
-22
lines changed

3 files changed

+62
-22
lines changed

examples/doc_scan/templates/success.html

Lines changed: 39 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ <h2>ID Documents</h2>
178178

179179
{% with doc_num=0 %}
180180
{% for document in session_result.resources.id_documents %}
181-
{% set doc_num = loop.index + 1 %}
181+
{% set doc_num = loop.index %}
182182
<div class="row pt-4">
183183
<div class="col">
184184

@@ -305,36 +305,54 @@ <h5>Generated Media</h5>
305305
{% endif %}
306306

307307
{% if document.pages|length > 0 %}
308+
{% with page_num=0 %}
309+
{% for page in document.pages %}
310+
{% set page_num = loop.index %}
308311
<div class="card">
309-
<div class="card-header" id="document-pages-{{ doc_num }}">
312+
<div class="card-header" id="document-pages-{{ doc_num }}-{{ page_num }}">
310313
<h4 class="mb-0">
311314
<button class="btn btn-link" type="button" data-toggle="collapse"
312-
data-target="#collapse-document-pages-{{ doc_num }}"
315+
data-target="#collapse-document-pages-{{ doc_num }}-{{ page_num }}"
313316
aria-expanded="true"
314-
aria-controls="collapse-document-pages-{{ doc_num }}">
315-
Pages
317+
aria-controls="collapse-document-pages-{{ doc_num }}-{{ page_num }}">
318+
Page {{ page_num }}
316319
</button>
317320
</h4>
318321
</div>
319-
<div id="collapse-document-pages-{{ doc_num }}" class="collapse"
320-
aria-labelledby="document-pages-{{ doc_num }}">
321-
<div class="card-body">
322-
<div class="card-group">
323-
{% for page in document.pages %}
324-
{% if page.media is not none %}
325-
<div class="card" style="width: 18rem;">
326-
<img class="card-img-top"
327-
src="/media?mediaId={{ page.media.id }}"/>
328-
<div class="card-body">
329-
<p>Method: {{ page.capture_method }}</p>
330-
</div>
322+
<div id="collapse-document-pages-{{ doc_num }}-{{ page_num }}" class="collapse"
323+
aria-labelledby="document-pages-{{ doc_num }}-{{ page_num }}">
324+
325+
<div class="card-group">
326+
{% if page.media is not none %}
327+
<div class="card" style="width: 18rem;">
328+
<img class="card-img-top"
329+
src="/media?mediaId={{ page.media.id }}"/>
330+
<div class="card-body">
331+
<p>Method: {{ page.capture_method }}</p>
332+
</div>
333+
</div>
334+
{% endif %}
335+
</div>
336+
337+
{% if page.frames|length > 0 %}
338+
<div class="card-group">
339+
{% for frame in page.frames %}
340+
{% if frame.media is not none %}
341+
<div class="card">
342+
<img class="card-img-top" src="/media?mediaId={{ frame.media.id }}" />
343+
<div class="card-body">
344+
<h5 class="card-title">Frame</h5>
331345
</div>
332-
{% endif %}
333-
{% endfor %}
334-
</div>
346+
</div>
347+
{% endif %}
348+
{% endfor %}
335349
</div>
350+
{% endif %}
351+
336352
</div>
337353
</div>
354+
{% endfor %}
355+
{% endwith %}
338356
{% endif %}
339357
</div>
340358
</div>
@@ -352,7 +370,7 @@ <h2>Zoom Liveness Resources</h2>
352370

353371
{% with liveness_num=0 %}
354372
{% for liveness in session_result.resources.zoom_liveness_resources %}
355-
{% set liveness_num = loop.index + 1 %}
373+
{% set liveness_num = loop.index %}
356374
<div class="row pt-4">
357375
<div class="col">
358376
<table class="table table-striped table-light">

yoti_python_sdk/doc_scan/session/retrieve/page_response.py

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

44
from .media_response import MediaResponse
5+
from .frame_response import FrameResponse
56

67

78
class PageResponse(object):
@@ -21,6 +22,7 @@ def __init__(self, data=None):
2122
data["capture_method"] if "capture_method" in data.keys() else None
2223
)
2324
self.__media = MediaResponse(data["media"]) if "media" in data.keys() else None
25+
self.__frames = [FrameResponse(frame) for frame in data.get("frames", [])]
2426

2527
@property
2628
def capture_method(self):
@@ -41,3 +43,13 @@ def media(self):
4143
:rtype: MediaResponse or None
4244
"""
4345
return self.__media
46+
47+
@property
48+
def frames(self):
49+
"""
50+
Returns the list of associated frames
51+
52+
:return: the frames
53+
:rtype: list[FrameResponse]
54+
"""
55+
return self.__frames

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

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,34 @@
22

33
from yoti_python_sdk.doc_scan.session.retrieve.media_response import MediaResponse
44
from yoti_python_sdk.doc_scan.session.retrieve.page_response import PageResponse
5+
from yoti_python_sdk.doc_scan.session.retrieve.frame_response import FrameResponse
56

67

78
class PageResponseTest(unittest.TestCase):
89
SOME_CAPTURE_METHOD = "someCaptureMethod"
10+
SOME_FRAMES = [{"first": "frame"}, {"second": "frame"}]
911

1012
def test_should_parse_correctly(self):
11-
data = {"capture_method": self.SOME_CAPTURE_METHOD, "media": {}}
13+
data = {
14+
"capture_method": self.SOME_CAPTURE_METHOD,
15+
"media": {},
16+
"frames": self.SOME_FRAMES,
17+
}
1218

1319
result = PageResponse(data)
1420

1521
assert result.capture_method is self.SOME_CAPTURE_METHOD
1622
assert isinstance(result.media, MediaResponse)
23+
assert len(result.frames) == 2
24+
assert isinstance(result.frames[0], FrameResponse)
25+
assert isinstance(result.frames[1], FrameResponse)
1726

1827
def test_should_parse_with_none(self):
1928
result = PageResponse(None)
2029

2130
assert result.capture_method is None
2231
assert result.media is None
32+
assert len(result.frames) == 0
2333

2434

2535
if __name__ == "__main__":

0 commit comments

Comments
 (0)