Skip to content

Commit 47e4732

Browse files
Merge pull request #4769 from linuxfoundation/unicron-4759-fix-missing-installation-id
Fix #4759 bug - no `organization_installation_id` update
2 parents f9c1aa3 + 0daa30e commit 47e4732

File tree

4 files changed

+46
-26
lines changed

4 files changed

+46
-26
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,3 +257,4 @@ cover.out
257257
.env
258258
src.txt
259259
src.txt.*
260+
out.json

cla-backend/cla/controllers/github.py

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ def get_organization(organization_name):
4848
try:
4949
cla.log.debug(f'Loading GitHub by organization name: {organization_name}..')
5050
org = github_organization.get_organization_by_lower_name(organization_name)
51-
cla.log.debug(f'Loaded GitHub by organization name: {org}')
51+
cla.log.debug(f'Loaded GitHub organization by name: {org}')
5252
except DoesNotExist as err:
5353
cla.log.warning(f'organization name {organization_name} does not exist')
5454
return {'errors': {'organization_name': str(err)}}
@@ -68,7 +68,7 @@ def get_organization_model(organization_name) -> Optional[GitHubOrg]:
6868
try:
6969
cla.log.debug(f'Loading GitHub by organization name: {organization_name}..')
7070
org = github_organization.get_organization_by_lower_name(organization_name)
71-
cla.log.debug(f'Loaded GitHub by organization name: {org}')
71+
cla.log.debug(f'Loaded GitHub organization model by name: {org}')
7272
return org
7373
except DoesNotExist as err:
7474
cla.log.warning(f'organization name {organization_name} does not exist, error: {err}')
@@ -138,9 +138,13 @@ def update_organization(organization_name, # pylint: disable=too-many-arguments
138138
if organization_sfid:
139139
github_organization.set_organization_sfid(organization_sfid)
140140

141-
github_organization.save()
142-
cla.log.debug('updated organization: {}'.format(organization_name))
143-
return github_organization.to_dict()
141+
try:
142+
github_organization.save()
143+
cla.log.debug('updated organization: {}'.format(organization_name))
144+
return github_organization.to_dict()
145+
except Exception as err:
146+
cla.log.error(f"failed to save organization {organization_name}: {err}")
147+
return {"errors": {"organization_name": str(err)}}
144148

145149

146150
def delete_organization(auth_user, organization_name):
@@ -296,6 +300,12 @@ def activity(action: str, event_type: str, body: dict):
296300
def handle_installation_event(action: str, body: dict):
297301
func_name = 'github.activity.handle_installation_event'
298302
cla.log.debug(f'{func_name} - processing github [installation] activity callback...')
303+
installation_id = None
304+
try:
305+
installation_id = body['installation']['id']
306+
except KeyError:
307+
cla.log.warning(f'{func_name} - unable to determine installation id from body: {json.dumps(body)}.')
308+
cla.log.debug(f'{func_name} - processing github installation {installation_id}...')
299309

300310
# New Installations
301311
if action == 'created':
@@ -306,7 +316,7 @@ def handle_installation_event(action: str, body: dict):
306316
cla.log.warning(f'{func_name} - Unable to determine organization name from the github installation event '
307317
f'with action: {action}'
308318
f'event body: {json.dumps(body)}')
309-
return {'status', f'GitHub installation {action} event malformed.'}
319+
return {'status': f'GitHub installation {action} event malformed.'}
310320

311321
cla.log.debug(f'Locating organization using name: {org_name}')
312322
existing = get_organization(org_name)
@@ -315,23 +325,16 @@ def handle_installation_event(action: str, body: dict):
315325
'but the organization is not configured in EasyCLA')
316326
# TODO: Need a way of keeping track of new organizations that don't have projects yet.
317327
return {'status': 'Github Organization must be created through the Project Management Console.'}
318-
elif not existing['organization_installation_id']:
319-
update_organization(
320-
existing['organization_name'],
321-
existing['organization_sfid'],
322-
body['installation']['id'],
323-
)
324-
cla.log.info(f'{func_name} - Organization enrollment completed: {existing["organization_name"]}')
328+
elif not existing.get('organization_installation_id'):
329+
cla.log.info(f'{func_name} - Setting installation ID for github organization: {existing.get("organization_name")} to {installation_id}')
330+
update_organization(existing.get('organization_name'), existing.get('organization_sfid'), installation_id)
331+
cla.log.info(f'{func_name} - Organization enrollment completed: {existing.get("organization_name")}')
325332
return {'status': 'Organization Enrollment Completed. CLA System is operational'}
326333
else:
327-
cla.log.info(f'{func_name} - Organization already enrolled: {existing["organization_name"]}')
328-
cla.log.info(f'{func_name} - Updating installation ID for '
329-
f'github organization: {existing["organization_name"]}')
330-
update_organization(
331-
existing['organization_name'],
332-
existing['organization_sfid'],
333-
body['installation']['id'],
334-
)
334+
cla.log.info(f'{func_name} - Organization already enrolled: {existing.get("organization_name")}')
335+
cla.log.info(f'{func_name} - installation ID: {existing.get("organization_installation_id")}')
336+
cla.log.info(f'{func_name} - Updating installation ID for github organization: {existing.get("organization_name")} to {installation_id}')
337+
update_organization(existing.get('organization_name'), existing.get('organization_sfid'), installation_id)
335338
return {'status': 'Already Enrolled Organization Updated. CLA System is operational'}
336339

