コード例 #1
0
    def put(self, request, *args, **kwargs):
        '''
        изменение кол-ва конкретного товара в корзине
        '''
        items = request.data.get('items')
        if items:
            try:
                items_dict = load_json(items)
            except ValueError:
                Response({
                    'Status': False,
                    'Errors': 'Неверный формат запроса'
                })
            else:
                cart, _ = Order.objects.get_or_create(user_id=request.user.id,
                                                      status='cart')
                objects_updated = 0
                for order_item in items_dict:
                    if isinstance(order_item['id'], int) and isinstance(
                            order_item['quantity'], int):
                        objects_updated += OrderItem.objects.filter(
                            order_id=cart.id, id=order_item['id']).update(
                                quantity=order_item['quantity'])

                return Response({
                    'status': True,
                    'edit_objects': objects_updated
                })
        return Response(
            {
                'status': False,
                'error': 'Не указаны необходимые поля'
            },
            status=status.HTTP_400_BAD_REQUEST)
コード例 #2
0
ファイル: views.py プロジェクト: nosegay/pd_diplom
    def post(self, request, *args, **kwargs):
        if not request.user.is_authenticated:
            return JsonResponse({'Status': False, 'Error': 'Log in required'}, status=403)

        items_sting = request.data.get('items')
        if items_sting:
            try:
                items_dict = load_json(items_sting)
            except ValueError:
                JsonResponse({'Status': False, 'Errors': 'Неверный формат запроса'})
            else:
                basket, _ = Order.objects.get_or_create(user_id=request.user.id, state='basket')
                objects_created = 0
                for order_item in items_dict:
                    order_item.update({'order': basket.id})
                    serializer = OrderItemSerializer(data=order_item)
                    if serializer.is_valid():
                        try:
                            serializer.save()
                        except IntegrityError as error:
                            return JsonResponse({'Status': False, 'Errors': str(error)})
                        else:
                            objects_created += 1

                    else:

                        JsonResponse({'Status': False, 'Errors': serializer.errors})

                return JsonResponse({'Status': True, 'Создано объектов': objects_created})
        return JsonResponse({'Status': False, 'Errors': 'Не указаны все необходимые аргументы'})
コード例 #3
0
    def post(self, request, *args, **kwargs):
        '''
        добавление товаров в корзину
        '''
        items = request.data.get('items')
        if items:
            try:
                items_dict = load_json(items)
            except ValueError:
                Response({
                    'Status': False,
                    'Errors': 'Неверный формат запроса'
                })
            else:
                cart, _ = Order.objects.get_or_create(user_id=request.user.id,
                                                      status='cart')
                objects_created = 0
                for order_item in items_dict:
                    order_item.update({'order': cart.id})
                    product = Product.objects.filter(
                        external_id=order_item['external_id']).values(
                            'category', 'shop', 'name', 'price')
                    order_item.update({
                        'category': product[0]['category'],
                        'shop': product[0]['shop'],
                        'product_name': product[0]['name'],
                        'price': product[0]['price']
                    })
                    serializer = OrderItemAddSerializer(data=order_item)
                    if serializer.is_valid():
                        try:
                            serializer.save()
                        except IntegrityError as error:
                            return Response(
                                {
                                    'status': False,
                                    'errors': str(error)
                                },
                                status=status.HTTP_400_BAD_REQUEST)
                        else:
                            objects_created += 1
                    else:
                        return Response(
                            {
                                'status': False,
                                'error': serializer.errors
                            },
                            status=status.HTTP_400_BAD_REQUEST)
                return Response({
                    'status': True,
                    'num_objects': objects_created
                })

        return Response(
            {
                'status': False,
                'error': 'Не указаны необходимые поля'
            },
            status=status.HTTP_400_BAD_REQUEST)
コード例 #4
0
    def _listen(url, json, wrap):
        ws = create_connection(url)
        for x in run(ws.recv):
            if isinstance(x, StreamNone):
                continue
            elif not x or isinstance(x, StreamEnd):
                break

            if json:
                x = load_json(x)
            if wrap:
                x = [x]
            yield x
