from mediagoblin.tools.files import delete_media_files
from mediagoblin.tools.common import import_component
from mediagoblin.tools.routing import extract_url_arguments
+from mediagoblin.tools.text import convert_to_tag_list_of_dicts
import six
from six.moves.urllib.parse import urljoin
name=v["name"], filepath=v["filepath"])
)
+ subtitle_files_helper = relationship("MediaSubtitleFile",
+ cascade="all, delete-orphan",
+ order_by="MediaSubtitleFile.created"
+ )
+ subtitle_files = association_proxy("subtitle_files_helper", "dict_view",
+ creator=lambda v: MediaSubtitleFile(
+ name=v["name"], filepath=v["filepath"])
+ )
+
tags_helper = relationship("MediaTag",
cascade="all, delete-orphan" # should be automatically deleted
)
"self": {
"href": public_id,
},
-
}
}
if self.location:
context["location"] = self.get_location.serialize(request)
+ # Always show tags, even if empty list
+ if self.tags:
+ context["tags"] = [tag['name'] for tag in self.tags]
+ else:
+ context["tags"] = []
+
if show_comments:
comments = [
l.comment().serialize(request) for l in self.get_comments()]
if "location" in data:
License.create(data["location"], self)
+ if "tags" in data:
+ self.tags = convert_to_tag_list_of_dicts(', '.join(data["tags"]))
+
return True
class FileKeynames(Base):
"""A dict like view on this object"""
return DictReadAttrProxy(self)
+class MediaSubtitleFile(Base):
+ __tablename__ = "core__subtitle_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.utcnow)
+
+ @property
+ def dict_view(self):
+ """A dict like view on this object"""
+ return DictReadAttrProxy(self)
+
class Tag(Base):
__tablename__ = "core__tags"
return context
MODELS = [
LocalUser, RemoteUser, User, MediaEntry, Tag, MediaTag, Comment, TextComment,
- Collection, CollectionItem, MediaFile, FileKeynames, MediaAttachmentFile,
+ Collection, CollectionItem, MediaFile, FileKeynames, MediaAttachmentFile, MediaSubtitleFile,
ProcessingMetaData, Notification, Client, CommentSubscription, Report,
UserBan, Privilege, PrivilegeUserAssociation, RequestToken, AccessToken,
NonceTimestamp, Activity, Generator, Location, GenericModelReference, Graveyard]