Skip to content

Commit a123bce

Browse files
Added new Admin API eg008 and eg009 code examples (#72)
* added new examples * Update templates * fixes * fixing example 2 so that 8 and 9 can run * add check if user was deleted * fixes * removing admin 9 * Revert "removing admin 9" This reverts commit 3c386a22e8aca02b3c8a69a3c33cf292179cf6c6. * removing homepage numbers and updating sdk version * removing text around numbered examples Co-authored-by: Paige Rossi <paige.rossi@docusign.com>
1 parent a5f282c commit a123bce

7 files changed

Lines changed: 255 additions & 9 deletions

app/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
app.register_blueprint(admin_views.eg006)
6767
app.register_blueprint(admin_views.eg007)
6868
app.register_blueprint(admin_views.eg008)
69+
app.register_blueprint(admin_views.eg009)
6970

7071
elif EXAMPLES_API_TYPE["Click"]:
7172
app.register_blueprint(click_views.eg001)
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
from docusign_admin import (
2+
ApiClient,
3+
ProductPermissionProfilesApi,
4+
UserProductProfileDeleteRequest)
5+
from flask import session, request
6+
7+
from ...ds_config import DS_CONFIG
8+
from app.admin.utils import get_organization_id
9+
10+
class Eg009DeleteUserProductPermissionProfileController:
11+
@staticmethod
12+
def get_args():
13+
"""Get required session and request arguments"""
14+
organization_id = get_organization_id()
15+
return {
16+
"account_id": session["ds_account_id"], # Represents your {ACCOUNT_ID}
17+
"access_token": session["ds_access_token"], # Represents your {ACCESS_TOKEN}
18+
"organization_id": organization_id, # Represents your {ORGANIZATION_ID}
19+
"product_id": request.form.get("product_id"),
20+
"clm_email": session["clm_email"],
21+
}
22+
23+
@staticmethod
24+
def get_permission_profiles_by_email():
25+
"""Get permission profiles"""
26+
27+
api_client = ApiClient(host=DS_CONFIG["admin_api_client_host"])
28+
api_client.set_default_header(
29+
header_name="Authorization",
30+
header_value=f"Bearer {session['ds_access_token']}"
31+
)
32+
# Step 3 start
33+
product_permission_profiles_api = ProductPermissionProfilesApi(api_client=api_client)
34+
profiles = product_permission_profiles_api.get_user_product_permission_profiles_by_email(
35+
organization_id=get_organization_id(),
36+
account_id=session["ds_account_id"],
37+
email=session["clm_email"]
38+
)
39+
profiles_list = profiles.to_dict()["product_permission_profiles"]
40+
# Step 3 end
41+
return profiles_list
42+
43+
@staticmethod
44+
def worker(self, args):
45+
"""
46+
1. Create an API client with headers
47+
2. Get your monitor data via SDK
48+
"""
49+
50+
access_token = args["access_token"]
51+
account_id = args["account_id"]
52+
org_id = args["organization_id"]
53+
email = args["clm_email"]
54+
product_id = args["product_id"]
55+
56+
# Create an API client with headers
57+
# Step 2 start
58+
api_client = ApiClient(host=DS_CONFIG["admin_api_client_host"])
59+
api_client.set_default_header(
60+
header_name="Authorization",
61+
header_value=f"Bearer {access_token}"
62+
)
63+
# Step 2 end
64+
65+
# Step 3 start
66+
user_product_profile_delete_request = UserProductProfileDeleteRequest(
67+
user_email=email,
68+
product_ids=[product_id]
69+
)
70+
# Step 3 end
71+
72+
# Step 4 start
73+
product_permission_profiles_api = ProductPermissionProfilesApi(api_client=api_client)
74+
response = product_permission_profiles_api.remove_user_product_permission(
75+
organization_id=org_id,
76+
account_id=account_id,
77+
user_product_permission_profiles_request=user_product_profile_delete_request
78+
)
79+
# Step 4 end
80+
81+
return response.to_dict()
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<!-- extend base layout --> {% extends "base.html" %} {% block content %}
2+
3+
<h4>9. Delete user product permission profiles using an email address</h4>
4+
<p>Demonstrates how to list and delete DocuSign Admin user product permission profiles.</p>
5+
6+
{% if show_doc %}
7+
<p><a target='_blank' href='{{ documentation | safe }}'>Documentation</a> about this example.</p>
8+
{% endif %}
9+
10+
<p>
11+
API methods used:
12+
<a target="_blank" href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/getuserproductpermissionprofilesbyemail/">MultiProductUserManagement:getUserProductPermissionProfilesByEmail</a>,
13+
<a target="_blank" href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/removeuserproductpermission/">MultiProductUserManagement:removeUserProductPermission</a>.
14+
</p>
15+
<p>
16+
View source file <a target="_blank" href="{{ source_url | safe }}">{{ source_file }}</a> on GitHub.
17+
</p>
18+
19+
{% if email_ok %}
20+
<p>Delete user product permission profile for the following email: <b>{{ email }}</b></p>
21+
22+
<form class="eg" action="" method="post" data-busy="form">
23+
{% if permission_profile_list %}
24+
<div class="form-group">
25+
<label for="product_id">Choose which product permission profile you would like to delete</label>
26+
<select class="form-control" id="product_id" name="product_id">
27+
{% for profile in permission_profile_list %}
28+
<option value="{{profile.product_id}}">{{profile.permission_name}}</option>
29+
{% endfor %}
30+
</select>
31+
</div>
32+
{% else %}
33+
<p>Problem: Please first create a user with permission profile.
34+
</br>Thank you.</p>
35+
{% endif %}
36+
37+
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}"/>
38+
<button type="submit" class="btn btn-docu">Continue</button>
39+
</form>
40+
{% else %}
41+
<p>Problem: You do not have the user to change permissions for. Please <a href="eg002">create a new user</a> to continue.
42+
</br>Thank you.</p>
43+
44+
<form class="eg" action="eg002" method="get">
45+
<button type="submit" class="btn btn-docu">Continue</button>
46+
</form>
47+
{% endif %}
48+
{% endblock %}

