Exemplo n.º 1
0
def get_coupons(id_brand,
                id_shop=None,
                id_sale=None,
                product_brand=None,
                promotion_group=None):
    query = [('id_brand', id_brand)]
    if id_shop:
        if not isinstance(id_shop, list):
            id_shop = [id_shop]
        for _id in id_shop:
            query.append(('id_shop', _id))
    if id_sale:
        query.append(('id_item', id_sale))
    if product_brand:
        query.append(('item_brand', product_brand))
    if promotion_group:
        query.append(('promotion_group', promotion_group))

    try:
        url = "{}?{}".format(settings.COUPON_LIST_URL, urllib.urlencode(query))
        rst = get_from_remote(
            url,
            settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
            settings.PRIVATE_KEY_PATH,
            headers={'Content-Type': 'x-www-form-urlencoded'})

        coupons_data = xmltodict.parse(rst)
        return ActorCoupons(coupons_data)

    except Exception, e:
        logging.error("Failed to get coupon %s" % query, exc_info=True)
Exemplo n.º 2
0
    def handle(self, *args, **options):
        p = {'from': options['from'], 'to': options['to']}
        p = urllib.urlencode(p)
        url = settings.STATS_INCOME + '?' + p

        try:
            data = get_from_remote(
                url, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                settings.PRIVATE_KEY_PATH)

            data = xmltodict.parse(data)
            data = data['incomes']
            incomes = data.get('income', [])

            if not isinstance(incomes, list):
                incomes = [incomes]

            handled_orders = set()
            for income in incomes:
                Incomes.objects.create(sale_id=income['id_sale'],
                                       shop_id=income['id_shop'],
                                       users_id=income['@id_user'],
                                       variant_id=income['id_variant'],
                                       price=income['price'],
                                       quantity=income['quantity'],
                                       up_time=income['@up_time'])
                handled_orders.add(income['@id_order'])

            self.send_feedback(handled_orders)
        except Exception, e:
            logging.error('stats_visitors_handle_err: %s', e, exc_info=True)
Exemplo n.º 3
0
    def handle(self, *args, **options):
        p = {'from': options['from'], 'to': options['to']}
        p = urllib.urlencode(p)
        url = settings.STATS_VISITORS + '?' + p

        try:
            data = get_from_remote(
                url, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                settings.PRIVATE_KEY_PATH)

            data = xmltodict.parse(data)
            data = data['visitors']
            users = data.get('user', [])

            if not isinstance(users, list):
                users = [users]

            for user in users:
                try:
                    v = Visitors.objects.get(sid=user['@sid'])
                    v.sid = user['@sid']
                    v.visit_time = user['visit_time']
                    v.users_id = user['users_id']
                    v.save()
                except Visitors.DoesNotExist:
                    Visitors.objects.create(sid=user['@sid'],
                                            users_id=user['users_id'],
                                            visit_time=user['visit_time'])

            self.send_feedback(users)
        except Exception, e:
            logging.error('stats_visitors_handle_err: %s', e, exc_info=True)
def send_cache_invalidation(method, item_name, item_id):
    try:
        invalidation = '%s/%s/%s' % (method, item_name, item_id)
        logging.info("Sending cache invalidation %s" % invalidation)

        data = gen_encrypt_json_context(
            invalidation, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
            settings.PRIVATE_KEY_PATH)

        get_from_remote(settings.CACHE_INVALIDATION_URL,
                        settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                        settings.PRIVATE_KEY_PATH,
                        data=data,
                        headers={'Content-Type': 'application/json'})
    except Exception, e:
        logging.error("Failed to send cache invalidation %s" % invalidation,
                      exc_info=True)
