Пример #1
0
def create_store() -> Response:

    form = CreateStoreForm(request.form)

    if form.validate_on_submit():
        if request.headers.getlist("X-Forwarded-For"):
            last_ip = request.headers.getlist("X-Forwarded-For")[0]
        else:
            last_ip = request.remote_addr

        store = Store(name=form.data['name'],
                      lat=float(form.data['lat']),
                      lng=float(form.data['lng']),
                      address=form.data['address'],
                      switchable=str2bool(form.data['switchable']),
                      last_ip=last_ip)
        success = store.create()

        if success:
            result = store_schema.dump(store)
            return jsonify(result.data), 201
        else:
            return Response(status=500)
    else:
        logger.error(str(form.errors))
        return Response(status=400)
Пример #2
0
    def post(self):
        args = parser.parse_args()

        new_store = Store(name=args.get('name', None))

        db.session.add(new_store)
        db.session.commit()

        return new_store.to_json(), 201
Пример #3
0
 def post(self):
     args = post_store_parser.parse_args()
     store = Store(
         Name=args['name'],
         Site=args['site'],
         Logo=args['logo']
     )
     db.session.add(store)
     db.session.commit()
     return jsonify({'status': 'OK', 'result': store.to_dict()})
Пример #4
0
def create_store():
    request_data = request.form
    store = Store(request_data['name'], float(request_data['lat']),
                  float(request_data['lng']),
                  request_data['address'], request_data['news'],
                  str2bool(request_data['switchable']), request.remote_addr)
    success = store.create()
    if success:
        return Response(status=201)
    else:
        return Response(status=500)
Пример #5
0
def register():
    if current_user.is_authenticated:
        return redirect(url_for('home'))
    form = RegistrationForm()
    if form.validate_on_submit():
        store = Store(inn=form.inn.data, email=form.email.data)
        store.set_password(form.password2.data)
        db.session.add(store)
        db.session.commit()
        return redirect(url_for('login'))
    return render_template('register.html', form=form)
Пример #6
0
def create_storelist(current_user):
    """
    Create a Store from the sent json data.
    :param current_user: Current User
    :return:
    """
    if request.content_type == 'application/json':
        data = request.get_json()
        name = data.get('name')
        if name:
            user_store = Store(name.lower(), current_user.id)
            user_store.save()
            return response_for_created_store(user_store, 201)
        return response('failed', 'Missing name attribute', 400)
    return response('failed', 'Content-type must be json', 202)
Пример #7
0
def get_store(sid: int) -> Response:

    store = Store.read(sid)
    if store:
        result = store_schema.dump(store)
        return jsonify(result.data), 200
    return Response(status=404)
Пример #8
0
def add_stores():
    name = request.json['name']
    description = request.json['description']
    store_type = request.json['store_type']
    store_type_description = request.json['store_type_description']
    contact = request.json['contact']
    payment = request.json['payment']
    city = request.json['city']
    sector = request.json['sector']
    coverage = request.json['coverage']
    
    store = Store(
        name=name,
        description=description,
        store_type=store_type,
        store_type_description=store_type_description,
        contact=contact,
        payment=payment,
        city=city,
        sector=sector,
        coverage=coverage,
    )
    
    db.session.add(store)
    db.session.commit()

    return store_schema.jsonify(store)
Пример #9
0
def AddStore():
    form = AddStoreForm(request.form)
    if form.validate_on_submit():
        try:
            store_id = current_user.EcwidCreateStore(
                name=form.name.data,
                email=form.email.data,
                password=form.password.data,
                plan=form.plan.data,
                defaultlanguage='ru')
            token = current_user.EcwidGetStoreToken(store_id)['access_token']
        except Exception as e:
            flash('Ошибка API: {}'.format(e))
            return redirect(url_for('main.ShowIndex'))
        store = Store(id=store_id, token=token, user_id=current_user.id)
        db.session.add(store)
        db.session.commit()
        flash('Магазин успешно добавлен.')
        try:
            template = _DEFAULT_STORE_PROFILE
            template['city'] = form.city.data
            current_user.EcwidUpdateStoreProfile(store_id, token, template)
        except Exception as e:
            flash('Ошибка UpdateProfile: {}'.format(e))
    else:
        for error in form.name.errors + form.email.errors + form.password.errors + form.plan.errors + form.city.errors:
            flash(error)
    return redirect(url_for('main.ShowIndex'))
