Move to use MutableDict from new SQLAlchemy versions

This was legacy code where MutableDict has to be reinvented. This
restriction is no longer valid now.
This commit is contained in:
tengqm 2015-01-06 09:45:09 +08:00
parent 28e4729ddf
commit 4240ca5972
2 changed files with 3 additions and 76 deletions

View File

@ -1,62 +0,0 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
#
# The MIT License
#
# ext/mutable.py
# Copyright (C) 2005-2013 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/lic enses/mit-license.php
"""
Submitted on behalf of a third-party: sqlalchemy
"""
from sqlalchemy.ext.mutable import Mutable
class MutableDict(Mutable, dict):
"""A dictionary type that implements :class:`.Mutable`.
.. versionadded:: 0.8
"""
def __setitem__(self, key, value):
"""Detect dictionary set events and emit change events."""
dict.__setitem__(self, key, value)
self.changed()
def __delitem__(self, key):
"""Detect dictionary del events and emit change events."""
dict.__delitem__(self, key)
self.changed()
def clear(self):
dict.clear(self)
self.changed()
@classmethod
def coerce(cls, key, value):
"""Convert plain dictionary to MutableDict."""
if not isinstance(value, MutableDict):
if isinstance(value, dict):
return MutableDict(value)
return Mutable.coerce(key, value)
else:
return value
def __getstate__(self):
return dict(self)
def __setstate__(self, state):
self.update(state)

View File

@ -14,9 +14,9 @@
import json
from sqlalchemy.dialects import mysql
from sqlalchemy.ext import mutable
from sqlalchemy import types
dumps = json.dumps
loads = json.loads
@ -32,7 +32,6 @@ class LongText(types.TypeDecorator):
class Json(LongText):
def process_bind_param(self, value, dialect):
return dumps(value)
@ -42,15 +41,5 @@ class Json(LongText):
return loads(value)
def associate_with(sqltype):
# TODO(leizhang) When we removed sqlalchemy 0.7 dependence
# we can import MutableDict directly and remove ./mutable.py
try:
from sqlalchemy.ext import mutable
mutable.MutableDict.associate_with(Json)
except ImportError:
from senlin.db.sqlalchemy import mutable
mutable.MutableDict.associate_with(Json)
associate_with(LongText)
associate_with(Json)
mutable.MutableDict.associate_with(LongText)
mutable.MutableDict.associate_with(Json)