Skip to content

Commit a6c9980

Browse files
Attempt to fix Python APIs
Signed-off-by: Lukasz Gryglicki <[email protected]>
1 parent 3d71841 commit a6c9980

13 files changed

+189
-15
lines changed

cla-backend/cla/controllers/signature.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ def create_signature(signature_project_id, # pylint: disable=too-many-arguments
5959
signature_return_url=None,
6060
signature_sign_url=None,
6161
signature_user_ccla_company_id=None,
62-
signature_acl=None):
62+
signature_acl=set()):
6363
"""
6464
Creates an signature and returns the newly created signature in dict format.
6565
@@ -85,7 +85,7 @@ def create_signature(signature_project_id, # pylint: disable=too-many-arguments
8585
:type signature_user_ccla_company_id: string
8686
:return: A dict of a newly created signature.
8787
:param signature_acl: a list with the signature access control list values
88-
:type signature_acl: list of strings
88+
:type signature_acl: set of strings
8989
:rtype: dict
9090
"""
9191
signature: Signature = cla.utils.get_signature_instance()

cla-backend/cla/models/docusign_models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -791,7 +791,7 @@ def _save_employee_signature(self,signature):
791791
'signature_signed': {'BOOL': signature.get_signature_signed()},
792792
'signature_approved': {'BOOL': signature.get_signature_approved()},
793793
'signature_embargo_acked': {'BOOL': True},
794-
'signature_acl': {'SS': list(signature.get_signature_acl())},
794+
'signature_acl': {'SS': set(signature.get_signature_acl())},
795795
'signature_user_ccla_company_id': {'S': signature.get_signature_user_ccla_company_id()},
796796
'date_modified': {'S': datetime.now().isoformat()},
797797
'date_created': {'S': datetime.now().isoformat()}
@@ -804,7 +804,7 @@ def _save_employee_signature(self,signature):
804804
item['signature_reference_name'] = {'S': signature.get_signature_reference_name()}
805805

806806
try:
807-
self.dynamo_client.put_item(TableName=signature_table, Item=item)
807+
self.dynamo_client.put_item(TableName=signature_table, Item=item)
808808
except Exception as e:
809809
cla.log.error(f'Error while saving signature record (boto3): {e}')
810810
raise e

cla-backend/cla/models/dynamo_models.py

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1039,7 +1039,9 @@ def get_document_minor_version(self):
10391039
return self.model.document_minor_version
10401040

10411041
def get_document_creation_date(self):
1042-
return dateutil.parser.parse(self.model.document_creation_date)
1042+
# LG: we now can use datetime because pynamodb was updated
1043+
# return dateutil.parser.parse(self.model.document_creation_date)
1044+
return self.model.document_creation_date
10431045

10441046
def get_document_preamble(self):
10451047
return self.model.document_preamble
@@ -1093,7 +1095,9 @@ def set_document_minor_version(self, version):
10931095
self.model.document_minor_version = version
10941096

10951097
def set_document_creation_date(self, document_creation_date):
1096-
self.model.document_creation_date = document_creation_date.isoformat()
1098+
# LG: we now can use datetime because pynamodb was updated
1099+
# self.model.document_creation_date = document_creation_date.isoformat()
1100+
self.model.document_creation_date = document_creation_date
10971101

10981102
def set_document_preamble(self, document_preamble):
10991103
self.model.document_preamble = document_preamble
@@ -1811,7 +1815,16 @@ def set_user_email(self, user_email):
18111815
self.model.user_emails = set(email_list)
18121816

18131817
def set_user_emails(self, user_emails):
1814-
self.model.user_emails = user_emails
1818+
# LG: handle different possible types passed as argument
1819+
if user_emails:
1820+
if isinstance(user_emails, list):
1821+
self.model.user_emails = set(user_emails)
1822+
elif isinstance(user_emails, set):
1823+
self.model.user_emails = user_emails
1824+
else:
1825+
self.model.user_emails = set([user_emails])
1826+
else:
1827+
self.model.user_emails = set()
18151828

18161829
def set_user_name(self, user_name):
18171830
self.model.user_name = user_name
@@ -5396,7 +5409,16 @@ def set_request_status(self, request_status):
53965409
self.model.request_status = request_status
53975410

