Switching from iteritems() to items() is technically less memory efficient on
Python 2, but this appeared be a significantly cleaner approach than adding six
to the template context. It's also the right choice assuming the project will at
some point go Python 3 only.
To avoid issues with quotes, I've replaced the manual CSV handling with
csv.DictReader and simplified the unicode handling down to a single line. I
don't believe any special encoding is required when writing to the database.
This has been tested by importing a CSV with braille characters on Python 3 and
Python 2.
Original of the video was not saved because info about it was not
written to the database. Fixed that.
Also removed original video from get_all_media listing. The method is
weird, we should evaluate whether it is video-specific and how to
generalize it.
* `WTForms` instances get `__init__`-ed with `defaults` as `kwargs`.
The first arg is a `request.form` (which is what one must supply if
this is a `POST` and must *not* supply otherwise).
The content of that form (empty on `GET`) has higher priority than
the defaults (which makes the user get an empty form).
* Fix `edit_profile()` to allow changing `location` from a non-blank
value to blank (i.e. removing the location).
(cherry picked from commit 75f3e23b92392b9bd309fab4c1a52fd38d453627)
Video processing expects datetime tags in a specific format. This
commit allows videos with missing or incorrect datetime tags to be
processed with no datetime tags instead of failing.
Prior to the gstreamer-1.0 upgrade, the video processing engine included
a check for excluded extensions which gstreamer might accept despite us
not wanting to process them. In commit 91f5f5e, the check against
EXCLUDED_EXT was removed. Since then, the video plugin has accepted and
attempted to process svg files.
This commit adds the check against EXCLUDED_EXTS into the sniff_handler
function so that we can bail out on certain file extensions before the
plugins tries to sniff the file type. The previous implementation
excluded nef files, which appears to be a Nikon camera image. I've
copied that forward to this code. I've also added a log message to
indicate that we're purposefully refusing to process the file.
Alembic migrations do not get imported anywhere. Because of it
they do not get included to the python package. But they need to
be there in order for migrations to succeed.