Beispiel #1
0
def edit_category():
    if not request.form['id'] == request.form[
            'name'] and Category.query.filter_by(
                name=request.form['name']).count():
        flash('Category already exists')
        return redirect(request.form['currentURL'])

    c = Category.query.filter_by(name=request.form['id']).first()
    c_p = Painting.query.filter_by(category_name=c.name)
    c.name = request.form['name']
    c.header = request.form['header']
    c.description = request.form['description']
    c.slug = slugify(request.form['name'])
    # Update foreign key relation
    for p in c_p:
        p.category_name = c.name
    # Check if thumbsize changed
    if c.thumbsize_large != (True if request.form.get('thumbsize') else False):
        c.thumbsize_large = not c.thumbsize_large
        # Update thumbnails
        c_p = Painting.query.filter_by(category_name=c.name)
        for p in c_p:
            Painting.makeThumbnail(
                os.path.join(app.config['MEDIA_ROOT'], 'image', p.filename),
                os.path.join(app.config['MEDIA_ROOT'], 'thumbnail',
                             p.thumbname), c.thumbsize_large)
    db.session.commit()
    flash('success')
    return redirect(url_for('paintings', category_slug=c.slug))
Beispiel #2
0
def upload_painting():
    # Collect info and initalize Painting
    image = request.files['file']
    if not allowed_file(image.filename):
        flash(".jpg files only")
        return redirect(request.form['currentURL'])
    category = Category.query.filter_by(name=request.form['category']).first()

    new_painting = Painting(
        name=request.form['name'],
        category=category,
        medium=request.form['medium'],
        dimensions=request.form['dimensions'],
        year=request.form['year'],
        filename=secure_filename(image.filename),
        for_sale=True if request.form.get('for_sale') else False)
    # Upload File (Use new_painting filename since it would've updated for uniquness)
    image.save(
        os.path.join(app.config['MEDIA_ROOT'], 'image', new_painting.filename))
    # Make thumbnail
    Painting.makeThumbnail(
        os.path.join(app.config['MEDIA_ROOT'], 'image', new_painting.filename),
        os.path.join(app.config['MEDIA_ROOT'], 'thumbnail',
                     new_painting.thumbname),
        category.thumbsize_large if category else False,
    )
    # Update database
    db.session.add(new_painting)
    db.session.commit()
    flash("success")
    return redirect(request.form['currentURL'])
Beispiel #3
0
    def test_user_inputs_file_with_not_unique_filename(self):
        p1 = Painting(name="test1", filename="test.jpg")
        db.session.add(p1)
        db.session.commit()
        p2 = Painting(name="test2", filename="test.jpg")
        db.session.add(p2)
        db.session.commit()

        p1 = Painting.query.get(1)
        p2 = Painting.query.get(2)
        self.assertNotEqual(p1.filename, p2.filename)
Beispiel #4
0
    def test_thumbnails_are_made_properly_for_tall_images(self):
        Painting.makeThumbnail(
            os.path.join(app.config['MEDIA_ROOT'], 'test_portrait_image.jpg'),
            os.path.join(app.config['MEDIA_ROOT'], 'test_portrait_thumb.jpg'))

        with open(
                os.path.join(app.config['MEDIA_ROOT'],
                             'test_portrait_thumb.jpg'), 'rb') as img_file:
            with Image.open(img_file) as portrait_thumb:
                _, _, width, height = portrait_thumb.getbbox()
                portrait_thumb.close()

                self.assertAlmostEqual(width, THUMBNAIL_SIZE, delta=1)
                self.assertAlmostEqual(height, THUMBNAIL_SIZE, delta=1)
Beispiel #5
0
def add_new_painting(data):
    uuid = data.get('uuid')
    name = data.get('name')
    detail = data.get('detail')
    wall_id = data.get('wall_id')
    x_pos = data.get('x_pos')
    y_pos = data.get('y_pos')
    z_pos = data.get('z_pos')
    user_id = get_user_id(uuid=uuid)
    if user_id:
        painting = Painting(wall_id=wall_id, name=name, detail=detail, x_pos=x_pos, y_pos=y_pos, z_pos=z_pos)
        painting.save()
        return generate_painting_created_success_response(painting)
    else:
        return generate_user_not_login_response()
Beispiel #6
0
    def test_ajax_edit_category_changes_thumbnail_sizes(self):
        with open(
                os.path.join(app.config['MEDIA_ROOT'], 'thumbnail',
                             'test.thumbnail.jpg'), 'rb') as img_file:
            with Image.open(img_file) as thumb:
                large = thumb.getbbox()[2] > 200
        c = Category(name="testcat", thumbsize_large=large)
        db.session.add(c)
        db.session.commit()
        p = Painting(name="test",
                     filename="test.jpg",
                     category=Category.query.get(1))
        db.session.add(p)
        db.session.commit()

        self.app.post('/update/categories/details',
                      data=dict(id='testcat',
                                name='new+',
                                header='head+',
                                description='',
                                thumbsize=None if large else 'large'))

        with open(
                os.path.join(app.config['MEDIA_ROOT'], 'thumbnail',
                             'test.thumbnail.jpg'), 'rb') as img_file:
            with Image.open(img_file) as thumb:
                if large:
                    self.assertLess(thumb.getbbox()[2], 200)
                else:
                    self.assertGreater(thumb.getbbox()[2], 200)
