from mediagoblin import util
from mediagoblin.auth import lib as auth_lib
from mediagoblin import mg_globals
-from mediagoblin.db.util import DESCENDING, ObjectId
+ from mediagoblin.db import migrations
+from mediagoblin.db.util import ASCENDING, DESCENDING, ObjectId
+ from mediagoblin.util import Pagination
+ from mediagoblin.util import DISPLAY_IMAGE_FETCHING_ORDER
+
+
###################
# Custom validators
###################
'created': datetime.datetime.utcnow,
'state': u'unprocessed'}
- migration_handler = migrations.MediaEntryMigration
+ def get_comments(self):
+ return self.db.MediaComment.find({
+ 'media_entry': self['_id']}).sort('created', DESCENDING)
+ def get_display_media(self, media_map, fetch_order=DISPLAY_IMAGE_FETCHING_ORDER):
+ """
+ Find the best media for display.
+
+ Args:
+ - media_map: a dict like
+ {u'image_size': [u'dir1', u'dir2', u'image.jpg']}
+ - fetch_order: the order we should try fetching images in
+
+ Returns:
+ (media_size, media_path)
+ """
+ media_sizes = media_map.keys()
+
+ for media_size in DISPLAY_IMAGE_FETCHING_ORDER:
+ if media_size in media_sizes:
+ return media_map[media_size]
+
def main_mediafile(self):
pass
-
- def get_comments(self, page):
- cursor = self.db.MediaComment.find({
- 'media_entry': self['_id']}).sort('created', DESCENDING)
-
- pagination = Pagination(page, cursor)
- comments = pagination()
-
- data = list()
- for comment in comments:
- comment['author'] = self.db.User.find_one({
- '_id': comment['author']})
- data.append(comment)
-
- return (data, pagination)
-
+
def generate_slug(self):
self['slug'] = util.slugify(self['title'])
thumb_file = mgg.public_store.get_file(thumb_filepath, 'w')
with thumb_file:
- thumb.save(thumb_file, "JPEG")
+ thumb.save(thumb_file, "JPEG", quality=90)
"""
- Create medium file, used in `media.html`
+ If the size of the original file exceeds the specified size of a `medium`
+ file, a `medium.jpg` files is created and later associated with the media
+ entry.
"""
medium = Image.open(queued_filename)
- medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS)
+ medium_processed = False
- if medium.mode != "RGB":
- medium = medium.convert("RGB")
+ if medium.size[0] > MEDIUM_SIZE[0] or medium.size[1] > MEDIUM_SIZE[1]:
+ medium.thumbnail(MEDIUM_SIZE, Image.ANTIALIAS)
- medium_filepath = create_pub_filepath(entry, 'medium.jpg')
+ if medium.mode != "RGB":
+ medium = medium.convert("RGB")
- medium_file = mgg.public_store.get_file(medium_filepath, 'w')
- with medium_file:
- medium.save(medium_file, "JPEG", quality=90)
+ medium_filepath = create_pub_filepath(entry, 'medium.jpg')
+
+ medium_file = mgg.public_store.get_file(medium_filepath, 'w')
+ with medium_file:
- medium.save(medium_file, "JPEG")
++ medium.save(medium_file, "JPEG", quality=90)
+ medium_processed = True
# we have to re-read because unlike PIL, not everything reads
# things in string representation :)
{% extends "mediagoblin/base.html" %}
{% import "/mediagoblin/utils/wtforms.html" as wtforms_util %}
+{% from "mediagoblin/utils/pagination.html" import render_pagination %}
{% block mediagoblin_content %}
- {# temporarily, an "image gallery" that isn't one really ;) #}
{% if media %}
- <div class="grid_8 alpha media_image">
- <h1>
- {{media.title}}
- </h1>
+ <div class="grid_11 alpha">
- {% if media.media_files.medium %}
- <img src="{{ request.app.public_store.file_url(
- media.media_files.medium) }}" />
- {% else %}
- <img src="{{ request.app.public_store.file_url(
- media.media_files.main) }}" />
- {% endif %}
+ <img class="media_image" src="{{ request.app.public_store.file_url(
+ media.get_display_media(media.media_files)) }}" />
+
+ <h2>
+ {{media.title}}
+ </h2>
+
+ {% autoescape False %}
+ <p>{{ media.description_html }}</p>
+ {% endautoescape %}
+
<p>
- Uploaded on
+ — uploaded on
{{ "%4d-%02d-%02d"|format(media.created.year,
media.created.month, media.created.day) }}
by
from mediagoblin import messages
from mediagoblin.db.util import ObjectId
+from itertools import izip, count
+
+ DISPLAY_IMAGE_FETCHING_ORDER = [u'medium', u'original', u'thumb']
+
TESTS_ENABLED = False
def _activate_testing():
"""