Exemple #1
0
 def setUp(self):
     self.item = ItemModel(
         id=1,
         name="Brightside",
         description="This is Mr. Brightside -The Killers",
         price=350,
         image="bright-side.jpg",
         continent="Europe",
         in_stock=1,
         class_="Mammal")
Exemple #2
0
def insert(name, price, stock, username):
    if ItemHandler.find_by_name(name, username) is not None:
        raise ItemExists
    else:
        newitem = ItemModel(name, price, stock, username)
        ItemHandler.save_to_db(newitem)
        return True
Exemple #3
0
    def delete(self, item_id, current_user):
        item = ItemModel.find_by_id(item_id, user_id=current_user.id)
        if not item:
            return {"message": "Item not found"}, 404

        item.delete()
        return {}, 200
Exemple #4
0
def update_item(item_id, user_info):
    """
    Update an item, find by its id
    Protected
    :param item_id: item id
    :param user_info: decoded access token
    :return:
    """

    data = request.get_json()

    # Validate json
    schema = ItemSchema(dump_only=('slug', 'id'))
    errors = schema.validate(data)
    if len(errors) > 0:
        raise ValidationError('Post data error', errors)

    # Validate item id
    item = ItemModel.get_user_item(item_id, user_info.get('id'))
    if item is None:
        raise ValidationError('Item not found!')

    # Validate item name
    slug = slugify(data['name'])
    if slug != item.slug:
        valid = ItemModel.validate_slug(slug)

        if not valid:
            raise ValidationError('An item with the same name has already been added. Please try another name.')

    # Validate category id
    category = CategoryModel.find(category_id=data['category_id'])
    if category is None:
        raise ValidationError('Invalid category Id')

    item.name = data['name']
    item.description = data['description']
    item.category_id = data['category_id']
    item.slug = slugify(item.name)

    db.session.add(item)
    db.session.commit()

    item_schema = ItemSchema()
    result = item_schema.dump(item)

    return send_success(result.data)
Exemple #5
0
    def post(self):

        try:

            # Query for the user
            user = UserModel.query.filter_by(
                username=current_user.username).first_or_404()

            # Make a new item
            new_item = ItemModel(**self.args)

            # Relate the item back to the user?
            new_item.user_id = current_user.id

            # Add to db
            db.session.add(new_item)
            db.session.commit()
        except:

            # Make the item
            new_item = ItemModel(**self.args)

            # JSONify the item
            jsonified_item = item_schema.dump(new_item)[0]

            try:
                # Get the guest cart
                guest_cart = session["items"]

                # Add the item
                guest_cart.append(jsonified_item)

                # Update session
                session["items"] = guest_cart

            except:
                # If we need to make a new session instance of items
                session["items"] = []

                # Add the item to the guest cart
                guest_cart = session["items"]
                guest_cart.append(jsonified_item)

                # Set the session equal to the guest cart
                session["items"] = guest_cart

        return jsonify(message='Cart item successfully created!')
Exemple #6
0
def get_items():
    """
    Get a list of items
    :return:
    """

    mode = request.args.get('mode')
    limit = request.args.get('limit')

    if mode == 'latest':
        items = ItemModel.get_last_n_items(limit)
    else:
        items = ItemModel.get_all_items()

    items_schema = ItemSchema(many=True, load_only=('user_id', 'description',))
    result = items_schema.dump(items)

    return send_success(result.data)
Exemple #7
0
 def get_allWishlistItems(user_id):
     pid_list = WishlistModel.getWishListProductIDs(user_id)
     WishlistModel.wishlistitems = []
     for pid in pid_list:
         query = "SELECT Buyable_item_.* FROM Buyable_item_ WHERE Buyable_item_.Product_ID = %s"
         result = MySQLdatabase.ExcecuteSafeSelectQuery(query, pid)
         for i in result:
             WishlistModel.wishlistitems.append(
                 ItemModel(i[0], i[1], i[2], i[4], i[7], i[5], i[3], i[6]))
     return WishlistModel.wishlistitems
 def get_allFavouritesItems(user_id):
     pid_list = FavouritesModel.getFavouritesProductIDs(user_id)
     FavouritesModel.favouritesitems = []
     for pid in pid_list:
         query = "SELECT Buyable_item_.* FROM Buyable_item_ WHERE Buyable_item_.Product_ID = %s"
         result = MySQLdatabase.ExcecuteSafeSelectQuery(query, pid)
         for i in result:
             FavouritesModel.favouritesitems.append(
                 ItemModel(i[0], i[1], i[2], i[4], i[7], i[5], i[3], i[6]))
     return FavouritesModel.favouritesitems
