diff --git a/newsroom/wire/__init__.py b/newsroom/wire/__init__.py index fb7ebd6e8..4f2955dd0 100644 --- a/newsroom/wire/__init__.py +++ b/newsroom/wire/__init__.py @@ -6,6 +6,8 @@ from . import utils from superdesk.metadata.item import not_analyzed +from .formatters.picture import PictureFormatter + blueprint = Blueprint('wire', __name__) from . import views # noqa @@ -70,6 +72,7 @@ def init_app(app): app.download_formatter('nitf', NITFFormatter(), 'NITF', ['wire']) app.download_formatter('newsmlg2', NewsMLG2Formatter(), 'NewsMLG2', ['wire']) app.download_formatter('json', JsonFormatter(), 'Json', ['agenda']) + app.download_formatter('picture', PictureFormatter(), gettext('Story Image'), ['wire']) app.add_template_global(utils.get_picture, 'get_picture') app.add_template_global(utils.get_caption, 'get_caption') diff --git a/newsroom/wire/formatters/__init__.py b/newsroom/wire/formatters/__init__.py index f6d8df16c..25c95560a 100644 --- a/newsroom/wire/formatters/__init__.py +++ b/newsroom/wire/formatters/__init__.py @@ -22,3 +22,4 @@ def __init__(cls, name, bases, attrs): from .newsmlg2 import NewsMLG2Formatter # noqa from .json import JsonFormatter # noqa from .ninjs import NINJSFormatter # noqa +from .picture import PictureFormatter # noqa diff --git a/newsroom/wire/formatters/picture.py b/newsroom/wire/formatters/picture.py new file mode 100644 index 000000000..8a9c91e0f --- /dev/null +++ b/newsroom/wire/formatters/picture.py @@ -0,0 +1,19 @@ +from newsroom.wire.formatters.base import BaseFormatter +from newsroom.wire.utils import get_picture + + +class PictureFormatter(BaseFormatter): + + MIMETYPE = 'image/jpeg' + FILE_EXTENSION = 'jpg' + + def format_item(self, item, item_type='items'): + if item_type == 'agenda': + raise TypeError('Undefined format for agenda') + + picture = get_picture(item) + + if not picture: + raise TypeError('Undefined picture') + + return picture.get('renditions', {}).get('baseImage', {}).get('media') diff --git a/newsroom/wire/views.py b/newsroom/wire/views.py index 4237be5f9..206ca44c9 100644 --- a/newsroom/wire/views.py +++ b/newsroom/wire/views.py @@ -5,7 +5,7 @@ from bson import ObjectId from operator import itemgetter -from flask import current_app as app, request, jsonify +from flask import current_app as app, request, jsonify, url_for from eve.render import send_response from eve.methods.get import get_internal from werkzeug.utils import secure_filename @@ -173,7 +173,14 @@ def download(_ids): formatter = app.download_formatters[_format]['formatter'] mimetype = None attachment_filename = '%s-newsroom.zip' % utcnow().strftime('%Y%m%d%H%M') - if len(items) == 1 or _format == 'watch_lists': + if _format == 'picture': + try: + media_id = formatter.format_item(items[0], item_type=item_type) + return flask.redirect( + url_for('upload.get_upload', media_id=media_id, filename='baseimage.%s' % formatter.FILE_EXTENSION)) + except TypeError: + return flask.abort(404) + elif len(items) == 1 or _format == 'watch_lists': item = items[0] args_item = item if _format != 'watch_lists' else items parse_dates(item) # fix for old items