Exemplo n.º 5
0
def remote_payment_form(cookie, id_processor, id_trans, **kwargs):
    uri = "webservice/1.0/private/payment/form"
    query = {
        'cookie': cookie,
        'processor': id_processor,
    }
    param = {'id_trans': id_trans}

    id_processor = int(id_processor)
    if id_processor == PAYMENT_TYPES.PAYPAL:
        query.update({
            'url_notify': settings.PAYMENT_PAYPAL_GATEWAY % param,
            'url_return': settings.PAYMENT_PAYPAL_RETURN % param,
            'url_cancel': settings.PAYMENT_PAYPAL_CANCEL % param,
        })

    elif id_processor == PAYMENT_TYPES.PAYBOX:
        query.update({
            'url_success': settings.PAYMENT_PAYBOX_SUCCESS % param,
            'url_failure': settings.PAYMENT_PAYBOX_FAILURE % param,
            'url_cancel': settings.PAYMENT_PAYBOX_CANCEL % param,
            'url_waiting': settings.PAYMENT_PAYBOX_WAITING % param,
            'url_return': settings.PAYMENT_PAYBOX_GATEWAY % param,
            'user_email': kwargs.get('user_email', ''),
        })

    elif id_processor == PAYMENT_TYPES.STRIPE:
        query.update({
            'user_email': kwargs.get('user_email', ''),
            'url_process': settings.PAYMENT_STRIPE_PROCESS % param,
            'url_success': kwargs.get('url_success', ''),
            'url_failure': kwargs.get('url_failure', ''),
        })

    try:
        query = ujson.dumps(query)
        en_query = gen_encrypt_json_context(
            query, settings.SERVER_APIKEY_URI_MAP[SERVICES.FIN],
            settings.PRIVATE_KEY_PATH)

        resp = get_from_remote(os.path.join(settings.FIN_ROOT_URI, uri),
                               settings.SERVER_APIKEY_URI_MAP[SERVICES.FIN],
                               settings.PRIVATE_KEY_PATH,
                               data=en_query,
                               headers={'Content-Type': 'application/json'})
        return resp

    except Exception, e:
        logging.error('Failed to get payment form %s,'
                      'error: %s',
                      query,
                      e,
                      exc_info=True)
        raise ServerError('remote_payment_form_err: %s' % str(e))
Exemplo n.º 6
0
 def _send_feedback(self, url, data):
     data = gen_encrypt_json_context(
         ujson.dumps(data),
         settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
         settings.PRIVATE_KEY_PATH)
     resp = get_from_remote(
         url,
         settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
         settings.PRIVATE_KEY_PATH,
         data=data,
         headers={'Content-Type': 'application/json'})
     return xmltodict.parse(resp)
Exemplo n.º 7
0
 def _remote_visitors_online(self):
     try:
         url = settings.STATS_VISITORS_ONLINE
         data = get_from_remote(
             url,
             settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
             settings.PRIVATE_KEY_PATH)
         visitors_online = ujson.loads(data)['count']
         return visitors_online
     except Exception, e:
         logging.error('remote_visitors_online_err:%s', e)
         return '-'
Exemplo n.º 8
0
def send_new_shipment(id_order,
                      id_shop,
                      id_brand,
                      shipping_fee,
                      handling_fee,
                      content,
                      shipping_carrier,
                      packing_status,
                      tracking_name,
                      shipping_service=None,
                      shipping_date=None,
                      tracking_num=None):
    if isinstance(content, list):
        content = ujson.dumps(content)

    try:
        data = {
            'action': 'create',
            'order': id_order,
            'shop': id_shop,
            'brand': id_brand,
            'handling_fee': handling_fee,
            'shipping_fee': shipping_fee,
            'content': content,
            'shipping_carrier': shipping_carrier,
            'packing_status': packing_status,
            'tracking_name': tracking_name,
            'shipping_service': shipping_service,
            'shipping_date': shipping_date,
            'tracking_num': tracking_num
        }

        data = ujson.dumps(data)
        data = gen_encrypt_json_context(
            data, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
            settings.PRIVATE_KEY_PATH)
        rst = get_from_remote(settings.ORDER_SHIPMENT,
                              settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                              settings.PRIVATE_KEY_PATH,
                              data=data,
                              headers={'Content-Type': 'application/json'})
        return rst
    except Exception, e:
        logging.error('Failed to create shipment %s,'
                      'error: %s', {
                          'id_order': id_order,
                          'id_shop': id_shop,
                          'content': content
                      },
                      e,
                      exc_info=True)
        raise UsersServerError
    def handle(self, *args, **options):
        url = settings.STATS_VISITORS_ONLINE

        try:
            data = get_from_remote(
                url, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                settings.PRIVATE_KEY_PATH)
            count = ujson.loads(data)['count']
            cli = redis_cli(settings.SALES_SIM_REDIS)
            cli.set(VISITORS_ONLINE, count)

        except Exception, e:
            logging.error('stats_visitors_online: %s', e, exc_info=True)
