2524 Commits

Author SHA1 Message Date
Christopher Allan Webber
d1d535602c Merge remote-tracking branch 'refs/remotes/origin/533-new-dropdown'
Conflicts:
	mediagoblin/templates/mediagoblin/base.html
	mediagoblin/templates/mediagoblin/root.html
2013-01-17 11:47:29 -06:00
Christopher Allan Webber
30af7ce6ad Merge commit '9408938' from 565_workbench_cleanup (spaetz) 2013-01-17 11:12:13 -06:00
Jef van Schendel
10d2419764 CSS edits to dropdown menu; added log out button for unverified users 2013-01-17 16:15:03 +01:00
Jef van Schendel
7d996a269c Change position of "Delete account" link, put it below the form 2013-01-17 13:35:45 +01:00
Sebastian Spaeth
2e7dda8167 Better "delete my account" placement
Improve the "delete my account" link location by not placing it outside the
main content bar. It still might require more tweaks.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-17 12:47:38 +01:00
Sebastian Spaeth
6deb589d0b Introduce user_deletion test.
Delete a user via web interface and see if it works. TODO: this does not test
that related entries are also cleaned up and we should extend the test to
do so.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-17 12:19:52 +01:00
Sebastian Spaeth
380f22b859 Allowing to delete a user account (#302)
Add a "Delete user account" template and link to it from the user
account settings page.

Create a delete_account function and fill in most blanks. We can now
successfully delete our own account.

Thanks to Elrond for catching a stray csrf_exempt in a previous iteration
of this patch.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-17 12:19:52 +01:00
Sebastian Spaeth
3809a8b8e2 import db.sql.util -> db.util
Merging an old branch, I reintroduced an import of db.sql.util rather than
db.util. Fixing the glitch.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-17 12:19:33 +01:00
Sebastian Spaeth
8c33fc7505 Merge branch '540_User_delete_deletes_related_entries' 2013-01-17 11:52:22 +01:00
Sebastian Spaeth
03b4fc500c Implement User.delete() (#540)
Set User.collections to her Collections using the backref feature.
This way we can iterate a user's collections and delete them all.

Delete all MediaEntries/Files/attachments/comments/collections etc
before finally deleting the User object. This is the backend work for
issue 302 (allow a user to delete ones own account)
2013-01-17 11:48:49 +01:00
Sebastian Spaeth
242776e363 Implement Collection.delete()
Deleting a Collection should automatically delete all containing items.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-17 11:48:49 +01:00
Sebastian Spaeth
fdc34b8ba7 Implement MediaEntry().delete() (#540)
Deleting a MediaEntry instance will automatically
delete all related comments and files/attachments. This moves
implementation logic out of views.py and allows to make use of this
functionality when e.g. deleting a User() account.

Whenever a MediaEntry entry is deleted, this will also sql-delete
the corresponding MediaFile entry.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-17 11:48:07 +01:00
Sebastian Spaeth
9408938bcc Add @get_workbench test
Test the decorator function and proper cleanup after it's usage.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-16 20:19:26 +01:00
Sebastian Spaeth
bd6fe97746 Shorten Workbench(Manager) method names
1) destroy_self() is a horrible function name, make it "destroy".
workbench.destroy() is descriptive enough.

2) WorkbenchManager.create_workbench() -> WorkbenchManager.create()
  We use the pattern "with workbench_manager.create() as workbench:"
  No need to mention workbenches three times in a row...

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-16 20:19:25 +01:00
Sebastian Spaeth
45ab3e07ef Switch over media processor to use the get_workbench decorator (#565)
This makes workbench getting more convenient by eliminating some
boilerplate and more robust by cleaning the workbench up even if processing
ends with an Exception.

Finally, this fixes the bugs in the ascii and video backends to never call
workbench.destroy, so those workbenches were never cleaned up.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-16 20:19:23 +01:00
Sebastian Spaeth
f91dcc9d96 Implement @get_workbench decorator
This passes in a Workbench() via the 'workbench' keyword argument, and
conveniently cleans it up after the function has finished. 2 out of our 5
backends forgot to clean up their workbench, so this is clearly needed :-).

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-16 20:14:55 +01:00
Sebastian Spaeth
c11c1994e6 Make Workbench() a context manager
This allows us to use "with Workbench() as foo: do_stuff..."
No consumers have been switched yet though.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-16 20:14:55 +01:00
Christopher Allan Webber
f26c097d3e Make the workbench destroy itself for video processing also. 2013-01-16 12:12:57 -06:00
Christopher Allan Webber
3c5f583707 Merge remote-tracking branch 'refs/remotes/spaetz/561_use_workbench_not_tempfiles' 2013-01-16 11:23:38 -06:00
Christopher Allan Webber
27aebe05a6 Merge remote-tracking branch 'refs/remotes/elrond/misc/use_media_id' 2013-01-16 11:06:22 -06:00
Stefano Zacchiroli
4f8f0353b1 collection browsing: rename view/template user_collections -> collection_list
Rationale, avoid confusion between views user_collection and user_collections
(note trailing "s"). Ditto for the collection(s).html templates.
2013-01-15 23:28:10 +01:00
Stefano Zacchiroli
947f38c0b9 collection browsing: remove pagination support
rationale: we do not expect hundreds of collection (and it was likely broken
anyhow)

thanks to Elrond der Elbenfuerst for pointing this out
2013-01-15 23:04:37 +01:00
Stefano Zacchiroli
413fc1c266 collection browsing: drop atom feed from page template
rationale: it refers to something else than a "collection feed"

thanks to Elrond der Elbenfuerst for pointing this out
2013-01-15 21:43:12 +01:00
Stefano Zacchiroli
b0cc1ade40 collections: add support to browse existing collections
- add a route at /u/<user>/collections/ (note trailing 's') that lists
  all existing collections
- move there the "Create new collection" link, if the user is logged in
- add a new link "Browse collections" from root.html
2013-01-15 21:40:05 +01:00
Tiberiu C. Turbureanu
cf764377df #571: Fixed. Display collection description with Markdown formatting. 2013-01-15 18:03:06 +02:00
Sebastian Spaeth
fd61aac7c7 Unbreak 301 responses
The move to werkzeug routing went pretty smooth, but one thing was
broken by accident: URLs without final slash result in a 301
werkzeug.routing.RequestRedirect response. We displayed it as a generic
error page rather than actually sending the redirect. Do that. One thing
it does though is to skip all meddlewares, which should be OK for a 301
response, but might need rework if we decide otherwise. With this, 301
responses with lacking final slash are unbroken again.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-15 16:52:22 +01:00
Sebastian Spaeth
65969d3fb7 Simplify check_media_slug_used
Remove the unused dummy_db argument and generally make the function
readable.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-15 14:49:50 +01:00
Sebastian Spaeth
4fc0a28994 More explicit get_or_create pattern
Don't do "user = getUser() or newUser()" in one line. It is bound to
confuse poor souls. Be more explicit here and even add a code comment.

Thanks to Elrond for not liking the previous pattern.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-15 14:49:50 +01:00
Sebastian Spaeth
947c08ae43 Improve error message wording (#564)
Improve error message wording if no csf cookie could be detected. Also,
make the error text translatable.
2013-01-14 16:09:24 +01:00
Elrond
56cf9f5ff1 Use the new logo.html thingy in airy. 2013-01-13 23:06:15 +01:00
Elrond
17dcc3ae4f Move logo part into bits/logo.html
To make it easier for themers to replace the logo, move it
out into its own logo.html.
2013-01-13 23:06:15 +01:00
Elrond
c96c67ce9e Kill db_host, db_name, and db_port from config_spec.ini.
The last bits of mongo. Let me remove them.
2013-01-13 18:32:09 +01:00
Elrond
461dd9717c Start to use the media_id in "admin" URLs.
We have a bunch of URLs that are more for internal use. At
least they're definitely not intended to be posted
somewhere for long term useage.

When those things affect a media, it's much better to
reference the media by its id. This can't change, ever.
This is better for races.
Like someone posting a comment while the owner
corrects a typo in the slug.
2013-01-11 21:48:03 +01:00
Elrond
8b271c28bd Make runtests.sh be useable from anywhere.
Now you can have your current directory anywhere and call
runtests.sh with full path and it'll find the way to
nosetests and the tests directory on its own.

Most useful if you're inside the mediagoblin/ dir and can
just call "../runtests.sh".
2013-01-11 20:55:35 +01:00
Elrond
7dec9f92f3 issue 355: Only run tests in mediagoblin/tests/
If you don't give an option argument (starting with a dash)
to runtests.sh then it will append the directory with all
the tests to the commandline of nosetests. That way it will
only search there for tests.
2013-01-11 16:28:41 +01:00
Sebastian Spaeth
a3b98853df Improve and extend profile editing tests
We only ever ran the password changing test here, and not the
half-existing test for changing the bio and homepage.

Fix the tests to actually run both tests. We check that setting bio and
homepage to a valid value works as expected. We also test for invalid
bio (too long) and invalid URLs setting fails. (which is what we want).

- Check that the old /edit/profile/ address redirects to /u/USER/edit/.
- Check that /u/USER/edit/ works as expected
- Check that /u/OTHERUSER/edit/ fails with a 403 Forbidden error when we
  are not logged in as that user. The last remaining test that would be
  useful is to make a user an admin and make sure the admin can edit
  other users' profiles.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-09 09:56:53 +01:00
Sebastian Spaeth
abc4da2927 Enable /u/USERNAME/edit/ pattern #588
Transition from the inconsistent /edit/profile/?username=FOO to
the nicer /u/FOO/edit/. The old pattern will still work and
redirects to the new URL.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-09 09:56:53 +01:00
Elrond
6de8b42e4e Fix tests on webtest < 1.3.6.
Debian testing ships webtest 1.3.4. And it would be nice to
use the base packages.

One of the csrf tests fails on webtest < 1.3.6.
But using a fresh app fixes it.
We have no clue, why exactly.

When we require webtest 1.3.6, change this.
2013-01-09 00:22:27 +01:00
Elrond
c130e3ee79 Move db.sql.migration_tools to db.migration_tools.
Follow the new trend.
2013-01-08 22:50:01 +01:00
Elrond
c4466cb4dc Add inspect_table.
In our current scheme of migrations, we reflect the current
sql schema into an SQLAlchemy schema. So let's have a tool
function for this.
2013-01-08 22:50:01 +01:00
Elrond
a050e776c6 Move all the migration tools into new migration_tools.py
Factor all the migration related stuff out into a new
.db.sql.migration_tools.
First we don't have to load this module for our normal
server.
Second it makes all the import dependencies a little more
cleaner.
2013-01-08 22:50:01 +01:00
Christopher Allan Webber
8e7354ef2b Fixing import to mediagoblin.db.base in stl models
Previously we had mediagoblin.db.sql.base, that just changed to drop
the sql; fixing.
2013-01-08 13:24:27 -06:00
Sebastian Spaeth
031d988c29 Merge branch 'WIP/test_performance' 2013-01-08 16:57:15 +01:00
Sebastian Spaeth
b97144dcc9 tests: More instances where a fresh database is not needed
Save test runtime by not dumping the databases when not needed.
2013-01-08 15:55:32 +01:00
Sebastian Spaeth
25e398428b Audio and video should use workbench instead of tempfiles (#561)
We were using lots of tempfiles in the audio and video processing
backends which worked around our workbench system. Still use the
tempfiles package but create them in the workbench directory. This
can help address the uploads of large files (#419) where /tmp might
be a smallish tmpfs and our workbench a real disk.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-08 15:05:03 +01:00
Sebastian Spaeth
5018a3557c Don't read full image media into RAM on copying (#419)
We copy uploaded media from the queue store to the local workbench
and then to its final destination. The latter was done by simply:
dst.write(src.read()) which is of course evil as it reads the whole
file content into RAM. Which *might* arguably still be OK for
images, but you never know.

Make use of the provided storage() methods that offer chunked copying
rather than opening and fudging with files ourselves.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-08 14:51:41 +01:00
Sebastian Spaeth
40cec2b444 Don't get a fresh app when not needed
These tests, don't need fresh databases, so don't discard and recreate
the tables. This reduces test suite runtime on my laptop from 130 to 96
seconds.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-08 11:57:25 +01:00
Sebastian Spaeth
a5cf95c5ad Do not fail is a user exists already
When the tests want to create a new user, don't fail if it already
exists and just reuse the existing one. This allows us to run tests
without dumping the whole database if that is not needed for the tests.
The upcoming tests for test_edit will make use of this.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-08 11:54:44 +01:00
Sebastian Spaeth
7f4e42b0b1 Fix slug lookup regression (#587)
Removing the Mongo InvalidID legacy code removed an explicit check for
"int" for the id lookup. This led the @get_user_media_entry decorator to
fail if we looked up a nonexisting non-numerical slug (it tried to query
the id with a string, which failed). Cast id to int and return 404 in
case it is non-numeric which fixes the regression. It does not fix the
underlying problem of slug_or_id lookups that were discussed.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2013-01-08 08:59:32 +01:00
Joar Wandborg
76e6c2b15e Made the airy header element responsive again 2013-01-07 21:36:31 +01:00