Sebastian Spaeth [Wed, 12 Dec 2012 10:38:51 +0000 (11:38 +0100)]
plugins/api: use headers.set(), not headers.update()
The werkzeug.Response().headers do not offer an update() method as
the same key can be twice in the header 'dict'. Thus, iterate over
the header keys and use header.set(key, value) which replaces an
existing header key.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Fri, 16 Nov 2012 10:21:15 +0000 (11:21 +0100)]
replace webob.Response with werkzeug Response
Replace webob usage in one more file. Document a TODO that should
be clarified, we should probably be using json_response rather than
Response() here.
Modify the TestMeddleware to not rely on the content_type attribute
being present, while werkzeug.wrappers Response() has it the BaseResponse()
object which is often returned in tests does not have it.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Fri, 16 Nov 2012 10:13:01 +0000 (11:13 +0100)]
Transition webob BadRequest|HTTPFound to webob/redirect
More transitioning away from webob
Response import from webob was unused
Sebastian Spaeth [Wed, 12 Dec 2012 10:54:43 +0000 (11:54 +0100)]
tests/auth: Don't rely on case sensitive error strings
webob's 404 status is "404 NOT FOUND" while werkzeug's is
"404 Not Found". Our test suite was checking the upper case string
for equality. Just test the status error code "404" rather than the
full string which might change at some points/versions and should
not need to be tested.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Fri, 16 Nov 2012 10:05:08 +0000 (11:05 +0100)]
webob.HTTPFound --> MG.tools.redirect
Transition away from webob.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Thu, 15 Nov 2012 15:55:15 +0000 (16:55 +0100)]
Transition webob.HttpForbidden to webob's exceptions Forbidden
Also the BadRequest exception.
Sebastian Spaeth [Thu, 15 Nov 2012 15:49:51 +0000 (16:49 +0100)]
Remove webobisms from decorators.py
Use our own redirect function rather than webobs HttpFound
Also replace HttpForbidden() with webob's Forbidden()
Sebastian Spaeth [Thu, 15 Nov 2012 15:57:33 +0000 (16:57 +0100)]
purge webob from docs and replace with werkzeug
Sebastian Spaeth [Fri, 16 Nov 2012 09:25:50 +0000 (10:25 +0100)]
Remove webob from render_to_response
We were still using webob's Response objects for template rendering.
Transition to werkzeug's Response object. One caveat was that it
seemed to have used the default mimetype "text/plain" for all pages,
so we override the default Response class, setting the default mime
type to "text/html".
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Fri, 16 Nov 2012 08:12:34 +0000 (09:12 +0100)]
Extend redirect helper to take optional location keyword
In order to move away from webob with its redirect(location=...) we
need to provide a redirect function that allows to directly specify
the URL rather than the urlgen parameters that we now use.
Extend our MG.tools:redirect helper so we can pass in the direct URL
via the optional "location" keyword.
This commit does not switch over any redirect consumers yet.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Thu, 20 Dec 2012 22:10:07 +0000 (23:10 +0100)]
Remove SimpleFieldAlias
It was only used for the model._id -> model.id conversion and is not
needed anymore.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Fri, 30 Nov 2012 09:49:06 +0000 (10:49 +0100)]
Move DBModel._id -> DBModel.id
We were refering to model._id in most of the code base as this is
what Mongo uses. However, each use of _id required a) fixup of queries:
e.g. what we did in our find() and find_one() functions moving all
'_id' to 'id'. It also required using AliasFields to make the ._id
attribute available. This all means lots of superfluous fixing and
transitioning in a SQL world.
It will also not work in the long run. Much newer code already refers
to the objects by model.id (e.g. in the oauth plugin), which will break
with Mongo. So let's be honest, rip out the _id mongoism and live with
.id as the one canonical way to address objects.
This commit modifies all users and providers of model._id to use
model.id instead. This patch works with or without Mongo removed first,
but will break Mongo usage (even more than before)
I have not bothered to fixup db.mongo.* and db.sql.convert
(which converts from Mongo to SQL)
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Thu, 20 Dec 2012 23:27:59 +0000 (00:27 +0100)]
Fix up tests
empty find() queries would not work anymore with the simplified .find
compatability code, so remove these and use proper sqlalchemy in the
tests.
The storage test failed because my virtualenv environment ran
mediagoblin/local/mediagoblin/tests/test_storage.py and somehow decided
the 2 classes are different objects. Just test against the full class name.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Christopher Allan Webber [Thu, 20 Dec 2012 19:54:03 +0000 (13:54 -0600)]
Fixing tyop'ed "dbupdate"
Christopher Allan Webber [Thu, 20 Dec 2012 17:16:29 +0000 (11:16 -0600)]
NOW RELEASING: MediaGoblin 0.3.2! :D
Christopher Allan Webber [Thu, 20 Dec 2012 16:11:54 +0000 (10:11 -0600)]
Committing extracted and compiled translations
Christopher Allan Webber [Thu, 20 Dec 2012 16:11:34 +0000 (10:11 -0600)]
Committing present MediaGoblin translations before pushing extracted messages
Christopher Allan Webber [Thu, 20 Dec 2012 15:48:47 +0000 (09:48 -0600)]
0.3.2 release notes
Christopher Allan Webber [Thu, 20 Dec 2012 15:27:56 +0000 (09:27 -0600)]
Updating AUTHORS with new contributors. Nice job new contributors! :)
Christopher Allan Webber [Thu, 20 Dec 2012 15:19:50 +0000 (09:19 -0600)]
Committing extracted and compiled translations
Christopher Allan Webber [Thu, 20 Dec 2012 14:22:49 +0000 (08:22 -0600)]
Docs fix: Adding proper blank line after the "Run::"
Christopher Allan Webber [Thu, 20 Dec 2012 14:18:19 +0000 (08:18 -0600)]
Added documentation on how to add STL support, and notes on running ./bin/gmg dbupdate
Sebastian Spaeth [Tue, 18 Dec 2012 15:54:07 +0000 (16:54 +0100)]
Try ipython-based shell first, falling back to plain shell
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Christopher Allan Webber [Tue, 18 Dec 2012 22:46:20 +0000 (16:46 -0600)]
makeadmin and changepasswd had swapped help text
Jef van Schendel [Sun, 16 Dec 2012 20:57:19 +0000 (21:57 +0100)]
Remove collection_thumbnail styling, so collection thumbnails are styled the same as other thumbnails
Sebastian Spaeth [Sat, 15 Dec 2012 20:00:41 +0000 (21:00 +0100)]
Release note 0.3.2 blurb
On MongoDB...
Christopher Allan Webber [Sat, 15 Dec 2012 00:29:00 +0000 (18:29 -0600)]
Adding info to the docs about running dbupdate
Both adding info to run it when adding new media types, and adding
info that you might need to stop mediagoblin before you run these
commands.
Christopher Allan Webber [Fri, 14 Dec 2012 16:49:05 +0000 (10:49 -0600)]
Switching both gettext calls to _() so babel can find/extract them.
Babel looks for _() and gettext() so this is necessary.
Christopher Allan Webber [Fri, 14 Dec 2012 15:28:44 +0000 (09:28 -0600)]
Add comments explaining how translitcodec *is* used
Sebastian Spaeth [Fri, 14 Dec 2012 14:16:49 +0000 (15:16 +0100)]
Add example to the lazy gettext version to make clear when it's appropriate
I needed an example to really get when lazy_gettext would be good...
Sebastian Spaeth [Fri, 14 Dec 2012 11:55:21 +0000 (12:55 +0100)]
Use the correct translation mechanism
We accidentally used the fake translation mechanism here which will not
actually translate anything.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Fri, 14 Dec 2012 09:54:53 +0000 (10:54 +0100)]
Fiy python2.7'ism (#566)
The oauth plugin used timedelta.total_seconds which was introduced
in python 2.7 only. To preserve backwards compatability, we simply
calculate the time difference in seconds manually.
I considered monkeypatching total_seconds to the timedelta object,
but it is a built-in type written in C (I believe) and modifying
attributes failed horribly. Switch this to use total_seconds once we
require python 2.7 as minimum version.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Jef van Schendel [Thu, 13 Dec 2012 22:39:19 +0000 (23:39 +0100)]
Small styling edits to thumbnails
Elrond [Thu, 13 Dec 2012 20:07:16 +0000 (21:07 +0100)]
Make "add media to collection" a normal <img/>
This button used to be a css style <a href=...> </a> (note:
No contents for the <a>). Using this approach has various
drawbacks. Most notably:
- Not clickable in text mode browsers
- Possibly getting marked as a hidden (spam) link
- No alt attribute
So replaced with a real <img/>.
I have no idea what to put in the alt attribute.
Elrond [Thu, 13 Dec 2012 14:29:36 +0000 (15:29 +0100)]
Migrate some fixes from base.html to airy/base.html.
When fixing our templates, we should always take a look at
the other themes and fix those too.
Elrond [Wed, 12 Dec 2012 20:25:17 +0000 (21:25 +0100)]
Do not translate just a variable expansion.
No point in translating <p>{{ var }}</p>. Really.
This does not hurt the string freeze, as it removes a
translateable string. So any translations of this string
are just well ... usefuless afterwards.
Elrond [Mon, 3 Dec 2012 15:36:34 +0000 (16:36 +0100)]
Fix spacing in links to attachment files.
We had """<a href="abc.dat"> abc.dat</a>""" (note the
apace). And this space is being rendered as a link by
browsers. This looks strange, really.
So fix the spacing.
Christopher Allan Webber [Wed, 12 Dec 2012 16:13:56 +0000 (10:13 -0600)]
We don't need to save entries during processing... also adding comments explaining such
Sebastian Spaeth [Wed, 12 Dec 2012 11:29:22 +0000 (12:29 +0100)]
More unicode fixes in the test suite
Pass in unicode not (binary) strings where sqlite expects unicode
values to prevent the test suite from (correctly) complaining about
errors.
I now pass the full suite without any complaints.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Christopher Allan Webber [Wed, 12 Dec 2012 01:58:25 +0000 (19:58 -0600)]
Setting the user profile back to 3 columns wide!
Previously this was set to two when the spacing between thumbs got borkified.
Sebastian Spaeth [Tue, 11 Dec 2012 15:55:11 +0000 (16:55 +0100)]
Make sqlalchemy stop complaining about non-unicode input
These tests output noisy sql complaints about receiving non-unicode
for an unicode field. This was ... well ... because we were handing
in non-unicode usernames and passwords.
Prefixing usernames/passwords with u'' makes the testsuite less noisy
and verbose.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Tue, 11 Dec 2012 14:38:28 +0000 (15:38 +0100)]
Fix CSRF tests with webtest 1.4.0
CSRF tests apparently passed with earlier versions of webtest, but
failed with the latest webtest (1.4.0) package. It choked on passing
a "key=value; " cookie as it split at the semicolon and failed to
find additional values or something like that. Removing the semicolon
makes this test pass.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Christopher Allan Webber [Mon, 10 Dec 2012 22:14:28 +0000 (16:14 -0600)]
Remove print statments from this migration.
The reason for wanting to give extra information to the user (this is
a very special case migration) is good, but we don't have a nice
"official" way to capture and present that information during tests,
so removing this.
Elrond [Sun, 9 Dec 2012 19:14:15 +0000 (20:14 +0100)]
Fix typo, disable debugging.
Elrond [Sun, 9 Dec 2012 18:50:33 +0000 (19:50 +0100)]
UniqueConstraing migration: Adding the explaining comments.
Add a lengthy comment explaining all the variants.
Elrond [Wed, 28 Nov 2012 15:44:43 +0000 (16:44 +0100)]
Fixing our broken CollectionItem unique constraint.
This one seems to work nicely in all relevant situations.
See comments inside the source.
Nathan Yergler [Tue, 27 Nov 2012 04:24:30 +0000 (20:24 -0800)]
Ensure query_dict is a dict after the contents have been modified.
_fix_query_dict modifies its argument in place. Ensure that the
argument passed in has a local name and will be passed into the
subsequent filter_by call.
Christopher Allan Webber [Sun, 9 Dec 2012 18:20:06 +0000 (12:20 -0600)]
Eeek! Set the migration number to the current migration number being run!
Christopher Allan Webber [Sun, 9 Dec 2012 18:12:07 +0000 (12:12 -0600)]
Elrond's suggestion: have set_current_migration execute after each migration run.
Christopher Allan Webber [Fri, 7 Dec 2012 18:46:37 +0000 (12:46 -0600)]
Committing extracted and compiled translations
Christopher Allan Webber [Fri, 7 Dec 2012 18:45:47 +0000 (12:45 -0600)]
Committing present MediaGoblin translations before pushing extracted messages
Christopher Allan Webber [Wed, 5 Dec 2012 22:13:22 +0000 (16:13 -0600)]
Add a UniqueConstraint add test in test_sql_migrations
We should have this anyway, and Elrond needs it to help fix current
broken migration thingies.
Sebastian Spaeth [Wed, 5 Dec 2012 12:42:00 +0000 (13:42 +0100)]
Fix user collection gallery
We were fetching the user collection gallery by slug only, so if two users
had the same collection slug, we would not have been sure which one we'd get.
Fix this by explicitly only fetching the specific user's collections. Also
switch over the view function to make use of the new active_user_from_url
decorator that fetches the User() object for us.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Wed, 5 Dec 2012 12:38:50 +0000 (13:38 +0100)]
Switch over the user gallery to the active_user_from_url decorator
This switches the user gallery page over to use the new decorator, and
cleans up the queries to be in proper sqlalchemy format rather than the
old mongo format.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Wed, 5 Dec 2012 12:37:19 +0000 (13:37 +0100)]
Create a active_user_from_url decorator
This can be used for URL patterns containing a <user> element. It will look
up the corresponding user among all active users and return a 404 NOT FOUND
page if there is no such active user. It then passes the User() instance as
url_user keyword argument to the decorated view function.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Tue, 4 Dec 2012 16:28:53 +0000 (17:28 +0100)]
Remove gridify_*
We injected a gridify_list and gridify_cursor function into each jinja2
template that we render. This was used to split the list of media_entries
into batches of 5 for nicer table columns. However, jinja2 has a nice |batch
filter built in that does the job for us just as well with less code (on our side)
Less code=good
so let's merge this one.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Christopher Allan Webber [Tue, 4 Dec 2012 15:34:41 +0000 (09:34 -0600)]
We arean't using header_dropdown.js anymore because the dropdown is gone!
Sebastian Spaeth [Tue, 4 Dec 2012 08:57:56 +0000 (09:57 +0100)]
make media_manager a property of MediaEntry in mixin.py
In all cases where get_media_manager(_media_type_as_string) was called in
our code base we ultimately passed in a "MediaEntry().media_type" to get
the matching MEDIA_MANAGER. It so makes sense to make this a function of
the MediaEntry rather than a global function in mediagoblin.media_types and
passing around media_entry.media_type as arguments all the time.
It saves a few import statements and arguments. I also made it so the
Media_manager property is cached for subsequent calls, although I am not too
sure that this is needed (there are other cases for which this would make
more sense)
Also add a get_media_manager test to the media submission tests. It submits
an image and checks that both media.media_type and media.media_manager
return the right thing. Not sure if these tests could not be merged with an
existing submission test, but it can't hurt to have things explicit.
TODO: Right now we iterate through all existing media_managers to find the
right one based on the string of its module name. This should be made a simple
dict lookup to avoid all the extra work.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Tue, 4 Dec 2012 08:44:07 +0000 (09:44 +0100)]
Fallback to "en_US" if browser does not send preferred languages
E.g. in our test suite we don't send an "accepted languages" header, which
caused the language matching to fail. So we need to explicitely fallback to
en_US, in case request.accepted_languages is None. This fixes the tests and
all cases where user browsers don't send preferred languages.
This also fixes issue #562, the AVAILABLE_LOCALES are already case-normalized
and we don't need to fudge the preferred language through the lower_upper_locale
thing for each and every request.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Christopher Allan Webber [Mon, 3 Dec 2012 20:57:52 +0000 (14:57 -0600)]
Moving thingiview.js into extlib/
Christopher Allan Webber [Sun, 2 Dec 2012 20:14:15 +0000 (14:14 -0600)]
Switch stl processing over to using the workbench
Previously this was writing directly to the public store... that won't
work with cloudfiles backend, for example :)
Christopher Allan Webber [Sun, 2 Dec 2012 17:33:32 +0000 (11:33 -0600)]
Correcting minor typo in exception string: Empyt->Empty
Christopher Allan Webber [Sun, 2 Dec 2012 17:28:54 +0000 (11:28 -0600)]
Removing unused conversions subdir
Christopher Allan Webber [Sun, 2 Dec 2012 02:16:15 +0000 (20:16 -0600)]
Moving blender render files to be accessed via pkg_resources
Previously the .blend and .py files had to be in the same directory
mediagoblin/celery launched from. This is now fixed so it pulls them
out of the package proper.
Christopher Allan Webber [Sun, 2 Dec 2012 01:46:49 +0000 (19:46 -0600)]
Removing render_test.py, which isn't used
Aeva Ntsc [Tue, 16 Oct 2012 07:11:34 +0000 (02:11 -0500)]
Removed debug info from the sidebar.
Aeva Ntsc [Tue, 16 Oct 2012 06:55:04 +0000 (01:55 -0500)]
tweaking the template
Aeva Ntsc [Tue, 16 Oct 2012 06:54:27 +0000 (01:54 -0500)]
Fixed the binary stl loader.
Aeva Ntsc [Tue, 16 Oct 2012 06:02:05 +0000 (01:02 -0500)]
Disabled thingiview for obj models, since thingiview's support for them seems to be broken.
Aeva Ntsc [Tue, 16 Oct 2012 06:01:34 +0000 (01:01 -0500)]
Added a table to store the file extension of a model.
Aeva Ntsc [Tue, 16 Oct 2012 05:38:39 +0000 (00:38 -0500)]
Updated the template for viewing stl models.
Aeva Ntsc [Tue, 16 Oct 2012 05:38:08 +0000 (00:38 -0500)]
Added preview rendering for a bunch of different shots.
Aeva Ntsc [Tue, 16 Oct 2012 05:37:44 +0000 (00:37 -0500)]
Catching ValueError when trying to use ObjModel on binary stl files.
Aeva Ntsc [Tue, 16 Oct 2012 05:35:37 +0000 (00:35 -0500)]
Added script for manually testing the blender renderer.
Aeva Ntsc [Tue, 16 Oct 2012 05:35:09 +0000 (00:35 -0500)]
Added blender renderer
Aeva Ntsc [Mon, 15 Oct 2012 15:10:32 +0000 (10:10 -0500)]
made 3d viewer a little cleaner
Aeva Ntsc [Mon, 15 Oct 2012 15:10:04 +0000 (10:10 -0500)]
disabled auto rotate
Aeva Ntsc [Mon, 15 Oct 2012 06:36:26 +0000 (01:36 -0500)]
Added the stl/obj mediatype.
Aeva Ntsc [Mon, 15 Oct 2012 06:35:59 +0000 (01:35 -0500)]
Added a rudimentary template for the stl/obj viewer.
Aeva Ntsc [Mon, 15 Oct 2012 06:34:11 +0000 (01:34 -0500)]
Added the thingiview.js library.
Aeva Ntsc [Mon, 15 Oct 2012 06:33:38 +0000 (01:33 -0500)]
Added the thingiview.js library.
Christopher Allan Webber [Mon, 3 Dec 2012 19:23:55 +0000 (13:23 -0600)]
Committing extracted and compiled translations
Christopher Allan Webber [Mon, 3 Dec 2012 19:23:02 +0000 (13:23 -0600)]
Committing present MediaGoblin translations before pushing extracted messages
Elrond [Mon, 3 Dec 2012 13:19:28 +0000 (14:19 +0100)]
Fix translations around.
This includes:
- Mark more strings for translation
- Don't mark html-only nonsense for translation
- Mark a better part for translation.
Sebastian Spaeth [Mon, 26 Nov 2012 16:03:24 +0000 (17:03 +0100)]
Go back to pre-login URL after loging in
Simply append the current URL (sans querystring) as a ?next= parameter
to the login URL. This will always take us back to the original page
where we were pre-login.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Mon, 26 Nov 2012 20:24:35 +0000 (21:24 +0100)]
Provide jinja2 urlencode filter
Astonishingly, the great jinja2 does not provide a builtin urlquote filter,
although it is obviously needed. (jina1 had one) This is:
https://github.com/mitsuhiko/jinja2/issues/17
Provide an urlencode filter, based on werkzeug's url_quote_plus function.
This is dead easy to implement and gives us all the freedom we want.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Mon, 3 Dec 2012 12:53:32 +0000 (13:53 +0100)]
Add extlibs to packaging
setup.py bdist fails as it can't find the extlib's. DOH, that is because
we don't package them.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Sun, 2 Dec 2012 13:27:20 +0000 (14:27 +0100)]
Use pypi-compatible license signature
It complains about a non-compatible license string. so use the
GNU AGPL v3+ string that is listed at
http://pypi.python.org/pypi?%3Aaction=list_classifiers
With this change, we are able to create a pypi mediagoblin package.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Sun, 2 Dec 2012 01:35:04 +0000 (02:35 +0100)]
en_US is always available
We were using "en" as fallback only when no preferred language matched.
This is obviously bad. Always insert en_US as available locale, so we
can match it with the accept_languages.
Don't set available_locales as mg_global, per discussion with paroneaya,
make it a global var in translate.py
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Christopher Allan Webber [Sun, 2 Dec 2012 01:36:52 +0000 (19:36 -0600)]
Fixing bug where not all conditions returned a language in get_locale_from_request()
Just had to change the indentation level of the last commit.
Sebastian Spaeth [Sun, 2 Dec 2012 00:38:09 +0000 (01:38 +0100)]
Fall back to "en" if we don't find matching translations
In case of no matching translations, target_lang was "None" which
blew up things. Fall back to "en" in case we don't find a
corresponding translation.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Sun, 2 Dec 2012 00:09:35 +0000 (01:09 +0100)]
Also package i18n/*.mo
....
and I wondered why my production site fails to display German pages...
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Sat, 1 Dec 2012 23:29:30 +0000 (00:29 +0100)]
Honor user's browser language (#558)
Previously we would attempt to satisfy the user's first language
preference, immediately falling back to english if that was not
possible. Now, we will get the best match of the user's preferred
languages.
This requires storing the available locales on app startup, so we
have mg_globals.available_locales ready to compare them against the
list of preferred user languages.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Sat, 1 Dec 2012 22:35:52 +0000 (23:35 +0100)]
Fix i18n in our browser
We only ever served english pages since the switch to werkzeug's requests.
Fix this by actually checking the accepted languages that our web browser
sends and using that or falling back to english.
This is not optimal, imaging our browser sends "klingon, de" as accepted
languages and we happen to not have a klingon translation ready (a deficiency
that should be corrected immediately anyway!!). We would then fall back
to english rather than sending the sensible and pleasant German language
which the user would understand. This will require more backend work though.
Removing the gettext.find() in mg_globals.py. It looked in the wrong directory
anyway (mediagoblin/translations) and as that does not exist, had always returned
None without anyone noticing.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Sat, 1 Dec 2012 19:31:18 +0000 (20:31 +0100)]
docs: Add trim_whitespaces plugin to relnotes and documentation
Rather than mentioning a hypothetical module restrictfive, we use the
existing plugin mediagoblin-licenses that people can install. Also,
mention that plugin in the release notes.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Thu, 29 Nov 2012 10:28:25 +0000 (11:28 +0100)]
trim_whitespace meddleware plugin
Our HTML output is very verbose (=whitespacy) as our templates are
written with an 80 char limit and lots of newlines between blocks,
variables etc....
This is a plugin that naively strips of all but the first whitespace
from the HTML response. We might want to have an all-fancy html tidy
interface here at some point, but it nicely decreases the HTML size
about a third on some simple pages.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Thu, 29 Nov 2012 10:27:59 +0000 (11:27 +0100)]
Make ENABLED_MEDDLEWARES a list and not a tuple, so we can modify it
Plugins may want to insert meddlewares, so this list should be modifiable
at very list (if we don't want to provide helper methods for this, which
seems a tad overkill for now).
This change is required for the upcoming trim_whitespace plugin.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Thu, 29 Nov 2012 10:25:30 +0000 (11:25 +0100)]
Remove the NoOp meddleware
There is really no reason to provide and enable a meddleware that
does exactly... NOTHING ...by default.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Mon, 26 Nov 2012 13:55:33 +0000 (14:55 +0100)]
Implement licenses.get_license_by_url
Rather than exploding in the user's face (for example if we custom-configure
licenses in our MG instance, and there are still media with now "unknown"
licenses in the db), simply return a License object as a fallback, where all
attributes are set to the URL we were handed.
Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Sebastian Spaeth [Mon, 26 Nov 2012 13:47:03 +0000 (14:47 +0100)]
Improve mediagoblin.tools.licenses
"Objectify" our licenses to have .uri, .abbreviation, .name attributes
that we can pass into the templates and use there. namedtuples are a good
poor man's choice to make a License a class. (a named tuple really)
Document and optimize licenses_as_choices(), it is a one-liner really.
No need for verbose appends here...