Exemplo n.º 10
0
def get_order_packing_list(order_id):
    try:
        url = '%s?id_order=%s' % (settings.ORDER_SHIPPING_LIST, order_id)
        data = get_from_remote(url,
                               settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                               settings.PRIVATE_KEY_PATH)
        return data
    except Exception, e:
        logging.error(
            'Failed to get order(id=%s) shipping list from '
            'usr servers: %s',
            order_id,
            e,
            exc_info=True)
        raise UsersServerError
Exemplo n.º 11
0
def get_order_detail(order_id, brand_id, shops_id):
    try:
        url = '%s?id=%s&brand_id=%s' % (settings.ORDER_DETAIL_URL, order_id,
                                        brand_id)
        if shops_id:
            url += "&shops_id=%s" % ujson.dumps(shops_id)
        data = get_from_remote(url,
                               settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                               settings.PRIVATE_KEY_PATH,
                               headers={'Content-Type': 'application/json'})
        return ujson.loads(data)
    except Exception, e:
        logging.error('Failed to get order(id=%s) detail from usr servers',
                      order_id,
                      exc_info=True)
        raise UsersServerError
Exemplo n.º 12
0
def remote_payment_init(data):
    uri = "webservice/1.0/private/payment/init"
    remote_uri = os.path.join(settings.FIN_SERVER, uri)
    try:
        data = gen_encrypt_json_context(
            data, settings.SERVER_APIKEY_URI_MAP[SERVICES.FIN],
            settings.PRIVATE_KEY_PATH)

        resp = get_from_remote(remote_uri,
                               settings.SERVER_APIKEY_URI_MAP[SERVICES.FIN],
                               settings.PRIVATE_KEY_PATH,
                               data=data,
                               headers={'Content-Type': 'application/json'})
        return resp
    except Exception, e:
        logging.error("Failed to init payment %s" % data, exc_info=True)
        raise
Exemplo n.º 13
0
def upload(asset_name, content):
    remote_uri = os.path.join(
        settings.AST_SERVER,
        "webservice/1.0/private/upload?name=%s" % urllib2.quote(asset_name))
    try:
        data = gen_encrypt_json_context(
            content.read(), settings.SERVER_APIKEY_URI_MAP[SERVICES.AST],
            settings.PRIVATE_KEY_PATH)

        resp = get_from_remote(remote_uri,
                               settings.SERVER_APIKEY_URI_MAP[SERVICES.AST],
                               settings.PRIVATE_KEY_PATH,
                               data=data)
        return ujson.loads(resp)
    except Exception, e:
        logging.error("Failed to upload %s" % asset_name, exc_info=True)
        raise
Exemplo n.º 14
0
def get_from_sale_server(uri, **query):
    if not uri.startswith(settings.SALES_SERVER_API_URL):
        remote_uri = settings.SALES_SERVER_API_URL % {'api': uri}
    else:
        remote_uri = uri
    if query:
        query_str = urllib.urlencode(query)
    else:
        query_str = ''

    try:
        content = get_from_remote('?'.join([remote_uri, query_str]),
                                  settings.SERVER_APIKEY_URI_MAP[SERVICES.ADM],
                                  settings.PRIVATE_KEY_PATH)
    except Exception, e:
        logging.error('get_from_sale_server_error: %s', e, exc_info=True)
        raise
