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))
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'])
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)
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)
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()
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)
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)
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)
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')
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)
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)
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()
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()