Example #1
0
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()))
Example #2
0
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()))
Example #3
0
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()))