diff options
author | Aaron Williamson <aaron@copiesofcopies.org> | 2012-01-19 22:00:08 -0500 |
---|---|---|
committer | Aaron Williamson <aaron@copiesofcopies.org> | 2012-01-19 22:00:08 -0500 |
commit | c8035da197f9ada5279e9198ac4ee4dcd8ca4da1 (patch) | |
tree | 4c582d96b70026756ce2d26b3b3b68f12dfe54c3 | |
parent | 97ec97dbc77373819939557ad20c72a0aced5d61 (diff) | |
parent | fbad3a9fb9b0bd6b35d5906e96ead3485fa5f57a (diff) | |
download | mediagoblin-c8035da197f9ada5279e9198ac4ee4dcd8ca4da1.tar.lz mediagoblin-c8035da197f9ada5279e9198ac4ee4dcd8ca4da1.tar.xz mediagoblin-c8035da197f9ada5279e9198ac4ee4dcd8ca4da1.zip |
Added migration for license field, resolved conflict in db/sql/models.py
-rw-r--r-- | mediagoblin/db/mongo/migrations.py | 7 | ||||
-rw-r--r-- | mediagoblin/db/sql/base.py | 41 | ||||
-rw-r--r-- | mediagoblin/db/sql/convert.py | 17 | ||||
-rw-r--r-- | mediagoblin/db/sql/extratypes.py | 17 | ||||
-rw-r--r-- | mediagoblin/db/sql/fake.py | 19 | ||||
-rw-r--r-- | mediagoblin/db/sql/models.py | 27 | ||||
-rw-r--r-- | mediagoblin/db/sql/open.py | 19 |
7 files changed, 138 insertions, 9 deletions
diff --git a/mediagoblin/db/mongo/migrations.py b/mediagoblin/db/mongo/migrations.py index cf4e94ae..f66ade2b 100644 --- a/mediagoblin/db/mongo/migrations.py +++ b/mediagoblin/db/mongo/migrations.py @@ -108,3 +108,10 @@ def media_type_image_to_multimedia_type_image(database): {'media_type': 'image'}, {'$set': {'media_type': 'mediagoblin.media_types.image'}}, multi=True) + +@RegisterMigration(8) +def mediaentry_add_license(database): + """ + Add the 'license' field for entries that don't have it. + """ + add_table_field(database, 'media_entries', 'license', '') diff --git a/mediagoblin/db/sql/base.py b/mediagoblin/db/sql/base.py index 40140327..6f45b21b 100644 --- a/mediagoblin/db/sql/base.py +++ b/mediagoblin/db/sql/base.py @@ -1,7 +1,44 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011,2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + from sqlalchemy.orm import scoped_session, sessionmaker, object_session +from sqlalchemy.orm.query import Query +from sqlalchemy.sql.expression import desc +from mediagoblin.db.sql.fake import DESCENDING + + +def _get_query_model(query): + cols = query.column_descriptions + assert len(cols) == 1, "These functions work only on simple queries" + return cols[0]["type"] + + +class GMGQuery(Query): + def sort(self, key, direction): + key_col = getattr(_get_query_model(self), key) + if direction is DESCENDING: + key_col = desc(key_col) + return self.order_by(key_col) + + def skip(self, amount): + return self.offset(amount) -Session = scoped_session(sessionmaker()) +Session = scoped_session(sessionmaker(query_cls=GMGQuery)) def _fix_query_dict(query_dict): @@ -29,7 +66,7 @@ class GMGTableBase(object): def get(self, key): return getattr(self, key) - def save(self, validate = True): + def save(self, validate=True): assert validate sess = object_session(self) if sess is None: diff --git a/mediagoblin/db/sql/convert.py b/mediagoblin/db/sql/convert.py index 88614fd4..ac7a66c2 100644 --- a/mediagoblin/db/sql/convert.py +++ b/mediagoblin/db/sql/convert.py @@ -1,3 +1,20 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011,2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + from mediagoblin.init import setup_global_and_app_config, setup_database from mediagoblin.db.mongo.util import ObjectId diff --git a/mediagoblin/db/sql/extratypes.py b/mediagoblin/db/sql/extratypes.py index 88f556d9..33c9edee 100644 --- a/mediagoblin/db/sql/extratypes.py +++ b/mediagoblin/db/sql/extratypes.py @@ -1,3 +1,20 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011,2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + from sqlalchemy.types import TypeDecorator, Unicode diff --git a/mediagoblin/db/sql/fake.py b/mediagoblin/db/sql/fake.py index ba11bfee..482b85da 100644 --- a/mediagoblin/db/sql/fake.py +++ b/mediagoblin/db/sql/fake.py @@ -1,3 +1,20 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011,2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + """ This module contains some fake classes and functions to calm the rest of the code base. Or provide super minimal @@ -10,7 +27,7 @@ Currently: - InvalidId exception - DESCENDING "constant" """ - + DESCENDING = object() # a unique object for this "constant" diff --git a/mediagoblin/db/sql/models.py b/mediagoblin/db/sql/models.py index e07963ca..53ac3d3f 100644 --- a/mediagoblin/db/sql/models.py +++ b/mediagoblin/db/sql/models.py @@ -1,3 +1,20 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011,2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + import datetime from sqlalchemy.ext.declarative import declarative_base @@ -41,8 +58,8 @@ class User(Base, UserMixin): verification_key = Column(Unicode) is_admin = Column(Boolean, default=False, nullable=False) url = Column(Unicode) - bio = Column(UnicodeText) # ?? - bio_html = Column(UnicodeText) # ?? + bio = Column(UnicodeText) # ?? + bio_html = Column(UnicodeText) # ?? fp_verification_key = Column(Unicode) fp_token_expire = Column(DateTime) @@ -65,7 +82,7 @@ class MediaEntry(Base, MediaEntryMixin): media_type = Column(Unicode, nullable=False) state = Column(Unicode, nullable=False) # or use sqlalchemy.types.Enum? license = Column(Unicode, nullable=False) - + fail_error = Column(Unicode) fail_metadata = Column(UnicodeText) @@ -84,7 +101,7 @@ class MediaEntry(Base, MediaEntryMixin): cascade="all, delete-orphan" ) media_files = association_proxy('media_files_helper', 'file_path', - creator=lambda k,v: MediaFile(name=k, file_path=v) + creator=lambda k, v: MediaFile(name=k, file_path=v) ) ## TODO @@ -131,7 +148,7 @@ class MediaTag(Base): class MediaComment(Base): __tablename__ = "media_comments" - + id = Column(Integer, primary_key=True) media_entry = Column( Integer, ForeignKey('media_entries.id'), nullable=False) diff --git a/mediagoblin/db/sql/open.py b/mediagoblin/db/sql/open.py index c682bd3b..3c06c676 100644 --- a/mediagoblin/db/sql/open.py +++ b/mediagoblin/db/sql/open.py @@ -1,3 +1,20 @@ +# GNU MediaGoblin -- federated, autonomous media hosting +# Copyright (C) 2011,2012 MediaGoblin contributors. See AUTHORS. +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + + from sqlalchemy import create_engine from mediagoblin.db.sql.base import Session @@ -8,7 +25,7 @@ class DatabaseMaster(object): def __init__(self, engine): self.engine = engine - for k,v in Base._decl_class_registry.iteritems(): + for k, v in Base._decl_class_registry.iteritems(): setattr(self, k, v) def commit(self): |