From 494191413c80a01a7156fbe5fc6788d269e5e9ed Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Mon, 12 Mar 2012 21:59:22 -0700 Subject: [PATCH] copy immutabledict here to remove dependency on sqla 0.7, [#36] --- alembic/ddl/impl.py | 3 +-- alembic/util.py | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) 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 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 @@ def bind(self): 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 @@ def __get__(self, obj, cls): 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)