Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0f279cb

Browse filesBrowse files
committed
A bit of refactoring
1 parent bc72803 commit 0f279cb
Copy full SHA for 0f279cb

File tree

Expand file treeCollapse file tree

2 files changed

+178
-15
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

2 files changed

+178
-15
lines changed
Open diff view settings
Collapse file

‎app/eSignature/examples/eg011_embedded_sending.py‎

Copy file name to clipboardExpand all lines: app/eSignature/examples/eg011_embedded_sending.py
+177-14Lines changed: 177 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
from docusign_esign import EnvelopesApi, ReturnUrlRequest
1+
import base64
2+
from os import path
3+
4+
from docusign_esign import EnvelopesApi, ReturnUrlRequest, EnvelopesApi, EnvelopeDefinition, \
5+
Document, Signer, CarbonCopy, SignHere, Tabs, Recipients
26
from flask import url_for, session, request
37

4-
from .eg002_signing_via_email import Eg002SigningViaEmailController
58
from ...consts import pattern, demo_docs_path
69
from ...docusign import create_api_client
710

@@ -24,7 +27,7 @@ def get_args():
2427
"signer_name": signer_name,
2528
"cc_email": cc_email,
2629
"cc_name": cc_name,
27-
"status": "sent",
30+
"status": "created",
2831
}
2932
args = {
3033
"starting_view": starting_view,
@@ -36,36 +39,196 @@ def get_args():
3639
}
3740
return args
3841

39-
@staticmethod
40-
def worker(args,doc_docx_path,doc_pdf_path):
42+
@classmethod
43+
def worker(cls, args, doc_docx_path, doc_pdf_path):
4144
"""
4245
This function does the work of creating the envelope in
4346
draft mode and returning a URL for the sender"s view
4447
"""
4548

4649
# Step 2. Create the envelope with "created" (draft) status
47-
args["envelope_args"]["status"] = "created"
48-
# Using worker from example 002
49-
results = Eg002SigningViaEmailController.worker(args, doc_docx_path, doc_pdf_path)
50-
envelope_id = results["envelope_id"]
50+
envelope = cls.create_envelope(args, doc_docx_path, doc_pdf_path)
51+
envelope_id = envelope.envelope_id
5152

5253
# Step 3. Create the sender view
54+
sender_view_url = cls.create_sender_view(args, envelope_id)
55+
56+
return {"envelope_id": envelope_id, "redirect_url": sender_view_url}
57+
58+
@classmethod
59+
#ds-snippet-start:eSign11Step3
60+
def create_sender_view(cls, args, envelope_id):
5361
view_request = ReturnUrlRequest(return_url=args["ds_return_url"])
5462
# Exceptions will be caught by the calling function
55-
#ds-snippet-start:eSign11Step3
5663
api_client = create_api_client(base_path=args["base_path"], access_token=args["access_token"])
5764

