def post(self, name): if ItemModel.find_by_name(name): return { 'message': "An item with name '{}' already exisits.".format(name) }, 400 #data = request.get_json(force=True) data = Item.parser.parse_args() #item = ItemModel(name, data['price'], data['store_id']) item = ItemModel(name, **data) try: item.save_to_db() except: return { "message": "An error occured inserting the item" }, 500 #Internal server error return item.json(), 201 #201 for suces sdully created
def put(self, name): data = Item.parser.parse_args() # item = next((item for item in items if item['name'] == name), None) # if item is None: # item = {'name' : name, 'price' : data['price']} # items.append(item) # else: # item.update(data) # return item item = ItemModel.find_by_name(name) if item is None: item = ItemModel(name, **data) else: item.price = data['price'] Item.store_id = data['store_id'] item.save_to_db() return item.json()
def test_crud_alex(self): with self.app_context(): store = StoreModel('test') item = ItemModel('test', 19.99, 1) store.save_to_db() self.assertIsNone( ItemModel.find_by_name('test'), "Found an item with name {}, but expected not to.".format( item.name)) item.save_to_db() self.assertIsNotNone(ItemModel.find_by_name('test')) item.delete_from_db() store.delete_from_db() self.assertIsNone(ItemModel.find_by_name('test'))
def post(self, name): if ItemModel.find_by_name(name): return {'message': 'The item already exist'}, 400 data = Item.parser.parse_args() item = ItemModel( name, data['price'], data['store_id']) #using the ItemModel __init__ method try: item.save_to_db( ) # inserting using __init__ values (check for item in package models) except: return { 'message': 'An error occured while inserting the item' }, 500 #internal server error return item.json(), 201
def post(self, name): """POST /item route.""" if ItemModel.find_by_name(name): return ( { "message": f"An item with name '{name}' already exists." }, 400, ) data = Item.parser.parse_args() item = ItemModel(name, **data) try: item.save_to_db() except Exception as e: return {"message": "An error occured inserting the item."}, 500 return item.json(), 201
def post(self, name): if ItemModel.find_by_name(name): return { 'message': "An item with name '{}' already exists.".format(name) }, 400 # data = request.get_json() data = Item.parser.parse_args() item = ItemModel(name, data['price'], data['store_id']) try: item.save_to_db() except: return { "message": "An error occurred inserting the item." }, 500 # Internal Server Error return item.json(), 201
def post(self, name): if ItemModel.find_by_name(name): return { 'message': "An item with name '{}' already exists.".format(name) }, 400 #we deal with errors then Whatever we need next data = Item.parser.parse_args() item = ItemModel(name, **data) try: item.save_to_db() except: return { 'message': "An error has occurred inserting the item." }, 500 # Internal Server Error return item.json(), 201
def post(self, name): if ItemModel.find_by_name(name): return { 'message': "An item with name '{}' already exists".format(name) }, 400 # JSON payload # force=True => don't need content type header # silent=True => returns None data = Item.parser.parse_args() item = ItemModel(name, **data) try: item.save_to_db() except: return { "message": "An error occurred inserting the item." }, 500 #Internal server error return item.json(), 201
def put(self, name): data = Item.parser.parse_args() # Once again, print something not in the args to verify everything work item = ItemModel.find_by_name(name) if item is None: try: item = ItemModel(name, **data) except: return {'message': 'An error occured during item insert.'}, 500 else: try: item.price = data['price'] except: return {'message': 'An error occured during item update.'}, 500 item.save_to_db() return item.json()
def post(self, name): if ItemModel.find_by_name(name): return {'message': '{} already exists'.format(name)}, 400 data = self.parser.parse_args() # We can now create an item object, # instead of a manual dictionary item = ItemModel(name, data['price'], data['store_id']) try: # And instead of calling the class # again (as with a @classmethod), # we use a regular method on the # new `item` object item.save_to_db() except: return {'message': 'An error occurred inserting the item'}, 500 # Return the dictionary, not the object return item.json(), 201
def test_json_with_item(self): """ This method will test the json file format """ with self.app_context(): store = StoreModel('test_store_1') item = ItemModel('Head', 99.9, 1) store.save_to_db() item.save_to_db() expected = { 'name': 'test_store_1', 'items': [{'name': 'Head', 'price': 99.9, }], } self.assertDictEqual(store.json(), expected)
def post(self, name): if ItemModel.find_by_name(name): # self = Item return { 'message': "An item with the name '{}' already exists".format(name) }, 400 # 400 = "bad request" code data = Item.parser.parse_args() item = ItemModel( name, data['price']) # not JSON object anymore, but ItemModel object try: item.save_to_db() except: return { "message": "An error occurred while inserting the item." }, 500 return item.json(), 201
def post(self, name): if ItemModel.find_by_name( name ): # self = Items, It doesn't really matter, either is fine return { 'message': 'An items with name {} already exists'.format(name) }, 400 data = Item.parser.parse_args() item = ItemModel(name, **data) try: item.save_to_db() except: return { "message": "An error occurred inserting the item." }, 500 #internal server error return item.json(), 201
def test_store_list_with_items(self): with self.app() as client: with self.app_context(): StoreModel('test').save_to_db() ItemModel('test_name', 19.99, 1).save_to_db() response = client.get('/stores') self.assertEqual(response.status_code, 200) self.assertDictEqual( { 'stores': [{ 'name': 'test', 'items': [{ 'name': 'test_name', 'price': 19.99 }] }] }, json.loads(response.data))
def post(self, name): # If an item already exists, return an error if ItemModel.find_by_name(name): return { 'message': f'An item with name {name} already exists.' }, 400 # Parse the response data = Item.parser.parse_args() item = ItemModel(name, data['price'], data['store_id']) try: # Add the new item to the database item.save_to_db() except: # Catch any errors return { "message": "An error occured while inserting the item" }, 500 # Internal server error # Let the application know it was successful with the 201 code, meaning a resource was created return item.json(), 201
def post(self, name): if ItemModel.find_by_name(name): return { 'message': 'An item with that name already exists.'.format(name) }, 400 #This will get the JSON payload from a request but only if it meets parse args arguments. data = Item.parser.parse_args() item = ItemModel(name, data['price'], data['store_id']) #call method for inserting items try: item.save_to_db() except: #In case the item insertion fails. return { 'message': 'An error occurred inserting the item.' }, 500 #Internal Server Error #This returns the code for created item return item.json(), 201
def test_crud(self): with self.app_context: item = ItemModel('Piano', 20.00) # assert item does not exit in db self.assertIsNone( ItemModel.find_by_name('Piano'), f'Error: found item {item.name} in db, but expected not to.') item.save_to_db() # assert item does exit self.assertIsNotNone( ItemModel.find_by_name('Piano'), f'Error: did not find item {item.name} in db, but expected to.' ) item.delete_from_db() self.assertIsNone(ItemModel.find_by_name('Piano'))
def put(self, name): data = Item.parser.parse_args() item = ItemModel.find_by_name(name) if item is None: try: item = ItemModel(name, data['price'], data['store_id']) except: return { "message": "An error occurred while inserting the item" }, 500 else: try: item.price = data['price'] item.store_id = data['store_id'] except: return { "message": "An error occurred while updating the item" }, 500 item.upsert() return item.json(), 200
def post(self, name): if ItemModel.find_by_name(name): # it can also be Item.find_by_name... return { 'message': "An item with name '{}' already exists.".format(name) }, 400 # 400 is bad request data = Item.parser.parse_args() #item = ItemModel(name, data['price'], data['store_id']) item = ItemModel(name, **data) try: item.save_to_db() except: return { 'message': "An error occured inserting the item." }, 500 #internal server error return item.json(), 201 # code for created
def put(self, name): data = Item.parser.parse_args() item = ItemModel.find_by_name(name) # if the item does not exist, insert the item to db if item: item.price = data['price'] item.store_id = data['store_id'] try: item = ItemModel(name, **data) except: return { 'message': 'an error occurs when trying to insert the item' }, 500 item.save_to_db() return item.json()
def post(self, name): if ItemModel.find_by_name(name): return { 'message': "An item with name '{0}' already exists.".format(name) }, 400 data = __class__.parser.parse_args() item = ItemModel(name, **data) #(name, data['price'], data['store_id']) try: item.save_to_db() except: return { 'message': 'An error occurred inserting the item' }, 500 # internal server error return item.json(), 201
def post(self, name): result = ItemModel.find_by_name(name) if result: return {'message': f'item with name {name} already exists '}, 400 data = Item.parser.parse_args( ) # data here is a json object with only 'price' element item = ItemModel(name, **data) try: item.save_to_db() except: #http code 500 - internal server error return { 'message': 'an error occurs when trying to insert the item' }, 500 return item.json(), 201
def test_pagination_first_page(self): with self.app() as c: with self.app_context(): StoreModel("Test1").save_to_db() [ ItemModel("Test" + str(x), 20 + x, 1).save_to_db() for x in range(21) ] r = c.get("/items/1") self.assertEqual( json.loads(r.data)["items"][-1]["name"], "Test19") self.assertEqual(len(json.loads(r.data)["items"]), 20) self.assertEqual( json.loads(r.data)["page info"]["next page"], 2) self.assertEqual( json.loads(r.data)["page info"]["total items"], 21) self.assertEqual(json.loads(r.data)["page info"]["pages"], 2)
def post(self, name): if ItemModel.find_by_name(name): return { 'message': f"An item with name '{name}' already exists" }, 400 # Status code for bad request data = Item.parser.parse_args() item = ItemModel(name, data['price'], data['store_id']) # or ItemModel(name, **data) try: item.save_to_db() except: return { "message": "An error occurred inserting the item." }, 500 # Status code internal service error return item.json( ), 201 # Status code 201 for created, 202 is accepted (delaying the creation)
def post(self, name): if ItemModel.find_by_name( name ): # protoze find_by_name je classmethod je mozne to napsat take jako Item.find_by_item, v tomto pripade je to jedno return {'message': f"An item with name {name} already exists"}, 400 data = Item.parser.parse_args( ) #request.get_json(silent=True) silent=True returns None if the data are in bad format or are not there. Mozno take pouzit force=True menas we dont need content type header. It will look at the data and guess the data type item = ItemModel( name, data['price'], data['store_id'] ) # data['price'], data['store_id'] muzu zapsat jako **data try: item.save_to_db() except: return { "message": "An error occurred inserting the item" }, 500 # internal server error return item.json(), 201 # 201 status code for created
def post(self, name): if ItemModel.find_by_name(name): return { 'message': "An item with name '{}' already exists.".format(name) }, 400 data = Item.parser.parse_args() item = ItemModel(name, **data) try: item.save_to_db() except: return { "message": "An error occurred inserting the item." }, 500 #internal server error return item.json(), 201 #always return JSON!
def test_put_update_item(self): with self.app() as client: with self.app_context(): StoreModel('test').save_to_db() ItemModel('test', 5.99, 1).save_to_db() self.assertEqual(ItemModel.find_by_name('test').price, 5.99) resp = client.put('/item/test', data={ 'price': 17.99, 'store_id': 1 }) self.assertEqual(resp.status_code, 200) self.assertEqual(ItemModel.find_by_name('test').price, 17.99) self.assertDictEqual({ 'name': 'test', 'price': 17.99 }, json.loads(resp.data))
def put(self, name): data = Item.parser.parse_args() item = ItemModel.find_by_name(name) # here we pass the name into ItemModel calss of item.py in models package and it return value as object if item is None: # is None try: item = ItemModel(name, data["price"], data["store_id"]) #ItemModel.insert(update_item) ##data["price"], data["store_id"]=**data except: return {"message":"Updating error. Please see the update and put method."}, 500 else: try: item.price = data["price"] except: return {"message":"Updating error. Please see the update and put method."}, 500 item.save_to_db() return item.json()
def test_crud(self): with self.app_context(): StoreModel('test').save_to_db() item = ItemModel('test', 19.99, 1) #Testa att objekt inte finns i databas ännu self.assertIsNone( ItemModel.find_by_name('test'), "Found an item with name {}, but expected not to.".format( item.name)) item.save_to_db() #Testa att objektet nu finns i databasen self.assertIsNotNone(ItemModel.find_by_name('test')) item.delete_from_db() #Testa att det fungerade att radera från databasen self.assertIsNone(ItemModel.find_by_name('test'))
def post(self, name): # Item. instead of self. because parser belongs to class itself and # not its instance if ItemModel.find_by_name(name): return { 'message': 'An item with name {} already exists'.format(name) }, 400 data = Item.parser.parse_args() item = ItemModel(name, data['price'], data['store_id']) try: item.save_to_db() except: return {"message": "An error occurred inserting the item"}, 500 return item.json(), 201