aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mediagoblin/db/sql/convert.py11
-rw-r--r--mediagoblin/db/sql/models.py27
-rw-r--r--mediagoblin/edit/views.py2
-rw-r--r--mediagoblin/tools/files.py2
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'])