Exemple #9
0
 def setUp(self):
     itemlst = []
     self.Item = ItemModel(id=0,
                           name='testobject',
                           description='im an testobject',
                           price=400,
                           image='idontknowanypath',
                           continent='Europe',
                           in_stock=4,
                           class_='Mammal')
Exemple #10
0
def create_item(user_info):
    """
    Add an item
    Protected
    :param user_info: decoded access token
    :return:
    """

    data = request.get_json()

    # Validate json
    schema = ItemSchema(dump_only=('slug', 'id'))
    errors = schema.validate(data)
    if len(errors) > 0:
        raise ValidationError('Post data error', errors)

    # Validate item name
    valid = ItemModel.validate_slug(slugify(data['name']))

    if not valid:
        raise ValidationError('An item with the same name has already been added. Please try another name.')

    # Validate category id
    category = CategoryModel.find(category_id=data['category_id'])

    if category is None:
        raise ValidationError('Invalid category Id')

    item = ItemModel(name=data['name'], description=data['description'], category_id=data['category_id'],
                     user_id=user_info['id'], slug=slugify(data['name']))

    db.session.add(item)
    db.session.commit()

    item_schema = ItemSchema()
    result = item_schema.dump(item)

    return send_success(result.data)
Exemple #11
0
def get_item(item_id):
    """
    Get details for an item. Find by its id
    :param item_id: item id
    :return:
    """

    item = ItemModel.find(item_id)

    if item is None:
        raise ValidationError('Item not found!')

    item_schema = ItemSchema()
    result = item_schema.dump(item)

    return send_success(result.data)
Exemple #12
0
def delete_item(item_id, user_info):
    """
    Delete an item, find by its id
    Protected
    :param item_id: item id
    :param user_info: decoded access token
    :return:
    """

    # Validate item id
    item = ItemModel.get_user_item(item_id, user_info.get('id'))

    if item is None:
        raise ValidationError('Item not found!')

    db.session.delete(item)
    db.session.commit()

    return send_success(None)
Exemple #13
0
    def put(self, item_id, current_user):
        parser = reqparse.RequestParser()
        parser.add_argument(
            'name',
            type=non_empty_string,
            location='form',
            help="Name of the item (must be a non-empty string)")
        parser.add_argument('description',
                            type=str,
                            help="Description of the item",
                            location='form')
        parser.add_argument('rate', type=int, location='form')
        parser.add_argument('image', type=FileStorage, location='files')
        parser.add_argument('delete_image', type=bool, location='form')
        args = parser.parse_args()
        args = {key: value for key, value in args.items() if value is not None}

        item = ItemModel.find_by_id(item_id, user_id=current_user.id)
        if not item:
            return {"message": "Item not found"}, 404

        if args.pop('delete_image', None):
            item.delete_image()

        if not args.get('image'):
            args.pop('image', None)
        elif not isinstance(args['image'], string_types):
            try:
                image_url = GCBucket.save_to_google_cloud(args['image'])
            except Exception as exc:
                logger.error("Cannot save image. Exception message: {}".format(
                    str(exc)))
                image_url = None
            if image_url:
                args['image'] = image_url
            else:
                args.pop('image', None)

        item.update_fields(save=True, **args)
        return item.json(), 200
Exemple #14
0
    def post(self, current_user):
        parser = reqparse.RequestParser()
        parser.add_argument('name',
                            type=non_empty_string,
                            required=True,
                            location='form',
                            help="Name of the item is required")
        parser.add_argument('description',
                            type=str,
                            help="Description of the item",
                            location='form')
        parser.add_argument('image', type=FileStorage, location='files')
        args = parser.parse_args()

        if not args['image']:
            args.pop('image', None)
        elif not isinstance(args['image'], string_types):
            try:
                image_url = GCBucket.save_to_google_cloud(args['image'])
            except Exception as exc:
                logger.error("Cannot save image. Exception message: {}".format(
                    str(exc)))
                image_url = None
            if image_url:
                args['image'] = image_url
            else:
                args.pop('image', None)

        item = ItemModel.find_by_name(args['name'], user_id=current_user.id)
        if item:
            item.update_fields(rate=item.rate + 1, **args)
        else:
            item = ItemModel(**args, user_id=current_user.id)

        try:
            item.save()
        except:
            return {'message': 'Error writing in database'}, 500
        return item.json(), 201