コード例 #5
0
ファイル: input.py プロジェクト: yijxiang/tributary
def ws(url, callback, json=False, wrap=False):
    ws = create_connection(url)
    for x in run(ws.recv):
        if isinstance(x, StreamNone):
            continue
        elif not x or isinstance(x, StreamEnd):
            break

        if json:
            x = load_json(x)
        if wrap:
            x = [x]
        callback(x)
コード例 #6
0
ファイル: views.py プロジェクト: s-suchkov/diplom-dj
 def put(self, request, *args, **kwargs):
     if not request.user.is_authenticated:
         return JsonResponse({'Status': False, 'Error': 'Log in required'}, status=403)
     items_sting = request.data.get('items')
     if items_sting:
         try:
             items_dict = load_json(items_sting)
         except ValueError:
             JsonResponse({'Status': False, 'Errors': 'Неверный формат запроса'})
         else:
             basket, _ = Order.objects.get_or_create(user_id=request.user.id, status='basket')
             objects_updated = 0
             for order_item in items_dict:
                 if type(order_item['id']) == int and type(order_item['quantity']) == int:
                     objects_updated += OrderItem.objects.filter(order_id=basket.id, id=order_item['id']).update(
                         quantity=order_item['quantity'])
             return JsonResponse({'Status': True, 'Обновлено объектов': objects_updated})
     return JsonResponse({'Status': False, 'Errors': 'Не указаны все необходимые аргументы'})
コード例 #7
0
ファイル: client.py プロジェクト: jayvdb/public-dns
    def query(self, hostname, type='A', dnssec=True):
        assert utils.validate_hostname(hostname)
        assert utils.validate_rr_type(type)

        if (type in ('PTR', RR['PTR'])
                and not (hostname.endswith('.in-addr.arpa')
                         or hostname.endswith('.in-addr.arpa.'))):
            hostname = '%s.in-addr.arpa' % (hostname)

        params = self.build_params(hostname, type, dnssec)
        url = '%s?%s' % (self.server, params)
        req = self.session.request('GET',
                                   url,
                                   headers=PublicDNS.default_headers)
        resp = self.session.get_response(req)
        if resp.status != 200:
            raise InvalidHTTPStatusCode
        body = resp.read()
        json = load_json(body)
        obj = utils.populate_response(json)
        return obj
コード例 #8
0
ファイル: input.py プロジェクト: yijxiang/tributary
    def _listen(consumer, json, wrap, interval):
        while True:
            msg = consumer.poll(interval)

            if msg is None:
                continue
            if msg.error():
                if msg.error().code() == KafkaError._PARTITION_EOF:
                    continue
                else:
                    break

            msg = msg.value().decode('utf-8')

            if not msg:
                break
            if json:
                msg = load_json(msg)
            if wrap:
                msg = [msg]
            callback(msg)
