diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-04-23 11:45:06 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-04-23 11:45:06 -0400 |
| commit | ff0fb31bf205a82c4af8781ac9afc96586a67d66 (patch) | |
| tree | 95d3d6164cdfe6104cdde2cb94daab11ec4da17c /lib/sqlalchemy/util | |
| parent | 713a4e19fa6c4397191dd7311152c6c69c37535e (diff) | |
| download | sqlalchemy-ff0fb31bf205a82c4af8781ac9afc96586a67d66.tar.gz | |
- merge attribute flag overhaul for [ticket:2358]
Diffstat (limited to 'lib/sqlalchemy/util')
| -rw-r--r-- | lib/sqlalchemy/util/langhelpers.py | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/lib/sqlalchemy/util/langhelpers.py b/lib/sqlalchemy/util/langhelpers.py index b6c89b11a..d266c9664 100644 --- a/lib/sqlalchemy/util/langhelpers.py +++ b/lib/sqlalchemy/util/langhelpers.py @@ -783,15 +783,21 @@ class classproperty(property): return desc.fget(cls) -class _symbol(object): - def __init__(self, name, doc=None): +class _symbol(int): + def __new__(self, name, doc=None, canonical=None): """Construct a new named symbol.""" assert isinstance(name, str) - self.name = name + if canonical is None: + canonical = hash(name) + v = int.__new__(_symbol, canonical) + v.name = name if doc: - self.__doc__ = doc + v.__doc__ = doc + return v + def __reduce__(self): - return symbol, (self.name,) + return symbol, (self.name, "x", int(self)) + def __repr__(self): return "<symbol '%s>" % self.name @@ -822,12 +828,12 @@ class symbol(object): symbols = {} _lock = threading.Lock() - def __new__(cls, name, doc=None): + def __new__(cls, name, doc=None, canonical=None): cls._lock.acquire() try: sym = cls.symbols.get(name) if sym is None: - cls.symbols[name] = sym = _symbol(name, doc) + cls.symbols[name] = sym = _symbol(name, doc, canonical) return sym finally: symbol._lock.release() |
