X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?a=blobdiff_plain;f=yoweb-scrape;h=ca704f73d7c91eda466a46cdc8e09fdae2df2b86;hb=d7116eae2df2e3518d2752a3714a15490b3462ac;hp=d2d194c213e9039b941a1465c464239654ca14ae;hpb=9cec9bede40ddd31329097b6952d7a72ec005bbc;p=ypp-sc-tools.db-test.git diff --git a/yoweb-scrape b/yoweb-scrape index d2d194c..ca704f7 100755 --- a/yoweb-scrape +++ b/yoweb-scrape @@ -348,7 +348,7 @@ class CrewInfo(SomethingSoupInfo): #---------- pretty-printer for tables of pirate puzzle standings ---------- class StandingsTable: - def __init__(self, use_puzzles=None, col_width=6): + def __init__(self, use_puzzles=None, col_width=6, gap_every=5): if use_puzzles is None: if opts.ship_duty: use_puzzles=duty_puzzles @@ -357,14 +357,21 @@ class StandingsTable: self._puzzles = use_puzzles self.s = '' self._cw = col_width-1 + self._gap_every = gap_every + self._linecount = 0 def _pline(self, pirate, puzstrs, extra): + if (self._linecount > 0 + and self._gap_every is not None + and not (self._linecount % self._gap_every)): + self.s += '\n' self.s += ' %-*s' % (max(max_pirate_namelen, 14), pirate) for v in puzstrs: self.s += ' %-*.*s' % (self._cw,self._cw, v) if extra: self.s += ' ' + extra self.s += '\n' + self._linecount += 1 def _puzstr(self, pi, puzzle): if not isinstance(puzzle,list): puzzle = [puzzle] @@ -382,7 +389,7 @@ class StandingsTable: s += '+' * (standing % 2) return s - def headings(self): + def headings(self, lhs=''): def puzn_redact(name): if isinstance(name,list): return '/'.join( @@ -391,9 +398,12 @@ class StandingsTable: spc = name.find(' ') if spc < 0: return name return name[0:min(4,spc)] + name[spc+1:] - self._pline('', map(puzn_redact, self._puzzles), None) + self._linecount = -2 + self._pline(lhs, map(puzn_redact, self._puzzles), None) + self._linecount = 0 def literalline(self, line): self.s += line + '\n' + self._linecount = 0 def pirate_dummy(self, name, standingstring, extra=None): self._pline(name, standingstring * len(self._puzzles), extra) def pirate(self, pi, extra=None): @@ -878,6 +888,7 @@ def do_standings_crew_of(args, bu): tab.headings() for (rank, members) in ci.crew: if not members: continue + tab.literalline('') tab.literalline('%s:' % rank) for p in members: pi = PirateInfo(p, random.randint(900,1800)) @@ -1077,13 +1088,12 @@ def ship_aid_core(myself, track, displayer, kreader): s += kreader.info() s += '\n' - tbl = StandingsTable() - tbl.headings() - aboard = track.aboard(vn) - sort.lsort_pa(aboard) + tbl = StandingsTable() + tbl.headings(' %d aboard' % len(aboard)) + for pa in aboard: pi = pa.pirate_info() @@ -1184,6 +1194,10 @@ display modes (for --display) apply to ship-aid: ao('--all-puzzles', action='store_false', dest='ship_duty', help='show all puzzles, not just ship duty stations') + ao('--min-cache-reuse', type='int', dest='min_max_age', + metavar='SECONDS', default=60, + help='always reuse cache yoweb data if no older than this') + (opts,args) = pa.parse_args() random.seed() @@ -1201,8 +1215,8 @@ display modes (for --display) apply to ship-aid: except KeyError: pa.error('unknown mode "%s"' % mode) # fixed parameters - opts.min_max_age = 60 - opts.expire_age = 3600 + opts.expire_age = max(3600, opts.min_max_age) + opts.ship_reboard_clearout = 3600 if opts.cache_dir.startswith('~/'):