Exemplo n.º 15
0
def remote_send_invoices(id_order, id_brand, id_shops):
    try:
        if isinstance(id_shops, list):
            id_shops = ujson.dumps(id_shops)

        query = {'order': id_order, 'brand': id_brand, 'shops': id_shops}

        data = get_from_remote(settings.ORDER_SEND_INVOICES,
                               settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                               settings.PRIVATE_KEY_PATH,
                               data=ujson.dumps(query),
                               headers={'Content-Type': 'application/json'})
        return data
    except Exception, e:
        logging.error('Failed to send order(id=%s) invoices for: %s',
                      id_order,
                      e,
                      exc_info=True)
        raise UsersServerError
Exemplo n.º 16
0
def get_order_list(brand_id, shops_id=None, limit=None):
    try:
        order_url = '%s?brand_id=%s' % (settings.ORDER_LIST_URL, brand_id)
        if shops_id:
            order_url += "&shops_id=%s" % ujson.dumps(shops_id)
        if limit:
            order_url += "&limit=%s" % limit
        data = get_from_remote(order_url,
                               settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                               settings.PRIVATE_KEY_PATH,
                               headers={'Content-Type': 'application/json'})
        orders = ujson.loads(data)
        for order in orders:
            _populate_order_info(order)
        return orders
    except Exception, e:
        logging.error('Failed to get order list from usr servers',
                      exc_info=True)
        raise UsersServerError
Exemplo n.º 17
0
def post_coupon(id_brand, id_bo_user, **kwargs):
    try:
        data = {
            'action': 'create',
            'id_issuer': id_brand,
            'author': id_bo_user,
        }
        data.update(kwargs)
        rst = get_from_remote(
            settings.COUPON_CREATE_URL,
            settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
            settings.PRIVATE_KEY_PATH,
            data=urllib.urlencode(data),
            headers={'Content-Type': 'x-www-form-urlencoded'})

        coupons_data = xmltodict.parse(rst)
        return coupons_data['coupons']['coupon']['@id']

    except Exception, e:
        logging.error("Failed to create coupon %s" % data, exc_info=True)
Exemplo n.º 18
0
def remote_invoices(id_order, id_brand, id_shops):
    try:
        if isinstance(id_shops, list):
            id_shops = ujson.dumps(id_shops)

        uri = "%s?order=%s&brand=%s&shops=%s" % (settings.ORDER_INVOICES,
                                                 id_order, id_brand, id_shops)

        data = get_from_remote(uri,
                               settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                               settings.PRIVATE_KEY_PATH)
        return data
    except Exception, e:
        logging.error(
            'Failed to get order(id=%s) invoices from '
            'usr servers: %s',
            id_order,
            e,
            exc_info=True)
        raise UsersServerError
Exemplo n.º 19
0
def get_from_vessel_server(method, path, **query):
    remote_uri = os.path.join(settings.VSL_ROOT_URI, path)
    if query:
        query_str = urllib.urlencode(query)
        if method == 'GET':
            remote_uri = '?'.join([remote_uri, query_str])
            data = None
        else:
            data = gen_encrypt_json_context(
                query_str, settings.SERVER_APIKEY_URI_MAP['VSL'],
                settings.PRIVATE_KEY_PATH)

    try:
        content = get_from_remote(remote_uri,
                                  settings.SERVER_APIKEY_URI_MAP['VSL'],
                                  settings.PRIVATE_KEY_PATH,
                                  data=data)
    except Exception, e:
        logging.error('get_from_vessel_server: %s', e, exc_info=True)
        raise