app/admin/templates/home_admin.html

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ <h1 class="display-4">Python Launcher</h1>
2626
{% endif %}
2727

2828

29-
<h4 id="example001">1. <a href="eg001">Create a new active eSignature user</a></h4>
29+
<h4 id="example001"><a href="eg001">Create a new active eSignature user</a></h4>
3030
<p>Demonstrates how to create a new eSignature user and activate their account automatically.</p>
3131

3232
<p>API methods used:
@@ -35,7 +35,7 @@ <h4 id="example001">1. <a href="eg001">Create a new active eSignature user</a></
3535
<a target='_blank' href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/esignusermanagement/createuser/">eSignUserManagement:createUser</a>
3636
</p>
3737

38-
<h4 id="example002">2. <a href="eg002">Create a new active user for CLM and eSignature</a></h4>
38+
<h4 id="example002"><a href="eg002">Create a new active user for CLM and eSignature</a></h4>
3939
<p>Demonstrates how to create a new DocuSign user (valid for both CLM and eSignature APIs) and activate their account automatically.</p>
4040

4141
<p>API methods used:
@@ -44,54 +44,63 @@ <h4 id="example002">2. <a href="eg002">Create a new active user for CLM and eSig
4444
<a target ='_blank' href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/addorupdateuser/">MultiProductUserManagement:addOrUpdateUser</a>
4545
</p>
4646

47-
<h4 id="example003">3. <a href="eg003">Bulk export user data</a></h4>
47+
<h4 id="example003"><a href="eg003">Bulk export user data</a></h4>
4848
<p>Demonstrates how to bulk export user accounts within an organization into a CSV (comma separated value) file.</p>
4949

5050
<p>API methods used:
5151
<a target='_blank' href="https://developers.docusign.com/docs/admin-api/reference/bulkoperations/userexport/createuserlistexport/">UserExport:createUserListExport</a>,
5252
<a target='_blank' href="https://developers.docusign.com/docs/admin-api/reference/bulkoperations/userexport/getuserlistexport/">UserExport:getUserListExport</a>
5353
</p>
5454

55-
<h4 id="example004">4. <a href="eg004">Add users via bulk import</a></h4>
55+
<h4 id="example004"><a href="eg004">Add users via bulk import</a></h4>
5656
<p>Demonstrates how to bulk import users and add user data from an example CSV (comma-separated value) file into a DocuSign Admin organization.</p>
5757

