summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/util/compat.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-05-30 16:20:59 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-05-30 16:20:59 -0400
commitbef93660c1b4a613d8545d6d04f9cac45254cd89 (patch)
treed2c82b55c6739c1c30c83c93453be2d9b0e7ac9b /lib/sqlalchemy/util/compat.py
parent6e64098eff7e9c15c98aa0d29fa5ec9ae8267e85 (diff)
downloadsqlalchemy-bef93660c1b4a613d8545d6d04f9cac45254cd89.tar.gz
- implement armin's awesome metaclass adaptor, can drop the refs to MetaBase.
Diffstat (limited to 'lib/sqlalchemy/util/compat.py')
-rw-r--r--lib/sqlalchemy/util/compat.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/sqlalchemy/util/compat.py b/lib/sqlalchemy/util/compat.py
index 3bbce5dde..fea22873c 100644
--- a/lib/sqlalchemy/util/compat.py
+++ b/lib/sqlalchemy/util/compat.py
@@ -209,6 +209,21 @@ else:
def with_metaclass(meta, *bases):
- """Create a base class with a metaclass."""
+ """Create a base class with a metaclass.
+
+ Drops the middle class upon creation.
+
+ Source: http://lucumr.pocoo.org/2013/5/21/porting-to-python-3-redux/
+
+ """
+
+ class metaclass(meta):
+ __call__ = type.__call__
+ __init__ = type.__init__
+ def __new__(cls, name, this_bases, d):
+ if this_bases is None:
+ return type.__new__(cls, name, (), d)
+ return meta(name, bases, d)
+ return metaclass('temporary_class', None, {})
+
- return meta("MetaBase", bases, {})