337340
elif action == 'deleted':
@@ -341,7 +344,7 @@ def handle_installation_event(action: str, body: dict):
341344
cla.log.warning('Unable to determine organization name from the github installation event '
342345
f'with action: {action}'
343346
f'event body: {json.dumps(body)}')
344-
return {'status', f'GitHub installation {action} event malformed.'}
347+
return {'status': f'GitHub installation {action} event malformed.'}
345348
repositories = Repository().get_repositories_by_organization(org_name)
346349
notify_project_managers(repositories)
347350
return

cla-backend/cla/models/dynamo_models.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4001,10 +4001,20 @@ def __str__(self):
40014001

40024002
def to_dict(self):
40034003
ret = dict(self.model)
4004-
if ret["organization_installation_id"] == "null":
4004+
4005+
if "organization_installation_id" not in ret:
40054006
ret["organization_installation_id"] = None
4006-
if ret["organization_sfid"] == "null":
4007+
if "organization_sfid" not in ret:
40074008
ret["organization_sfid"] = None
4009+
4010+
val = ret.get("organization_installation_id")
4011+
if isinstance(val, str) and val.strip().lower() in ("null", "none", ""):
4012+
ret["organization_installation_id"] = None
4013+
4014+
val = ret.get("organization_sfid")
4015+
if isinstance(val, str) and val.strip().lower() in ("null", "none", ""):
4016+
ret["organization_sfid"] = None
4017+
40084018
return ret
40094019

40104020
def save(self) -> None:

utils/search_aws_log_group.sh

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,20 @@ if [ -z "${DTFROM}" ]
3939
then
4040
export DTFROM="$(date -d '3 days ago' +%s)000"
4141
else
42-
export DTFROM="$(date -d "${DTFROM}" +%s)000"
42+
if [[ ! "$DTFROM" =~ ^[0-9]+$ ]]
43+
then
44+
export DTFROM="$(date -d "${DTFROM}" +%s)000"
45+
fi
4346
fi
4447

4548
if [ -z "${DTTO}" ]
4649
then
4750
export DTTO="$(date +%s)000"
4851
else
49-
export DTTO="$(date -d "${DTTO}" +%s)000"
52+
if [[ ! "$DTTO" =~ ^[0-9]+$ ]]
53+
then
54+
export DTTO="$(date -d "${DTTO}" +%s)000"
55+
fi
5056
fi
5157

5258
if [ ! -z "${DEBUG}" ]

0 commit comments

Comments
 (0)