Untitled
unknown
plain_text
a year ago
17 kB
4
Indexable
# ================================================================================================================================================================================ # HOBS MULTI-TENANCY FUNCTIONALITY REQUEST APIS # DATE AUTHOR VER CHANGE DESCRIPTION # -------- --------- ----- ------------------ # 18.09.23 Ragul(Yaswanth) 1.0 Init version # ================================================================================================================================================================================ from json import dumps as json_dumps from json import loads as json_loads from sys import exc_info as sys_exc_info from datetime import datetime, timedelta, timezone, date import ast from models.hos_event_logs import hos_event_logs from models.hos_event_logs import * from models.hos_event_log_by_businesskeys import hos_event_log_by_businesskeys # define Python user-defined exceptions class Error(Exception): """Base class for other exceptions""" pass # define Python user-defined exceptions class VALIDATION_ERRORS(Error): pass def apilogfile(api): import logging from os import environ as os_environ log_file_path = os_environ.get('ANALYTICSDATASERVICELOGPATH') logging.shutdown() log_handler = logging.FileHandler(log_file_path + '/logs/' + api + '.log', mode='w+') formatter = logging.Formatter( fmt='%(asctime)s [Process:%(process)d] [%(levelname)-8s] [%(filename)s - %(module)s] : %(message)s', datefmt='%Y-%m-%d %H:%M:%S') # formatter.converter = time.gmtime # if you want UTC tGime log_handler.setFormatter(formatter) LOGGER = logging.getLogger('apilog' + str(uuid.uuid1())) if not LOGGER.handlers: LOGGER.addHandler(log_handler) LOGGER.setLevel(logging.DEBUG) LOGGER.info('LOGGER activated for %s' % api) return LOGGER """ This function is used to fetch cache details based on valueType and key """ def getData(api, payLoad, configProperties): statusCode = '200' statusMessage = 'Successfully completed the process' response = {} batchId = None try: # Received parameters args_keys = payLoad.copy() # Initialize logger apilogger = apilogfile(api) apilogger.debug("args_keys #### : %s" % type(json_dumps(args_keys))) apilogger.debug("args_keys/payLoad: %s" % json_dumps(args_keys)) # Validation: Configuration if not configProperties.has_section('apiconfiguration'): raise VALIDATION_ERRORS("Configuration for validation not properly set.") validkeys = json_loads( configProperties.get('apiconfiguration', 'validkeys', raw=True)) if configProperties.has_option( 'apiconfiguration', 'validkeys') else [] columnMapping = json_loads( configProperties.get('apiconfiguration', 'columnMapping', raw=True)) if configProperties.has_option( 'apiconfiguration', 'columnMapping') else {} validColumns = json_loads( configProperties.get('apiconfiguration', 'ValidColumns', raw=True)) if configProperties.has_option( 'apiconfiguration', 'ValidColumns') else [] # VALIDATION: parent keys apilogger.debug("args_keys: %s" % type(args_keys)) apilogger.debug(args_keys) apilogger.debug("validkeys: %s" % type(validkeys)) apilogger.debug(validkeys) """ if args_keys == None or not isinstance(args_keys, dict) or len(args_keys) == 0: statusCode = "422" return VALIDATION_ERRORS("Missing required attribute in payLoad. " + ','.join(validkeys) + ".") if (set(list(args_keys.keys()))) != set(validkeys): #raise VALIDATION_ERRORS("Validation failed on parent keys. '%s'" % ("','".join([v for v in list(args_keys.keys()) if v not in validkeys]+list(set(validkeys)-set(list(args_keys.keys())))))) statusCode = "422" t1 = list(set(validkeys)-(set(list(args_keys.keys())))) apilogger.debug("t1: %s" % t1) if len(t1)>0: raise VALIDATION_ERRORS("Validation failed on parent keys. '%s'" % ("','".join(t1))) t2 = list(set(list(args_keys.keys()))-set(validkeys)) apilogger.debug("t2: %s" % t2) if len(t2)>0: raise VALIDATION_ERRORS("Unprocessable parent keys found. '%s'" % ("','".join(t2))) """ if not (set(list(args_keys.keys()))).issubset(set(validkeys)): statusCode = "422" raise VALIDATION_ERRORS("Arguments are not matching with validKey") if len(args_keys) == 0: query = "global hosEventLogRecords;hosEventLogRecords=hos_event_log_by_businesskeys.objects().filter(hosel_event_value='" + 'deleteUser' + "').allow_filtering();" apilogger.debug("query : %s" % query) exec(query) apilogger.debug(("hosEventLogRecords: %s" % hosEventLogRecords)) hosEventLogResult = [row.__json__() for row in hosEventLogRecords] apilogger.debug("hosEventLogResult: %s" % hosEventLogResult) ##with id if 'id' in args_keys.keys(): apilogger.debug("batchId : %s" % args_keys['id']) query = "global hosEventLogRecords;hosEventLogRecords=hos_event_log_by_businesskeys.objects().filter(hosel_event_value='" + 'deleteUser' + "').allow_filtering();" apilogger.debug("query : %s" % query) exec(query) apilogger.debug(("hosEventLogRecords: %s" % hosEventLogRecords)) hosEventLogResult = [row.__json__() for row in hosEventLogRecords.filter(hosel_event_seq=args_keys['id'])] apilogger.debug("hosEventLogResult: %s" % hosEventLogResult) apilogger.debug("type of hosEventLogResult: %s" % type(hosEventLogResult)) ##with Date if 'date' in args_keys.keys(): apilogger.debug("Date : %s" % args_keys['date']) query = "global hosEventLogRecords;hosEventLogRecords=hos_event_logs.objects().filter(hosel_date='" + \ args_keys['date'] + "',hosel_event_type='deleteUser').allow_filtering();" apilogger.debug("query : %s" % query) exec(query) apilogger.debug(("hosEventLogRecords: %s" % hosEventLogRecords)) hosEventLogResult = [row.__json__() for row in hosEventLogRecords] apilogger.debug("hosEventLogResult: %s" % hosEventLogResult) apilogger.debug("type of hosEventLogResult: %s" % type(hosEventLogResult)) ##with startDate and endDate if 'startDate' in args_keys.keys() and not 'endDate' in args_keys.keys(): statusCode = "422" raise VALIDATION_ERRORS("endDate is missing") if 'endDate' in args_keys.keys() and not 'startDate' in args_keys.keys() : statusCode = "422" raise VALIDATION_ERRORS("startDate is missing") if 'startDate' in args_keys.keys() and 'endDate' in args_keys.keys(): apilogger.debug("startDate : %s" % args_keys['startDate']) apilogger.debug("endDate : %s" % args_keys['endDate']) startDate = datetime.strptime(args_keys['startDate'], '%Y-%m-%d') endDate = datetime.strptime(args_keys['endDate'], '%Y-%m-%d') if endDate < startDate: statusCode = "422" raise VALIDATION_ERRORS("endDate is greater than startDate") ##__gte and __lte to perform greater than and equal , less than and equal operation query = "global hosEventLogRecords;hosEventLogRecords=hos_event_logs.objects().filter(hosel_date__gte ='" + \ args_keys['startDate'] + "',hosel_date__lte= '" + args_keys['endDate'] + "',hosel_event_type='deleteUser').allow_filtering();" apilogger.debug("query : %s" % query) exec(query) apilogger.debug(("hosEventLogRecords: %s" % hosEventLogRecords)) hosEventLogResult = [row.__json__() for row in hosEventLogRecords] apilogger.debug("hosEventLogResult: %s" % hosEventLogResult) apilogger.debug("type of hosEventLogResult: %s" % type(hosEventLogResult)) ## with name if 'userID' in args_keys.keys(): apilogger.debug('userID :%s' % args_keys['userID']) query = "global hosEventLogRecords;hosEventLogRecords=hos_event_log_by_businesskeys.objects().filter(hosel_event_value='" + 'deleteUser' + "').allow_filtering();" apilogger.debug("query : %s" % query) exec(query) apilogger.debug(("hosEventLogRecords: %s" % hosEventLogRecords)) hosEventLogResult = [row.__json__() for row in hosEventLogRecords] apilogger.debug("hosEventLogResult: %s" % hosEventLogResult) hosEventLogResult = [ v for v in hosEventLogResult if v['hosel_enriched_data']['userID'] == args_keys['userID']] apilogger.debug("hosEventLogResult: %s" % hosEventLogResult) apilogger.debug("type of hosEventLogResult: %s" % type(hosEventLogResult)) ##with emailID if 'emailID' in args_keys.keys(): apilogger.debug('emailID :%s' % args_keys['emailID']) query = "global hosEventLogRecords;hosEventLogRecords=hos_event_log_by_businesskeys.objects().filter(hosel_event_value='" + 'deleteUser' + "').allow_filtering();" apilogger.debug("query : %s" % query) exec(query) #apilogger.debug(("hosEventLogRecords: %s" % hosEventLogRecords)) #hosEventLogResult = [row.__json__() for row in hosEventLogRecords] #apilogger.debug("hosEventLogResult: %s" % hosEventLogResult) #hosEventLogResult = [ v for v in hosEventLogResult if v['hosel_enriched_data']['email'] == args_keys['emailID']] #apilogger.debug("hosEventLogResult: %s" % hosEventLogResult) #apilogger.debug("type of hosEventLogResult: %s" % type(hosEventLogResult)) LogResult = [row.__json__() for row in hosEventLogRecords] hosEventLogResult =[] apilogger.debug("LogResult: %s" % LogResult) for v in LogResult: i = json_loads(v['hosel_event_data']) apilogger.debug("i: %s" % i) if "contactMedium" in i: for j in i['contactMedium']: if j.get("characteristic") == args_keys("emailID") and i.get('mediumType')=='email': hosEventLogResult.append(v) break ##with contactno if 'contactNo' in args_keys.keys(): apilogger.debug('contact :%s' % args_keys['contactNo']) query = "global hosEventLogRecords;hosEventLogRecords=hos_event_log_by_businesskeys.objects().filter(hosel_event_value='" + 'deleteUser' + "').allow_filtering();" apilogger.debug("query : %s" % query) exec(query) #hosEventLogResult = [row.__json__() for row in hosEventLogRecords] #hosEventLogResult = [ v for v in hosEventLogResult if v['hosel_enriched_data']['contact'] == args_keys['contactNo']] #apilogger.debug("hosEventLogResult: %s" % hosEventLogResult) #apilogger.debug("type of hosEventLogResult: %s" % type(hosEventLogResult)) LogResult = [row.__json__() for row in hosEventLogRecords] hosEventLogResult =[] apilogger.debug("LogResult: %s" % LogResult) for v in LogResult: i = json_loads(v['hosel_event_data']) if "contactMedium" in i: for j in i['contactMedium']: if j.get("characteristic") == args_keys("contactNo") and i.get('mediumType')=='contact': hosEventLogResult.append(v) break ##with postcode if 'postcode' in args_keys.keys(): apilogger.debug('postcode :%s' % args_keys['postcode']) query = "global hosEventLogRecords;hosEventLogRecords=hos_event_log_by_businesskeys.objects().filter(hosel_event_value='" + 'deleteUser' + "').allow_filtering();" apilogger.debug("query : %s" % query) exec(query) LogResult = [row.__json__() for row in hosEventLogRecords] #hosEventLogResult = [ v for v in hosEventLogResult if json_loads(v['hosel_enriched_data']['postalAddress'].replace("''",'"')).get("'postcode'") == args_keys['postcode']] #hosEventLogResult = [v for v in hosEventLogResult['hosel_event_data']['contactMedium'] for i in v['characteristic'] if isinstance(i,dict) if i['postcode'] == args_keys['postcode']] hosEventLogResult =[] #LogResult = json_loads(LogResult['hosel_event_data']) apilogger.debug("LogResult: %s" % LogResult) for v in LogResult: i = json_loads(v['hosel_event_data']) apilogger.debug("i: %s" % i) if "contactMedium" in i: for j in i['contactMedium']: for k in j['characteristic']: if isinstance(k,dict): if k['postcode'] == args_keys['postcode']: hosEventLogResult.append(v) break apilogger.debug("hosEventLogResult: %s" % hosEventLogResult) apilogger.debug("type of hosEventLogResult: %s" % type(hosEventLogResult)) #return ((statusCode, {"overallStatus": "success","details": [{"validation": "success"},{"scheduler": "success"},{"userCreation": "success"},{"tenantCreation": "success"}]})) #result = [{'status':v['hosel_event_status']['overallStatus'],'details':v['hosel_event_status']['details'],'request':json_loads(v['hosel_event_data'])} for v in hosEventLogResult] result = [] for v in hosEventLogResult: temp = {} temp['status'] = v['hosel_event_status']['overallStatus'] # Original # temp['details'] = v['hosel_event_status']['details'].replace('(','').replace(')','') # Test Code - Start try: apilogger.debug("v['hosel_event_status']['details'] : %s" % v['hosel_event_status']['details']) apilogger.debug("v['hosel_event_status']['details'] : %s" % type(v['hosel_event_status']['details'])) temp['details'] = json_loads(v['hosel_event_status']['details'].replace('(','').replace(')','').replace('""',''))#.replace('"errorDesc": ["{"','"errorDesc": [{"').replace('"}}}"]}]','"}}}]}]').replace('"MySQL server','MySQL server').replace('"Connection reset by peer','Connection reset by peer')) apilogger.debug("temp['details'][AFTER] : %s" % temp['details']) except Exception as tmperr: apilogger.debug("Error - {%s} . Line No - {%s} " % (str(tmperr), str(sys_exc_info()[-1].tb_lineno))) temp['details'] = v['hosel_event_status']['details'].replace('(','').replace(')','').replace('""','') # Test Code - End temp['request'] = json_loads(v['hosel_event_data']) apilogger.debug("details: %s" % temp['details']) apilogger.debug("Type of details: %s" % type(temp['details'])) result.append(temp) if len(result)>1: result = [{'status':v['hosel_event_status'], "href":"http://172.16.177.58:11395/multitenancy/getDeleteUserDetails?id="+v['hosel_event_seq'] }for v in hosEventLogResult] statusMessage = result apilogger.debug(result) apilogger.info("statusCode : %s" % statusCode) apilogger.info("statusMessage: %s" % statusMessage) except VALIDATION_ERRORS as cupverr: statusMessage = str(cupverr) except Exception as cupexp: statusCode = "500" statusMessage = "Error - {%s} . Line No - {%s} " % (str(cupexp), str(sys_exc_info()[-1].tb_lineno)) apilogger.error(statusMessage) apilogger.info("statusCode : %s" % statusCode) apilogger.info("statusMessage: %s" % statusMessage) if statusCode == "200": response = result else: response.update({"statusMessage": statusMessage}) return ((statusCode, response))
Editor is loading...
Leave a Comment