diff options
author | Elrond <elrond+mediagoblin.org@samba-tng.org> | 2012-02-25 23:53:11 +0100 |
---|---|---|
committer | Elrond <elrond+mediagoblin.org@samba-tng.org> | 2012-02-28 20:52:35 +0100 |
commit | 3502958113c09c80830b7bee63c3d82b5ff72eb9 (patch) | |
tree | ae5037d788612b6822791cf8e2b6ba279ff2e475 | |
parent | e9f87f728ce67467272d9484b711e2a518537cb4 (diff) | |
download | mediagoblin-3502958113c09c80830b7bee63c3d82b5ff72eb9.tar.lz mediagoblin-3502958113c09c80830b7bee63c3d82b5ff72eb9.tar.xz mediagoblin-3502958113c09c80830b7bee63c3d82b5ff72eb9.zip |
Attachment support in the SQL backend
attachments working with the sql backend.
- SQL Schema for attachment files, ordering attachments by
their name, not by the submission order (as earlier).
- Dot-Notation for attachments, where missing.
- convert existing attachments over from mongo -> sql
-rw-r--r-- | mediagoblin/db/sql/convert.py | 11 | ||||
-rw-r--r-- | mediagoblin/db/sql/models.py | 27 | ||||
-rw-r--r-- | mediagoblin/edit/views.py | 2 | ||||
-rw-r--r-- | mediagoblin/tools/files.py | 2 |
4 files changed, 38 insertions, 4 deletions
diff --git a/mediagoblin/db/sql/convert.py b/mediagoblin/db/sql/convert.py index 403025dc..79717913 100644 --- a/mediagoblin/db/sql/convert.py +++ b/mediagoblin/db/sql/convert.py @@ -19,7 +19,7 @@ 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.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 \ @@ -92,6 +92,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() diff --git a/mediagoblin/db/sql/models.py b/mediagoblin/db/sql/models.py index 699dbf33..b52eac76 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") @@ -177,6 +185,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/edit/views.py b/mediagoblin/edit/views.py index 3df36e8e..d21ef03a 100644 --- a/mediagoblin/edit/views.py +++ b/mediagoblin/edit/views.py @@ -120,7 +120,7 @@ def edit_attachments(request, media): finally: request.POST['attachment_file'].file.close() - media['attachment_files'].append(dict( + media.attachment_files.append(dict( name=request.POST['attachment_name'] \ or request.POST['attachment_file'].filename, filepath=attachment_public_filepath, diff --git a/mediagoblin/tools/files.py b/mediagoblin/tools/files.py index b2f316b2..25c1a6e6 100644 --- a/mediagoblin/tools/files.py +++ b/mediagoblin/tools/files.py @@ -27,6 +27,6 @@ def delete_media_files(media): mg_globals.public_store.delete_file( listpath) - for attachment in media['attachment_files']: + for attachment in media.attachment_files: mg_globals.public_store.delete_file( attachment['filepath']) |