aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/db
Commit message (Collapse)AuthorAgeFilesLines
...
* Use GenerateSlugMixin for collections.Elrond2013-04-062-13/+4
| | | | | Use the new way of generating slugs also for collections. Also drop the dummy_db arg to check_collection_slug_used.
* Refactor generate_slug into a mixin.Elrond2013-04-061-9/+13
| | | | | Refactor the new generate_slug into a mixin to allow it to be used for collections also.
* A bit of pep8: Remove useless whitespace.Elrond2013-03-301-5/+5
|
* Merge branch 'joar-skip_transcoding'Christopher Allan Webber2013-03-041-12/+16
|\
| * self.media_data->self.media_manager in the docstring. Thanks for catching, ↵Christopher Allan Webber2013-03-031-1/+1
| | | | | | | | | | | | Elrond. This commit sponsored by Sebastian Hugentobler. Thank you!
| * No reason really to pass in fetch_order anyway...Christopher Allan Webber2013-03-031-7/+5
| | | | | | | | | | | | | | I think this is legacy code from get_display_media being a utility, or something. Removed! (Thanks for pointing this out, Elrond!) This commit sponsored by Tristan Chambers. Thank you!
| * Huge amount of work to (mostly) allow .ogg (and maybe other) formats to skip ↵Christopher Allan Webber2013-03-021-9/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | transcode - Update get_display_media in several ways: - now uses the media type's own declaration of the order of things - returns both the media_size and the media_path, as per the docstring - implicitly uses self.media_files as opposed to forcing you to pass it in - update videos to use get_display_media - update images to declare media_fetch_order in the media manager (videos also) - update stl to use media.media_files['original'] instead of weird use of get_display_media - update sidebar to only conditionally show webm_640 TODO still: identify video type information *during* processing, show that in the <video><source /></video> element. This commit sponsored by Nathan Yergler. Thanks, nyergler!
* | Give a more useful error if a table already exists and so we can't create it ↵Christopher Allan Webber2013-03-041-1/+7
|/ | | | | | during migrations This commit sponsored by Andrzej Prochyra. Thanks!
* Simplifying the test for whether or not a user and slug combo exists.Christopher Allan Webber2013-02-271-3/+1
| | | | | | | Thanks to tchernobog for catching this (it was breaking on postgres) and Elrond for the suggestion on how to fix it. This commit sponsored by Caleb Cooper. Thanks Caleb!
* Media URLs with ids in them are now like /u/cwebber/m/id:4112/ rather than ↵Christopher Allan Webber2013-02-261-2/+4
| | | | | | | | /u/cwebber/m/4112/ This avoids some potential name collision issues. This commit sponsored by Asokan Pichai. Thank you!
* Import sqlalchemy's and_ and use it in our select statementChristopher Allan Webber2013-02-261-2/+3
| | | | This commit sponsored by Hans-Jörg Dollansky. Thank you!
* And of course, we need to actually commit at the end of a migration.Christopher Allan Webber2013-02-261-0/+3
| | | | This commit sponsored by Tamas Kemenczy. Thanks, Tamas!
* Dope'ily missed .count() on the query where we're countingChristopher Allan Webber2013-02-251-1/+1
| | | | | | Thanks for catching, Elrond. This commit sponsored by Graham King. Thank you!
* Supplying migrations for a bold new era of mediagoblin entry slugsChristopher Allan Webber2013-02-251-0/+54
| | | | | | | | | | | | | | | | Okay, that's a totally confusing statement, but the docstring of this migration summarizes it well: Entries without slugs now display differently in the url like: /u/cwebber/m/id=251/ ... because of this, we should back-convert: - entries without slugs should be converted to use the id, if possible, to make old urls still work - slugs with = (or also : which is now also not allowed) to have those stripped out (small possibility of breakage here sadly) This commit sponsored by John Sullivan. Thanks johnsu01! :)
* Fix deleting media with attachments.Elrond2013-02-181-0/+1
| | | | | | | | | | | | | | If one deletes a media with attachments, there have been various problems: 1) If the file in the storage did not exist any more (maybe because due to a previous deletion attempt?), the error propagation failed, because the wrong thing was gathered. 2) The attachment database entries were not deleted. Using cascade for this, for now. Also add a simple unit test, that tests both by having a broken attachment on a media.
* Drop backward compatibility for media_data backref.Elrond2013-02-011-9/+1
| | | | Now we only support media_type backrefs with uselist=False.
* Drop media_data_table property.Elrond2013-02-011-6/+3
| | | | | Only when creating a new media_data row, we need the table. So load that locally in media_data_init().
* Rewrite media_data handling to use relationshipsElrond2013-02-011-20/+21
| | | | | | | | | | | | | | | | | | Instead of doing query by hand, use the relationships on the models to find the media_data. Is is made possible by the BACKREF_NAME in each models.py, which lets us know the local attr to ask for. Also initialize the relationship attribute on new media_data instead of the media_id. Also do not add it to the session. This gives us: - This automatically initializes the other side of the relationship, which will allow later acces via that way. - If the media_data is too early in the session, when the (new) media_entry is not yet in there, this could get conflicts. Avoid those by not adding to session. - Uses cascading to commit media_data together with the media_entry.
* Fix issue 611: Proper (back)relationship on MediaComment.Elrond2013-01-291-1/+7
| | | | well, fix the relationship on the comments.
* Merge branch '216_cwebber_style_unique_slugs'Christopher Allan Webber2013-01-251-9/+61
|\
| * New mediaentry slug tests now pass!Christopher Allan Webber2013-01-231-3/+4
| | | | | | | | | | | | - fixed some issues with "whacking uuid junk on the slug" - uuid4() -> uuid.uuid4() so that mock will work right - added all the tests!
| * We don't want any empty string slugs, so make "" -> NoneChristopher Allan Webber2013-01-231-0/+4
| |
| * Switching uuid4()[1:4] -> uuid4().hex[:4]Christopher Allan Webber2013-01-231-1/+1
| | | | | | | | | | | | .hex is what we need to access to get at the ascii (hex) version anyway. Also, not sure why the previous version grabbed starting at the index of 1... just grab the first characters instead.
| * Simplifying string concatenation in generate_slug and fixing docstringChristopher Allan Webber2013-01-151-5/+7
| | | | | | | | | | | | | | | | - made the mistake of copying some commit message things into the docstring. Fixed. - elrond points out that += is nicer and we don't need u"" in this case since we're not concatenating a variable, we're concatenating a known ascii string.
| * A revised algorithm for generating slugs.Christopher Allan Webber2013-01-151-11/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This one does not *force* slugs, but usually it will probably result in a niceish one. The end *result* of the algorithm will (presumably, I have not tested it) result in these resolutions for these situations: - If we have a slug, make sure it's clean and sanitized, and if it's unique, we'll use that. - If we have a title, slugify it, and if it's unique, we'll use that. - If we can't get any sort of thing that looks like it'll be a useful slug out of a title or an existing slug, bail, and don't set the slug at all. Don't try to create something just because. Make sure we have a reasonable basis for a slug first. - If we have a reasonable basis for a slug (either based on existing slug or slugified title) but it's not unique, first try appending the entry's id, if that exists - If that doesn't result in something unique, tack on some randomly generated bits until it's unique. That'll be a little bit of junk, but at least it has the *basis* of a nice slug!
| * Need to import uuid4 for generate_slug to totally workChristopher Allan Webber2013-01-151-0/+2
| |
| * Make generate_slug assign a slug in any caseSebastian Spaeth2013-01-151-8/+15
| | | | | | | | | | | | | | | | | | | | | | | | generate_slug could assign "none" as slug. Make sure it assigns a unique slug in any case. We now try based on: a) existing slug values b) media.title c) media.id d) random garbage Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
* | Use better relationships to delete collections.Elrond2013-01-231-5/+8
| | | | | | | | | | | | When deleting a User, his/her collections can be deleted by sqlalchemy: Collections do not need any special code to be executed on deletion.
* | Use inspect_table; default user license==None.Elrond2013-01-221-3/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use inspect_table in the new migration. Makes code more readable, really. And make the default for the preferred license be None. This is a userspace thing, so we can even change the migration here. Changing the migration means, that people running the migration before this commit get a "" in User.license_preference, while people running the migration now get a None. Both values are okay. None has been designated as "Use the site's default". We're not actually having a site default right now. Which means no license is selected in the dropdown. While "" means "All rights reserved" being chosen by the user. Side note: Having no license being selected in the submit dropdown is as "worse" as before and does not really hurt much. MediaEntry.license==None means "All rights reserved" as does "" also do.
* | Merge remote-tracking branch 'refs/remotes/spaetz/521_license_preference' ↵Christopher Allan Webber2013-01-222-0/+13
|\ \ | | | | | | | | | into mergetest
| * | Add a license preference fieldMark Holmquist2013-01-172-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This feature is absolutely necessary. Now a user can simply define their default license and quickly go through a form, as opposed to stopping to click on the select and choosing the same option over and over again. Also added DB migration for the field, so that's working now, too. Rebased by Sebastian and made the default value to be unicode. Reviewed-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
* | | Enable foreign key checking on sqlite.Elrond2013-01-181-1/+12
|/ / | | | | | | | | | | sqlite normally does not check foreign key referential integrity. But it can do so. So let's use it. Better safe than sorry.
* | import db.sql.util -> db.utilSebastian Spaeth2013-01-171-1/+1
| | | | | | | | | | | | | | 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>
* | Implement User.delete() (#540)Sebastian Spaeth2013-01-171-1/+22
| | | | | | | | | | | | | | | | | | 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)
* | Implement Collection.delete()Sebastian Spaeth2013-01-171-1/+10
| | | | | | | | | | | | Deleting a Collection should automatically delete all containing items. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
* | Implement MediaEntry().delete() (#540)Sebastian Spaeth2013-01-171-3/+36
|/ | | | | | | | | | | | 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>
* Simplify check_media_slug_usedSebastian Spaeth2013-01-152-7/+5
| | | | | | | Remove the unused dummy_db argument and generally make the function readable. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
* Move db.sql.migration_tools to db.migration_tools.Elrond2013-01-082-1/+1
| | | | Follow the new trend.
* Add inspect_table.Elrond2013-01-082-7/+11
| | | | | | 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.
* Move all the migration tools into new migration_tools.pyElrond2013-01-083-250/+265
| | | | | | | | | 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.
* Remove custom GMQuery classSebastian Spaeth2013-01-071-14/+1
| | | | | | | | | We provided a custom GMQuery class that offered a .sort() method for compatibility with the Mongo syntax. Now that we have settled for sqlalchemy which uses the order_by() method, we can safely remove this custom class and move a little closer to "pure" and native sqlalchemy usage. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
* Mv db.sql.base to db.baseSebastian Spaeth2013-01-076-21/+4
| | | | | | | | This concludes the db.sql.* -> db.* move. Our db abstraction layer is sqlalchemy, so there is no need to a separate db.sql.* hierarchy. All tests have been run for each of the commit series to make sure everything works at every step.
* Move mediagoblin.db.sql.extratypes to mediagoblin.db.extratypesSebastian Spaeth2013-01-073-2/+2
| | | | No other functional changes.
* Move db.sql.models* to db.models*Sebastian Spaeth2013-01-075-5/+5
|
* Move db.sql.util to db.utilSebastian Spaeth2013-01-073-331/+310
| | | | | | | | Now that sqlalchemy is providing the database abstractions, there is no need to hide everything in db.sql. sub-modules. It complicates the code and provides a futher layer of indirection. Move the db.sql.util.py to db.util.py and adapt the importers.
* Remove mediagoblin.db.sql.fake.DESCENDINGSebastian Spaeth2013-01-073-35/+1
| | | | | | | | This is the last remnant that requires us to keep db.sql.fake.py. Use ModelName.desc() or sqlalchemy.sql.expression.desc(column) to achieve descending sorts. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
* Remove ObjectId from the treeSebastian Spaeth2012-12-252-10/+1
| | | | | | | This was one of the last remaining Mongo holdouts and has been removed from the tree herewith. Good bye, ObjectId. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
* Remove InvalidIdSebastian Spaeth2012-12-252-10/+2
| | | | | | It was a NoOp in our Non-mongo world. So it is safe to remove. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
* Move db.sql.migrations to db.migrationsSebastian Spaeth2012-12-251-0/+0
|
* Move db.sql.open to db.openSebastian Spaeth2012-12-253-82/+63
| | | | | | Now that mongo has been ripped out and sqlalchemy is already providing the database abstraction, there is no need to hide everything in the sql module. Transition db.sql.open to db.open and adapt all direct importers.