Пример #10
0
def vote_store_channel(sid):

    store = Store.read(sid)
    if store:
        request_data = request.form
        cid = request_data.get('cid', None)

        if not cid:
            return Response(status=400)
        else:
            cid = int(cid)

        idx = -1
        for i, vote in enumerate(store.votes):
            if vote.cid == cid:
                idx = i
                break
        if idx >= 0:
            store.votes[idx].vote_count += 1
        else:
            channel = Channel.read(cid)
            vote = Vote(sid=sid, cid=cid, vote_count=1)
            if channel:
                store.votes.append(vote)
        success = store.update()
        if success:
            result = store_schema.dump(store)
            return jsonify(result.data), 200
        else:
            return Response(status=500)
    return Response(status=404)
Пример #11
0
def delete_store(sid):

    store = Store.read(sid)

    if store:
        store.disable_vote += 1
        vote_sum = sum(channel_vote.vote_count for channel_vote in store.votes)

        store.lastModified = datetime.datetime.now()
        if request.headers.getlist("X-Forwarded-For"):
            store.last_ip = request.headers.getlist("X-Forwarded-For")[0]
        else:
            store.last_ip = request.remote_addr

        if store.disable_vote >= vote_sum * disable_threshold:
            store.enable = False
        success = store.update()
        if success:
            if store.enable:
                result = store_schema.dump(store)
                return jsonify(result.data), 204
            else:
                return jsonify({}), 204
        else:
            return Response(status=500)
    return Response(status=404)
Пример #12
0
def user_with_product():
    new_user = User.create("*****@*****.**", "pass")
    store = Store(name="Test Store", user=new_user)
    product = Product(name='Test Product',
                      description='a product',
                      store=store)
    db.session.add(product)
    db.session.commit()
    yield new_user
Пример #13
0
def get_stores(id):
    page = request.args.get('page', 1, type=int)
    per_page = min(request.args.get('per_page', 10, type=int), 100)
    data = Store.to_collection_dict(Store.query,
                                      g.current_user.id,
                                      page,
                                      per_page,
                                      'api.get_stores')
    return jsonify(data)
Пример #14
0
 def test_to_json(self):
     s = Store(store_id=12,
               store_name='Local Space',
               address_line_one='3452 W Adams St',
               address_line_two='Suite #7',
               city='Chicago',
               state='IL',
               zip='60603')
     db.session.add(s)
     db.session.commit()
     with self.app.test_request_context('/'):
         json_user = s.to_json()
     expected_keys = [
         'url', 'store_id', 'store_name', 'address_line_one',
         'address_line_two', 'city', 'state', 'zip'
     ]
     self.assertEqual(sorted(json_user.keys()), sorted(expected_keys))
     self.assertEqual('/api/v1/users/' + str(s.store_id), json_user['url'])
Пример #15
0
def create_store(name="Example Store", num_products=0):
    store = Store(name=name)
    for index in range(num_products):
        product = Product(name="Product {}".format(index),
                          description="example",
                          store=store)
        db.session.add(product)
    db.session.add(store)
    db.session.commit()
    return store
Пример #16
0
    def post(self):
        try:
            user = check_user_session(request)

            store = request.json

            new_store = Store(name=store['name'],
                              category_id=store['category'],
                              description=store['description'],
                              departament_id=int(store['departament']),
                              email=store['email'],
                              phone_number=store['phone_number'],
                              user=user,
                              user_id=user.id)
            # new_store.user_id = user.id

            if not new_store:
                raise Exception('Failed to create a new Store')

            db.session.add(new_store)
            db.session.commit()

            return {
                'status':
                'ok',
                'store':
                new_store.to_dict(rules=('-user', '-user_id', '-products',
                                         '-category', '-departament')),
                'user':
                user.to_dict(rules=('-password', '-id', '-comments', '-store',
                                    '-likes'))
            }, 201
        except jwt.ExpiredSignatureError as e:
            return {'status': 'fail', 'message': str(e)}, 401
        except IntegrityError as e:
            return {
                'status': 'fail',
                'message': 'A user can only have a store'
            }, 400
        except Exception as e:
            print(str(e))
            return {'status': 'fail', 'message': str(e)}, 400
Пример #17
0
 def test_post_new_cart(self):
     with self.app.app_context():
         res = self.client.post('/cart/store/1')
         self.assertEqual(404, res.status_code)
         store = Store(name='Test Store')
         db.session.add(store)
         db.session.commit()
         res = self.client.post(f'/cart/store/{store.id}')
         self.assertEqual(201, res.status_code)
         self.assertIn(b'id', res.data)
         self.assertIn(b'store_id', res.data)
         self.assertTrue(self.is_json_content_type(res.content_type))
