diff --git a/app/methods/e_cvent_methods.py b/app/methods/e_cvent_methods.py index f29365d..d7c75ca 100644 --- a/app/methods/e_cvent_methods.py +++ b/app/methods/e_cvent_methods.py @@ -135,7 +135,7 @@ def get_contact_list(external_id: str=None, email: str=None): response_data = resp.json() log.debug(json.dumps(response_data, indent=2, default=str)) - if 'message' in response_data and response_data['message'] == 'Too Many Requests for Cvent API': return False + if 'message' in response_data and response_data['message'] == 'Too Many Requests': return False return response_data @@ -185,11 +185,47 @@ def get_recent_contact_list( resp = requests.get(url=uri, headers=api['headers'], params=params) response_data = resp.json() - log.debug(json.dumps(response_data, indent=2, default=str)) + # log.debug(json.dumps(response_data, indent=2, default=str)) - if 'message' in response_data and response_data['message'] == 'Too Many Requests for Cvent API': return False + cvent_contact_list = response_data.get('data') - return response_data + next_token = None + if 'paging' in response_data: + next_token = response_data.get('paging').get('nextToken') + log.debug(json.dumps(response_data.get('paging'), indent=2, default=str)) + + limit = 0 + while next_token and limit < 100: + limit = limit + 1 + + params = {} + params['token'] = next_token + resp = requests.get(url=uri, headers=api['headers'], params=params) + + response_data = resp.json() + # log.debug(json.dumps(response_data, indent=2, default=str)) + + if 'message' in response_data and response_data['message'] == 'Too Many Requests': + log.warning('Hit Cvent rate limit. Sleeping for .5 seconds...') + time.sleep(.5) + else: + cvent_contact_list = cvent_contact_list + response_data.get('data') + + if 'paging' in response_data: + next_token = response_data.get('paging').get('nextToken') + log.debug(json.dumps(response_data.get('paging'), indent=2, default=str)) + + log.warning('Sleeping for .25 seconds to avoid Cvent rate limit...') + time.sleep(.25) + else: + next_token = None + + # log.debug(json.dumps(cvent_contact_list, indent=2, default=str)) + # log.debug(json.dumps(response_data, indent=2, default=str)) + + if 'message' in response_data and response_data['message'] == 'Too Many Requests': return False + + return cvent_contact_list # ### END ### API Cvent Methods ### get_recent_contact_list() ### @@ -212,7 +248,7 @@ def get_contact_id(contact_id: str): response_data = resp.json() log.debug(json.dumps(response_data, indent=2, default=str)) - if 'message' in response_data and response_data['message'] == 'Too Many Requests for Cvent API': return False + if 'message' in response_data and response_data['message'] == 'Too Many Requests': return False return response_data # ### END ### API Cvent Methods ### get_contact_id() ### @@ -257,7 +293,7 @@ def modify_contact_id(contact_id: str, field_list: list=[], custom_field_id: str response_data = resp.json() log.debug(json.dumps(response_data, indent=2, default=str)) - if 'message' in response_data and response_data['message'] == 'Too Many Requests for Cvent API': return False + if 'message' in response_data and response_data['message'] == 'Too Many Requests': return False return response_data # ### END ### API Cvent Methods ### modify_contact_id() ### diff --git a/app/routers/e_cvent.py b/app/routers/e_cvent.py index a86d93f..9aaaadf 100644 --- a/app/routers/e_cvent.py +++ b/app/routers/e_cvent.py @@ -31,6 +31,8 @@ async def process_recent_changes( to_updated_on: datetime.datetime = None, # for Cvent "lastModified" # type: str = 'created', # created, updated, created_updated + return_detail: bool = False, + commons: Common_Route_Params = Depends(common_route_params), ): log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL @@ -45,14 +47,20 @@ async def process_recent_changes( to_updated_on = to_updated_on, ): log.debug(cvent_contact_list_result) + cvent_contact_list = cvent_contact_list_result + log.info(f'Found {len(cvent_contact_list)} Cvent contacts') else: log.warning(f'Something went wrong while trying to get recently created or updated person in Cvent. From Datetime: {from_created_on}') return mk_resp(data=None, status_code=400, response=commons.response) # Bad Request + # cvent_contact_list = cvent_contact_list_result.get('data') + # cvent_contact_list = cvent_contact_list_result + + # return mk_resp(data=cvent_contact_list, status_message=f'Checked for recent changes in Cvent. Found {len(cvent_contact_list)} Cvent contacts', response=commons.response) + log.warning('Sleeping for 1.1 second to avoid Cvent rate limit...') time.sleep(1.1) - cvent_contact_list = cvent_contact_list_result.get('data') for cvent_person_contact_obj in cvent_contact_list: cvent_person_contact_id = cvent_person_contact_obj.get('id') log.info(f'Processing Cvent (Person) Contact ID: {cvent_person_contact_id}') @@ -70,7 +78,10 @@ async def process_recent_changes( log.warning('Sleeping for .5 second to avoid Cvent rate limit...') time.sleep(.5) - return mk_resp(data=cvent_contact_list_result, status_message=f'Checked for recent changes in Cvent. Created/Updated {len(cvent_contact_list)} Cvent contacts', response=commons.response) + if return_detail: + return mk_resp(data=cvent_contact_list_result, status_message=f'Checked for recent changes in Cvent. Created/Updated {len(cvent_contact_list)} Cvent contacts', response=commons.response) + else: + return mk_resp(data=cvent_contact_list, status_message=f'Checked for recent changes in Cvent. Found {len(cvent_contact_list)} Cvent contacts', response=commons.response) # ### END ### API Cvent ### process_recent_changes() ###