def get_api_log(data): try: a = 1 try: cursor = db.query_gen('logs',criteria={'api_name':data['api_name']},projection={'api_id':0,'_id':0,'user_id':0}) logs_count = cursor.next() if logs_count>= 1: logs = [cursor.next() for i in range(logs_count)] for log in logs: log['time']=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(log.pop('time'))) keys=['time','api_name','credit','credit_before_api_call','ip','request_line','rescode'] temp_file_name=os.getcwd()+"/log_reports/"+ utility.gen_id()+'.csv' with open(temp_file_name,'wb') as f: dict_writer=csv.DictWriter(f,keys) dict_writer.writer.writerow(keys) dict_writer.writerows(logs) return dict(rescode="00", resmessage='Success', result=temp_file_name, timestamp=int(time.time())) else: return dict(rescode="03", resmessage='Invalid user id', timestamp=int(time.time())) except Exception, e: return dict(rescode='02', res_message='Exception : get user info', timestamp=int(time.time())) except Exception, e: return dict(rescode='01', res_message=e, timestamp=int(time.time()))
def credit_request(data): # status 0: unapproved # status 1: approved # status 2: pending try: utility.validate_credit_request_data(data) try: cursor = db.query_gen('users', criteria={'_id': ObjectId(data['user_id'])}) if cursor.next() == 1: #user exist try: data['amount']=float(data['amount']) credit_report = dict(trid=utility.gen_id(), amount=data['amount'], time=int(time.time()), type='in', status=1) res = db.update_direct('users', update_modifier='$addToSet', where={'_id': ObjectId(data['user_id'])}, set_criteria={'credit.reports': credit_report}) # call payment gateway API db.update_direct('users', update_modifier='$inc', where={'_id': ObjectId(data['user_id'])}, set_criteria={'credit.amount': data['amount']}) return dict(rescode="00", resmessage='Success', result=res, timestamp=int(time.time())) except Exception, e: return dict(rescode='04', res_message='Exception : update credit report', timestamp=int(time.time())) else: return dict(rescode='03', res_message='Exception : User does not exist', timestamp=int(time.time()))
def call_api(request, url_map, app_db): data = request.params try: utility.validate_call_api_data(data) try: cursor = db.query_gen('users', criteria={'_id': ObjectId(data['user_id']), 'consumer_key': data['consumer_key']}) if cursor.next() == 1: # user exist user = cursor.next() try: pt = request.path_info.split('?')[0] url_endpoint = [v for k, v in url_map.items() if k.match(pt[4:])] #cursor = db.query_gen('apis', criteria={'_id':ObjectId(data['api_id']) }) if url_endpoint and app_db.get(url_endpoint[0], None): # cursor.next() == 1: # apis is exist api = app_db.get(url_endpoint[0], None) #url_endpoint[0] # cursor.next() if([v for v in api['url_pattern'] if re.match(v, pt[4:])]): try: module = importlib.import_module(api['tag_path']+'.api') try: utility.is_user_authorized_to_call_api(user, api) try: [data.pop(x) for x in ['consumer_key','user_id']] res = module.execute(request.path_info, data) trid = utility.gen_id() cost_of_request = 0.00 if (utility.is_it_free(user, api)): credit_report = dict(trid=trid, api_name=api['name'], amount=0.00, time=time.time(), type='out', status=1) earn_report = dict(trid=trid, api_name=api['name'], amount=0.00, time=time.time()) else: credit_report = dict(trid=trid, api_name=api['name'], amount=api['cost_per_request'], time=time.time(), type='out', status=1) earn_report = dict(trid=trid, api_name=api['name'], amount=api['cost_per_request'], time=time.time()) cost_of_request = api['cost_per_request'] db.update_direct('users', update_modifier='$addToSet', where={'_id': user['_id']}, set_criteria={'credit.reports': credit_report}) db.update_direct('users', update_modifier='$inc', where={'_id': user['_id']}, set_criteria={'credit.amount': cost_of_request * -1}) db.update_direct('users', update_modifier='$push', where={'_id': user['_id']}, set_criteria={'api_requests': {'api_id':str(api['_id']),'time':int(time.time())}}) db.update_direct('users', update_modifier='$addToSet', where={'_id': ObjectId(api['creator_id'])}, set_criteria={'earned.reports': earn_report}) db.update_direct('users', update_modifier='$inc', where={'_id': ObjectId(api['creator_id'])}, set_criteria={'earned.amount': cost_of_request}) remain_credit = user['credit']['amount'] - cost_of_request return dict(rescode='00', res_message='Success', timestamp=int(time.time()), api=api['name'],api_id=str(api['_id']), credit_before_api_call="{0:.2f}".format(user['credit']['amount']), credit="{0:.2f}".format(remain_credit), result=res) except Exception, e: return dict(rescode='09', res_message='Exception : api execution '+str(e), timestamp=int(time.time())) except Exception, e: return dict(rescode='08', res_message=str(e), timestamp=int(time.time())) except Exception, e: return dict(rescode='07', res_message='Exception : importing api', timestamp=int(time.time())) else: return dict(rescode='06', res_message='Exception : Given pattern doesnt match', hint=api['url_pattern'], timestamp=int(time.time())) else: return dict(rescode='05', res_message='Exception : Api does not exist', timestamp=int(time.time())) except Exception, e: return dict(rescode='04', res_message='Exception : Getting API info', timestamp=int(time.time()))