SQL: fail_metadata as JSON encoded field
fail_metadata used to be a dict in mongo. So a json encoded field should be okay too. We could use a pickled field instead, which would be more flexible.
This commit is contained in:
parent
feba5c5287
commit
cf27accc9e
@ -79,7 +79,7 @@ def convert_media_entries(mk_db):
|
||||
('title', 'slug', 'created',
|
||||
'description',
|
||||
'media_type', 'state', 'license',
|
||||
'fail_error',
|
||||
'fail_error', 'fail_metadata',
|
||||
'queued_task_id',))
|
||||
copy_reference_attr(entry, new_entry, "uploader")
|
||||
|
||||
|
@ -15,7 +15,8 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
from sqlalchemy.types import TypeDecorator, Unicode
|
||||
from sqlalchemy.types import TypeDecorator, Unicode, VARCHAR
|
||||
import json
|
||||
|
||||
|
||||
class PathTupleWithSlashes(TypeDecorator):
|
||||
@ -35,3 +36,28 @@ class PathTupleWithSlashes(TypeDecorator):
|
||||
if value is not None:
|
||||
value = tuple(value.split('/'))
|
||||
return value
|
||||
|
||||
|
||||
# The following class and only this one class is in very
|
||||
# large parts based on example code from sqlalchemy.
|
||||
#
|
||||
# The original copyright notice and license follows:
|
||||
# Copyright (C) 2005-2011 the SQLAlchemy authors and contributors <see AUTHORS file>
|
||||
#
|
||||
# This module is part of SQLAlchemy and is released under
|
||||
# the MIT License: http://www.opensource.org/licenses/mit-license.php
|
||||
#
|
||||
class JSONEncoded(TypeDecorator):
|
||||
"Represents an immutable structure as a json-encoded string."
|
||||
|
||||
impl = VARCHAR
|
||||
|
||||
def process_bind_param(self, value, dialect):
|
||||
if value is not None:
|
||||
value = json.dumps(value)
|
||||
return value
|
||||
|
||||
def process_result_value(self, value, dialect):
|
||||
if value is not None:
|
||||
value = json.loads(value)
|
||||
return value
|
||||
|
@ -29,7 +29,7 @@ from sqlalchemy.orm.collections import attribute_mapped_collection
|
||||
from sqlalchemy.sql.expression import desc
|
||||
from sqlalchemy.ext.associationproxy import association_proxy
|
||||
|
||||
from mediagoblin.db.sql.extratypes import PathTupleWithSlashes
|
||||
from mediagoblin.db.sql.extratypes import PathTupleWithSlashes, JSONEncoded
|
||||
from mediagoblin.db.sql.base import Base, DictReadAttrProxy
|
||||
from mediagoblin.db.mixin import UserMixin, MediaEntryMixin, MediaCommentMixin
|
||||
|
||||
@ -91,7 +91,7 @@ class MediaEntry(Base, MediaEntryMixin):
|
||||
license = Column(Unicode)
|
||||
|
||||
fail_error = Column(Unicode)
|
||||
fail_metadata = Column(UnicodeText)
|
||||
fail_metadata = Column(JSONEncoded)
|
||||
|
||||
queued_media_file = Column(PathTupleWithSlashes)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user