예제 #1
0
def add_product():
    form = AddProductForm()
    if form.validate_on_submit():
        db_sess = db_session.create_session()
        product = Product()
        if form.name.data == '-1':
            product.name = '- 1'
        else:
            product.name = form.name.data
        product.price = form.price.data
        product.user_id = current_user.id

        file = form.photo.data
        filetype = file.filename.split('.')[-1]
        while True:
            filename = ''.join(random.choices(ascii_letters + digits,
                                              k=25)) + f'.{filetype}'
            if not os.path.exists(f'static/uploads/{filename}'):
                break
        product.photo = filename
        file.save(f'static/uploads/{filename}')

        db_sess.add(product)
        db_sess.commit()

        return redirect('/')

    params = {'title': 'Добавление товара', 'form': form}
    return render_template('add_product_form.html', **params)
예제 #2
0
def call_api(bdd):
    """
        Request Open Food Facts API
        Save the results in the database
        param bdd: database
        type bdd: database.Database
        return: None
    """

    headers = {"User-Agent": HEADERS}
    code_set = set()
    print("Mise à jour de la base de données...")
    params = PAYLOAD.copy()

    for index, category in enumerate(CATEGORIES):
        params["tag_0"] = category
        req = requests.get(URL_SEARCH, params=params, headers=headers)
        results_json = req.json()

        cat = Category(bdd, category, index)
        cat.add()

        for product_info in results_json["products"]:
            if not product_info["code"] in code_set:
                code_set.add(product_info["code"])
                pro = Product(bdd)
                pro.cleaner(product_info)
                pro.add()
                bdd.add_assoc_pro_cat(pro, index)
예제 #3
0
def new_products_item():
    form = ProductForm()
    if form.validate_on_submit():
        db_sess = db_session.create_session()
        filename = secure_filename(form.image.data.filename)
        form.image.data.save('uploads/'+filename)
        product = Product(form.title.data, form.content.data,
                          '/img/'+filename, form.price.data,
                          form.is_featured.data)
        db_sess.add(product)
        db_sess.commit()
        return redirect(f"/admin/products")
    return render_template('admin/products_item.html', title='Новый Товар', form=form)
예제 #4
0
def add_product(name, description, price, count, image, form, res):
    db_sess = db_session.create_session()
    imageid = generate_random_trash(10)
    cat = None
    for categories in res:
        if form.category.data in categories:
            cat = categories[0]
    new_product = Product(Name=name,
                          Description=description,
                          Price=price,
                          Count=count,
                          ImageId=imageid,
                          Category=cat)
    with open(f"./static/img/{imageid}.jpg", "wb") as f:
        f.write(image.data.stream.read())
    db_sess.add(new_product)
    db_sess.commit()
예제 #5
0
def product_add():
    form = ProductForm()
    if form.is_submitted():
        db_sess = db_session.create_session()
        count = len(db_sess.query(Product).all())
        product = Product()
        product.title = form.title.data.lower()
        product.content = form.content.data
        product.connection = form.connection.data
        if not form.connection.data.isdigit() and str(
                form.connection.data) != 11 and not str(
                    form.connection.data).startswith('8'):
            return render_template('product.html',
                                   title='Добавление товара',
                                   form=form,
                                   message='Неверный формат ввода телефона')
        product.category = request.form['category']
        f = request.files['file']
        if not f.filename.split('.')[1] in [
                'png', 'jpg', 'bmp', 'ico', 'jpeg', 'gif'
        ]:
            return render_template('product.html',
                                   title='Добавление товара',
                                   form=form,
                                   message='Неверный формат картинки')
        f = f.read()
        with open(f'static/img/file{count}.jpg', 'wb') as photo:
            photo.write(f)
        product.photo = str.encode(f'static/img/file{count}.jpg')
        current_user.product.append(product)
        db_sess.merge(current_user)
        db_sess.commit()
        return redirect('/')
    return render_template('product.html',
                           title='Добавление товара',
                           form=form)
예제 #6
0
    def get_all_products_full(cls):
        raw_products = ProductDBManager.get_all_products_full()
        products = [Product(*raw_product) for raw_product in raw_products]

        return products
예제 #7
0
 def get_available_products(cls):
     raw_products = ProductDBManager.get_available_products()
     products = [Product(*raw_product) for raw_product in raw_products]
     return products
예제 #8
0
 def get_all_products(cls) -> List[Product]:
     raw_products = ProductDBManager.get_all_products()
     products = [Product(*raw_product) for raw_product in raw_products]
     return products
예제 #9
0
 def get_product(product_id: int) -> Product:
     raw_product = ProductDBManager.get_product(product_id)
     return Product(*raw_product)
예제 #10
0
 def get(self) -> List[object]:
     return Product().all()
예제 #11
0
 def get(self, product_id: str = None) -> full_product:
     product = Product().get(product_id=product_id)
     if product is None:
         abort(404, custom='Item does not exist')
     else:
         return product
예제 #12
0
 def post(self) -> full_product:
     new_product = api.payload
     new_product['id'] = str(uuid.uuid4())
     Product().add(product_id=new_product['id'], name=new_product['name'], size=new_product['size'],
                   description=new_product['description'])
     return new_product