Ejemplo n.º 1
0
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()}
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
    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)
Ejemplo n.º 4
0
    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)