Example #1
0
    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
Example #2
0
    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'))
Example #4
0
    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
Example #5
0
    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
Example #6
0
    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
Example #7
0
    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
Example #8
0
    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
Example #9
0
    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()
Example #10
0
    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
Example #11
0
    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)
Example #12
0
    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
Example #13
0
    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
Example #14
0
    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
Example #16
0
    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'))
Example #18
0
 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
Example #19
0
    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
Example #20
0
    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()
Example #21
0
    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
Example #22
0
    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
Example #23
0
    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)
Example #24
0
    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)
Example #25
0
    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
Example #26
0
    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!
Example #27
0
    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))
Example #28
0
    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'))
Example #30
0
    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