5858
<p>API methods used:
5959
<a target='_blank' href="https://developers.docusign.com/docs/admin-api/reference/bulkoperations/userimport/addbulkuserimport/">UserImport:addBulkUserImport</a>,
6060
<a target='_blank' href="https://developers.docusign.com/docs/admin-api/reference/bulkoperations/userimport/getbulkuserimportrequest/">UserImport:getBulkUserImportRequest</a>
6161
</p>
6262

63-
<h4 id="example005">5. <a href="eg005">Audit users</a></h4>
63+
<h4 id="example005"><a href="eg005">Audit users</a></h4>
6464
<p>Demonstrates how to audit the users in your account by retrieving the profiles of users that were modified after a specified date.</p>
6565

6666
<p>API methods used:
6767
<a target='_blank' href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/users/getusers/">Users:getUsers</a>,
6868
<a target='_blank' href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/esignusermanagement/getuserprofiles/">eSignUserManagement:getUserProfiles</a>
6969
</p>
7070

71-
<h4 id="example006">6. <a href="eg006">Retrieve the user's DocuSign profile using an email address</a></h4>
71+
<h4 id="example006"><a href="eg006">Retrieve the user's DocuSign profile using an email address</a></h4>
7272
<p>Demonstrates how to obtain the user’s DocuSign profile information across all DocuSign accounts by specifying the user’s email address.</p>
7373

7474
<p>API method used:
7575
<a target="_blank" rel='noopener noreferrer'
7676
href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/getuserdsprofilesbyemail/">MultiProductUserManagement:getUserDSProfilesByEmail</a>
7777
</p>
7878

79-
<h4 id="example007">7. <a href="eg007">Retrieve the user's DocuSign profile using a User ID</a></h4>
79+
<h4 id="example007"><a href="eg007">Retrieve the user's DocuSign profile using a User ID</a></h4>
8080
<p>Demonstrates how to obtain the user’s DocuSign profile information across all DocuSign accounts by specifying the user’s User ID.</p>
8181

8282
<p>API method used:
8383
<a target="_blank" rel='noopener noreferrer'
8484
href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/getuserdsprofile/">MultiProductUserManagement:getUserDSProfile</a>
8585
</p>
8686

87-
<h4 id="example008">8. <a href="eg008">Update user product permission profiles using an email address</a></h4>
87+
<h4 id="example008"><a href="eg008">Update user product permission profiles using an email address</a></h4>
8888
<p>Demonstrates how to update user product permission profiles. There may only be one permission profile assigned to a user per product.</p>
8989

9090
<p>
9191
API methods used:
9292
<a target='_blank' href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/getproductpermissionprofiles/">MultiProductUserManagement:getProductPermissionProfiles</a>,
9393
<a target="_blank" href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/adduserproductpermissionprofilesbyemail/">MultiProductUserManagement:addUserProductPermissionProfilesByEmail</a>
9494
</p>
95+
96+
<h4 id="example009"><a href="eg009">Delete user product permission profiles using an email address</a></h4>
97+
<p>Demonstrates how to list and delete DocuSign Admin user product permission profiles.</p>
98+
99+
<p>
100+
API methods used:
101+
<a target="_blank" href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/getuserproductpermissionprofilesbyemail/">MultiProductUserManagement:getUserProductPermissionProfilesByEmail</a>,
102+
<a target="_blank" href="https://developers.docusign.com/docs/admin-api/reference/usermanagement/multiproductusermanagement/removeuserproductpermission/">MultiProductUserManagement:removeUserProductPermission</a>
103+
</p>
95104
</div>
96105
</div>
97106

