Skip to content

Commit df90d6e

Browse files
support custom folders
1 parent de3953e commit df90d6e

File tree

4 files changed

+52
-8
lines changed

4 files changed

+52
-8
lines changed

app/eSignature/examples/eg045_delete_restore_envelope.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,13 @@ def move_envelope(args):
2424
results = folders_api.move_envelopes(account_id=args["account_id"], folder_id=args["folder_id"], folders_request=folders_request)
2525
#ds-snippet-end:eSign45Step4
2626
return results
27+
28+
@staticmethod
29+
def get_folders(args):
30+
api_client = create_api_client(base_path=args["base_path"], access_token=args["access_token"])
31+
folders_api = FoldersApi(api_client)
32+
33+
#ds-snippet-start:eSign45Step5
34+
results = folders_api.list(account_id=args["account_id"])
35+
#ds-snippet-end:eSign45Step5
36+
return results

app/eSignature/utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
def get_folder_id_by_name(folders, folder_name):
2+
for folder in folders:
3+
if folder.name.lower() == folder_name.lower():
4+
return folder.folder_id
5+
6+
subfolders = folder.folders
7+
if subfolders is not None and len(subfolders) > 0:
8+
folder_id = get_folder_id_by_name(subfolders, folder_name)
9+
if folder_id is not None:
10+
return folder_id

app/eSignature/views/eg045_delete_restore_envelope.py

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
""" Example 045: Delete and Restore an Envelope """
1+
""" Example 045: Delete and undelete an Envelope """
22

33
from os import path
44

55
from docusign_esign.client.api_exception import ApiException
66
from flask import render_template, session, Blueprint, request, redirect
77

88
from ..examples.eg045_delete_restore_envelope import Eg045DeleteRestoreEnvelopeController
9+
from ..utils import get_folder_id_by_name
910
from ...docusign import authenticate, ensure_manifest, get_example_by_number
1011
from ...ds_config import DS_CONFIG
1112
from ...error_handlers import process_error
@@ -54,7 +55,7 @@ def delete_envelope():
5455
return render_template(
5556
"example_done.html",
5657
title=example["ExampleName"],
57-
message=additional_page_data["ResultsPageText"],
58+
message=additional_page_data["ResultsPageText"].format(args["envelope_id"]),
5859
redirect_url=restore_endpoint
5960
)
6061

@@ -69,26 +70,43 @@ def restore_envelope():
6970
"""
7071

7172
# 1. Get required arguments
73+
folder_name = pattern.sub("", request.form.get("folder_name"))
7274
args = {
7375
"account_id": session["ds_account_id"],
7476
"base_path": session["ds_base_path"],
7577
"access_token": session["ds_access_token"],
7678
"envelope_id": pattern.sub("", session.get("envelope_id")),
77-
"folder_id": restore_folder_id,
7879
"from_folder_id": delete_folder_id
7980
}
81+
82+
example = get_example_by_number(session["manifest"], example_number, api)
8083
try:
8184
# 2. Call the worker method
85+
folders = Eg045DeleteRestoreEnvelopeController.get_folders(args)
86+
args["folder_id"] = get_folder_id_by_name(folders.folders, folder_name)
87+
88+
if args["folder_id"] is None:
89+
additional_page_data = next(
90+
(p for p in example["AdditionalPage"] if p["Name"] == "folder_does_not_exist"),
91+
None
92+
)
93+
94+
return render_template(
95+
"example_done.html",
96+
title=example["ExampleName"],
97+
message=additional_page_data["ResultsPageText"].format(folder_name),
98+
redirect_url=restore_endpoint
99+
)
100+
82101
Eg045DeleteRestoreEnvelopeController.move_envelope(args)
83102
except ApiException as err:
84103
return process_error(err)
85104

86105
# 3. Render success response with envelopeId
87-
example = get_example_by_number(session["manifest"], example_number, api)
88106
return render_template(
89107
"example_done.html",
90108
title=example["ExampleName"],
91-
message=example["ResultsPageText"]
109+
message=example["ResultsPageText"].format(session.get("envelope_id", ""), args["folder_id"], folder_name)
92110
)
93111

94112
@eg045.route(f"/{eg}", methods=["GET"])

app/templates/eSignature/eg045_restore_envelope.html

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,19 @@ <h4>{{ title }}</h4>
55
<p>{{ session["manifest"]["SupportingTexts"]["HelpingTexts"]["EnvelopeWillBeRestored"].format(envelope_id) | safe }}</p>
66

77
{% set form_index = 0 %}
8-
{% set envelope_id_index = 0 %}
8+
{% set folder_name_index = 1 %}
99

1010
<form class="eg" action="" method="post" data-busy="form">
11-
{% if 'FormName' in example['Forms'][recipient_form_index] %}
12-
<p>{{ example['Forms'][recipient_form_index]['FormName'] | safe }}</p>
11+
{% if 'FormName' in example['Forms'][form_index] %}
12+
<p>{{ example['Forms'][form_index]['FormName'] | safe }}</p>
1313
{% endif %}
1414

15+
<div class="form-group">
16+
<label for="folder_name">{{ example['Forms'][form_index]['Inputs'][folder_name_index]['InputName'] }}</label>
17+
<input type="text" class="form-control" id="folder_name" name="folder_name"
18+
placeholder="{{ example['Forms'][form_index]['Inputs'][folder_name_index]['InputPlaceholder'] }}" required/>
19+
</div>
20+
1521
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
1622
{% include 'submit_button.html' %}
1723
</form>

0 commit comments

Comments
 (0)