from alembic.ddl import base
from alembic import util
from sqlalchemy import types as sqltypes
-from sqlalchemy import util as sqla_util
class ImplMeta(type):
def __init__(cls, classname, bases, dict_):
def _exec(self, construct, execution_options=None,
multiparams=(),
- params=sqla_util.immutabledict()):
+ params=util.immutabledict()):
if isinstance(construct, basestring):
construct = text(construct)
if self.as_sql:
obj.__dict__[self.__name__] = result = self.fget(obj)
return result
+
+class immutabledict(dict):
+
+ def _immutable(self, *arg, **kw):
+ raise TypeError("%s object is immutable" % self.__class__.__name__)
+
+ __delitem__ = __setitem__ = __setattr__ = \
+ clear = pop = popitem = setdefault = \
+ update = _immutable
+
+ def __new__(cls, *args):
+ new = dict.__new__(cls)
+ dict.__init__(new, *args)
+ return new
+
+ def __init__(self, *args):
+ pass
+
+ def __reduce__(self):
+ return immutabledict, (dict(self), )
+
+ def union(self, d):
+ if not self:
+ return immutabledict(d)
+ else:
+ d2 = immutabledict(self)
+ dict.update(d2, d)
+ return d2
+
+ def __repr__(self):
+ return "immutabledict(%s)" % dict.__repr__(self)