Пример #18
0
 def test_get_product_availability_at_store(self):
     with self.app.app_context():
         res = self.client.get('store/1/product')
         self.assertEqual(404, res.status_code)
         store = Store(name='TestStore')
         db.session.add(store)
         db.session.commit()
         res = self.client.get(f'store/{store.id}/product')
         self.assertEqual(200, res.status_code)
         self.assertTrue(self.is_json_content_type(res.content_type))
         self.assertIn(b'id', res.data)
         self.assertIn(b'name', res.data)
         self.assertIn(b'products', res.data)
Пример #19
0
def setup():
    with app.app_context():
        db.create_all()
        user = User.create("*****@*****.**", "test")
        db.session.add(user)
        store = Store(name="Test store", user=user)
        for i in range(2):
            prod = Product(name='Test Book v{}'.format((1 + i) * 2),
                           description='Book #{} in the series'.format(i + 1),
                           price_cents=10000 * (i + 1),
                           store=store)
            db.session.add(prod)
        db.session.commit()
Пример #20
0
def authenticated_request(client):
    new_user = User.create("*****@*****.**", "examplepass")
    store = Store(name="Test Store", user=new_user)
    db.session.add(store)
    db.session.commit()

    response = client.post(url_for('user.login'),
                           data={
                               'email': "*****@*****.**",
                               'password': "******"
                           },
                           follow_redirects=True)

    yield new_user
Пример #21
0
 def test_get_product_information_from_store(self):
     with self.app.app_context():
         res = self.client.get('/product/1/store/1', follow_redirects=True)
         self.assertEqual(404, res.status_code)
         product = Product(name='Test Product', price=10)
         store = Store(name='Test Store')
         link = ProductStoreLink(product=product, stock=5)
         store.products.append(link)
         db.session.add(store)
         db.session.commit()
         res = self.client.get(f'/product/{product.id}/store/{store.id}',
                               follow_redirects=True)
         self.assertEqual(200, res.status_code)
         self.assertTrue(self.is_json_content_type(res.content_type))
Пример #22
0
def dummy():
    # Create a user if they do not exist.
    user = User.query.filter_by(email="*****@*****.**").first()
    if not user:
        user = User("*****@*****.**", "123456")
        user.save()

    for i in range(100):
        # Add stores to the database
        store = Store(faker.name.industry(), user.id)
        store.save()

    for stor in range(1000):
        # Add items to the store
        stor = Store.query.filter_by(id=randint(1,
                                                Store.query.count() -
                                                1)).first()
        item = StoreItem(faker.name.company_name(), faker.lorem_ipsum.word(),
                         buckt.id)
        db.session.add(item)
        try:
            db.session.commit()
        except IntegrityError:
            db.session.rollback()
Пример #23
0
 def test_add_product_to_cart(self):
     with self.app.app_context():
         res = self.client.post('/cart/1/product/1')
         self.assertEqual(404, res.status_code)
         store = Store(name='Test Store')
         product = Product(name='Test Product', price=10)
         db.session.add(store)
         db.session.add(product)
         db.session.commit()
         cart = Cart(store_id=store.id)
         db.session.add(cart)
         db.session.commit()
         res = self.client.post(f'/cart/{cart.id}/product/{product.id}')
         self.assertEqual(200, res.status_code)
         self.assertIn(b'There is no stock of this product at this store',
                       res.data)
         self.assertTrue(self.is_json_content_type(res.content_type))
Пример #24
0
def register():
    if current_user.is_authenticated:
        flash("You are already logged in", 'warning')
        return redirect(url_for("products.index"))

    form = SignupForm()
    if form.validate_on_submit():
        user = User.create(form.email.data, form.password.data)
        store = Store(name=form.store_name.data, user=user)
        db.session.add(store)
        db.session.commit()

        login_user(user)
        send_pretty_welcome_message(user)

        flash("Registered succesfully.", "success")
        return redirect(session.get('after_login') or url_for("products.index"))
    return render_template("users/register.html", form=form)