app/admin/views/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@
66
from .eg006_get_user_profile_by_email import eg006
77
from .eg007_get_user_profile_by_user_id import eg007
88
from .eg008_update_user_product_permission_profile import eg008
9+
from .eg009_delete_user_product_permission_profile import eg009
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
"""Example 009: Delete user product permission profiles using an email address. """
2+
3+
import json
4+
5+
from docusign_admin.client.api_exception import ApiException
6+
from flask import Blueprint, render_template, current_app, session
7+
8+
from app.docusign import authenticate
9+
from app.error_handlers import process_error
10+
from ..examples.eg009_delete_user_product_permission_profile import Eg009DeleteUserProductPermissionProfileController
11+
from ...ds_config import DS_CONFIG
12+
from ..utils import check_user_exists_by_email
13+
14+
eg = "eg009" # Reference (and URL) for this example
15+
eg009 = Blueprint(eg, __name__)
16+
17+
@eg009.route(f"/{eg}", methods=["POST"])
18+
@authenticate(eg=eg)
19+
def create_active_clm_esign_user():
20+
"""
21+
1. Get required arguments
22+
2. Call the worker method
23+
3. Render the response
24+
"""
25+
26+
if "clm_email" in session and check_user_exists_by_email(session["clm_email"]):
27+
controller = Eg009DeleteUserProductPermissionProfileController()
28+
29+
# 1. Get required arguments
30+
args = Eg009DeleteUserProductPermissionProfileController.get_args()
31+
try:
32+
# 2. Call the worker method
33+
results = Eg009DeleteUserProductPermissionProfileController.worker(controller, args)
34+
except ApiException as err:
35+
return process_error(err)
36+
37+
template = render_template(
38+
"example_done.html",
39+
title="Delete user product permission profiles using an email address",
40+
h1="Delete user product permission profiles using an email address",
41+
message="Results from MultiProductUserManagement:removeUserProductPermission method:",
42+
json=json.dumps(json.dumps(results, default=str))
43+
)
44+
else:
45+
template = render_template(
46+
f"{eg}_delete_user_product_permission_profile.html",
47+
title="Delete user product permission profiles using an email address",
48+
source_file=f"{eg}_delete_user_product_permission_profile.py",
49+
source_url=DS_CONFIG["admin_github_url"] + f"{eg}_delete_user_product_permission_profile.py",
50+
documentation=DS_CONFIG["documentation"] + eg
51+
)
52+
53+
return template
54+
55+
@eg009.route(f"/{eg}", methods=["GET"])
56+
@authenticate(eg=eg)
57+
def get_view():
58+
""" Responds with the form for the example"""
59+
60+
if "clm_email" in session and check_user_exists_by_email(session["clm_email"]):
61+
try:
62+
profiles = Eg009DeleteUserProductPermissionProfileController.get_permission_profiles_by_email()
63+
permission_profile_list = []
64+
clm_product_id = None
65+
clm_permission_profile_name = None
66+
esign_product_id = None
67+
esign_permission_profile_name = None
68+
for profile in profiles:
69+
permission_profiles = profile["permission_profiles"]
70+
for permission_profile in permission_profiles:
71+
if profile["product_name"] == "CLM":
72+
clm_permission_profile_name = permission_profile["permission_profile_name"]
73+
clm_product_id = profile["product_id"]
74+
else:
75+
esign_permission_profile_name = permission_profile["permission_profile_name"]
76+
esign_product_id = profile["product_id"]
77+
78+
if clm_product_id is not None:
79+
permission_profile_list.append({"product_id": clm_product_id, "permission_name": f"CLM - {clm_permission_profile_name}"})
80+
81+
if esign_product_id is not None:
82+
permission_profile_list.append({"product_id": esign_product_id, "permission_name": f"eSignature - {esign_permission_profile_name}"})
83+
84+
except ApiException as err:
85+
return process_error(err)
86+
87+
template = render_template(
88+
f"{eg}_delete_user_product_permission_profile.html",
89+
title="Delete user product permission profiles using an email address",
90+
email_ok="clm_email" in session,
91+
source_file=f"{eg}_delete_user_product_permission_profile.py",
92+
source_url=DS_CONFIG["admin_github_url"] + f"{eg}_delete_user_product_permission_profile.py",
93+
documentation=DS_CONFIG["documentation"] + eg,
94+
email=session["clm_email"],
95+
permission_profile_list=permission_profile_list
96+
)
97+
else:
98+
template = render_template(
99+
f"{eg}_delete_user_product_permission_profile.html",
100+
title="Delete user product permission profiles using an email address",
101+
source_file=f"{eg}_delete_user_product_permission_profile.py",
102+
source_url=DS_CONFIG["admin_github_url"] + f"{eg}_delete_user_product_permission_profile.py",
103+
documentation=DS_CONFIG["documentation"] + eg
104+
)
105+
106+
return template

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ docusign-esign==3.16.0
88
docusign-rooms==1.1.0
99
docusign-monitor==1.1.0
1010
docusign-click==1.0.0
11-
docusign-admin==1.1.0
11+
docusign-admin==1.1.1
1212
Flask==1.1.1
1313
Flask-OAuthlib==0.9.6
1414
flask-wtf==0.14.3

0 commit comments

Comments
 (0)