Merge branch 'master' into 201207-testfixes

This commit is contained in:
Brett Smith
2012-07-08 11:07:02 -04:00
24 changed files with 892 additions and 52 deletions

View File

@@ -22,4 +22,4 @@ MEDIA_MANAGER = {
'processor': process_audio,
'sniff_handler': sniff_handler,
'display_template': 'mediagoblin/media_displays/audio.html',
'accepted_extensions': ['mp3', 'flac', 'ogg', 'wav', 'm4a']}
'accepted_extensions': ['mp3', 'flac', 'wav', 'm4a']}

View File

@@ -27,7 +27,11 @@
{%- endautoescape -%}
</pre>
</div>
{% endblock %}
{% block mediagoblin_sidebar %}
{% if 'original' in media.media_files %}
<h3>{% trans %}Download{% endtrans %}</h3>
<p>
<a href="{{ request.app.public_store.file_url(
media.media_files['original']) }}">

View File

@@ -57,7 +57,7 @@
<ul>
{% if 'original' in media.media_files %}
<li><a href="{{ request.app.public_store.file_url(
media.media_files.original) }}">{% trans %}original file{% endtrans %}</a>
media.media_files.original) }}">{% trans %}Original file{% endtrans %}</a>
{% endif %}
<li><a href="{{ request.app.public_store.file_url(
media.media_files.webm_audio) }}">{% trans %}WebM file (Vorbis codec){% endtrans %}</a>

View File

@@ -17,3 +17,17 @@
#}
{% extends 'mediagoblin/user_pages/media.html' %}
{% block mediagoblin_sidebar %}
{% if 'original' in media.media_files %}
<h3>{% trans %}Download{% endtrans %}</h3>
<p>
<a href="{{ request.app.public_store.file_url(
media.media_files['original']) }}">
{%- trans -%}
Original
{%- endtrans -%}
</a>
</p>
{% endif %}
{% endblock %}

View File

@@ -46,14 +46,16 @@
</div>
</video>
</div>
{% if 'original' in media.media_files %}
<p>
<a href="{{ request.app.public_store.file_url(
media.media_files['original']) }}">
{%- trans -%}
Original
{%- endtrans -%}
</a>
</p>
{% endif %}
{% endblock %}
{% block mediagoblin_sidebar %}
<h3>{% trans %}Download{% endtrans %}</h3>
<ul>
{% if 'original' in media.media_files %}
<li><a href="{{ request.app.public_store.file_url(
media.media_files.original) }}">{% trans %}Original file{% endtrans %}</a>
{% endif %}
<li><a href="{{ request.app.public_store.file_url(
media.media_files.webm_640) }}">{% trans %}WebM file (640p; VP8/Vorbis){% endtrans %}</a>
</ul>
{% endblock %}

View File

@@ -93,28 +93,6 @@
{% autoescape False %}
<p>{{ media.description_html }}</p>
{% endautoescape %}
{% if media.attachment_files|count %}
<h3>Attachments</h3>
<ul>
{% for attachment in media.attachment_files %}
<li>
<a href="{{ request.app.public_store.file_url(attachment.filepath) }}">
{{ attachment.name }}
</a>
</li>
{% endfor %}
</ul>
{% endif %}
{% if app_config['allow_attachments']
and request.user
and (media.uploader == request.user._id
or request.user.is_admin) %}
<p>
<a href="{{ request.urlgen('mediagoblin.edit.attachments',
user=media.get_uploader.username,
media=media._id) }}">Add attachment</a>
</p>
{% endif %}
{% if comments %}
<a
{% if not request.user %}
@@ -185,6 +163,32 @@
{% include "mediagoblin/utils/exif.html" %}
{% if media.attachment_files|count %}
<h3>{% trans %}Attachments{% endtrans %}</h3>
<ul>
{% for attachment in media.attachment_files %}
<li>
<a href="{{ request.app.public_store.file_url(attachment.filepath) }}">
{{ attachment.name }}
</a>
</li>
{% endfor %}
</ul>
{% endif %}
{% if app_config['allow_attachments']
and request.user
and (media.uploader == request.user._id
or request.user.is_admin) %}
{% if not media.attachment_files|count %}
<h3>{% trans %}Attachments{% endtrans %}</h3>
{% endif %}
<p>
<a href="{{ request.urlgen('mediagoblin.edit.attachments',
user=media.get_uploader.username,
media=media._id) }}">{% trans %}Add attachment{% endtrans %}</a>
</p>
{% endif %}
{% block mediagoblin_sidebar %}
{% endblock %}
</div>

View File

@@ -102,6 +102,10 @@ def clean_exif(exif):
def _ifd_tag_to_dict(tag):
'''
Takes an IFD tag object from the EXIF library and converts it to a dict
that can be stored as JSON in the database.
'''
data = {
'printable': tag.printable,
'tag': tag.tag,
@@ -109,6 +113,11 @@ def _ifd_tag_to_dict(tag):
'field_offset': tag.field_offset,
'field_length': tag.field_length,
'values': None}
if isinstance(tag.printable, str):
# Force it to be decoded as UTF-8 so that it'll fit into the DB
data['printable'] = tag.printable.decode('utf8', 'replace')
if type(tag.values) == list:
data['values'] = []
for val in tag.values:
@@ -118,7 +127,11 @@ def _ifd_tag_to_dict(tag):
else:
data['values'].append(val)
else:
data['values'] = tag.values
if isinstance(tag.values, str):
# Force UTF-8, so that it fits into the DB
data['values'] = tag.values.decode('utf8', 'replace')
else:
data['values'] = tag.values
return data

View File

@@ -16,6 +16,7 @@
from mediagoblin import mg_globals
def delete_media_files(media):
"""
Delete all files associated with a MediaEntry
@@ -23,10 +24,20 @@ def delete_media_files(media):
Arguments:
- media: A MediaEntry document
"""
no_such_files = []
for listpath in media.media_files.itervalues():
mg_globals.public_store.delete_file(
listpath)
try:
mg_globals.public_store.delete_file(
listpath)
except OSError:
no_such_files.append("/".join(listpath))
for attachment in media.attachment_files:
mg_globals.public_store.delete_file(
attachment['filepath'])
try:
mg_globals.public_store.delete_file(
attachment['filepath'])
except OSError:
no_such_files.append("/".join(attachment))
if no_such_files:
raise OSError(", ".join(no_such_files))

View File

@@ -15,6 +15,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from webob import exc
import logging
from mediagoblin import messages, mg_globals
from mediagoblin.db.util import DESCENDING, ObjectId
@@ -33,6 +34,9 @@ from werkzeug.contrib.atom import AtomFeed
from mediagoblin.media_types import get_media_manager
_log = logging.getLogger(__name__)
_log.setLevel(logging.DEBUG)
@uses_pagination
def user_home(request, page):
"""'Homepage' of a User()"""
@@ -185,7 +189,14 @@ def media_confirm_delete(request, media):
comment.delete()
# Delete all files on the public storage
delete_media_files(media)
try:
delete_media_files(media)
except OSError, error:
_log.error('No such files from the user "{1}"'
' to delete: {0}'.format(str(error), username))
messages.add_message(request, messages.ERROR,
_('Some of the files with this entry seem'
' to be missing. Deleting anyway.'))
media.delete()
messages.add_message(