5865
envelope_api = EnvelopesApi(api_client)
59-
results = envelope_api.create_sender_view(
66+
sender_view = envelope_api.create_sender_view(
6067
account_id=args["account_id"],
6168
envelope_id=envelope_id,
6269
return_url_request=view_request
6370
)
6471

6572
# Switch to Recipient and Documents view if requested by the user
66-
url = results.url
73+
url = sender_view.url
6774
if args["starting_view"] == "recipient":
6875
url = url.replace("send=1", "send=0")
69-
#ds-snippet-end:eSign13Step3
7076

71-
return {"envelope_id": envelope_id, "redirect_url": url}
77+
return url
78+
#ds-snippet-end:eSign11Step3
79+
80+
@classmethod
81+
#ds-snippet-start:eSign11Step2
82+
def create_envelope(cls, args, doc_docx_path, doc_pdf_path):
83+
envelope_args = args["envelope_args"]
84+
# Create the envelope request object
85+
envelope_definition = cls.make_envelope(envelope_args, doc_docx_path, doc_pdf_path)
86+
api_client = create_api_client(base_path=args["base_path"], access_token=args["access_token"])
87+
# Call Envelopes::create API method
88+
# Exceptions will be caught by the calling function
89+
envelopes_api = EnvelopesApi(api_client)
90+
return envelopes_api.create_envelope(account_id=args["account_id"], envelope_definition=envelope_definition)
91+
92+
@classmethod
93+
def make_envelope(cls, args, doc_docx_path, doc_pdf_path):
94+
"""
95+
Creates envelope
96+
Document 1: An HTML document.
97+
Document 2: A Word .docx document.
98+
Document 3: A PDF document.
99+
DocuSign will convert all of the documents to the PDF format.
100+
The recipients" field tags are placed using <b>anchor</b> strings.
101+
"""
102+
103+
# document 1 (html) has sign here anchor tag **signature_1**
104+
# document 2 (docx) has sign here anchor tag /sn1/
105+
# document 3 (pdf) has sign here anchor tag /sn1/
106+
#
107+
# The envelope has two recipients.
108+
# recipient 1 - signer
109+
# recipient 2 - cc
110+
# The envelope will be sent first to the signer.
111+
# After it is signed, a copy is sent to the cc person.
112+
113+
# create the envelope definition
114+
env = EnvelopeDefinition(
115+
email_subject="Please sign this document set"
116+
)
117+
doc1_b64 = base64.b64encode(bytes(cls.create_document1(args), "utf-8")).decode("ascii")
118+
# read files 2 and 3 from a local directory
119+
# The reads could raise an exception if the file is not available!
120+
with open(path.join(demo_docs_path, doc_docx_path), "rb") as file:
121+
doc2_docx_bytes = file.read()
122+
doc2_b64 = base64.b64encode(doc2_docx_bytes).decode("ascii")
123+
with open(path.join(demo_docs_path, doc_pdf_path), "rb") as file:
124+
doc3_pdf_bytes = file.read()
125+
doc3_b64 = base64.b64encode(doc3_pdf_bytes).decode("ascii")
126+
127+
# Create the document models
128+
document1 = Document( # create the DocuSign document object
129+
document_base64=doc1_b64,
130+
name="Order acknowledgement", # can be different from actual file name
131+
file_extension="html", # many different document types are accepted
132+
document_id="1" # a label used to reference the doc
133+
)
134+
document2 = Document( # create the DocuSign document object
135+
document_base64=doc2_b64,
136+
name="Battle Plan", # can be different from actual file name
137+
file_extension="docx", # many different document types are accepted
138+
document_id="2" # a label used to reference the doc
139+
)
140+
document3 = Document( # create the DocuSign document object
141+
document_base64=doc3_b64,
142+
name="Lorem Ipsum", # can be different from actual file name
143+
file_extension="pdf", # many different document types are accepted
144+
document_id="3" # a label used to reference the doc
145+
)
146+
# The order in the docs array determines the order in the envelope
147+
env.documents = [document1, document2, document3]
148+
149+
# Create the signer recipient model
150+
signer1 = Signer(
151+
email=args["signer_email"],
152+
name=args["signer_name"],
153+
recipient_id="1",
154+
routing_order="1"
155+
)
156+
# routingOrder (lower means earlier) determines the order of deliveries
157+
# to the recipients. Parallel routing order is supported by using the
158+
# same integer as the order for two or more recipients.
159+
160+
# create a cc recipient to receive a copy of the documents
161+
cc1 = CarbonCopy(
162+
email=args["cc_email"],
163+
name=args["cc_name"],
164+
recipient_id="2",
165+
routing_order="2"
166+
)
167+
168+
# Create signHere fields (also known as tabs) on the documents,
169+
# We"re using anchor (autoPlace) positioning
170+
#
171+
# The DocuSign platform searches throughout your envelope"s
172+
# documents for matching anchor strings. So the
173+
# signHere2 tab will be used in both document 2 and 3 since they
174+
# use the same anchor string for their "signer 1" tabs.
175+
sign_here1 = SignHere(
176+
anchor_string="**signature_1**",
177+
anchor_units="pixels",
178+
anchor_y_offset="10",
179+
anchor_x_offset="20"
180+
)
181+
182+
sign_here2 = SignHere(
183+
anchor_string="/sn1/",
184+
anchor_units="pixels",
185+
anchor_y_offset="10",
186+
anchor_x_offset="20"
187+
)
188+
189+
# Add the tabs model (including the sign_here tabs) to the signer
190+
# The Tabs object wants arrays of the different field/tab types
191+
signer1.tabs = Tabs(sign_here_tabs=[sign_here1, sign_here2])
192+
193+
# Add the recipients to the envelope object
194+
recipients = Recipients(signers=[signer1], carbon_copies=[cc1])
195+
env.recipients = recipients
196+
197+
# Request that the envelope be sent by setting |status| to "sent".
198+
# To request that the envelope be created as a draft, set to "created"
199+
env.status = args["status"]
200+
201+
return env
202+
203+
@classmethod
204+
def create_document1(cls, args):
205+
""" Creates document 1 -- an html document"""
206+
207+
return f"""
208+
<!DOCTYPE html>
209+
<html>
210+
<head>
211+
<meta charset="UTF-8">
212+
</head>
213+
<body style="font-family:sans-serif;margin-left:2em;">
214+
<h1 style="font-family: "Trebuchet MS", Helvetica, sans-serif;
215+
color: darkblue;margin-bottom: 0;">World Wide Corp</h1>
216+
<h2 style="font-family: "Trebuchet MS", Helvetica, sans-serif;
217+
margin-top: 0px;margin-bottom: 3.5em;font-size: 1em;
218+
color: darkblue;">Order Processing Division</h2>
219+
<h4>Ordered by {args["signer_name"]}</h4>
220+
<p style="margin-top:0em; margin-bottom:0em;">Email: {args["signer_email"]}</p>
221+
<p style="margin-top:0em; margin-bottom:0em;">Copy to: {args["cc_name"]}, {args["cc_email"]}</p>
222+
<p style="margin-top:3em;">
223+
Candy bonbon pastry jujubes lollipop wafer biscuit biscuit. Topping brownie sesame snaps sweet roll pie.
224+
Croissant danish biscuit soufflé caramels jujubes jelly. Dragée danish caramels lemon drops dragée.
225+
Gummi bears cupcake biscuit tiramisu sugar plum pastry. Dragée gummies applicake pudding liquorice.
226+
Donut jujubes oat cake jelly-o.
227+
Dessert bear claw chocolate cake gummies lollipop sugar plum ice cream gummies cheesecake.
228+
</p>
229+
<!-- Note the anchor tag for the signature field is in white. -->
230+
<h3 style="margin-top:3em;">Agreed: <span style="color:white;">**signature_1**/</span></h3>
231+
</body>
232+
</html>
233+
"""
234+
#ds-snippet-end:eSign11Step2
Collapse file

‎app/webforms/examples/eg001_create_instance.py‎

Copy file name to clipboardExpand all lines: app/webforms/examples/eg001_create_instance.py
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from docusign_webforms import ApiClient, FormInstanceManagementApi, FormManagementApi, CreateInstanceRequestBody
44
from docusign_esign import Document, Signer, SignHere, Tabs, Recipients, TemplatesApi, Checkbox, DateSigned, \
5-
Text, EnvelopeTemplate
5+
Text, EnvelopeTemplate
66

77
from ...docusign import create_api_client
88

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.