def update(self, request, pk=None): product = Product.objects.get(id=pk) serializer = ProductSerializer(instance=product, data=request.data) serializer.is_valid(raise_exception=True) serializer.save() publish('product_updated', serializer.data) return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
def product_detail(request, pk): """ Gets a single product :param request: :param pk: returns: """ try: product = Product.objects.get(pk=pk) except Product.DoesNotExist: return Response(data={"error": "Product does not exist"}, status=status.HTTP_404_NOT_FOUND) if request.method == "GET": serializer = ProductSerializer(product) return Response(data={"product": serializer.data}, status=status.HTTP_200_OK) elif request.method == "PUT": serializer = ProductSerializer(instance=product, data=request.data) if not serializer.is_valid(): return Response(data={"errors": serializer.errors}, status=status.HTTP_400_BAD_REQUEST) serializer.save() return Response(data={"product": serializer.data}, status=status.HTTP_201_CREATED) elif request.method == "DELETE": serializer = ProductSerializer(instance=product, data={"is_active": False}) serializer.is_valid(raise_exception=True) serializer.save() return Response(data={"message": "Product deleted successfully"}, status=status.HTTP_204_NO_CONTENT)
def update(self, request, pk=None): # /api/products/<str:id> product = Product.objects.get(id=pk) serializer = ProductSerializer(instance=product, data=request.data) serializer.is_valid(raise_exception=True) serializer.save() publish(event_updated, serializer.data) # publishing to RabbitMQ return Response(serializer.data, status=status.HTTP_202_ACCEPTED)
def test_object_is_not_created_without_required_fields(self): """ Tests that product is not created if title, description or price return: """ data1 = self.data.copy() del data1["title"] serializer = ProductSerializer(data=data1) self.assertFalse(serializer.is_valid()) self.assertEqual(serializer.errors.get("title")[0], self.error_message) data2 = self.data.copy() del data2["description"] serializer = ProductSerializer(data=data2) self.assertFalse(serializer.is_valid()) self.assertEqual( serializer.errors.get("description")[0], self.error_message) data3 = self.data.copy() del data3["price"] serializer = ProductSerializer(data=data3) self.assertFalse(serializer.is_valid()) self.assertEqual(serializer.errors.get("price")[0], self.error_message)
def create(self, request): serializer = ProductSerializer(data=request.data) serializer.is_valid(raise_exception=True) serializer.save() publish('product_created', serializer.data) return Response(serializer.data, status=status.HTTP_201_CREATED)
def create(self, request, **kwargs): data = request.data serializer = ProductSerializer(data=data) serializer.is_valid(raise_exception=True) serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED)
def partial_update(self, request, pk=None, **kwargs): product = get_object_or_404(self.queryset, pk=pk) serializer = ProductSerializer(instance=product, data=request.data, partial=True) serializer.is_valid(raise_exception=True) serializer.save() return Response(status=status.HTTP_200_OK)
def ProductList(request): if request.method == 'GET': contacts = Product.objects.all() serializer = ProductSerializer(contacts, many=True) return Response(serializer.data) elif request.method == 'POST': serializer = ProductSerializer(data=request.data) serializer.is_valid(raise_exception=True) product = Product() event = Event() if serializer.data["productid"] == '': product.productid = str(uuid.uuid4())[26:36] event.EventTypeReason = "New product received via API" else: product.productid = serializer.data["productid"] event.EventTypeReason = "Product added via API" product.name = serializer.data["name"] product.slug = slugify(product.name), product.description = serializer.data["description"] product.description_html = misaka.html(product.description), product.coverage_limit = serializer.data["coverage_limit"] product.price_per_1000_units = serializer.data["price_per_1000_units"] product.source = "Post API" product.creator = get_object_or_404(User, pk=serializer.data["creator"]) product.backend_SOR_connection = "Disconnected" product.response = "" product.commit_indicator = "Not Committed" product.record_status = "" product.bulk_upload_indicator = "Y" #Log events event.EventTypeCode = "PRW" event.EventSubjectId = product.productid event.EventSubjectName = product.name event.source = "Post API" event.creator = product.creator event.save() product.save() return Response(serializer.data)
def put(self, request, id, format=None): product = self.get_object(id) serializer = ProductSerializer(product, data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def product_list(request): # GET list of products, POST a new products, DELETE all products if request.method == 'GET': products = Product.objects.all() title = request.GET.get('title', None) if title is not None: products = products.filter(title__icontains=title) tutorials_serializer = ProductSerializer(products, many=True) return JsonResponse(tutorials_serializer.data, safe=False) # 'safe=False' for objects serialization elif request.method == 'POST': tutorial_data = JSONParser().parse(request) tutorial_serializer = ProductSerializer(data=tutorial_data) if tutorial_serializer.is_valid(): tutorial_serializer.save() return JsonResponse(tutorial_serializer.data, status=status.HTTP_201_CREATED) return JsonResponse(tutorial_serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': count = Product.objects.all().delete() return JsonResponse( { 'message': '{} products were deleted successfully!'.format(count[0]) }, status=status.HTTP_204_NO_CONTENT)
def product_detail(request, pk): try: product = Product.objects.get(pk=pk) # find a single product with an id if request.method == 'GET': product_serializer = ProductSerializer(product) return JsonResponse(product_serializer.data) # update a product by the id in the request elif request.method == 'PUT': product_data = JSONParser().parse(request) product_serializer = ProductSerializer(product, data=product_data) if product_serializer.is_valid(): product_serializer.save() return JsonResponse(product_serializer.data) return JsonResponse(product_serializer.errors, status=status.HTTP_400_BAD_REQUEST) # delete a product with the specified id elif request.method == 'DELETE': product.delete() return JsonResponse( {'message': 'Product was deleted successfully!'}, status=status.HTTP_204_NO_CONTENT) except Product.DoesNotExist: return JsonResponse({'message': 'The product does not exist'}, status=status.HTTP_404_NOT_FOUND)
def product_detail(request, pk): # find products by pk (id) try: tutorial = Product.objects.get(pk=pk) except Product.DoesNotExist: return JsonResponse({'message': 'The product does not exist'}, status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': tutorial_serializer = ProductSerializer(tutorial) return JsonResponse(tutorial_serializer.data) elif request.method == 'PUT': tutorial_data = JSONParser().parse(request) tutorial_serializer = ProductSerializer(tutorial, data=tutorial_data) if tutorial_serializer.is_valid(): tutorial_serializer.save() return JsonResponse(tutorial_serializer.data) return JsonResponse(tutorial_serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': tutorial.delete() return JsonResponse({'message': 'Product was deleted successfully!'}, status=status.HTTP_204_NO_CONTENT)
def ready(self): super().ready() if 'runserver' not in sys.argv: return True else: from products.serializers import ProductSerializer call_command('migrate', app_label='products', verbosity=0, interactive=True, database='default') call_command('dumpdata', 'products', output='products.json', verbosity=0, database='storage', format='json') if os.path.exists('products.json'): with open('products.json', 'r') as myfile: data=json.loads(myfile.read()) for item in data: if item['model'] == 'products.product': serializer = ProductSerializer(data=item['fields']) if serializer.is_valid(): serializer.save_to_memory(item['fields']) else: print(serializer.errors)
def product_detail(request, id, format=None): """ Retrieve, update or delete a product instance. """ try: product = Product.objects.get(id=id) except Product.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': serializer = ProductSerializer(product) return Response(serializer.data) elif request.method == 'PUT': if 'ordered' in request.DATA: del request.DATA['ordered'] serializer = ProductSerializer(product, data=request.DATA, partial=True) if serializer.is_valid(): serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': if product.ordered: return Response('Cannot delete ordered product') product.delete() return Response(status=status.HTTP_204_NO_CONTENT)
def product_rud(request, id=None): """ Retrieve, update or delete a product """ try: product = Product.objects.get(pk=id) except Product.DoesNotExist: return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET': if product: serializer = ProductSerializer(product) return Response(serializer.data) else: #id = None product1 = Product.objects.all(id=None) serializer = ProductSerializer(product1, many=True) return Response(serializer.data) elif request.method == 'PUT': serializer = ProductSerializer(product, data=request.data) if serializer.is_valid(): serializer.save() print('&&&&&&&&&&&', serializer.data) return Response(serializer.data) return Response(status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE': product.delete() return Response(status=status.HTTP_204_NO_CONTENT)
def post(self, request): serializer = ProductSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request): serializer = ProductSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def add_product_list(request): if request.method == 'POST': product_data = JSONParser().parse(request) product_serializer = ProductSerializer(data=product_data) if product_serializer.is_valid(): product_serializer.save() return JsonResponse(product_serializer.data, status=status.HTTP_201_CREATED) return JsonResponse(product_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def post(self, request, format=None): product_serializer = ProductSerializer(data=request.data['data']) if product_serializer.is_valid(): product_serializer.save() return Response(product_serializer.data, status=status.HTTP_201_CREATED) return Response(product_serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def create(self, request, *args, **kwargs): product_data = request.data product_amount_data = {'amount': product_data.get('amount', 1)} product_serializer = ProductSerializer(data=product_data) product_serializer.is_valid(raise_exception=True) product_amount_serializer = ProductAmountSerializer( data=product_amount_data) product_amount_serializer.is_valid(raise_exception=True) product_serializer.save() product_amount_serializer.save(product=product_serializer.instance) headers = self.get_success_headers(product_serializer.data) return Response(product_serializer.data, status=status.HTTP_201_CREATED, headers=headers)
def handle(self, *args, **options): json_products = json.loads(urlopen(DATA_SOURCE).read()) for product_json in json_products['products']: product_json['price'] = product_json['price'].replace('.', '').replace(',', '.') product_json['price_old'] = product_json['price_old'].replace('.', '').replace(',', '.') serializer = ProductSerializer(data=product_json) if serializer.is_valid(): serializer.save() else: product = Product.objects.get(pk=int(product_json['id'])) serializer = ProductSerializer(product, data=product_json) if serializer.is_valid(): serializer.save() self.stdout.write(self.style.SUCCESS('Successfully populated database.'))
def mutate(cls, root, info, **kwargs): serializer = ProductSerializer(data=kwargs) if serializer.is_valid(): product = serializer.save() msg = "success" else: msg = serializer.errors product = None return cls(product=product, message=msg, status=201)
def create(self, request): """Create new product""" serializer = ProductSerializer(data=request.data) if serializer.is_valid(): if request.META['SERVER_NAME'] == "testserver": serializer.save_to_memory(serializer.data) else: serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def create(self, request): today = datetime.date.today() todays_records = Product.objects.filter(created__gt=today)[:10] if todays_records.count() > 10: raise APIException("today limit reached") data = request.data.copy() serializer = ProductSerializer(data=data) if serializer.is_valid(): serializer.save() return Response(serializer.data) else: return Response(serializer.errors)
def add_product(data): """ Utility function to add product :param data: JSON object in the format of products model to add in product. :return response status 201 and serialized data, if data passed is valid, otherwise return error with status 400. """ serializer = ProductSerializer(data=data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def update(self, request, sku=None): """Update whole product""" queryset = Product.objects.all() product = get_object_or_404(queryset, sku=sku) serializer = ProductSerializer(product, data=request.data) if serializer.is_valid(): if request.META['SERVER_NAME'] == "testserver": serializer.update_to_memory(product, serializer.validated_data) else: serializer.save() return Response(serializer.data) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def mutate(cls, root, info, product_id, **kwargs): product = Product.objects.get(id=product_id) serializer = ProductSerializer(instance=product, data=kwargs, partial=True) if serializer.is_valid(): serializer.save() msg = "success" else: product = None msg = serializer.errors return cls(product=product, message=msg, status=204)
def product_list(request): if request.method == "GET": products = Product.objects.all() serializer = ProductSerializer(products, many=True) return Response(serializer.data) elif request.method == "POST": serializer = ProductSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def product_list(request): if request.method == 'GET': productList = Product.objects.all() serializer = ProductSerializer(productList, many=True) return JsonResponse(serializer.data, safe=False) elif request.method == 'POST': data = JSONParser().parse(request) serializer = ProductSerializer(data=data) if serializer.is_valid(): serializer.save() return JsonResponse(serializer.data, status=201) return JsonResponse(serializer.errors, status=400)
def test_object_creation(self): """ Test that product can be created with title, description and price as mandatory fields return: """ serializer = ProductSerializer(data=self.data) self.assertTrue(serializer.is_valid()) product = serializer.save() self.assertEqual(product.title, self.title) self.assertEqual(product.description, self.description) self.assertEqual(product.price, self.price) self.assertTrue(product.is_active) self.assertTrue(product.available)
def product_list(request): """ List all products, or create a new product. """ if request.method == 'GET': products = Product.objects.all() serializer = ProductSerializer(products, many=True) return Response(serializer.data) elif request.method == 'POST': serializer = ProductSerializer(data=request.data) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def product_list(request, format=None): """ List all products, or create a new product. """ if request.method == 'GET': products = Product.objects.all() serializer = ProductSerializer(products, many=True) return Response(serializer.data) elif request.method == 'POST': if 'id' in request.DATA: del request.DATA['id'] if 'ordered' in request.DATA: del request.DATA['ordered'] serializer = ProductSerializer(data=request.DATA) if serializer.is_valid(): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
def put(self, request, pk): if int(pk) != int(request.data['id']): return Response( "Product ID %s doesn't match to edit product's %s" % ( str(pk), str(request.data['id']) ), status=status.HTTP_400_BAD_REQUEST ) try: product = Product.objects.get(pk=int(request.data['id'])) except Product.DoesNotExist: serializer = ProductSerializer(data=request.data) code = status.HTTP_201_CREATED else: serializer = ProductSerializer(product, data=request.data) code = status.HTTP_200_OK if serializer.is_valid(): serializer.save() return Response(serializer.data, status=code) return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)