Exemple #15
0
class TestItem(unittest.TestCase):
    def setUp(self):
        self.item = ItemModel(
            id=1,
            name="Brightside",
            description="This is Mr. Brightside -The Killers",
            price=350,
            image="bright-side.jpg",
            continent="Europe",
            in_stock=1,
            class_="Mammal")

    def test_init(self):
        self.assertEqual(self.item.id, 1)
        self.assertEqual(self.item.name, "Brightside")
        self.assertEqual(self.item.description,
                         "This is Mr. Brightside -The Killers")
        self.assertEqual(self.item.price, 350)
        self.assertEqual(self.item.image, "bright-side.jpg")
        self.assertEqual(self.item.continent, "Europe")
        self.assertEqual(self.item.in_stock, 1)
        self.assertEqual(self.item.class_, "Mammal")

    def test_toDict(self):
        dictionary = {
            "id": 1,
            "name": "Brightside",
            "description": "This is Mr. Brightside -The Killers",
            "price": 350,
            "image": "bright-side.jpg",
            "continent": "Europe",
            "in_stock": 1,
            "class": "Mammal"
        }
        self.assertEqual(self.item.toDict(), dictionary)

    @mock.patch("app.models.ItemModel.MySQLdatabase")
    def test_get_all_items(self, mock_msqldb):
        mock_msqldb.ExcecuteSafeSelectQuery = mock.MagicMock(return_value=[
            (1, "testItem", "This is a test item", 240, 115, "Asia", "Fish",
             "random_route.jpg"),
        ])
        items = ItemModel.get_all_items()
        self.assertEqual(items[0].id, 1)

    #check_Stock --else
    @mock.patch("app.models.ItemModel.MySQLdatabase")
    def test_check_StockTrue(self, mock_msqldb):
        mock_msqldb.ExcecuteSafeSelectQuery = mock.MagicMock(
            return_value=[(100, )])
        test = ItemModel.check_Stock(5, 5)
        self.assertTrue(test)

    # Vraag : 1 functie of 2 funties?
    #check_Stock --if
    @mock.patch("app.models.ItemModel.MySQLdatabase")
    def test_check_StockFalse(self, mock_msqldb):
        mock_msqldb.ExcecuteSafeSelectQuery = mock.MagicMock(
            return_value=[(3, )])
        test = ItemModel.check_Stock(5, 5)
        self.assertFalse(test)

    #update_Stock() -todo

    #all filter functions -todo
    def test_hasId(self):
        self.assertTrue(self.item.hasId("1"))

    def test_hasName(self):
        self.assertTrue(self.item.hasName("BrightSide"))

    def test_hasDescription(self):
        self.assertTrue(
            self.item.hasDescription("This is Mr. Brightside -The Killers"))

    def test_inPriceRange(self):
        self.assertTrue(self.item.inPriceRange(0, 500))

    def test_hasContinent(self):
        self.assertTrue(self.item.hasContinent("Europe"))

    def test_inStock(self):
        self.assertTrue(self.item.inStock(1))

    def test_hasClassification(self):
        self.assertTrue(self.item.hasClassification("Mammal"))
Exemple #16
0
def get_all():
    item = ItemHandler.get_all(token_auth.current_user().username)
    data = ItemModel.to_dict(item)
    return jsonify(data)
Exemple #17
0
    def get(self, item_id, current_user):
        item = ItemModel.find_by_id(item_id, user_id=current_user.id)
        if not item:
            return {"message": "Item not found"}, 404

        return item.json()
Exemple #18
0
from random import randint
from faker import Faker
from app.models import ItemModel
from app import db

if __name__ == '__main__':
    fake = Faker()
    db.create_all()
    for e in range(30):
        f_name = fake.sentence(nb_words=3)[:-1]
        f_description = fake.sentence()
        f_created_date = fake.date_time()
        f_last_edit_date = fake.date_time_between_dates(
            datetime_start=f_created_date)
        f_rate = randint(1, 100)
        item = ItemModel(
            name=f_name,
            description=f_description,
            created_date=f_created_date,
            last_edit_date=f_last_edit_date,
            rate=f_rate,
        )
        db.session.add(item)
    db.session.commit()
    print("Database populated")