]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- remove all compat items that are pre-2.5 (hooray)
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 9 Mar 2013 22:26:16 +0000 (17:26 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 9 Mar 2013 22:26:16 +0000 (17:26 -0500)
- other cleanup
- don't need compat.decimal, that approach never panned out. hopefully
outside libs aren't pulling it in, they shouldn't be

24 files changed:
lib/sqlalchemy/dialects/firebird/kinterbasdb.py
lib/sqlalchemy/dialects/mssql/pyodbc.py
lib/sqlalchemy/dialects/oracle/cx_oracle.py
lib/sqlalchemy/dialects/postgresql/pg8000.py
lib/sqlalchemy/dialects/postgresql/psycopg2.py
lib/sqlalchemy/dialects/sybase/pyodbc.py
lib/sqlalchemy/orm/mapper.py
lib/sqlalchemy/pool.py
lib/sqlalchemy/testing/profiling.py
lib/sqlalchemy/testing/util.py
lib/sqlalchemy/types.py
lib/sqlalchemy/util/__init__.py
lib/sqlalchemy/util/_collections.py
lib/sqlalchemy/util/compat.py
lib/sqlalchemy/util/langhelpers.py
lib/sqlalchemy/util/topological.py
test/aaa_profiling/test_memusage.py
test/dialect/test_mssql.py
test/dialect/test_oracle.py
test/dialect/test_postgresql.py
test/orm/test_default_strategies.py
test/perf/stress_all.py
test/sql/test_functions.py
test/sql/test_types.py

index 206dbf38b65719ed393e06ce3f13370348b9af15..d581f799a32e6337444fbf326d1f6968fd668e3c 100644 (file)
@@ -50,8 +50,8 @@ __ http://kinterbasdb.sourceforge.net/dist_docs/usage.html#special_issue_concurr
 
 from .base import FBDialect, FBExecutionContext
 from ... import util, types as sqltypes
-from ...util.compat import decimal
 from re import match
+import decimal
 
 
 class _FBNumeric_kinterbasdb(sqltypes.Numeric):
index 8854d1caaf216b0032a4e5eadda7d6d262d6c63e..beb6066f54324562d02ca06d2863d92072ddf88c 100644 (file)
@@ -114,7 +114,7 @@ for unix + PyODBC.
 from .base import MSExecutionContext, MSDialect
 from ...connectors.pyodbc import PyODBCConnector
 from ... import types as sqltypes, util
-from ...util.compat import decimal
+import decimal
 
 
 class _MSNumeric_pyodbc(sqltypes.Numeric):
index fd9fea8789d9a673a3119a5bd0111376b32f9dd8..b8f7439f59960960838420da91771b809a408876 100644 (file)
@@ -190,7 +190,7 @@ from ...engine import result as _result
 from sqlalchemy import types as sqltypes, util, exc, processors
 import random
 import collections
-from sqlalchemy.util.compat import decimal
+import decimal
 import re
 
 
index 214db348c743a1c589b2e99aaa311680c71e3f25..0e503746c77a5cfd792812a11fce93e8ffdb57f2 100644 (file)
@@ -27,7 +27,7 @@ yet.
 
 """
 from ... import util, exc
-from ...util.compat import decimal
+import decimal
 from ... import processors
 from ... import types as sqltypes
 from .base import PGDialect, \
index 649a95ee64e98cb980370aa00bcac1b450227864..1f118067fa7419c9a059c410fa0a51ed2b2f0751 100644 (file)
@@ -147,7 +147,7 @@ import re
 import logging
 
 from ... import util, exc
-from ...util.compat import decimal
+import decimal
 from ... import processors
 from ...engine import result as _result
 from ...sql import expression
index 644f4edb1d2967213e025ee7841a331e965a4ff6..283c60da34e29d3fc289ddeeeb2c5c4252a9a7cc 100644 (file)
@@ -36,7 +36,7 @@ from sqlalchemy.dialects.sybase.base import SybaseDialect,\
                                             SybaseExecutionContext
 from sqlalchemy.connectors.pyodbc import PyODBCConnector
 from sqlalchemy import types as sqltypes, processors
-from sqlalchemy.util.compat import decimal
+import decimal
 
 
 class _SybNumeric_pyodbc(sqltypes.Numeric):
index 4e7b4d272b75457da0e3bc84203e3046f2eab709..2d7f62153a90c4e5f0a7ab091ad71ef057870ecd 100644 (file)
@@ -2224,7 +2224,7 @@ def _event_on_resurrect(state):
                                             state, state.dict, col, val)
 
 
-class _ColumnMapping(util.py25_dict):
+class _ColumnMapping(dict):
     """Error reporting helper for mapper._columntoproperty."""
 
     def __init__(self, mapper):
index f72082ceb21d7cfb78b02df07086587bf9f17c08..501b6d2a0ce86e1fef54b2c29a8af3fd6f664787 100644 (file)
@@ -736,8 +736,8 @@ class QueuePool(Pool):
         self._overflow = 0 - pool_size
         self._max_overflow = max_overflow
         self._timeout = timeout
-        self._overflow_lock = self._max_overflow > -1 and \
-                                    threading.Lock() or DummyLock()
+        self._overflow_lock = threading.Lock() if self._max_overflow > -1 \
+                                    else DummyLock()
 
     def _do_return_conn(self, conn):
         try:
index ae9d176b746836e4827596443101ac8d6ed5296c..19a9731beb6d1b4728483633193fa11cf33d6308 100644 (file)
@@ -14,11 +14,12 @@ import pstats
 import time
 import collections
 from .. import util
+
 try:
     import cProfile
 except ImportError:
     cProfile = None
-from ..util.compat import jython, pypy, win32
+from ..util import jython, pypy, win32, update_wrapper
 
 _current_test = None
 
@@ -210,7 +211,6 @@ class ProfileStatsFile(object):
                 profile_f.write("%s %s %s\n" % (test_key, platform_key, c))
         profile_f.close()
 
-from sqlalchemy.util.compat import update_wrapper
 
 
 def function_call_count(variance=0.05):
index 2592c341e3db2b445d32962bc0c9a51d9a22d074..d9ff14eaf6e39f3f3a8b800401df31ff62afd0dc 100644 (file)
@@ -1,6 +1,5 @@
 from ..util import jython, pypy, defaultdict, decorator
-from ..util.compat import decimal
-
+import decimal
 import gc
 import time
 import random
index b9f7b94442466e73014e5bd287c20dfb4e4fee4c..08aba4b56b046a336051f060cb186db4d09aef3e 100644 (file)
@@ -25,10 +25,10 @@ import codecs
 
 from . import exc, schema, util, processors, events, event
 from .sql import operators
-from .sql.expression import _DefaultColumnComparator, column, bindparam
+from .sql.expression import _DefaultColumnComparator
 from .util import pickle
-from .util.compat import decimal
 from .sql.visitors import Visitable
+import decimal
 default = util.importlater("sqlalchemy.engine", "default")
 
 NoneType = type(None)
@@ -1372,8 +1372,7 @@ class Numeric(_DateAffinity, TypeEngine):
        implementations however, most of which contain an import for plain
        ``decimal`` in their source code, even though some such as psycopg2
        provide hooks for alternate adapters. SQLAlchemy imports ``decimal``
-       globally as well. While the alternate ``Decimal`` class can be patched
-       into SQLA's ``decimal`` module, overall the most straightforward and
+       globally as well.  The most straightforward and
        foolproof way to use "cdecimal" given current DBAPI and Python support
        is to patch it directly into sys.modules before anything else is
        imported::
index 249c46eadb45b1e3ce0e6233c5aab3983e3989bb..57bbdca85bf7aea3e6e541035f4ffe6e18fe252d 100644 (file)
@@ -4,10 +4,9 @@
 # This module is part of SQLAlchemy and is released under
 # the MIT License: http://www.opensource.org/licenses/mit-license.php
 
-from .compat import callable, cmp, reduce, defaultdict, py25_dict, \
+from .compat import callable, cmp, reduce,  \
     threading, py3k, py3k_warning, jython, pypy, cpython, win32, set_types, \
-    buffer, pickle, update_wrapper, partial, md5_hex, decode_slice, \
-    dottedgetter, parse_qsl, any, contextmanager, namedtuple, next, WeakSet
+    pickle, dottedgetter, parse_qsl, namedtuple, next, WeakSet
 
 from ._collections import KeyedTuple, ImmutableContainer, immutabledict, \
     Properties, OrderedProperties, ImmutableProperties, OrderedDict, \
@@ -21,8 +20,8 @@ from .langhelpers import iterate_attributes, class_hierarchy, \
     portable_instancemethod, unbound_method_to_callable, \
     getargspec_init, format_argspec_init, format_argspec_plus, \
     get_func_kwargs, get_cls_kwargs, decorator, as_interface, \
-    memoized_property, memoized_instancemethod, \
-    group_expirable_memoized_property, importlater, \
+    memoized_property, memoized_instancemethod, md5_hex, \
+    group_expirable_memoized_property, importlater, decode_slice, \
     monkeypatch_proxied_specials, asbool, bool_or_str, coerce_kw_type,\
     duck_type_collection, assert_arg_type, symbol, dictlike_iteritems,\
     classproperty, set_creation_order, warn_exception, warn, NoneType,\
@@ -31,3 +30,10 @@ from .langhelpers import iterate_attributes, class_hierarchy, \
 
 from .deprecations import warn_deprecated, warn_pending_deprecation, \
     deprecated, pending_deprecation
+
+# things that used to be not always available,
+# but are now as of current support Python versions
+from collections import defaultdict
+from functools import partial
+from functools import update_wrapper
+from contextlib import contextmanager
index ca77103b27eac3a230418f7227fef931801d2046..2c9c982fb9f8fe68587705ad2b911339d188ac53 100644 (file)
@@ -6,7 +6,6 @@
 
 """Collection classes and helpers."""
 
-import sys
 import itertools
 import weakref
 import operator
@@ -649,37 +648,25 @@ class OrderedIdentitySet(IdentitySet):
                 self.add(o)
 
 
-if sys.version_info >= (2, 5):
-    class PopulateDict(dict):
-        """A dict which populates missing values via a creation function.
+class PopulateDict(dict):
+    """A dict which populates missing values via a creation function.
 
-        Note the creation function takes a key, unlike
-        collections.defaultdict.
+    Note the creation function takes a key, unlike
+    collections.defaultdict.
 
-        """
-
-        def __init__(self, creator):
-            self.creator = creator
-
-        def __missing__(self, key):
-            self[key] = val = self.creator(key)
-            return val
-else:
-    class PopulateDict(dict):
-        """A dict which populates missing values via a creation function."""
+    """
 
-        def __init__(self, creator):
-            self.creator = creator
+    def __init__(self, creator):
+        self.creator = creator
 
-        def __getitem__(self, key):
-            try:
-                return dict.__getitem__(self, key)
-            except KeyError:
-                self[key] = value = self.creator(key)
-                return value
+    def __missing__(self, key):
+        self[key] = val = self.creator(key)
+        return val
 
-# define collections that are capable of storing
+# Define collections that are capable of storing
 # ColumnElement objects as hashable keys/elements.
+# At this point, these are mostly historical, things
+# used to be more complicated.
 column_set = set
 column_dict = dict
 ordered_column_set = OrderedSet
index 3725a849111ae5cb5ed1c1f39a13d3142eac96ab..12d349a5b86e36d05afabada774fe2b34513ed5f 100644 (file)
@@ -54,44 +54,6 @@ else:
     except ImportError:
         import pickle
 
-
-# a controversial feature, required by MySQLdb currently
-def buffer(x):
-    return x
-
-# Py2K
-buffer = buffer
-# end Py2K
-
-try:
-    from contextlib import contextmanager
-except ImportError:
-    def contextmanager(fn):
-        return fn
-
-try:
-    from functools import update_wrapper
-except ImportError:
-    def update_wrapper(wrapper, wrapped,
-                       assigned=('__doc__', '__module__', '__name__'),
-                       updated=('__dict__',)):
-        for attr in assigned:
-            setattr(wrapper, attr, getattr(wrapped, attr))
-        for attr in updated:
-            getattr(wrapper, attr).update(getattr(wrapped, attr, ()))
-        return wrapper
-
-try:
-    from functools import partial
-except ImportError:
-    def partial(func, *args, **keywords):
-        def newfunc(*fargs, **fkeywords):
-            newkeywords = keywords.copy()
-            newkeywords.update(fkeywords)
-            return func(*(args + fargs), **newkeywords)
-        return newfunc
-
-
 if sys.version_info < (2, 6):
     # emits a nasty deprecation warning
     # in newer pythons
@@ -131,52 +93,6 @@ except ImportError:
         tuptype = type(typename, (tuple, ), {'__new__': __new__})
         return tuptype
 
-try:
-    from collections import defaultdict
-except ImportError:
-    class defaultdict(dict):
-
-        def __init__(self, default_factory=None, *a, **kw):
-            if (default_factory is not None and
-                not hasattr(default_factory, '__call__')):
-                raise TypeError('first argument must be callable')
-            dict.__init__(self, *a, **kw)
-            self.default_factory = default_factory
-
-        def __getitem__(self, key):
-            try:
-                return dict.__getitem__(self, key)
-            except KeyError:
-                return self.__missing__(key)
-
-        def __missing__(self, key):
-            if self.default_factory is None:
-                raise KeyError(key)
-            self[key] = value = self.default_factory()
-            return value
-
-        def __reduce__(self):
-            if self.default_factory is None:
-                args = tuple()
-            else:
-                args = self.default_factory,
-            return type(self), args, None, None, self.iteritems()
-
-        def copy(self):
-            return self.__copy__()
-
-        def __copy__(self):
-            return type(self)(self.default_factory, self)
-
-        def __deepcopy__(self, memo):
-            import copy
-            return type(self)(self.default_factory,
-                              copy.deepcopy(self.items()))
-
-        def __repr__(self):
-            return 'defaultdict(%s, %s)' % (self.default_factory,
-                                            dict.__repr__(self))
-
 try:
     from weakref import WeakSet
 except:
@@ -199,79 +115,12 @@ except:
         def add(self, other):
             self._storage[other] = True
 
-
-# find or create a dict implementation that supports __missing__
-class _probe(dict):
-    def __missing__(self, key):
-        return 1
-
-try:
-    try:
-        _probe()['missing']
-        py25_dict = dict
-    except KeyError:
-        class py25_dict(dict):
-            def __getitem__(self, key):
-                try:
-                    return dict.__getitem__(self, key)
-                except KeyError:
-                    try:
-                        missing = self.__missing__
-                    except AttributeError:
-                        raise KeyError(key)
-                    else:
-                        return missing(key)
-finally:
-    del _probe
-
-
-try:
-    import hashlib
-    _md5 = hashlib.md5
-except ImportError:
-    import md5
-    _md5 = md5.new
-
-
-def md5_hex(x):
-    # Py3K
-    #x = x.encode('utf-8')
-    m = _md5()
-    m.update(x)
-    return m.hexdigest()
-
 import time
 if win32 or jython:
     time_func = time.clock
 else:
     time_func = time.time
 
-if sys.version_info >= (2, 5):
-    any = any
-else:
-    def any(iterator):
-        for item in iterator:
-            if bool(item):
-                return True
-        else:
-            return False
-
-if sys.version_info >= (2, 5):
-    def decode_slice(slc):
-        """decode a slice object as sent to __getitem__.
-
-        takes into account the 2.5 __index__() method, basically.
-
-        """
-        ret = []
-        for x in slc.start, slc.stop, slc.step:
-            if hasattr(x, '__index__'):
-                x = x.__index__()
-            ret.append(x)
-        return tuple(ret)
-else:
-    def decode_slice(slc):
-        return (slc.start, slc.stop, slc.step)
 
 if sys.version_info >= (2, 6):
     from operator import attrgetter as dottedgetter
@@ -283,5 +132,3 @@ else:
             return obj
         return g
 
-
-import decimal
index a9b791234dc4f77b1fcead8f81476c7c689ac3dc..e3aed24d8a487b397bc801bc2c20af9a3a7ef429 100644 (file)
@@ -15,10 +15,31 @@ import re
 import sys
 import types
 import warnings
-from .compat import update_wrapper, set_types, threading, \
+from .compat import set_types, threading, \
     callable, inspect_getfullargspec
+from functools import update_wrapper
 from .. import exc
+import hashlib
 
+def md5_hex(x):
+    # Py3K
+    #x = x.encode('utf-8')
+    m = hashlib.md5()
+    m.update(x)
+    return m.hexdigest()
+
+def decode_slice(slc):
+    """decode a slice object as sent to __getitem__.
+
+    takes into account the 2.5 __index__() method, basically.
+
+    """
+    ret = []
+    for x in slc.start, slc.stop, slc.step:
+        if hasattr(x, '__index__'):
+            x = x.__index__()
+        ret.append(x)
+    return tuple(ret)
 
 def _unique_symbols(used, *bases):
     used = set(used)
@@ -123,7 +144,7 @@ def get_cls_kwargs(cls):
         ctr = class_.__dict__.get('__init__', False)
         if (not ctr or
             not isinstance(ctr, types.FunctionType) or
-            not isinstance(ctr.func_code, types.CodeType)):
+                not isinstance(ctr.func_code, types.CodeType)):
             stack.update(class_.__bases__)
             continue
 
@@ -256,7 +277,6 @@ def format_argspec_init(method, grouped=True):
     try:
         return format_argspec_plus(method, grouped=grouped)
     except TypeError:
-        self_arg = 'self'
         if method is object.__init__:
             args = grouped and '(self)' or 'self'
         else:
@@ -784,7 +804,7 @@ def duck_type_collection(specimen, default=None):
     if hasattr(specimen, '__emulates__'):
         # canonicalize set vs sets.Set to a standard: the builtin set
         if (specimen.__emulates__ is not None and
-            issubclass(specimen.__emulates__, set_types)):
+                issubclass(specimen.__emulates__, set_types)):
             return set
         else:
             return specimen.__emulates__
index 6f895e7b7697050280977ffafb1edd78244c6a4c..de3dfd0aeb0c83a826d79f7b1db88fa9e6f47972 100644 (file)
@@ -49,7 +49,8 @@ def sort(tuples, allitems):
 
 
 def find_cycles(tuples, allitems):
-    # straight from gvr with some mods
+    # adapted from:
+    # http://neopythonic.blogspot.com/2009/01/detecting-cycles-in-directed-graph.html
 
     edges = util.defaultdict(set)
     for parent, child in tuples:
index aabc0a2bc2c102c7da1dc0df5d784b01347a6a7b..05be3900291c6db7afbc88d82b2a231bda4eea15 100644 (file)
@@ -14,7 +14,7 @@ from sqlalchemy.sql import column
 from sqlalchemy.processors import to_decimal_processor_factory, \
     to_unicode_processor_factory
 from sqlalchemy.testing.util import gc_collect
-from sqlalchemy.util.compat import decimal
+import decimal
 import gc
 from sqlalchemy.testing import fixtures
 import weakref
index 52ba77310ba6615da60912c5d4964919b43cf567..06f3d2805e008e6ba642480aa9b568306bac69e3 100644 (file)
@@ -13,9 +13,8 @@ from sqlalchemy.engine import url
 from sqlalchemy.testing import fixtures, AssertsCompiledSQL, \
         AssertsExecutionResults, ComparesTables
 from sqlalchemy import testing
-from sqlalchemy.testing import eq_, emits_warning_on, \
-    assert_raises_message
-from sqlalchemy.util.compat import decimal
+from sqlalchemy.testing import emits_warning_on, assert_raises_message
+import decimal
 from sqlalchemy.engine.reflection import Inspector
 
 class CompileTest(fixtures.TestBase, AssertsCompiledSQL):
index 7384d7bb48596b5bd98918fbd25acb16e02e77ff..861b28c5f718c1a9def7fa9facc461bff765f5d2 100644 (file)
@@ -7,12 +7,11 @@ from sqlalchemy import types as sqltypes, exc, schema
 from sqlalchemy.sql import table, column
 from sqlalchemy.testing import fixtures, AssertsExecutionResults, AssertsCompiledSQL
 from sqlalchemy import testing
-from sqlalchemy.testing import eq_, assert_raises, assert_raises_message
+from sqlalchemy.testing import assert_raises, assert_raises_message
 from sqlalchemy.testing.engines import testing_engine
 from sqlalchemy.dialects.oracle import cx_oracle, base as oracle
 from sqlalchemy.engine import default
-from sqlalchemy.util import jython
-from sqlalchemy.util.compat import decimal
+import decimal
 from sqlalchemy.testing.schema import Table, Column
 import datetime
 import os
index 3337fa6ab7b17c7129e41f8ac4aee07814a79e35..d9fb9830dfc7e1d5e3f9448afac6a7759c12570f 100644 (file)
@@ -17,8 +17,8 @@ from sqlalchemy import Table, Column, select, MetaData, text, Integer, \
 from sqlalchemy.orm import Session, mapper, aliased
 from sqlalchemy import exc, schema, types
 from sqlalchemy.dialects.postgresql import base as postgresql
-from sqlalchemy.dialects.postgresql import HSTORE, hstore, array, ARRAY
-from sqlalchemy.util.compat import decimal
+from sqlalchemy.dialects.postgresql import HSTORE, hstore, array
+import decimal
 from sqlalchemy.testing.util import round_decimal
 from sqlalchemy.sql import table, column, operators
 import logging
@@ -734,7 +734,6 @@ class NumericInterpretationTest(fixtures.TestBase):
 
     def test_numeric_codes(self):
         from sqlalchemy.dialects.postgresql import pg8000, psycopg2, base
-        from sqlalchemy.util.compat import decimal
 
         for dialect in (pg8000.dialect(), psycopg2.dialect()):
 
index b986ac568e7973c12d4a26e644fcfbfd613b9359..c1668cdd446f8f8c41091b908241216b163381fe 100644 (file)
@@ -2,7 +2,6 @@ from test.orm import _fixtures
 from sqlalchemy import testing
 from sqlalchemy.orm import mapper, relationship, create_session
 from sqlalchemy import util
-from sqlalchemy.util import any
 import sqlalchemy as sa
 from sqlalchemy.testing import eq_, assert_raises_message
 
index d17028530ffec7573c69ce9d81808f7e78cbb42d..890ef24a340fea852641e30ec25f655769e68263 100644 (file)
@@ -1,6 +1,6 @@
 # -*- encoding: utf8 -*-
 from datetime import *
-from sqlalchemy.util.compat import decimal
+import decimal
 #from fastdec import mpd as Decimal
 from cPickle import dumps, loads
 
index ae8e28e24821a980920ea91ce96578e8aaf45319..b325b7763af20d17249bb573a322ab4a45e17228 100644 (file)
@@ -8,7 +8,7 @@ from sqlalchemy.testing.engines import all_dialects
 from sqlalchemy import types as sqltypes
 from sqlalchemy.sql import functions
 from sqlalchemy.sql.functions import GenericFunction
-from sqlalchemy.util.compat import decimal
+import decimal
 from sqlalchemy import testing
 from sqlalchemy.testing import fixtures, AssertsCompiledSQL, engines
 from sqlalchemy.dialects import sqlite, postgresql, mysql, oracle
index 3c981e539c8556fb99c463a51fad8436b85a365a..fac22a205be942201225ba3829365da844d86ffb 100644 (file)
@@ -15,7 +15,6 @@ from sqlalchemy import testing
 from sqlalchemy.testing import AssertsCompiledSQL, AssertsExecutionResults, \
     engines, pickleable
 from sqlalchemy.testing.util import picklers
-from sqlalchemy.util.compat import decimal
 from sqlalchemy.testing.util import round_decimal
 from sqlalchemy.testing import fixtures