def vendor_list(request): """ */vendors/* List all vendors in the database. There is no order to this list, only whatever is returned by the database. """ error = {"status": False, "name": None, "text": None, "level": None, "debug": None} data = {} point, proximity, limit, error = get_lat_long_prox(request, error) if point: vendor_list = Vendor.objects.filter(location__distance_lte=(point, D(mi=proximity)))[:limit] else: vendor_list = Vendor.objects.all()[:limit] if not vendor_list: error = {"status": True, "name": "No Vendors", "text": "No Vendors found", "level": "Information", "debug": ""} serializer = FreshSerializer() data = {"vendors": json.loads(serializer.serialize(vendor_list, use_natural_foreign_keys=True)), "error": error} return HttpResponse(json.dumps(data), content_type="application/json")
def vendors_products(request, id=None): """ */vendors/products/<id>* List all vendors in the database that sell product <id>. There is no order to this list, only whatever is returned by the database. """ error = { 'status': False, 'name': None, 'text': None, 'level': None, 'debug': None } data = {} point, proximity, limit, error = get_lat_long_prox(request, error) try: if point: vendor_list = Vendor.objects.filter( vendorproduct__product_preparation__product__id__exact=id, location__distance_lte=(point, D(mi=proximity)))[:limit] else: vendor_list = Vendor.objects.filter( vendorproduct__product_preparation__product__id__exact=id )[:limit] except Exception as e: error = { 'status': True, 'name': 'Invalid product', 'text': 'Product id is invalid', 'level': 'Error', 'debug': "{0}: {1}".format(type(e).__name__, str(e)) } return HttpResponseNotFound(json.dumps(data), content_type="application/json") if not vendor_list: error = { "status": True, "name": "No Vendors", "text": "No Vendors found for product %s" % id, "level": "Information", "debug": "" } serializer = FreshSerializer() data = { "vendors": json.loads( serializer.serialize(vendor_list, use_natural_foreign_keys=True)), "error": error } return HttpResponse(json.dumps(data), content_type="application/json")
def test_get_lat_long_prox_valid_lat_long_prox(self, mock_request): mock_request = Mock() mock_request.GET = {'lat': '45.6', 'lng': '-123.4', 'proximity': '25'} point = fromstr('POINT (-123.4000000000000057 45.6000000000000014)', srid=4326) expected_result = [point, 25, None, self.base_error] actual_result = get_lat_long_prox(mock_request, self.base_error) self.assertEqual(expected_result[1:], actual_result[1:]) self.assertEqual(expected_result[0].x, actual_result[0].x) self.assertEqual(expected_result[0].y, actual_result[0].y)
def test_get_lat_long_prox_valid_lat_long_prox(self, mock_request): mock_request = Mock() mock_request.GET = {'lat': '45.6', 'lng': '-123.4', 'proximity': '25'} point = fromstr('POINT (-123.4000000000000057 45.6000000000000014)', srid=4326) expected_result = [point, 25, None, self.base_error] actual_result = get_lat_long_prox(mock_request, self.base_error) self.assertEqual(expected_result[1:], actual_result[1:]) self.assertEqual(expected_result[0].x, actual_result[0].x) self.assertEqual(expected_result[0].y, actual_result[0].y)
def test_get_lat_long_prox_valid_lat_no_long(self, mock_request): mock_request = Mock() mock_request.GET = {'lat': '45.6'} expected_error = { "level": "Warning", "status": True, "name": "Bad location", "text": "There was an error with the given " "coordinates 45.6, None", 'debug': 'GEOSException: Error encountered checking Geometry ' 'returned from GEOS C function "GEOSWKTReader_read_r".' } expected_result = [None, 20, None, expected_error] actual_result = get_lat_long_prox(mock_request, self.base_error) self.assertEqual(expected_result, actual_result)
def test_get_lat_long_prox_valid_lat_bad_long(self, mock_request): mock_request = Mock() mock_request.GET = {'lat': '45.6', 'lng': 'kittens'} expected_error = { "level": "Warning", "status": True, "name": "Bad location", "text": "There was an error with the given " "coordinates 45.6, kittens", 'debug': "ValueError: String or unicode input unrecognized " "as WKT EWKT, and HEXEWKB." } expected_result = [None, 20, None, expected_error] actual_result = get_lat_long_prox(mock_request, self.base_error) self.assertEqual(expected_result, actual_result)
def vendors_products(request, id=None): """ */vendors/products/<id>* List all vendors in the database that sell product <id>. There is no order to this list, only whatever is returned by the database. """ error = {"status": False, "name": None, "text": None, "level": None, "debug": None} data = {} point, proximity, limit, error = get_lat_long_prox(request, error) try: if point: vendor_list = Vendor.objects.filter( vendorproduct__product_preparation__product__id__exact=id, location__distance_lte=(point, D(mi=proximity)), )[:limit] else: vendor_list = Vendor.objects.filter(vendorproduct__product_preparation__product__id__exact=id)[:limit] except Exception as e: error = { "status": True, "name": "Invalid product", "text": "Product id is invalid", "level": "Error", "debug": "{0}: {1}".format(type(e).__name__, str(e)), } return HttpResponseNotFound(json.dumps(data), content_type="application/json") if not vendor_list: error = { "status": True, "name": "No Vendors", "text": "No Vendors found for product %s" % id, "level": "Information", "debug": "", } serializer = FreshSerializer() data = {"vendors": json.loads(serializer.serialize(vendor_list, use_natural_foreign_keys=True)), "error": error} return HttpResponse(json.dumps(data), content_type="application/json")
def vendor_list(request): """ */vendors/* List all vendors in the database. There is no order to this list, only whatever is returned by the database. """ error = { 'status': False, 'name': None, 'text': None, 'level': None, 'debug': None } data = {} point, proximity, limit, error = get_lat_long_prox(request, error) if point: vendor_list = Vendor.objects.filter( location__distance_lte=(point, D(mi=proximity)))[:limit] else: vendor_list = Vendor.objects.all()[:limit] if not vendor_list: error = { "status": True, "name": "No Vendors", "text": "No Vendors found", "level": "Information", "debug": "" } serializer = FreshSerializer() data = { "vendors": json.loads( serializer.serialize(vendor_list, use_natural_foreign_keys=True)), "error": error } return HttpResponse(json.dumps(data), content_type="application/json")
def test_get_lat_long_prox_valid_lat_no_long(self, mock_request): mock_request = Mock() mock_request.GET = {'lat': '45.6'} expected_error = { "level": "Warning", "status": True, "name": "Bad location", "text": "There was an error with the given " "coordinates 45.6, None", 'debug': 'GEOSException: Error encountered checking Geometry ' 'returned from GEOS C function "GEOSWKTReader_read_r".' } expected_result = [None, 20, None, expected_error] actual_result = get_lat_long_prox(mock_request, self.base_error) self.assertEqual(expected_result, actual_result)
def test_get_lat_long_prox_valid_lat_bad_long(self, mock_request): mock_request = Mock() mock_request.GET = {'lat': '45.6', 'lng': 'kittens'} expected_error = { "level": "Warning", "status": True, "name": "Bad location", "text": "There was an error with the given " "coordinates 45.6, kittens", 'debug': "ValueError: String or unicode input unrecognized " "as WKT EWKT, and HEXEWKB." } expected_result = [None, 20, None, expected_error] actual_result = get_lat_long_prox(mock_request, self.base_error) self.assertEqual(expected_result, actual_result)