aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/db/sql
diff options
context:
space:
mode:
Diffstat (limited to 'mediagoblin/db/sql')
-rw-r--r--mediagoblin/db/sql/base.py10
-rw-r--r--mediagoblin/db/sql/convert.py26
-rw-r--r--mediagoblin/db/sql/models.py36
-rw-r--r--mediagoblin/db/sql/open.py1
4 files changed, 64 insertions, 9 deletions
diff --git a/mediagoblin/db/sql/base.py b/mediagoblin/db/sql/base.py
index 6ed24a03..838080b0 100644
--- a/mediagoblin/db/sql/base.py
+++ b/mediagoblin/db/sql/base.py
@@ -67,6 +67,10 @@ class GMGTableBase(object):
def get(self, key):
return getattr(self, key)
+ def setdefault(self, key, defaultvalue):
+ # The key *has* to exist on sql.
+ return getattr(self, key)
+
def save(self, validate=True):
assert validate
sess = object_session(self)
@@ -75,6 +79,12 @@ class GMGTableBase(object):
sess.add(self)
sess.commit()
+ def delete(self):
+ sess = object_session(self)
+ assert sess is not None, "Not going to delete detached %r" % self
+ sess.delete(self)
+ sess.commit()
+
Base = declarative_base(cls=GMGTableBase)
diff --git a/mediagoblin/db/sql/convert.py b/mediagoblin/db/sql/convert.py
index 36d6fc7f..250c559b 100644
--- a/mediagoblin/db/sql/convert.py
+++ b/mediagoblin/db/sql/convert.py
@@ -19,7 +19,8 @@ from mediagoblin.init import setup_global_and_app_config, setup_database
from mediagoblin.db.mongo.util import ObjectId
from mediagoblin.db.sql.models import (Base, User, MediaEntry, MediaComment,
- Tag, MediaTag, MediaFile)
+ Tag, MediaTag, MediaFile, MediaAttachmentFile)
+from mediagoblin.media_types.video.models import VideoData
from mediagoblin.db.sql.open import setup_connection_and_db_from_config as \
sql_connect
from mediagoblin.db.mongo.open import setup_connection_and_db_from_config as \
@@ -49,7 +50,7 @@ def copy_reference_attr(entry, new_entry, ref_attr):
def convert_users(mk_db):
session = Session()
- for entry in mk_db.User.find():
+ for entry in mk_db.User.find().sort('created'):
print entry.username
new_entry = User()
@@ -71,7 +72,7 @@ def convert_users(mk_db):
def convert_media_entries(mk_db):
session = Session()
- for entry in mk_db.MediaEntry.find():
+ for entry in mk_db.MediaEntry.find().sort('created'):
print repr(entry.title)
new_entry = MediaEntry()
@@ -92,6 +93,15 @@ def convert_media_entries(mk_db):
new_file.media_entry = new_entry.id
Session.add(new_file)
+ for attachment in entry.attachment_files:
+ new_attach = MediaAttachmentFile(
+ name=attachment["name"],
+ filepath=attachment["filepath"],
+ created=attachment["created"]
+ )
+ new_attach.media_entry = new_entry.id
+ Session.add(new_attach)
+
session.commit()
session.close()
@@ -100,7 +110,7 @@ def convert_media_tags(mk_db):
session = Session()
session.autoflush = False
- for media in mk_db.MediaEntry.find():
+ for media in mk_db.MediaEntry.find().sort('created'):
print repr(media.title)
for otag in media.tags:
@@ -127,7 +137,7 @@ def convert_media_tags(mk_db):
def convert_media_comments(mk_db):
session = Session()
- for entry in mk_db.MediaComment.find():
+ for entry in mk_db.MediaComment.find().sort('created'):
print repr(entry.content)
new_entry = MediaComment()
@@ -145,8 +155,8 @@ def convert_media_comments(mk_db):
session.close()
-def main():
- global_config, app_config = setup_global_and_app_config("mediagoblin.ini")
+def run_conversion(config_name):
+ global_config, app_config = setup_global_and_app_config(config_name)
sql_conn, sql_db = sql_connect(app_config)
mk_conn, mk_db = mongo_connect(app_config)
@@ -164,4 +174,4 @@ def main():
if __name__ == '__main__':
- main()
+ run_conversion("mediagoblin.ini")
diff --git a/mediagoblin/db/sql/models.py b/mediagoblin/db/sql/models.py
index 699dbf33..dbc9ca05 100644
--- a/mediagoblin/db/sql/models.py
+++ b/mediagoblin/db/sql/models.py
@@ -118,6 +118,15 @@ class MediaEntry(Base, MediaEntryMixin):
creator=lambda k, v: MediaFile(name=k, file_path=v)
)
+ attachment_files_helper = relationship("MediaAttachmentFile",
+ cascade="all, delete-orphan",
+ order_by="MediaAttachmentFile.created"
+ )
+ attachment_files = association_proxy("attachment_files_helper", "dict_view",
+ creator=lambda v: MediaAttachmentFile(
+ name=v["name"], filepath=v["filepath"])
+ )
+
tags_helper = relationship("MediaTag",
cascade="all, delete-orphan"
)
@@ -127,7 +136,6 @@ class MediaEntry(Base, MediaEntryMixin):
## TODO
# media_data
- # attachment_files
# fail_error
_id = SimpleFieldAlias("id")
@@ -159,6 +167,15 @@ class MediaEntry(Base, MediaEntryMixin):
if media is not None:
return media.url_for_self(urlgen)
+ @property
+ def media_data(self):
+ # TODO: Replace with proper code to read the correct table
+ return {}
+
+ def media_data_init(self, **kwargs):
+ # TODO: Implement this
+ pass
+
class MediaFile(Base):
"""
@@ -177,6 +194,23 @@ class MediaFile(Base):
return "<MediaFile %s: %r>" % (self.name, self.file_path)
+class MediaAttachmentFile(Base):
+ __tablename__ = "core__attachment_files"
+
+ id = Column(Integer, primary_key=True)
+ media_entry = Column(
+ Integer, ForeignKey(MediaEntry.id),
+ nullable=False)
+ name = Column(Unicode, nullable=False)
+ filepath = Column(PathTupleWithSlashes)
+ created = Column(DateTime, nullable=False, default=datetime.datetime.now)
+
+ @property
+ def dict_view(self):
+ """A dict like view on this object"""
+ return DictReadAttrProxy(self)
+
+
class Tag(Base):
__tablename__ = "tags"
diff --git a/mediagoblin/db/sql/open.py b/mediagoblin/db/sql/open.py
index 1bfc5538..a8677bcb 100644
--- a/mediagoblin/db/sql/open.py
+++ b/mediagoblin/db/sql/open.py
@@ -36,6 +36,7 @@ class DatabaseMaster(object):
Session.flush()
def reset_after_request(self):
+ Session.rollback()
Session.remove()