From: Ian Jackson Date: Sun, 17 May 2009 09:41:43 +0000 (+0100) Subject: Revamp machinery for lookup up ships in chat log tracker X-Git-Tag: 1.0~38 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~yarrgweb/git?p=ypp-sc-tools.main.git;a=commitdiff_plain;h=90592afd5da5f25e5a256f11186d851b4a149f47;hp=-c Revamp machinery for lookup up ships in chat log tracker --- 90592afd5da5f25e5a256f11186d851b4a149f47 diff --combined yoweb-scrape index 577b3b8,841430b..720e886 --- a/yoweb-scrape +++ b/yoweb-scrape @@@ -39,7 -39,7 +39,7 @@@ max_pirate_namelen = 1 def debug(m): if opts.debug > 0: - print m + print >>opts.debug_file, m def format_time_interval(ti): if ti < 120: return '%d:%02d' % (ti / 60, ti % 60) @@@ -423,7 -423,7 +423,7 @@@ class ChatLogTracker def __init__(self, myself_pi, logfn): self._pl = {} # self._pl['Pirate'] = self._vl = {} # self._vl['Vessel']['Pirate'] = PirateAboard - # self._vl['Vessel']['#lastaboard'] + # self._vl['Vessel']['#lastinfo'] self._v = None # self._v = self._vessel = None # self._vl[self._vessel] self._date = None @@@ -447,7 -447,7 +447,7 @@@ pa = PirateAboard(pirate, self._v, timestamp, event) self._pl[pirate] = pa self._v[pirate] = pa - self._v['#lastaboard'] = timestamp + self._v['#lastinfo'] = timestamp self.force_redisplay() return pa @@@ -459,18 -459,29 +459,29 @@@ def expire_garbage(self, timestamp): for (vn,v) in list(self._vl.iteritems()): - la = v['#lastaboard'] + la = v['#lastinfo'] if timestamp - la > opts.ship_reboard_clearout: self._debug_line_disposition(timestamp,'', 'stale reset '+vn) self._trash_vessel(v) del self._vl[vn] - def clear_vessel(self, timestamp): - if self._v is not None: - self._trash_vessel(self._v) - self._v = {'#lastaboard': timestamp} - self._vl[self._vessel] = self._v + def _create_vessel(self, vn, timestamp): + self._vl[vn] = v = { '#lastinfo': timestamp } + return v + + def _update_vessel_lookup(self, vn, timestamp, dml): + v = self._vl.get(vn, None) + if v is None: + dml.append('new') + v = self._create_vessel(vn, timestamp) + elif timestamp - v['#lastinfo'] > opts.ship_reboard_clearout: + dml.append('stale') + self._trash_vessel(v) + v = self._create_vessel(vn, timestamp) + else: + dml.append('current') + return v def _debug_line_disposition(self,timestamp,l,m): debug('CLT %13s %-30s %s' % (timestamp,m,l)) @@@ -519,23 -530,14 +530,14 @@@ m = rm('Going aboard the (\\S.*\\S)\\.\\.\\.$') if m: + dm = ['boarding'] pn = self._myself.name - self._vessel = m.group(1) - dm = 'boarding' - - try: self._v = self._vl[self._vessel] - except KeyError: self._v = None; dm += ' new' - - if self._v is not None: la = self._v['#lastaboard'] - else: la = 0; dm += ' ?la' - - if timestamp - la > opts.ship_reboard_clearout: - self.clear_vessel(timestamp) - dm += ' stale' + self._vessel = vn = m.group(1) + self._v = self._update_vessel_lookup(vn, timestamp, dm) ob_x(pn, 'we boarded') self.expire_garbage(timestamp) - return d(dm) + return d(' '.join(dm)) if self._v is None: return d('no vessel') @@@ -632,8 -634,8 +634,8 @@@ def _str_vessel(self, vn, v): s = ' vessel %s\n' % vn s += ' '*20 + "%-*s %13s\n" % ( - max_pirate_namelen, '#lastaboard', - v['#lastaboard']) + max_pirate_namelen, '#lastinfo', + v['#lastinfo']) for pn in sorted(v.keys()): if pn.startswith('#'): continue pa = v[pn] @@@ -915,7 -917,7 +917,7 @@@ display modes (for --display) apply to help='cache yoweb pages in DIR') ao('-D','--debug', action='count', dest='debug', default=0, help='enable debugging output') - ao('--debug-fd', action='count', dest='debug_fd', + ao('--debug-fd', type='int', dest='debug_fd', help='write any debugging output to specified fd') ao('-q','--quiet', action='store_true', dest='quiet', help='suppress warning output') @@@ -935,9 -937,7 +937,9 @@@ pa.error('need a mode argument') if opts.debug_fd is not None: - opts.debug_file = fdopen(opts.debug_fd, 'w') + opts.debug_file = os.fdopen(opts.debug_fd, 'w') + else: + opts.debug_file = sys.stdout mode = args[0] mode_fn_name = 'do_' + mode.replace('_','#').replace('-','_')