Beispiel #7
0
    def test_category_with_large_thumbnails(self):
        c = Category(name='testname', thumbsize_large=True)
        db.session.add(c)
        db.session.commit()
        c = Category.query.get(1)
        p = Painting(name='testpaint', category=c, filename='test.jpg')

        response = self.app.get('/paintings/testname')
        self.assertIn(b'thumbnail-large', response.data)
Beispiel #8
0
    def test_relationship_to_category(self):
        cat = Category(name="test_cat")
        p = Painting(name="test_paint", category=cat, filename='')
        db.session.add(cat)
        db.session.add(p)
        db.session.commit()

        cat = Category.query.filter_by(name="test_cat").first()
        cats_painting = cat.paintings[0]
        p = Painting.query.filter_by(name="test_paint").first()
        self.assertEqual(cats_painting.name, p.name)
        self.assertEqual(p.category.name, cat.name)
Beispiel #9
0
 def test_ajax_edit_category_updates_foreign_key_relation(self):
     self.createCategories(1)
     c = Category.query.get(1)
     db.session.add(Painting(name="tp", filename='', category=c))
     db.session.commit()
     self.app.post('/update/categories/details',
                   data=dict(
                       id='cat_test_1',
                       name='new_name',
                       header='',
                       description='descr',
                   ))
     self.assertEqual(Painting.query.get(1).category_name, 'new_name')
Beispiel #10
0
    def test_adding_painting_adds_to_paintings_page(self):
        p = Painting(name="name",
                     medium="medium",
                     dimensions="dimensions",
                     year="12345",
                     filename="test.jpg")
        db.session.add(p)
        db.session.commit()

        response = self.app.get('/paintings/')
        self.assertIn(b"name", response.data)
        self.assertIn(b"medium", response.data)
        self.assertIn(b"dimensions", response.data)
        self.assertIn(b"12345", response.data)
        self.assertIn(b'test.jpg', response.data)
Beispiel #11
0
    def test_category_ordering_works(self):
        c = Category(name='testcat')
        db.session.add(c)
        db.session.commit()
        c = Category.query.get(1)
        p1 = Painting(name='paint1',
                      category=c,
                      category_order=2,
                      filename='test.jpg')
        db.session.add(p1)
        db.session.commit()
        p2 = Painting(name='paint2',
                      category=c,
                      category_order=1,
                      filename='test.jpg')
        db.session.add(p2)
        db.session.commit()

        response = self.app.get('/paintings/testcat')
        p1Index = response.data.find(bytes(
            Painting.query.get(1).name, 'utf-8'))
        p2Index = response.data.find(bytes(
            Painting.query.get(2).name, 'utf-8'))
        self.assertLess(p2Index, p1Index)
Beispiel #12
0
    def test_ajax_request_update_painting_details(self):
        p = Painting(name="test1",
                     medium="m1",
                     dimensions="d1",
                     year="y1",
                     filename="test1.jpg")
        db.session.add(p)
        db.session.commit()

        self.app.post('/update/paintings/details',
                      data=dict(filename="test1.jpg",
                                name="test2",
                                medium="m2",
                                dimensions="d2",
                                year="y2"))

        p = Painting.query.filter_by(filename="test1.jpg").first()
        self.assertEqual(p.name, "test2")
        self.assertEqual(p.medium, "m2")
        self.assertEqual(p.dimensions, "d2")
        self.assertEqual(p.year, "y2")
def get_painting(id):
	painting = Painting.get_by_id(id)
	form = PaintingCreateForm()
	form.title.data = painting.title
	form.notes.data = painting.notes
	return painting, form
def update_painting(id, data):
	form = PaintingCreateForm(data=data)
	painting = Painting.get_by_id(id)
	painting.title = form.title.data
	painting.notes = form.notes.data
	return painting.put()
def create_painting(data, blob_key):
	form = PaintingCreateForm(data=data)
	painting = Painting(title=form.title.data, blob_key=blob_key, notes=form.notes.data)
	return painting.put()
Beispiel #16
0
 def createPaintings(self, num, **kwargs):
     for i in range(1, num+1):
         p = Painting(name="paint_test_%d"%(i), filename="test_%d.jpg"%(i), **kwargs)
         db.session.add(p)
         db.session.commit()
def get_paintings():
	paintings = Painting.query().order(-Painting.date_added).fetch()
	images = [get_serving_url(painting.blob_key) for painting in paintings]
	return paintings, images
def delete_painting(id):
	painting = Painting.get_by_id(id)
	BlobInfo.get(painting.blob_key).delete()
	return painting.key.delete()