コード例 #9
0
def load_partner_info(url=None, file_obj=None, user_id=0):
    """
    Обновление прайса от поставщика
    """

    if not url and not (file_obj and isinstance(file_obj, FileClass)):
        return ResponseBadRequest('Не указаны все необходимые аргументы. Нужно указать url или загрузить файл')
    if file_obj:
        stream = file_obj.read()
        _, extension = os.path.splitext(file_obj.name)
        mime = ''
    else:
        validate_url = URLValidator()
        try:
            validate_url(url)
        except ValidationError as e:
            return ResponseBadRequest(e)

        try:
            response = get(url)
            response.raise_for_status()
        except RequestException as e:
            return ResponseNotFound(e)
        _, extension = os.path.splitext(url)
        stream = response.content
        mime = response.headers.get('content-type')
    try:
        if mime in ('application/yaml', 'text/yaml'):
            data = load_yaml(stream, Loader=Loader)
        elif mime in ('application/json', 'text/json'):
            data = load_json(stream)
        elif mime in ('application/xml', 'text/xml'):
            data = load_xml(stream)
        elif extension == '.yaml':
            data = load_yaml(stream, Loader=Loader)
        elif extension == '.json':
            data = load_json(stream)
        elif extension == '.xml':
            data = load_xml(stream)
        else:
            return ResponseBadRequest('Не опознан формат файла {}', url)
    except (ParseError, YAMLError, ValueError, TypeError) as e:
        return ResponseBadRequest('Некорректный формат файла: {}', e)

    # Check format:
    if not is_dict(data):
        return ResponseBadRequest('Некорректный формат файла: исходные данные должны представлять собой словарь')
    version = data.get('version')
    if not version or version != 'v1.0':
        return ResponseBadRequest('Некорректный формат файла: не поддерживается версия {}', version)
    if not data.get('shop'):
        return ResponseBadRequest('Некорректный формат файла: не задано/некорректное название магазина')
    categories = data.get('categories', [])
    if not is_list(categories):
        return ResponseBadRequest('Некорректный формат файла: категории должны быть заданы в списке')
    for category in categories:
        if not is_dict(category):
            return ResponseBadRequest('Некорректный формат файла: категории должны быть описаны как словарь') 
        if not category.get('name'):
            return ResponseBadRequest('Некорректный формат файла: не задано/некорректное название категории')
    goods = data.get('goods', [])
    if not is_list(goods):
        return ResponseBadRequest('Некорректный формат файла: товары должны быть заданы в списке')
    names = set()
    for item in goods:
        if not is_dict(item):
            return ResponseBadRequest('Некорректный формат файла: товары должны быть описаны как словарь') 
        name = item.get('name')
        category = item.get('category')
        price = to_decimal(item.get('price'))
        price_rrc = to_decimal(item.get('price_rrc'))
        quantity = to_positive_int(item.get('quantity'))
        if not name or not category or None in (price, price_rrc, quantity):
            return ResponseBadRequest('Некорректный формат файла: некорректно указана информация по продукту {}', name)
        if name in names:
            return ResponseBadRequest('Некорректный формат файла: продукты с одинаковым именем')
        names.add(name)
        parameters = item.get('parameters')
        if parameters is not None:
            if not is_list(parameters):
                return ResponseBadRequest('Некорректный формат файла: параметры для продукта {} должны быть заданы как массив полей name и value', name)
            parameter_names = set()
            for entry in parameters:
                if not is_dict(entry):
                    return ResponseBadRequest('Некорректный формат файла: параметр для продукта должен быть описан как словарь (продукт {})', name)
                par_name = entry.get('name')
                if not par_name or entry.get('value') is None:
                    return ResponseBadRequest('Некорректный формат файла: параметры для продукта {} должны иметь не пустые значения name и value', name)
                if par_name in parameter_names:
                    return ResponseBadRequest('Некорректный формат файла: параметры с одинаковым именем у продукта {}', name)
                parameter_names.add(par_name)
    # Actions:
    shop, _ = Shop.objects.get_or_create(name=data['shop'], defaults=dict(user_id=user_id))
    if shop.user_id != user_id:
        return ResponseForbidden('Магазин не принадлежит пользователю')
    for category in data.get('categories', []):
        category_object, _ = Category.objects.get_or_create(name=category['name'])
        category_object.shops.add(shop.id)
        category_object.save()
    ProductInfo.objects.filter(shop_id=shop.id).delete()
    for item in data.get('goods', []):           
        category_object, _ = Category.objects.get_or_create(name=item['category'])
        product, _ = Product.objects.get_or_create(name=item['name'], category_id=category_object.id)

        product_info = ProductInfo.objects.create(product_id=product.id,
                                                  external_id=item.get('id'),
                                                  price=item['price'],
                                                  price_rrc=item['price_rrc'],
                                                  quantity=item['quantity'],
                                                  shop_id=shop.id)
        for entry in item.get('parameters', []):
            parameter_object, _ = Parameter.objects.get_or_create(name=entry.get('name'))
            ProductParameter.objects.create(product_info_id=product_info.id,
                                            parameter_id=parameter_object.id,
                                            value=entry.get('value'))
    return ResponseCreated()