From: Mike Bayer Date: Wed, 3 Jun 2015 14:08:33 +0000 (-0400) Subject: - changelog for pr bitbucket:54 X-Git-Tag: rel_1_0_5~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=47d29eae8fa14ab7b1aab63797860a475338f950;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - changelog for pr bitbucket:54 - alter the approach so that the initial callable is working just like add_criteria/with_criteria --- diff --git a/doc/build/changelog/changelog_10.rst b/doc/build/changelog/changelog_10.rst index 038b5b4da1..63f2c797f8 100644 --- a/doc/build/changelog/changelog_10.rst +++ b/doc/build/changelog/changelog_10.rst @@ -18,6 +18,16 @@ .. changelog:: :version: 1.0.5 + .. change:: + :tags: feature, ext + :pullreq: bitbucket:54 + + Added support for ``*args`` to be passed to the baked query + initial callable, in the same way that ``*args`` are supported + for the :meth:`.BakedQuery.add_criteria` and + :meth:`.BakedQuery.with_criteria` methods. Initial PR courtesy + Naoki INADA. + .. change:: :tags: bug, engine :tickets: 3435 diff --git a/lib/sqlalchemy/ext/baked.py b/lib/sqlalchemy/ext/baked.py index 96e1f1312f..f01e0b348d 100644 --- a/lib/sqlalchemy/ext/baked.py +++ b/lib/sqlalchemy/ext/baked.py @@ -34,11 +34,8 @@ class BakedQuery(object): __slots__ = 'steps', '_bakery', '_cache_key', '_spoiled' def __init__(self, bakery, initial_fn, args=()): - if args: - self._cache_key = tuple(args) - else: - self._cache_key = () - self._update_cache_key(initial_fn) + self._cache_key = () + self._update_cache_key(initial_fn, args) self.steps = [initial_fn] self._spoiled = False self._bakery = bakery @@ -49,7 +46,7 @@ class BakedQuery(object): _bakery = util.LRUCache(size) - def call(initial_fn, args=()): + def call(initial_fn, *args): return cls(_bakery, initial_fn, args) return call diff --git a/test/ext/test_baked.py b/test/ext/test_baked.py index 92ce45c3f9..78c43fc7e0 100644 --- a/test/ext/test_baked.py +++ b/test/ext/test_baked.py @@ -242,6 +242,26 @@ class ResultTest(BakedTest): }) mapper(Address, cls.tables.addresses) + def test_cachekeys_on_constructor(self): + User = self.classes.User + + queue = [7, 8] + fn = lambda s: s.query(User.id).filter_by(id=queue.pop(0)) + bq1 = self.bakery(fn, 7) + bq2 = self.bakery(fn, 8) + + for i in range(3): + session = Session(autocommit=True) + eq_( + bq1(session).all(), + [(7,)] + ) + + eq_( + bq2(session).all(), + [(8,)] + ) + def test_no_steps(self): User = self.classes.User