def add(request_format): tag_names = request.form['tags'].split(' ') url = request.form['url'] if url: print 'fetching from remote url' truck = ImageTruck.new_from_url(url) elif request.files['file']: image = request.files['file'] truck = ImageTruck.new_from_stream(image.stream, image.mimetype) else: abort(400) metadata = ImageMetadata.image_metadata(truck.contents) print 'potentially reorienting' truck.contents = ReorientImage.reorient_image(truck.contents) print 'uploading to s3' truck.upload() session = Client().session() image = Image(filename=truck.calculate_filename(), source_url=url, description=request.form.get('description'), title=request.form.get('title'), **metadata) album_id = request.form['album'] if album_id: image.album_id = album_id session.add(image) image.add_tags(tag_names) ResizeImage.make_resizes(image, truck) if request_format == 'html': return redirect(url_for('show_image', image_id=image.image_id)) elif request_format == 'json': return {'url': truck.url()}
def process_image(self, image_contents_id): session = Client().session() contents = session.query(ImageContents).\ filter(ImageContents.image_contents_id == image_contents_id).\ one() image = session.query(Image).\ filter(Image.image_id == contents.image_id).\ one() truck = ImageTruck( contents.contents, contents.content_type, image.source_url) truck.filename = image.filename metadata = ImageMetadata.image_metadata(truck.contents) truck.contents = ReorientImage.reorient_image(truck.contents) def after_upload(size): redis.publish(REDIS_CHANNEL, json.dumps({ 'task_id': self.request.id, 'suffix': size, })) ResizeImage.make_resizes(image, truck, after_upload) print "uploading original image" truck.upload() redis.publish(REDIS_CHANNEL, json.dumps({ 'task_id': self.request.id, 'suffix': '', })) delay(queued_tasks, Invalidate(), image.image_id) for attr, value in metadata.iteritems(): setattr(image, attr, value) session.add(image) session.delete(contents)
def test_only_scales_images_down_not_up(self, resize_image_method, MockImage): image_handler = Mock() image_handler.size = (360, 360) MockImage.open.return_value = image_handler session = Client().session() image = ImageTable(filename='faded') session.add(image) session.flush() truck = Mock() ResizeImage.make_resizes(image, truck) resize_image_method.assert_has_calls([ call(image, image_handler, truck, 'thumbnail'), call(image, image_handler, truck, 'small'), ], any_order=True)
def test_creates_various_resizes(self, resize_image_method, MockImage): session = Client().session() image = ImageTable(filename='faded') session.add(image) session.flush() truck = ImageTruck('contents', None, None) image_handler = Mock() image_handler.size = (3648, 2736) MockImage.open.return_value = image_handler ResizeImage.make_resizes(image, truck) resize_image_method.assert_has_calls([ call(image, image_handler, truck, 'thumbnail'), call(image, image_handler, truck, 'small'), call(image, image_handler, truck, 'medium'), call(image, image_handler, truck, 'large'), ], any_order=True)