Created
July 7, 2015 16:44
-
-
Save jerith/8b33d3253b03f57625fa to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from twisted.internet.defer import Deferred | |
| class Page(object): | |
| def __init__(self, results, morefunc): | |
| self.results = results | |
| self._morefunc = morefunc | |
| def next_page(self): | |
| return self._morefunc() | |
| class PageMaker(object): | |
| def __init__(self, all_results, page_size): | |
| self._all_results = all_results[:] | |
| self._page_size = page_size | |
| def get_page(self): | |
| d = Deferred() | |
| if not self._all_results: | |
| d.callback(None) | |
| else: | |
| results = self._all_results[:self._page_size] | |
| self._all_results[:self._page_size] = [] | |
| d.callback(Page(results, self.get_page)) | |
| return d | |
| pm1 = PageMaker(range(10), 3) | |
| # In the real world, this deferred probably won't have a result yet. We can | |
| # cheat here because get_page() always calls d.callback(). | |
| page_d = pm1.get_page() | |
| print "Deferred page:", page_d | |
| page = page_d.result | |
| while page is not None: | |
| print "Page:", page, page.results | |
| page_d = page.next_page() | |
| print "Deferred page:", page_d | |
| page = page_d.result |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment