From: Jason Kirtland Date: Tue, 15 Jul 2008 19:53:17 +0000 (+0000) Subject: - Always use native itemgetter & attrgetter X-Git-Tag: rel_0_5beta3~47 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4f56fd23bcd6c0adc11138fa50249095c7d4dd73;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Always use native itemgetter & attrgetter --- diff --git a/lib/sqlalchemy/ext/associationproxy.py b/lib/sqlalchemy/ext/associationproxy.py index 5415bf9885..e856d5e02b 100644 --- a/lib/sqlalchemy/ext/associationproxy.py +++ b/lib/sqlalchemy/ext/associationproxy.py @@ -7,6 +7,7 @@ See the example ``examples/association/proxied_association.py``. """ import itertools +import operator import weakref from sqlalchemy import exceptions from sqlalchemy import orm @@ -206,7 +207,7 @@ class AssociationProxy(object): def _default_getset(self, collection_class): attr = self.value_attr - getter = util.attrgetter(attr) + getter = operator.attrgetter(attr) if collection_class is dict: setter = lambda o, k, v: setattr(o, attr, v) else: diff --git a/lib/sqlalchemy/orm/attributes.py b/lib/sqlalchemy/orm/attributes.py index 85a842c08a..fa5fb69a3c 100644 --- a/lib/sqlalchemy/orm/attributes.py +++ b/lib/sqlalchemy/orm/attributes.py @@ -5,10 +5,11 @@ # the MIT License: http://www.opensource.org/licenses/mit-license.php import operator +from operator import attrgetter, itemgetter import weakref from sqlalchemy import util -from sqlalchemy.util import attrgetter, itemgetter, EMPTY_SET +from sqlalchemy.util import EMPTY_SET from sqlalchemy.orm import interfaces, collections, exc import sqlalchemy.exceptions as sa_exc diff --git a/lib/sqlalchemy/orm/collections.py b/lib/sqlalchemy/orm/collections.py index 98ce70c204..d868145259 100644 --- a/lib/sqlalchemy/orm/collections.py +++ b/lib/sqlalchemy/orm/collections.py @@ -98,6 +98,7 @@ through the adapter, allowing for some very sophisticated behavior. import copy import inspect +import operator import sets import sys import weakref @@ -105,7 +106,7 @@ import weakref import sqlalchemy.exceptions as sa_exc from sqlalchemy import schema import sqlalchemy.util as sautil -from sqlalchemy.util import attrgetter + __all__ = ['collection', 'collection_adapter', @@ -162,7 +163,7 @@ def attribute_mapped_collection(attr_name): after a session flush. """ - return lambda: MappedCollection(attrgetter(attr_name)) + return lambda: MappedCollection(operator.attrgetter(attr_name)) def mapped_collection(keyfunc): diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index f1bd9eb83b..5f9ee46c5a 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -19,6 +19,7 @@ iterable result sets. """ from itertools import chain +from operator import itemgetter from sqlalchemy import sql, util, log, schema from sqlalchemy import exc as sa_exc @@ -1078,7 +1079,7 @@ class Query(object): (process, labels) = zip(*[query_entity.row_processor(self, context, custom_rows) for query_entity in self._entities]) if not single_entity: - labels = dict((label, property(util.itemgetter(i))) + labels = dict((label, property(itemgetter(i))) for i, label in enumerate(labels) if label) rowtuple = type.__new__(type, "RowTuple", (tuple,), labels) diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py index fb989dee05..c026065e3a 100644 --- a/lib/sqlalchemy/sql/expression.py +++ b/lib/sqlalchemy/sql/expression.py @@ -26,6 +26,8 @@ to stay the same in future releases. """ import itertools, re +from operator import attrgetter + from sqlalchemy import util, exc from sqlalchemy.sql import operators, visitors from sqlalchemy import types as sqltypes @@ -1784,7 +1786,7 @@ class FromClause(Selectable): delattr(self, attr) def _expr_attr_func(name): - get = util.attrgetter(name) + get = attrgetter(name) def attr(self): try: return get(self) @@ -2547,7 +2549,7 @@ class _Label(ColumnElement): _label = property(_label) def _proxy_attr(name): - get = util.attrgetter(name) + get = attrgetter(name) def attr(self): return get(self.element) return property(attr) diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py index 1eacca19a8..a389ccca4f 100644 --- a/lib/sqlalchemy/util.py +++ b/lib/sqlalchemy/util.py @@ -27,19 +27,6 @@ try: except ImportError: import pickle - -try: - from operator import attrgetter -except ImportError: - def attrgetter(attribute): - return lambda value: getattr(value, attribute) - -try: - from operator import itemgetter -except ImportError: - def itemgetter(attribute): - return lambda value: value[attribute] - if sys.version_info >= (2, 5): class PopulateDict(dict): """a dict which populates missing values via a creation function. @@ -602,8 +589,9 @@ class OrderedProperties(object): def clear(self): self._data.clear() + class OrderedDict(dict): - """A Dictionary that returns keys/values/items in the order they were added.""" + """A dict that returns keys/values/items in the order they were added.""" def __init__(self, ____sequence=None, **kwargs): self._list = [] @@ -616,10 +604,10 @@ class OrderedDict(dict): def clear(self): self._list = [] dict.clear(self) - + def sort(self, fn=None): self._list.sort(fn) - + def update(self, ____sequence=None, **kwargs): if ____sequence is not None: if hasattr(____sequence, 'keys'):