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:
parent
28e4729ddf
commit
4240ca5972
@ -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)
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user