Exemplo n.º 20
0
def remote_payment_init(id_order, id_user, amount, currency, iv_id, iv_numbers,
                        iv_data):
    uri = 'private/payment/init'
    remote_uri = settings.SALES_SERVER_API_URL % {'api': uri}
    if isinstance(iv_id, list):
        iv_id = ujson.dumps(iv_id)

    if isinstance(iv_numbers, list):
        iv_numbers = ujson.dumps(iv_numbers)

    query = {
        "order": id_order,
        "user": id_user,
        "amount": amount,
        "currency": currency,
        "invoices": iv_id,
        "invoices_num": iv_numbers,
        "invoicesData": iv_data
    }

    logging.info("remote_payment_init_query: %s", query)
    try:
        query = ujson.dumps(query)
        en_query = gen_encrypt_json_context(
            query, settings.SERVER_APIKEY_URI_MAP[SERVICES.ADM],
            settings.PRIVATE_KEY_PATH)

        resp = get_from_remote(remote_uri,
                               settings.SERVER_APIKEY_URI_MAP[SERVICES.ADM],
                               settings.PRIVATE_KEY_PATH,
                               data=en_query,
                               headers={'Content-Type': 'application/json'})
        logging.info("payment_init_response: %s", resp)
        return resp
    except Exception, e:
        logging.error('Failed to get payment init %s,'
                      'error: %s',
                      query,
                      e,
                      exc_info=True)
        raise ServerError('remote_payment_init_err: %s' % str(e))
Exemplo n.º 21
0
def remote_delete_order(id_order, id_brand, id_shops):
    try:
        if isinstance(id_shops, list):
            id_shops = ujson.dumps(id_shops)

        data = {'order': id_order, 'brand': id_brand, 'shops': id_shops}
        data = gen_encrypt_json_context(
            ujson.dumps(data), settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
            settings.PRIVATE_KEY_PATH)
        rst = get_from_remote(settings.ORDER_DELETE,
                              settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                              settings.PRIVATE_KEY_PATH,
                              data=data,
                              headers={'Content-Type': 'application/json'})
        return rst
    except Exception, e:
        logging.error('Failed to delete order %s,'
                      'error: %s', {'id_order': id_order},
                      e,
                      exc_info=True)
        raise UsersServerError
Exemplo n.º 22
0
def send_shipping_fee(id_shipment, id_postage, shipping_fee):
    try:
        data = {
            'id_shipment': id_shipment,
            'id_postage': id_postage,
            'shipping_fee': shipping_fee
        }
        data = ujson.dumps(data)
        logging.info("Send shipping fee %s" % data)

        data = gen_encrypt_json_context(
            data, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
            settings.PRIVATE_KEY_PATH)

        rst = get_from_remote(settings.SHIPPING_FEE_URL,
                              settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                              settings.PRIVATE_KEY_PATH,
                              data=data,
                              headers={'Content-Type': 'application/json'})
    except Exception, e:
        logging.error("Failed to send shipping fee %s" % data, exc_info=True)