53985411
def set_user_emails(self, user_emails):
5399-
self.model.user_emails = user_emails
5412+
# LG: handle different possible types passed as argument
5413+
if user_emails:
5414+
if isinstance(user_emails, list):
5415+
self.model.user_emails = set(user_emails)
5416+
elif isinstance(user_emails, set):
5417+
self.model.user_emails = user_emails
5418+
else:
5419+
self.model.user_emails = set([user_emails])
5420+
else:
5421+
self.model.user_emails = set()
54005422

54015423
def set_user_id(self, user_id):
54025424
self.model.user_id = user_id

cla-backend/cla/tests/unit/test_ecla.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ def test_save_employee_signature(project, company, user_instance):
2929
signature.get_signature_signed.return_value = True
3030
signature.get_signature_approved.return_value = True
3131
signature.get_signature_embargo_acked.return_value = True
32-
signature.get_signature_acl.return_value = ['acl1', 'acl2']
32+
signature.get_signature_acl.return_value = set(['acl1', 'acl2'])
3333
signature.get_signature_user_ccla_company_id.return_value = "company_id"
3434
signature.get_signature_return_url.return_value = None
3535
signature.get_signature_reference_name.return_value = None

cla-backend/cla/tests/unit/test_signature_controller.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# SPDX-License-Identifier: MIT
33
import json
44
import unittest
5+
import uuid
56
from unittest.mock import Mock
67

78
import cla
@@ -119,6 +120,23 @@ def mock_get_user_by_github_username(username):
119120
u1.set_user_email('[email protected]')
120121
return [u1]
121122

123+
def test_signature_acl():
124+
sig = Signature()
125+
sig.set_signature_document_major_version(1)
126+
sig.set_signature_document_minor_version(0)
127+
sig.set_signature_id(str(uuid.uuid4()))
128+
sig.set_signature_project_id(str(uuid.uuid4()))
129+
sig.set_signature_reference_id(str(uuid.uuid4()))
130+
sig.set_signature_type('user')
131+
sig.set_signature_acl('lgryglicki')
132+
# print(f"signature_id1 {sig.get_signature_id()}")
133+
# sig.save()
134+
# sig2 = Signature()
135+
# sig2.load(signature_id='afcf787b-8010-4c43-8bf7-2dbbfa229f2c')
136+
# print(f"signature_id2 {sig2.get_signature_id()}")
137+
# sig2.set_signature_id(str(uuid.uuid4()))
138+
# print(f"signature_id3 {sig2.get_signature_id()}")
139+
# sig2.save()
122140

123141
if __name__ == '__main__':
124142
unittest.main()
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Copyright The Linux Foundation and each contributor to CommunityBridge.
2+
# SPDX-License-Identifier: MIT
3+
import logging
4+
import unittest
5+
6+
import cla
7+
from cla import utils
8+
from cla.models.dynamo_models import User
9+
10+
def test_set_user_emails():
11+
usr = User()
12+
usr.set_user_emails('[email protected]')
13+
assert usr.get_user_emails() == {'[email protected]'}
14+
usr.set_user_emails(['[email protected]'])
15+
assert usr.get_user_emails() == {'[email protected]'}
16+
usr.set_user_emails({'[email protected]'})
17+
assert usr.get_user_emails() == {'[email protected]'}
18+
usr.set_user_emails([])
19+
assert usr.get_user_emails() == set()
20+
usr.set_user_emails(set())
21+
assert usr.get_user_emails() == set()
22+
usr.set_user_emails({})
23+
assert usr.get_user_emails() == set()
24+
usr.set_user_emails(None)
25+
assert usr.get_user_emails() == set()
26+

cla-backend/cla/tests/unit/test_user_models.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
from cla import utils
88
from cla.models.dynamo_models import User
99

10-
1110
class TestUserModels(unittest.TestCase):
1211
tests_enabled = False
1312

@@ -90,19 +89,19 @@ def test_get_user_email(self):
9089
user.set_lf_email(None)
9190
user.set_user_emails([])
9291
assert user.get_user_email() is None
93-
92+
9493
user.set_lf_email("[email protected]")
9594
assert user.get_user_email() == "[email protected]"
96-
95+
9796
user = User(user_email="[email protected]")
9897
assert user.get_user_email() == "[email protected]"
99-
98+
10099
user = User(user_email="[email protected]", preferred_email="[email protected]")
101100
assert user.get_user_email() == "[email protected]"
102101
user.set_user_emails(["[email protected]", "[email protected]"])
103102
user.set_lf_email("[email protected]")
104103
assert user.get_user_email() == "[email protected]"
105-
104+
106105
# the scenario where have multiple emails
107106
user = User(preferred_email="[email protected]")
108107

