Skip to content

Commit

Permalink
refactor ontrol flow pattern in _get_paged_metas
Browse files Browse the repository at this point in the history
  • Loading branch information
leVirve committed Aug 7, 2016
1 parent 210ad69 commit becc5f1
Showing 1 changed file with 15 additions and 12 deletions.
27 changes: 15 additions & 12 deletions dcard/forums.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from __future__ import unicode_literals, absolute_import

import logging
from itertools import takewhile, count

from dcard import api
from dcard.utils import flatten_lists
Expand Down Expand Up @@ -47,30 +48,32 @@ def _get_paged_metas(self, sort, num, timebound=''):
params = {'popular': False} if sort == 'new' else {}
pages = -(-num // self.metas_per_page) if num >= 0 else self.infinite_page

def approved_metas(metas):
def refine_metas(metas):
if num and page == pages:
metas = metas[:num - (pages - 1) * self.metas_per_page]

if timebound:
metas = [m for m in metas if m['updatedAt'] > timebound]

return metas

page = 0
while page != pages:
page += 1
metas = self.client.get(self.posts_meta_url, params=params)

def eager_for_metas(bundle):
page, metas = bundle
if page == pages + 1:
return False
if len(metas) == 0:
logger.warning('[%s] 已到最末頁,第%d頁!' % (self.name, page))
return
return len(metas) != 0

params['before'] = metas[-1]['id']
def get_metas():
while True:
yield self.client.get(self.posts_meta_url, params=params)

paged_metas = zip(count(start=1), get_metas())

metas = approved_metas(metas)
for page, metas in takewhile(eager_for_metas, paged_metas):
params['before'] = metas[-1]['id']
metas = refine_metas(metas)
if len(metas) == 0:
return

yield metas

def _initial_forum(self, name):
Expand Down

0 comments on commit becc5f1

Please sign in to comment.