Exemplo n.º 23
0
    def handle(self, *args, **options):
        p = {'from': options['from'], 'to': options['to']}
        p = urllib.urlencode(p)
        url = settings.STATS_ORDER + '?' + p

        try:
            data = get_from_remote(
                url, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                settings.PRIVATE_KEY_PATH)

            data = xmltodict.parse(data)
            data = data['orders']
            logs = data.get('log', [])

            if not isinstance(logs, list):
                logs = [logs]

            completed_logs = set()
            for log in logs:
                shop_id = int(log['id_shop'])
                if shop_id == 0:
                    shop_id = None
                obj, _ = Orders.objects.get_or_create(users_id=log['users_id'],
                                                      order_id=log['id_order'],
                                                      brand_id=log['id_brand'],
                                                      shop_id=shop_id)
                obj.pending_date = log['pending_date']
                obj.waiting_payment_date = log['waiting_payment_date']
                obj.waiting_shipping_date = log['waiting_shipping_date']
                obj.completed_date = log['completed_date']
                obj.save()

                if log['completed_date']:
                    completed_logs.add(log['@id'])

            self.send_feedback(completed_logs)
        except Exception, e:
            logging.error('stats_visitors_handle_err: %s', e, exc_info=True)
    def handle(self, *args, **options):
        url = settings.STATS_BOUGHT_HISTORY

        try:
            data = get_from_remote(
                url, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                settings.PRIVATE_KEY_PATH)

            data = xmltodict.parse(data)
            data = data['histories']
            histories = data.get('item', [])

            if not isinstance(histories, list):
                histories = [histories]

            handled_histories = []
            for history in histories:
                ht_id = history['@id']
                id_sale = history['id_sale']
                users_id = history['users_id']

                history = BoughtHistory.objects.filter(sale_id=id_sale)
                if history.exists():
                    history = history[0]
                    cur_users = set(ujson.loads(history.users))
                    cur_users.add(users_id)
                    history.users = ujson.dumps(cur_users)
                    history.save()
                else:
                    BoughtHistory.objects.create(sale_id=id_sale,
                                                 users=ujson.dumps(
                                                     set([users_id])))
                handled_histories.append(ht_id)

            self.send_feedback(handled_histories)
        except Exception, e:
            logging.error('stats_visitors_handle_err: %s', e, exc_info=True)
Exemplo n.º 25
0
def send_delete_shipment(id_shipment, id_shop, id_brand):
    try:
        data = {
            'action': 'delete',
            'shipment': id_shipment,
            'shop': id_shop,
            'brand': id_brand
        }
        data = ujson.dumps(data)
        data = gen_encrypt_json_context(
            data, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
            settings.PRIVATE_KEY_PATH)
        rst = get_from_remote(settings.ORDER_SHIPMENT,
                              settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                              settings.PRIVATE_KEY_PATH,
                              data=data,
                              headers={'Content-Type': 'application/json'})
        return rst
    except Exception, e:
        logging.error('Failed to delete shipment %s,'
                      'error: %s', {'id_shipment': id_shipment},
                      e,
                      exc_info=True)
        raise UsersServerError
Exemplo n.º 26
0
def send_update_shipment(id_shipment,
                         id_shop,
                         id_brand,
                         shipping_fee=None,
                         handling_fee=None,
                         status=None,
                         tracking_num=None,
                         content=None,
                         shipping_date=None,
                         tracking_name=None,
                         shipping_carrier=None):
    if isinstance(content, list):
        content = ujson.dumps(content)

    try:
        data = {}
        if shipping_fee:
            data['shipping_fee'] = shipping_fee
        if handling_fee:
            data['handling_fee'] = handling_fee
        if status:
            data['status'] = status
        if tracking_num:
            data['tracking'] = tracking_num
        if content:
            data['content'] = content
        if shipping_date:
            data['shipping_date'] = shipping_date
        if tracking_name:
            data['tracking_name'] = tracking_name
        if shipping_carrier:
            data['shipping_carrier'] = shipping_carrier

        if not data:
            return

        data['shipment'] = id_shipment
        data['shop'] = id_shop
        data['brand'] = id_brand
        data['action'] = 'modify'
        data = ujson.dumps(data)
        data = gen_encrypt_json_context(
            data, settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
            settings.PRIVATE_KEY_PATH)
        rst = get_from_remote(settings.ORDER_SHIPMENT,
                              settings.SERVER_APIKEY_URI_MAP[SERVICES.USR],
                              settings.PRIVATE_KEY_PATH,
                              data=data,
                              headers={'Content-Type': 'application/json'})
        return rst

    except Exception, e:
        logging.error(
            'Failed to update shipment %s,'
            'error: %s', {
                'id_shipment': id_shipment,
                'shipping_fee': shipping_fee,
                'handling_fee': handling_fee,
                'status': status,
                'tracking_num': tracking_num,
                'content': content
            },
            e,
            exc_info=True)
        raise UsersServerError