utils/create_signature_py.sh

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/bin/bash
2+
# API_URL=https://3f13-147-75-85-27.ngrok-free.app (defaults to localhost:5000)
3+
# auth_user: check_auth (comment out to bypass)
4+
if ( [ ! -z "$DEBUG" ] && [ -z "$project_id" ] )
5+
then
6+
echo "$0: example:"
7+
echo "$0: project_id=88ee12de-122b-4c46-9046-19422054ed8d reference_id=9dcf5bbc-2492-11ed-97c7-3e2a23ea20b5 reference_type=user|company type=cla|ccla|ecla signed=true approved=true embargo_acked=true return_url=https://github.com/VeerSecurityOnbordingOrg/repo11/pull/1 sign_url=https://demo.docusign.net/Signing ccla_company_id='\"8530442c-1805-4a8a-bf1d-cfca6ffc7401\"'|null"
8+
echo "$0: project_id=88ee12de-122b-4c46-9046-19422054ed8d reference_id=9dcf5bbc-2492-11ed-97c7-3e2a23ea20b5 reference_type=user type=cla signed=false approved=false embargo_acked=true return_url=https://google.com sign_url=https://google.com ccla_company_id=null ./utils/create_signature_py.sh"
9+
fi
10+
11+
if [ -z "$TOKEN" ]
12+
then
13+
# ./m2m-token-dev.secret
14+
TOKEN="$(cat ./auth0.token.secret)"
15+
fi
16+
17+
if [ -z "$TOKEN" ]
18+
then
19+
echo "$0: TOKEN not specified and unable to obtain one"
20+
exit 1
21+
fi
22+
23+
if [ -z "$API_URL" ]
24+
then
25+
export API_URL="http://localhost:5000"
26+
fi
27+
28+
data="{\"signature_project_id\":\"${project_id}\",\"signature_reference_id\":\"${reference_id}\",\"signature_reference_type\":\"${reference_type}\",\"signature_type\":\"${type}\",\"signature_signed\":${signed},\"signature_approved\":${approved},\"signature_embargo_acked\":${embargo_acked},\"signature_return_url\":\"${return_url}\",\"signature_sign_url\":\"${sign_url}\",\"signature_user_ccla_company_id\":${ccla_company_id}}"
29+
30+
if [ ! -z "$DEBUG" ]
31+
then
32+
echo "curl -s -XPOST -H \"Authorization: Bearer ${TOKEN}\" -H \"Content-Type: application/json\" \"${API_URL}/v1/signature\" -d \"${data}\""
33+
curl -s -XPOST -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" "${API_URL}/v1/signature" -d "${data}"
34+
else
35+
curl -s -XPOST -H "Authorization: Bearer ${TOKEN}" -H "Content-Type: application/json" "${API_URL}/v1/signature" -d "${data}" | jq -r '.'
36+
fi

utils/delete_signature_by_id.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/bash
2+
if [ -z "$1" ]
3+
then
4+
echo "$0: you need to specify signature_id as a 1st parameter, for example: '6168fc0b-705a-4fde-a9dd-d0a4a9c01457'"
5+
exit 1
6+
fi
7+
8+
if [ -z "$STAGE" ]
9+
then
10+
STAGE=dev
11+
fi
12+
aws --profile "lfproduct-${STAGE}" dynamodb delete-item --table-name "cla-${STAGE}-signatures" --key "{\"signature_id\":{\"S\":\"${1}\"}}"

utils/lookup_signature_by_id_dd.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/bash
2+
if [ -z "$1" ]
3+
then
4+
echo "$0: you need to specify signature_id as a 1st parameter, for example: '6168fc0b-705a-4fde-a9dd-d0a4a9c01457'"
5+
exit 1
6+
fi
7+
8+
if [ -z "$STAGE" ]
9+
then
10+
STAGE=dev
11+
fi
12+
aws --profile "lfproduct-${STAGE}" dynamodb query --table-name "cla-${STAGE}-signatures" --key-condition-expression "signature_id = :signature_id" --expression-attribute-values "{\":signature_id\":{\"S\":\"${1}\"}}" | jq -r '.'

0 commit comments

Comments
 (0)