def make_order(data, notes):
        request_data = {
            'amount': data['amount'],
            'currency': "INR",
            'receipt': data['receipt'],
            'notes': notes
        }
        response = razorpay_client.order.create(request_data)

        if current_app.config['DEBUG'] is True:
            log_info(response)

        order_id = response.pop('id')
        response['user_details'] = response.pop('notes') # renamed 'notes' to 'user_details'
        response.pop("amount")
        response.pop("receipt")

        return order_id, response
    def get(self):
        args = parser.parse_args()
        response = {}

        log_info(args)

        try:
            category_ids = args['category_id']
            min_max_price = args['price']

            if not (isinstance(category_ids, list)
                    and isinstance(min_max_price, list)
                    and len(category_ids) > 0 and len(min_max_price) == 2):
                return {'status': 'fail', 'msg': 'Bad Request'}, 400

            category_ids = list(map(int, category_ids))
            min_max_price = list(map(int, min_max_price))
            min_price, max_price = min(min_max_price), max(min_max_price)

            # SELECT * FROM SecondaryCategoryDB
            category_docs = (SecondaryCategoryDB.objects(
                category_id__in=category_ids).all())
            product_docs = (ProductDB.objects(
                category__in=category_docs,
                discounted_price__gt=min_price,
                discounted_price__lt=max_price).all())

            if len(product_docs) == 0:
                data = []
            else:
                data = [
                    get_product_json(doc, product_resource_fields)
                    for doc in product_docs
                ]

            response['status'] = 'success'
            response['msg'] = {'data': data}
            return response, 200

        except Exception as e:
            response['status'] = 'fail'
            response['msg'] = str(e)

            return response, 500
    def post(self):
        args = parser.parse_args()
        response = {}

        try:
            content, status_code = (Product.decode_token(
                token=args['Authorization']))

            if content['status'] == 'success':
                # Authorized seller
                product_args = {
                    'product_name':
                    args['product_name'],
                    'short_description':
                    args['short_description'],
                    'long_description':
                    args['long_description'],
                    'quantity':
                    args['quantity'],
                    'base_price':
                    args['base_price'],
                    'discount':
                    args['discount'],
                    'seller_id':
                    content['data']['user_id'],
                    'features': [
                        feature.strip()
                        for feature in args['features'].split(',')
                    ],
                    'colors':
                    [color.strip() for color in args['colors'].split(',')],
                    'sizes':
                    [size.strip() for size in args['sizes'].split(',')],
                    'category_id':
                    args['category_id'],
                    'img_base_url':
                    args['img_base_url'],
                    'img_aux_urls':
                    list(
                        filter(lambda x: x is not None, [
                            args.get('aux_img_url_1'),
                            args.get('aux_img_url_2'),
                            args.get('aux_img_url_3')
                        ]))
                }
                if current_app.config['DEBUG'] is True:
                    log_info(args)
                    log_info(product_args)

                # Add product
                product = ProductDB.add_document(**product_args)
                # product.extra = {}

                # Marshmallow-ing product object
                product_marshal = get_product_json(product,
                                                   product_resource_fields)

                # Get corresponding category from SecondaryCategoryDB
                # SELECT * FROM SecondaryCategoryDB WHERE category_id=parent_category_id
                parent_category_id = product.category.category_id
                category_doc = (SecondaryCategoryDB.objects(
                    category_id=parent_category_id).first())

                if category_doc is not None:
                    # Append this product into corresponding category
                    product_id = product_marshal['product_id']
                    (category_doc.update(
                        add_to_set__product_ids=[product.product_id]))

                    # Marshmallow-ing category object
                    category_data = object_to_json(
                        category_doc, secondary_category_resource_fields)
                    product_marshal['category_data'] = category_data

                product.save()

                # SELECT * FROM Seller2Products WHERE seller_id=product.seller_id
                s2p = (Seller2Products.objects(
                    seller_id=product.seller_id).first())

                if s2p is None:
                    # If this seller has not has any product yet
                    s2p = Seller2Products(seller_id=product.seller_id,
                                          product_ids=[product.product_id])
                    s2p.save()
                else:
                    # If seller already has added few products
                    # then append product.product_id to the
                    # same category's product_ids list
                    s2p.update(add_to_set__product_ids=[product.product_id])

                response['status'] = 'success'
                response['msg'] = {'data': product_marshal}

                return response, 201

            elif content['status'] == 'fail':
                return content, status_code

        except KeyError as e:
            # log_info(e)
            response['status'] = 'fail'
            response['msg'] = str(e) + " is not available in json data"

            return response, 400

        except ValidationError as e:
            # log_info(e)
            response['status'] = 'fail'
            response['msg'] = str(e)

            return response, 400

        except Exception as e:
            # log_info(e)
            response['status'] = 'fail'
            response['msg'] = str(e)

            return response, 500
    def put(self, id):
        args = parser.parse_args()
        response = {}

        try:
            content, status_code = (Product.decode_token(
                token=args['Authorization']))

            if content['status'] == 'success':
                # Authorized seller

                product_args = {
                    'product_name':
                    args['product_name'],
                    'short_description':
                    args['short_description'],
                    'long_description':
                    args['long_description'],
                    'quantity':
                    args['quantity'],
                    'discount':
                    args['discount'],
                    'features': [
                        feature.strip()
                        for feature in args['features'].split(',')
                    ],
                    'colors':
                    [color.strip() for color in args['colors'].split(',')],
                    'sizes':
                    [size.strip() for size in args['sizes'].split(',')],
                    'img_base_url':
                    args['img_base_url'],
                    'img_aux_urls':
                    list(
                        filter(lambda x: x is not None, [
                            args.get('aux_img_url_1'),
                            args.get('aux_img_url_2'),
                            args.get('aux_img_url_3')
                        ]))
                }
                if current_app.config['DEBUG'] == True:
                    log_info(args)
                    log_info(product_args)

                # SELECT * FROM ProductDB WHERE product_id=id
                product = ProductDB.objects(product_id=id).first()

                # Update values
                setattr(product.date, 'date_last_update', datetime.utcnow())
                # product.extra = {}
                for key, value in product_args.items():
                    if hasattr(product, key):
                        setattr(product, key, value)
                    elif hasattr(product.description, key):
                        setattr(product.description, key, value)

                # Marshmallow-ing product object
                product_marshal = get_product_json(product,
                                                   product_resource_fields)

                # Get corresponding category from SecondaryCategoryDB
                # SELECT * FROM SecondaryCategoryDB WHERE category_id=parent_category_id
                parent_category_id = product.category.category_id
                category_doc = (SecondaryCategoryDB.objects(
                    category_id=parent_category_id).first())

                if category_doc is not None:
                    # Marshmallow-ing category object
                    category_data = object_to_json(
                        category_doc, secondary_category_resource_fields)
                    product_marshal['category_data'] = category_data

                product.save()

                response['status'] = 'success'
                response['msg'] = {'data': product_marshal}

                return response, 200

            elif content['status'] == 'fail':
                return content, status_code

        except KeyError as e:
            # log_info(e)
            response['status'] = 'fail'
            response['msg'] = str(e) + " is not available in json data"

            return response, 400

        except ValidationError as e:
            # log_info(e)
            response['status'] = 'fail'
            response['msg'] = str(e)

            return response, 400

        except Exception as e:
            # log_info(e)
            response['status'] = 'fail'
            response['msg'] = str(e)

            return response, 500
    def post(self):
        args = parser.parse_args()
        response = {}
        
        # Check aruments are valid or not
        error_mssgs = check_valid_request(args, ops='post')
        # log_info(error_mssgs)

        # Error for invalid arguments
        if error_mssgs:
            return {'status': 'fail', 'msg': error_mssgs}, 400

        try:
            content, status_code = (Payment
                                    .decode_token(token=args['Authorization']))

            if content['status'] == 'success':
                amount = args['amount']
                user_id = content['data']['user_id']

                payment = PaymentDB.add_document(amount, user_id)
                payment_doc = object_to_json(payment, resource_fields)

                if current_app.config['DEBUG'] is True:
                    log_info(payment_doc)

                notes = args['notes']
                # Add buyer details into notes
                notes.update(content['data'])
                order_id, extra = Payment.make_order(payment_doc, notes)

                payment.order_id = order_id
                payment.extra = extra
                payment.save()

                payment_doc['order_id'] = order_id
                payment_doc['extra'] = extra

                response['status'] = 'success'
                response['msg'] = {
                    'data': payment_doc
                }

                return response, 201

            elif content['status'] == 'fail':
                return content, status_code

        except KeyError as e:
            # log_info(e)
            response['status'] = 'fail'
            response['msg'] = str(e) + " is not available in json data"

            return response, 400

        except ValidationError as e:
            # log_info(e)
            response['status'] = 'fail'
            response['msg'] = str(e)

            return response, 400

        except Exception as e:
            log_info(e)
            response['status'] = 'fail'
            response['msg'] = str(e)

            return response, 500
    def put(self, payment_id):

        if not isinstance(payment_id, int):
            return {
                'status': 'fail', 
                'msg': 'payment_id must be an integer'
            }, 400

        args = parser.parse_args()
        response = {}

        # Check aruments are valid or not
        error_mssgs = check_valid_request(args, ops='put')
        # log_info(error_mssgs)

        # Error for invalid arguments
        if error_mssgs:
            return {'status': 'fail', 'msg': error_mssgs}, 400

        try:
            content, status_code = (Payment
                                    .decode_token(token=args['Authorization']))

            if content['status'] == 'success':
                # Authorized buyer
                payment = PaymentDB.objects(payment_id=payment_id).first()

                if payment is None:
                    response['status'] = 'fail'
                    response['msg'] = {'data': 'Not Found'}
                    return response, 404

                if payment.order_id != args['order_id']:
                    response['status'] = 'fail'
                    response['msg'] = {'data': 'Not Acceptable'}
                    return response, 406

                params_dict = {
                    'razorpay_order_id': args['razorpay_order_id'],
                    'razorpay_payment_id': args['razorpay_payment_id'],
                    'razorpay_signature': args['razorpay_signature']
                }

                verified = Payment.verify_payment_signature(params_dict)

                log_info('\nLogging')
                log_info(args)
                log_info(verified)
                log_info('\n')

                if verified:
                    # Verified signature
                    payment.razorpay_payment_id = args['razorpay_payment_id']
                    payment.razorpay_order_id = args['razorpay_order_id']
                    payment.save()
                    response['status'] = 'success'
                    response['msg'] = {'data': True}

                    return response, 200

                else:
                    response['status'] = 'fail'
                    response['msg'] = {'data': False}

                    return response, 403


            elif content['status'] == 'fail':
                return content, status_code

        except KeyError as e:
            response['status'] = 'fail'
            response['msg'] = {'data': str(e) + ' KeyError'}
            return response, 400

        except Exception as e:
            response['status'] = 'fail'
            response['msg'] = {'data': str(e)}
            return response, 500
示例#7
0
import os
from multiprocessing import Process

import time

from app import Bot, log_info
import requests
from bs4 import BeautifulSoup

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

chrome_driver = '/usr/local/bin/chromedriver'

# Get details
log_info("starting..")

# Get a list of proxies


def get_proxies(driver):
    url = "https://free-proxy-list.net/"
    driver.get(url)
    proxies = []
    proxy_table = driver.find_elements_by_xpath(
        '//*[@id="proxylisttable"]/tbody/tr')
    for x in proxy_table:
        row_data = x.find_elements_by_tag_name('td')
        proxy = row_data[0].text + ":" + row_data[1].text
        proxies.append(str(proxy))
    return proxies