From: Mike Bayer Date: Tue, 13 Mar 2012 04:59:22 +0000 (-0700) Subject: copy immutabledict here to remove dependency on sqla 0.7, [#36] X-Git-Tag: rel_0_2_2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=494191413c80a01a7156fbe5fc6788d269e5e9ed;p=thirdparty%2Fsqlalchemy%2Falembic.git copy immutabledict here to remove dependency on sqla 0.7, [#36] --- diff --git a/alembic/ddl/impl.py b/alembic/ddl/impl.py index 32f4860e..c87189b3 100644 --- a/alembic/ddl/impl.py +++ b/alembic/ddl/impl.py @@ -5,7 +5,6 @@ from sqlalchemy import schema 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_): @@ -58,7 +57,7 @@ class DefaultImpl(object): 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: diff --git a/alembic/util.py b/alembic/util.py index eb2d11e7..d5fa5a45 100644 --- a/alembic/util.py +++ b/alembic/util.py @@ -210,3 +210,34 @@ class memoized_property(object): 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)