Пример #25
0
def additem():                                              # Add an item to store
    if current_user.is_anonymous:                           # Parameters: None
        return redirect(404)                                # Returns: store_add.html file and passes in the add_item_to_store form
    else:                                                   # Purpose: To add a new item to the store but you must be an admin to do so,
        for i in User.query.all():                          # it checks this before displaying the page
            if i.username == current_user.username:
                if i.accesslevel >= 2:
                    form = add_item_to_store()
                    if form.validate_on_submit():
                        for item in Store.query.all():
                            print(item.id, "HE")
                            print(form.item_id.data)
                            if int(item.id) == int(form.item_id.data):
                                flash("That ID Is In Use")
                                return redirect(url_for("additem"))
                            item = Store(
                                id=form.item_id.data,
                                name=form.name.data,
                                image=form.image.data,
                                back_image=form.back_image.data,
                                cat=form.catagory.data,
                                price=form.price.data,
                                sale=form.sale.data,
                                cost=0
                            )
                            db.session.add(item)
                            db.session.commit()
                            item = stock(
                                itemid=form.item_id.data,
                                size=form.size.data,
                                stock=form.stock.data,
                                colour=form.colour.data,
                                bought=0
                            )
                            db.session.add(item)
                            db.session.commit()
                            flash("Item Added To The Store")
                            return redirect(url_for("admin"))
                        else:
                            print(form.errors)

                else:
                    return redirect(url_for(404))
    return render_template("store/store_add.html", title="Admin-", form=form)
Пример #26
0
def edit_store(store_id):
    request_data = request.form

    s = Store.get_by_id(store_id)
    s.name = request_data['name']
    s.lat = float(request_data['lat'])
    s.lng = float(request_data['lng'])
    s.address = request_data['address']
    s.news = request_data['news']
    s.switchable = str2bool(request_data['switchable'])
    s.lastModified = datetime.datetime.now()
    s.ip = request.remote_addr

    success = s.update()

    if success:
        return Response(status=204)
    else:
        return Response(status=500)
Пример #27
0
def get_store_list() -> Response:

    try:
        args = request.args
        lat = args['lat']
        lng = args['lng']
        name = args.get('name', '')
        radius = args.get('radius', 5000.0)
        page = args.get('page', 1)
        store_list, count = Store.read_list(lat=lat,
                                            lng=lng,
                                            name=name,
                                            radius=radius,
                                            page=page)
        result = stores_schema.dump(store_list)
        return jsonify({'result': result.data, 'total': count}), 200
    except KeyError:
        return Response(status=400)
    except Exception as e:
        print(e)
        return Response(status=500)
Пример #28
0
 def test_apply_voucher_to_cart(self):
     with self.app.app_context():
         res = self.client.get('/cart/1/voucher/1')
         self.assertEqual(404, res.status_code)
         store = Store(name='Test Store')
         db.session.add(store)
         db.session.commit()
         today = date.today()
         voucher = Voucher(code='TESTCODE',
                           store_id=store.id,
                           start_date=today,
                           end_date=today + timedelta(days=5))
         cart = Cart(store_id=store.id)
         db.session.add(cart)
         db.session.add(voucher)
         db.session.commit()
         res = self.client.get(f'/cart/{cart.id}/voucher/{voucher.id}')
         self.assertEqual(200, res.status_code)
         self.assertIn(b'original_price', res.data)
         self.assertIn(b'discounted_price', res.data)
         self.assertTrue(self.is_json_content_type(res.content_type))
Пример #29
0
 def test_remove_product_from_cart(self):
     with self.app.app_context():
         res = self.client.delete('/cart/1/product/1')
         self.assertEqual(404, res.status_code)
         store = Store(name='Test Store')
         product = Product(name='Test Product', price=10)
         link = ProductStoreLink(product=product, stock=5)
         store.products.append(link)
         db.session.add(store)
         db.session.add(product)
         db.session.commit()
         cart = Cart(store_id=store.id)
         link = CartProductLink(product=product, units=2)
         cart.products.append(link)
         db.session.add(cart)
         db.session.commit()
         res = self.client.delete(f'/cart/{cart.id}/product/{product.id}')
         self.assertEqual(200, res.status_code)
         self.assertIn(b'id', res.data)
         self.assertIn(b'store_id', res.data)
         self.assertIn(b'products', res.data)
         self.assertTrue(self.is_json_content_type(res.content_type))
Пример #30
0
    def test_get_item(self):
        item_store = ItemStore(item_id=12, store_id=14)
        item = Item(item_id=12,
                    item_name='hat',
                    item_description='goes on head',
                    category='clothing',
                    artisan_id=14)
        store = Store(store_id=12,
                      store_name='Local Space',
                      address_line_one='3452 W Adams St',
                      address_line_two='Suite #7',
                      city='Chicago',
                      state='IL',
                      zip='60603')
        db.session.add(item_store)
        db.session.add(item)
        db.session.add(store)
        db.session.commit()

        expected_keys = ['item', 'stores']
        self.assertEqual(sorted(get_item(item.item_id).keys()),
                         sorted(expected_keys))