Mercurial > p > roundup > code
comparison roundup/support.py @ 3544:5cd1c83dea50
Features and fixes.
Feature:
- trackers may configure custom stop-words for the full-text indexer
Fixed:
- fixes in scripts/import_sf.py
- fix some unicode bugs in roundup-admin import
- Xapian indexer wasn't actually being used
- fix indexing of message content on roundup-admin import
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Mon, 06 Feb 2006 21:00:47 +0000 |
| parents | a2ae11191968 |
| children | 1be293265e61 |
comparison
equal
deleted
inserted
replaced
| 3543:0735c4587852 | 3544:5cd1c83dea50 |
|---|---|
| 2 places in Roundup code. | 2 places in Roundup code. |
| 3 """ | 3 """ |
| 4 | 4 |
| 5 __docformat__ = 'restructuredtext' | 5 __docformat__ = 'restructuredtext' |
| 6 | 6 |
| 7 import os | 7 import os, time, sys |
| 8 | 8 |
| 9 class TruthDict: | 9 class TruthDict: |
| 10 '''Returns True for valid keys, False for others. | 10 '''Returns True for valid keys, False for others. |
| 11 ''' | 11 ''' |
| 12 def __init__(self, keys): | 12 def __init__(self, keys): |
| 56 if not self.sorted : | 56 if not self.sorted : |
| 57 self.list.sort () | 57 self.list.sort () |
| 58 self.sorted = True | 58 self.sorted = True |
| 59 return iter (self.list) | 59 return iter (self.list) |
| 60 | 60 |
| 61 class Progress: | |
| 62 '''Progress display for console applications. | |
| 63 | |
| 64 See __main__ block at end of file for sample usage. | |
| 65 ''' | |
| 66 def __init__(self, info, sequence): | |
| 67 self.info = info | |
| 68 self.sequence = iter(sequence) | |
| 69 self.total = len(sequence) | |
| 70 self.start = self.now = time.time() | |
| 71 self.num = 0 | |
| 72 self.stepsize = self.total / 100 or 1 | |
| 73 self.steptimes = [] | |
| 74 self.display() | |
| 75 | |
| 76 def __iter__(self): return self | |
| 77 | |
| 78 def next(self): | |
| 79 self.num += 1 | |
| 80 | |
| 81 if self.num > self.total: | |
| 82 print self.info, 'done', ' '*(75-len(self.info)-6) | |
| 83 sys.stdout.flush() | |
| 84 return self.sequence.next() | |
| 85 | |
| 86 if self.num % self.stepsize: | |
| 87 return self.sequence.next() | |
| 88 | |
| 89 self.display() | |
| 90 return self.sequence.next() | |
| 91 | |
| 92 def display(self): | |
| 93 # figure how long we've spent - guess how long to go | |
| 94 now = time.time() | |
| 95 steptime = now - self.now | |
| 96 self.steptimes.insert(0, steptime) | |
| 97 if len(self.steptimes) > 5: | |
| 98 self.steptimes.pop() | |
| 99 steptime = sum(self.steptimes) / len(self.steptimes) | |
| 100 self.now = now | |
| 101 eta = steptime * ((self.total - self.num)/self.stepsize) | |
| 102 | |
| 103 # tell it like it is (or might be) | |
| 104 if now - self.start > 3: | |
| 105 M = eta / 60 | |
| 106 H = M / 60 | |
| 107 M = M % 60 | |
| 108 S = eta % 60 | |
| 109 if self.total: | |
| 110 s = '%s %2d%% (ETA %02d:%02d:%02d)'%(self.info, | |
| 111 self.num * 100. / self.total, H, M, S) | |
| 112 else: | |
| 113 s = '%s 0%% (ETA %02d:%02d:%02d)'%(self.info, H, M, S) | |
| 114 elif self.total: | |
| 115 s = '%s %2d%%'%(self.info, self.num * 100. / self.total) | |
| 116 else: | |
| 117 s = '%s 0%% (ETA %02d:%02d:%02d)'%(self.info, H, M, S) | |
| 118 sys.stdout.write(s + ' '*(75-len(s)) + '\r') | |
| 119 sys.stdout.flush() | |
| 120 | |
| 61 # vim: set et sts=4 sw=4 : | 121 # vim: set et sts=4 sw=4 : |
