From bd385dcc962e19143cd8e9297b0d5dfe950b9d2d Mon Sep 17 00:00:00 2001 From: bsimpson63 Date: Tue, 24 Jul 2012 19:07:51 -0400 Subject: [PATCH] SimpleBuilder operates on a list of names, no lookups of Things. --- r2/r2/models/builder.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/r2/r2/models/builder.py b/r2/r2/models/builder.py index 94301044a..306ffcf77 100755 --- a/r2/r2/models/builder.py +++ b/r2/r2/models/builder.py @@ -419,6 +419,10 @@ class QueryBuilder(Builder): after_count) class IDBuilder(QueryBuilder): + def thing_lookup(self, names): + return Thing._by_fullname(names, data=True, return_dict=False, + stale=self.stale) + def init_query(self): names = list(tup(self.query)) @@ -461,9 +465,31 @@ class IDBuilder(QueryBuilder): done = True self.names, new_names = names[slice_size:], names[:slice_size] - new_items = Thing._by_fullname(new_names, data = True, return_dict=False, stale=self.stale) + new_items = self.thing_lookup(new_names) return done, new_items + +class FakeThing(object): + def __init__(self, name): + self._id = name + +class SimpleBuilder(IDBuilder): + def thing_lookup(self, names): + return [FakeThing(name) for name in names] + + def init_query(self): + names = list(tup(self.query)) + self.names = self._get_after(names, self.after, self.reverse) + + def get_items(self): + items, prev, next, bcount, acount = IDBuilder.get_items(self) + items = [i._id for i in items] + if prev: + prev = prev._id + if next: + next = next._id + return (items, prev, next, bcount, acount) + class SearchBuilder(IDBuilder): def __init__(self, query, wrap=Wrapped, keep_fn=None, skip=False, skip_deleted_authors=True, **kw):