diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-03-29 16:31:31 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-03-29 16:31:31 +0000 |
commit | 6a1970e978bea1fc4a95b17f69ce0af65d424806 (patch) | |
tree | 2dc5c105fc6d551012714dac4cafe7de08b5ba96 /lib/sqlalchemy | |
parent | 4fef0a23a175e64475955a67dd557347cc99f19a (diff) | |
download | sqlalchemy-6a1970e978bea1fc4a95b17f69ce0af65d424806.tar.gz |
turned starargs conversion to a decorator, per jek's advice. select().order_by()/group_by() already take *args.
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r-- | lib/sqlalchemy/orm/query.py | 14 | ||||
-rw-r--r-- | lib/sqlalchemy/util.py | 16 |
2 files changed, 17 insertions, 13 deletions
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 8c0f1335d..1d4b24e0c 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -529,24 +529,26 @@ class Query(object): q = self._no_statement("order_by") if self._aliases_tail: - criterion = [expression._literal_as_text(o) for o in util.starargs_as_list(*criterion)] + criterion = [expression._literal_as_text(o) for o in criterion] criterion = self._aliases_tail.adapt_list(criterion) if q._order_by is False: - q._order_by = util.starargs_as_list(*criterion) + q._order_by = criterion else: - q._order_by = q._order_by + util.starargs_as_list(*criterion) + q._order_by = q._order_by + criterion return q - + order_by = util.array_as_starargs_decorator(order_by) + def group_by(self, *criterion): """apply one or more GROUP BY criterion to the query and return the newly resulting ``Query``""" q = self._no_statement("group_by") if q._group_by is False: - q._group_by = util.starargs_as_list(*criterion) + q._group_by = criterion else: - q._group_by = q._group_by + util.starargs_as_list(*criterion) + q._group_by = q._group_by + criterion return q + group_by = util.array_as_starargs_decorator(group_by) def having(self, criterion): """apply a HAVING criterion to the query and return the newly resulting ``Query``.""" diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py index 6919d1557..26b6dbe9a 100644 --- a/lib/sqlalchemy/util.py +++ b/lib/sqlalchemy/util.py @@ -188,15 +188,17 @@ def to_list(x, default=None): else: return x -def starargs_as_list(*args): - """interpret the given *args as either a list of *args, - or detect if it's a single list and return that. +def array_as_starargs_decorator(func): + """Interpret a single positional array argument as + *args for the decorated method. """ - if len(args) == 1: - return to_list(args[0], []) - else: - return list(args) + def starargs_as_list(self, *args, **kwargs): + if len(args) == 1: + return func(self, *to_list(args[0], []), **kwargs) + else: + return func(self, *args, **kwargs) + return starargs_as_list def to_set(x): if x is None: |