diff --git a/couchpotato/core/plugins/library/main.py b/couchpotato/core/plugins/library/main.py index 168aead..b0d34dd 100644 --- a/couchpotato/core/plugins/library/main.py +++ b/couchpotato/core/plugins/library/main.py @@ -87,7 +87,7 @@ class LibraryPlugin(Plugin): library.tagline = toUnicode(info.get('tagline', '')) library.year = info.get('year', 0) library.status_id = done_status.get('id') - library.info = info + library.info.update(info) db.commit() # Titles @@ -148,7 +148,7 @@ class LibraryPlugin(Plugin): if dates and dates.get('expires', 0) < time.time() or not dates: dates = fireEvent('movie.release_date', identifier = identifier, merge = True) - library.info = mergeDicts(library.info, {'release_date': dates }) + library.info.update({'release_date': dates }) db.commit() db.expire_all() diff --git a/couchpotato/core/providers/movie/_modifier/main.py b/couchpotato/core/providers/movie/_modifier/main.py index 148d903..e4d7022 100644 --- a/couchpotato/core/providers/movie/_modifier/main.py +++ b/couchpotato/core/providers/movie/_modifier/main.py @@ -28,7 +28,6 @@ class MovieResultModifier(Plugin): 'tagline': '', 'imdb': '', 'genres': [], - 'release_date': {} } def __init__(self): diff --git a/couchpotato/core/settings/model.py b/couchpotato/core/settings/model.py index 6c8deb1..00ac34e 100644 --- a/couchpotato/core/settings/model.py +++ b/couchpotato/core/settings/model.py @@ -3,6 +3,7 @@ from elixir.entity import Entity from elixir.fields import Field from elixir.options import options_defaults, using_options from elixir.relationships import ManyToMany, OneToMany, ManyToOne +from sqlalchemy.ext.mutable import Mutable from sqlalchemy.types import Integer, Unicode, UnicodeText, Boolean, String, \ TypeDecorator import json @@ -39,6 +40,37 @@ class JsonType(TypeDecorator): def process_result_value(self, value, dialect): return json.loads(value if value else '{}') +class MutableDict(Mutable, dict): + + @classmethod + def coerce(cls, key, value): + if not isinstance(value, MutableDict): + if isinstance(value, dict): + return MutableDict(value) + return Mutable.coerce(key, value) + else: + return value + + def __delitem(self, key): + dict.__delitem__(self, key) + self.changed() + + def __setitem__(self, key, value): + dict.__setitem__(self, key, value) + self.changed() + + def __getstate__(self): + return dict(self) + + def __setstate__(self, state): + self.update(self) + + def update(self, *args, **kwargs): + super(MutableDict, self).update(*args, **kwargs) + self.changed() + +MutableDict.associate_with(JsonType) + class Movie(Entity): """Movie Resource a movie could have multiple releases