Work on Impexium API and related.

This commit is contained in:
Scott Idem
2022-02-18 17:35:25 -05:00
parent aa09333383
commit 783ff6e9b3
4 changed files with 130 additions and 127 deletions

View File

@@ -18,7 +18,7 @@ from . import config
from app.log import log, logging from app.log import log, logging
# Import the routers here first: # Import the routers here first:
from app.routers import api_crud, api, importing, account, activity_log, address, archive, archive_content, contact, cont_edu_cert, cont_edu_cert_person, event, event_badge, event_badge_template, event_exhibit, event_exhibit_tracking, event_file, event_importing, event_location, event_person, event_person_detail, event_person_tracking, event_presentation, event_presenter, event_registration, event_session, flask_cfg, hosted_file, journal, journal_entry, log_client_viewing, lookup, membership_cfg, membership_group, membership_person_group, membership_person, membership_person_profile, membership_type, membership_person_type, order, order_v3, order_line, order_cart, organization, page, person, person_user, post, post_comment, product, site, site_domain, user, websockets, e_cvent, c_idaa #, e_impexium from app.routers import api_crud, api, importing, account, activity_log, address, archive, archive_content, contact, cont_edu_cert, cont_edu_cert_person, event, event_badge, event_badge_template, event_exhibit, event_exhibit_tracking, event_file, event_importing, event_location, event_person, event_person_detail, event_person_tracking, event_presentation, event_presenter, event_registration, event_session, flask_cfg, hosted_file, journal, journal_entry, log_client_viewing, lookup, membership_cfg, membership_group, membership_person_group, membership_person, membership_person_profile, membership_type, membership_person_type, order, order_v3, order_line, order_cart, organization, page, person, person_user, post, post_comment, product, site, site_domain, user, websockets, e_cvent, c_idaa, e_impexium
from app.db_sql import db from app.db_sql import db
@@ -326,11 +326,11 @@ app.include_router(
prefix='/e/cvent', prefix='/e/cvent',
tags=['External Service: Cvent'], tags=['External Service: Cvent'],
) )
# app.include_router( app.include_router(
# e_impexium.router, e_impexium.router,
# prefix='/e/impexium', prefix='/e/impexium',
# tags=['External Service: Impexium'], tags=['External Service: Impexium'],
# ) )
app.include_router( app.include_router(
c_idaa.router, c_idaa.router,

View File

@@ -1,4 +1,3 @@
from __future__ import annotations
import datetime, json, pprint, pytz, random, requests, secrets, string, time import datetime, json, pprint, pytz, random, requests, secrets, string, time
from requests.auth import HTTPBasicAuth from requests.auth import HTTPBasicAuth
@@ -61,7 +60,7 @@ def get_access_token():
log.debug(f'Status Code: {resp.status_code}') log.debug(f'Status Code: {resp.status_code}')
log.debug(f'Headers: {resp.headers}') log.debug(f'Headers: {resp.headers}')
log.debug(f'Encoding: {resp.encoding}') # log.debug(f'Encoding: {resp.encoding}')
log.debug(f'JSON: {resp.json()}') log.debug(f'JSON: {resp.json()}')
# log.debug('Text:', resp.text) # log.debug('Text:', resp.text)
@@ -171,7 +170,7 @@ def get_contact_custom_field_list(api):
log.debug('Status Code:', resp.status_code) log.debug('Status Code:', resp.status_code)
log.debug('Headers:', resp.headers) log.debug('Headers:', resp.headers)
log.debug('Encoding:', resp.encoding) # log.debug('Encoding:', resp.encoding)
log.debug('JSON:', resp.json()) log.debug('JSON:', resp.json())
# log.debug('Text:', resp.text) # log.debug('Text:', resp.text)

View File

@@ -1,11 +1,11 @@
from __future__ import annotations import datetime, json, pprint, pytz, random, requests, string, time
import datetime, pprint, random, requests
from typing import Dict, List, Optional, Set, Union from typing import Dict, List, Optional, Set, Union
from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator from pydantic import BaseModel, EmailStr, Field, PrivateAttr, ValidationError, validator
from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update from app.db_sql import redis_lookup_id_random, sql_insert, sql_select, sql_update
from app.lib_general import log, logging from app.lib_general import log, logging, logger_reset
headers = { 'Content-Type': 'application/json;charset=UTF-8' } headers = { 'Content-Type': 'application/json;charset=UTF-8' }
@@ -17,60 +17,66 @@ app['name'] = 'IshltOneSkyITLIVE'
app['key'] = '98yp4fa57mJX6nU4' app['key'] = '98yp4fa57mJX6nU4'
app['id'] = 'IshltOneSkyITLIVE' app['id'] = 'IshltOneSkyITLIVE'
app['password'] = '98yp4fa57mJX6nU4' app['password'] = '98yp4fa57mJX6nU4'
print('App data', app) log.debug('App data', app)
api = {} api = {}
api['base_url'] = 'https://public.impexium.com/Api/v1' # or https://ishlt.mpxapi.com:443/api/v1 ?? api['base_url'] = 'https://public.impexium.com/Api/v1' # or https://ishlt.mpxapi.com:443/api/v1 ??
api['headers'] = { 'Content-Type': 'application/json;charset=UTF-8' } api['headers'] = { 'Content-Type': 'application/json;charset=UTF-8' }
# ### BEGIN ### API External Impexium Methods ### get_access_token() ###
# Updated 2022-02-18
@logger_reset
def get_access_token(api, app): def get_access_token(api, app):
print('***** **** *** ** * ** *** **** *****') log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
print('*** Get Web API End Point and Access Token ***') log.debug(locals())
print('***** **** *** ** * ** *** **** *****')
log.debug(f'API data:\n{api}')
endpoint = '/WebApiUrl' endpoint = '/WebApiUrl'
uri = api['base_url']+endpoint uri = api['base_url']+endpoint
data = { 'AppName': app['name'], 'AppKey': app['key'] } data = { 'AppName': app['name'], 'AppKey': app['key'] }
r = requests.post(url=uri, json=data, headers=api['headers']) resp = requests.post(url=uri, json=data, headers=api['headers'])
print('**************************') log.debug('Status Code:', resp.status_code)
print('Status Code:', r.status_code) log.debug('Headers:', resp.headers)
print('Headers:', r.headers) # log.debug('Encoding:', resp.encoding)
# print('Encoding:', r.encoding) log.debug('JSON:', resp.json())
print('JSON:', r.json()) # log.debug('Text:', resp.text)
# print('Text:', r.text)
print('**************************')
response_data = r.json() response_data = resp.json()
log.debug(json.dumps(response_data, indent=2, default=str))
api['access_token'] = response_data['accessToken'] api['access_token'] = response_data['accessToken']
api['headers']['AccessToken'] = response_data['accessToken'] api['headers']['AccessToken'] = response_data['accessToken']
api['auth_uri'] = response_data['uri'] api['auth_uri'] = response_data['uri']
log.debug(api)
return api return api
# ### END ### API External Impexium Methods ### get_access_token() ###
# ### BEGIN ### API External Impexium Methods ### authenticate() ###
# Updated 2022-02-18
@logger_reset
def authenticate(api, app): def authenticate(api, app):
print('***** **** *** ** * ** *** **** *****') log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
print('*** Authenticate App, and get app token and user token (SSO Token) ***') log.debug(locals())
print('***** **** *** ** * ** *** **** *****')
data = { 'AppId': app['id'], 'AppPassword': app['password'], 'AppUserEmail': app['user_email'], 'AppUserPassword': app['user_password'] } data = { 'AppId': app['id'], 'AppPassword': app['password'], 'AppUserEmail': app['user_email'], 'AppUserPassword': app['user_password'] }
r = requests.post(url=api['auth_uri'], json=data, headers=api['headers']) resp = requests.post(url=api['auth_uri'], json=data, headers=api['headers'])
print('**************************') log.debug('Status Code:', resp.status_code)
print('Status Code:', r.status_code) log.debug('Headers:', resp.headers)
print('Headers:', r.headers) # log.debug('Encoding:', resp.encoding)
# print('Encoding:', r.encoding) log.debug('JSON:', resp.json())
print('JSON:', r.json()) # log.debug('Text:', resp.text)
# print('Text:', r.text)
print('**************************')
response_data = r.json() response_data = resp.json()
api['headers']['AppToken'] = response_data['appToken'] api['headers']['AppToken'] = response_data['appToken']
api['headers']['UserToken'] = response_data['userToken'] api['headers']['UserToken'] = response_data['userToken']
@@ -80,7 +86,10 @@ def authenticate(api, app):
# app['sso_token'] = response_data['ssoToken'] # app['sso_token'] = response_data['ssoToken']
# app['app_configuration'] = response_data['appConfiguration'] # allowGoogleLogin=False, allowLinkedInLogin=False # app['app_configuration'] = response_data['appConfiguration'] # allowGoogleLogin=False, allowLinkedInLogin=False
log.debug(api)
return api return api
# ### END ### API External Impexium Methods ### authenticate() ###
api = get_access_token(api=api, app=app) api = get_access_token(api=api, app=app)
@@ -90,10 +99,12 @@ api = authenticate(api=api, app=app)
log.debug(api) log.debug(api)
# ### BEGIN ### API External Impexium Methods ### get_custom_fields() ###
# Updated 2022-02-18
@logger_reset
def get_custom_fields(api, name=None, page=1): def get_custom_fields(api, name=None, page=1):
print('***** **** *** ** * ** *** **** *****') log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
print('*** Get Custom Fields ***') log.debug(locals())
print('***** **** *** ** * ** *** **** *****')
endpoint = f'/Setup/customfields/{page}' endpoint = f'/Setup/customfields/{page}'
uri = api['base_url']+endpoint uri = api['base_url']+endpoint
@@ -102,31 +113,28 @@ def get_custom_fields(api, name=None, page=1):
params = {} params = {}
r = requests.get(url=uri, params=params, headers=api['headers']) resp = requests.get(url=uri, params=params, headers=api['headers'])
print('**************************') log.debug('Status Code:', resp.status_code)
print('Status Code:', r.status_code) log.debug('Headers:', resp.headers)
# print('Headers:', r.headers) # log.debug('Encoding:', resp.encoding)
# print('Encoding:', r.encoding) log.debug('JSON:', resp.json())
print('JSON:', r.json()) # log.debug('Text:', resp.text)
# print('Text:', r.text)
print('**************************')
response_data = r.json() response_data = resp.json()
# pp = pprint.PrettyPrinter(indent=2)
# pp.pprint(response_data)
# print('**************************')
custom_field_li = response_data custom_field_li = response_data
return custom_field_li return custom_field_li
# ### END ### API External Impexium Methods ### get_custom_fields() ###
# ### BEGIN ### API External Impexium Methods ### get_events() ###
# Updated 2022-02-18
@logger_reset
def get_events(page=1): def get_events(page=1):
print('***** **** *** ** * ** *** **** *****') log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
print('*** Get Events ***') log.debug(locals())
print('***** **** *** ** * ** *** **** *****')
endpoint = f'/Events/All/{page}' endpoint = f'/Events/All/{page}'
uri = api['base_url']+endpoint uri = api['base_url']+endpoint
@@ -135,17 +143,15 @@ def get_events(page=1):
params = {} params = {}
r = requests.get(url=uri, params=params, headers=api['headers']) resp = requests.get(url=uri, params=params, headers=api['headers'])
print('**************************') log.debug('Status Code:', resp.status_code)
print('Status Code:', r.status_code) log.debug('Headers:', resp.headers)
# print('Headers:', r.headers) # log.debug('Encoding:', resp.encoding)
# print('Encoding:', r.encoding) log.debug('JSON:', resp.json())
print('JSON:', r.json()) # log.debug('Text:', resp.text)
# print('Text:', r.text)
print('**************************')
response_data = r.json() response_data = resp.json()
# pp = pprint.PrettyPrinter(indent=2) # pp = pprint.PrettyPrinter(indent=2)
# pp.pprint(response_data) # pp.pprint(response_data)
@@ -154,35 +160,33 @@ def get_events(page=1):
event_li = response_data event_li = response_data
return event_li return event_li
# ### END ### API External Impexium Methods ### get_events() ###
# ### BEGIN ### API Impexium Methods ### get_event_registrants() ### # ### BEGIN ### API External Impexium Methods ### get_event_registrants() ###
# Updated 2021-10-07 # Updated 2021-10-07
def get_event_registrants( def get_event_registrants(
event_code: str, event_code: str,
page: int = 1, page: int = 1,
return_all: bool = False return_all: bool = False
): ):
print('***** **** *** ** * ** *** **** *****') log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
print('*** Get Event Registrants ***') log.debug(locals())
print('***** **** *** ** * ** *** **** *****')
endpoint = f'/Events/{event_code}/Registrations/{page}' endpoint = f'/Events/{event_code}/Registrations/{page}'
uri = api['base_url']+endpoint uri = api['base_url']+endpoint
params = {} params = {}
r = requests.get(url=uri, params=params, headers=api['headers']) resp = requests.get(url=uri, params=params, headers=api['headers'])
print('**************************') log.debug('Status Code:', resp.status_code)
print('Status Code:', r.status_code) log.debug('Headers:', resp.headers)
# print('Headers:', r.headers) # log.debug('Encoding:', resp.encoding)
# print('Encoding:', r.encoding) log.debug('JSON:', resp.json())
# print('JSON:', r.json()) # log.debug('Text:', resp.text)
# print('Text:', r.text)
print('**************************')
response_data = r.json() response_data = resp.json()
# pp = pprint.PrettyPrinter(indent=2) # pp = pprint.PrettyPrinter(indent=2)
# pp.pprint(response_data) # pp.pprint(response_data)
@@ -197,27 +201,26 @@ def get_event_registrants(
# ### END ### API Impexium Methods ### get_event_registrants() ### # ### END ### API Impexium Methods ### get_event_registrants() ###
# ### BEGIN ### API External Impexium Methods ### get_individual_registrations() ###
# Updated 2022-02-18
def get_individual_registrations(api, record_number, event_code=None, page=1): def get_individual_registrations(api, record_number, event_code=None, page=1):
print('***** **** *** ** * ** *** **** *****') log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
print('*** Get Individual Registrations ***') log.debug(locals())
print('***** **** *** ** * ** *** **** *****')
endpoint = f'/Individuals/{record_number}/Registrations/{page}' endpoint = f'/Individuals/{record_number}/Registrations/{page}'
uri = api['base_url']+endpoint uri = api['base_url']+endpoint
params = { 'eventCode': event_code } params = { 'eventCode': event_code }
r = requests.get(url=uri, params=params, headers=api['headers']) resp = requests.get(url=uri, params=params, headers=api['headers'])
print('**************************') log.debug('Status Code:', resp.status_code)
print('Status Code:', r.status_code) log.debug('Headers:', resp.headers)
# print('Headers:', r.headers) # log.debug('Encoding:', resp.encoding)
# print('Encoding:', r.encoding) log.debug('JSON:', resp.json())
# print('JSON:', r.json()) # log.debug('Text:', resp.text)
# print('Text:', r.text)
print('**************************')
response_data = r.json() response_data = resp.json()
# pp = pprint.PrettyPrinter(indent=2) # pp = pprint.PrettyPrinter(indent=2)
# pp.pprint(response_data) # pp.pprint(response_data)
@@ -226,29 +229,29 @@ def get_individual_registrations(api, record_number, event_code=None, page=1):
individual_registraion_li = response_data individual_registraion_li = response_data
return individual_registraion_li return individual_registraion_li
# ### END ### API External Impexium Methods ### get_individual_registrations() ###
# ### BEGIN ### API External Impexium Methods ### get_individual_purchases() ###
# Updated 2022-02-18
def get_individual_purchases(api, record_number, product_code=None, purchased_since=None, product_category_code=None, page=1): def get_individual_purchases(api, record_number, product_code=None, purchased_since=None, product_category_code=None, page=1):
print('***** **** *** ** * ** *** **** *****') log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
print('*** Get Individual Purchases ***') log.debug(locals())
print('***** **** *** ** * ** *** **** *****')
endpoint = f'/Individuals/{record_number}/Purchases/{page}' endpoint = f'/Individuals/{record_number}/Purchases/{page}'
uri = api['base_url']+endpoint uri = api['base_url']+endpoint
params = { 'productCode': product_code, 'purchasedSince': purchased_since, 'productCategoryCode': product_category_code } params = { 'productCode': product_code, 'purchasedSince': purchased_since, 'productCategoryCode': product_category_code }
r = requests.get(url=uri, params=params, headers=api['headers']) resp = requests.get(url=uri, params=params, headers=api['headers'])
print('**************************') log.debug('Status Code:', resp.status_code)
print('Status Code:', r.status_code) log.debug('Headers:', resp.headers)
# print('Headers:', r.headers) # log.debug('Encoding:', resp.encoding)
# print('Encoding:', r.encoding) log.debug('JSON:', resp.json())
print('JSON:', r.json()) # log.debug('Text:', resp.text)
# print('Text:', r.text)
print('**************************')
response_data = r.json() response_data = resp.json()
# pp = pprint.PrettyPrinter(indent=2) # pp = pprint.PrettyPrinter(indent=2)
# pp.pprint(response_data) # pp.pprint(response_data)
@@ -257,29 +260,29 @@ def get_individual_purchases(api, record_number, product_code=None, purchased_si
individual_purchase_li = response_data individual_purchase_li = response_data
return individual_purchase_li return individual_purchase_li
# ### END ### API External Impexium Methods ### get_individual_purchases() ###
# ### BEGIN ### API External Impexium Methods ### get_individual_custom_fields() ###
# Updated 2022-02-18
def get_individual_custom_fields(api, individual_id): def get_individual_custom_fields(api, individual_id):
print('***** **** *** ** * ** *** **** *****') log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
print('*** Get Individual Custom Fields ***') log.debug(locals())
print('***** **** *** ** * ** *** **** *****')
endpoint = f'/Individuals/{individual_id}/CustomFields' endpoint = f'/Individuals/{individual_id}/CustomFields'
uri = api['base_url']+endpoint uri = api['base_url']+endpoint
params = { } params = { }
r = requests.get(url=uri, params=params, headers=api['headers']) resp = requests.get(url=uri, params=params, headers=api['headers'])
print('**************************') log.debug('Status Code:', resp.status_code)
print('Status Code:', r.status_code) log.debug('Headers:', resp.headers)
# print('Headers:', r.headers) # log.debug('Encoding:', resp.encoding)
# print('Encoding:', r.encoding) log.debug('JSON:', resp.json())
# print('JSON:', r.json()) # log.debug('Text:', resp.text)
# print('Text:', r.text)
print('**************************')
response_data = r.json() response_data = resp.json()
# pp = pprint.PrettyPrinter(indent=2) # pp = pprint.PrettyPrinter(indent=2)
# pp.pprint(response_data) # pp.pprint(response_data)
@@ -288,12 +291,14 @@ def get_individual_custom_fields(api, individual_id):
individual_custom_field_li = response_data individual_custom_field_li = response_data
return individual_custom_field_li return individual_custom_field_li
# ### END ### API External Impexium Methods ### get_individual_custom_fields() ###
# ### BEGIN ### API External Impexium Methods ### get_individual_orders_open() ###
# Updated 2022-02-18
def get_individual_orders_open(api, record_number, include_line_items=False, from_date=None, to_date=None, page=1): def get_individual_orders_open(api, record_number, include_line_items=False, from_date=None, to_date=None, page=1):
print('***** **** *** ** * ** *** **** *****') log.setLevel(logging.INFO) # DEBUG, INFO, WARNING, ERROR, EXCEPTION, CRITICAL
print('*** Get Individual Orders Open ***') log.debug(locals())
print('***** **** *** ** * ** *** **** *****')
endpoint = f'/Individuals/{record_number}/Orders/Open/{page}' endpoint = f'/Individuals/{record_number}/Orders/Open/{page}'
uri = api['base_url']+endpoint uri = api['base_url']+endpoint
@@ -301,17 +306,15 @@ def get_individual_orders_open(api, record_number, include_line_items=False, fro
params = { 'includeLineItems': include_line_items, 'fromDate': from_date, 'toDate': to_date } params = { 'includeLineItems': include_line_items, 'fromDate': from_date, 'toDate': to_date }
r = requests.get(url=uri, params=params, headers=api['headers']) resp = requests.get(url=uri, params=params, headers=api['headers'])
print('**************************') log.debug('Status Code:', resp.status_code)
print('Status Code:', r.status_code) log.debug('Headers:', resp.headers)
print('Headers:', r.headers) # log.debug('Encoding:', resp.encoding)
# print('Encoding:', r.encoding) log.debug('JSON:', resp.json())
print('JSON:', r.json()) # log.debug('Text:', resp.text)
print('Text:', r.text)
print('**************************')
response_data = r.json() response_data = resp.json()
# pp = pprint.PrettyPrinter(indent=2) # pp = pprint.PrettyPrinter(indent=2)
# pp.pprint(response_data) # pp.pprint(response_data)
@@ -320,3 +323,4 @@ def get_individual_orders_open(api, record_number, include_line_items=False, fro
individual_orders_open_li = response_data individual_orders_open_li = response_data
return individual_orders_open_li return individual_orders_open_li
# ### END ### API External Impexium Methods ### get_individual_orders_open() ###

View File

@@ -4,7 +4,7 @@ from fastapi import APIRouter, Body, Depends, Header, HTTPException, Query, Resp
from pydantic import BaseModel, EmailStr, Field from pydantic import BaseModel, EmailStr, Field
from typing import Dict, List, Optional, Set, Union from typing import Dict, List, Optional, Set, Union
from app.lib_general import log, logging, secure_hash_string from app.lib_general import log, logging, secure_hash_string, common_route_params, Common_Route_Params
from app.config import settings from app.config import settings
from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, redis_lookup_id_random from app.db_sql import sql_insert, sql_update, sql_insert_or_update, sql_select, sql_delete, redis_lookup_id_random