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)
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': 'Не указаны все необходимые аргументы'})
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)
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
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)
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': 'Не указаны все необходимые аргументы'})
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
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)
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()