Changeset 3002
- Timestamp:
- Sep 3, 2015, 1:16:58 PM (10 years ago)
- File:
-
- 1 edited
-
scripts/xml-stats/stats.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
scripts/xml-stats/stats.py
r3001 r3002 9 9 import sys 10 10 11 titles = {'count': 'Номе', 12 'name': 'Име', 13 'branch': 'Клон', 14 'work':'Работ', 15 'untranslated': 'Непре', 16 'fuzzy': 'Мъгля', 17 'translated': 'Превед', 18 'total': 'Всичко'} 11 Stat = col.namedtuple('Stat', ['count', 'name', 'branch', 'work', 12 'untranslated','fuzzy', 'translated', 'total']) 13 14 #titles = Stat(count='Номер', name='Име', branch='Клон', work='Работа', 15 # untranslated='Непреведени', fuzzy='Мъгляви', translated='Преведени', 16 # total='Всичко') 17 18 titles = Stat(count=('Number', 'rjust'), name=('Name', 'ljust'), 19 branch=('Branch', 'ljust'), work=('Work', 'ljust'), 20 untranslated=('Untranslated', 'ljust'), fuzzy=('Fuzyy', 'rjust'), 21 translated=('Translated', 'rjust'), total=('All', 'rjust')) 22 19 23 20 24 def get_versions(): … … 28 32 versions = [e.text for e in version_elements] 29 33 return versions 34 30 35 31 36 def get_stats(version): … … 54 59 work = fuzzy + untranslated 55 60 total = work + translated 56 s = {'name': name, 57 'branch': stat_branch, 58 'translated': translated, 59 'fuzzy': fuzzy, 60 'untranslated': untranslated, 61 'work': work, 62 'total': total} 61 s = Stat(count=None, name=name, branch=stat_branch, 62 translated=translated, fuzzy=fuzzy, 63 untranslated=untranslated, work=work, total=total) 63 64 results.append(s) 65 # sorts are stable 66 results.sort(key=lambda s: s.name) 67 results.sort(key=lambda s: s.fuzzy, reverse=True) 68 results.sort(key=lambda s: s.untranslated, reverse=True) 69 results.sort(key=lambda s: s.work, reverse=True) 70 for i, s in enumerate(results): 71 results[i] = s._replace(count=i+1) 64 72 return results 65 73 74 66 75 def stats_max_lengths_sums(stats): 67 string_keys = [ 'name', 'branch'] 68 number_keys = ['translated', 'fuzzy', 'untranslated', 'work', 'total'] 69 string_lengths = {k: 0 for k in string_keys} 70 number_sums = {k: 0 for k in number_keys} 76 name = 0 77 branch = 0 78 sum_translated = 0 79 sum_fuzzy = 0 80 sum_untranslated = 0 81 sum_work = 0 82 sum_total = 0 83 71 84 for s in stats: 72 string_lengths = {k: max(string_lengths[k], len(s[k])) for k in ['name', 'branch']} 73 number_sums = {k: number_sums[k] + s[k] for k in number_keys} 85 name = max(name, len(s.name)) 86 branch = max(branch, len(s.branch)) 87 sum_translated = sum_translated + s.translated 88 sum_fuzzy = sum_fuzzy + s.fuzzy 89 sum_untranslated = sum_untranslated + s.untranslated 90 sum_work = sum_work + s.work 91 sum_total = sum_total + s.total 74 92 75 lengths = {k: len(str(number_sums[k])) for k in number_keys} 76 lengths.update(string_lengths) 77 lengths['count']=len(str(len(stats))) 78 return lengths, number_sums 93 max_len = Stat(count=len(str(len(stats))), name=name, branch=branch, 94 translated=len(str(sum_translated)), fuzzy=len(str(sum_fuzzy)), 95 untranslated=len(str(sum_untranslated)), work=len(str(sum_work)), 96 total=len(str(sum_total))) 97 sums = Stat(count=len(stats), name='', branch='', translated=sum_translated, 98 fuzzy=sum_fuzzy, untranslated=sum_untranslated, work=sum_work, 99 total=sum_total) 100 return {'max_len': max_len, 'sums': sums} 79 101 80 def display_max_lengths(lengths): 81 result = {k:max(len(titles[k]), lengths[k]) for k,v in titles.items()} 102 103 def divider(s): 104 inner = '+'.join(['-' * (f + 1) for f in s]) 105 return inner.join(['|'] * 2) 106 107 108 def stat_line(max_len, s): 109 args = [] 110 for i in range(len(max_len)): 111 width = max_len[i] + 1 112 method_name = 'rjust' if isinstance(s[i], int) else 'ljust' 113 part = getattr(str(s[i]), method_name)(width)[:width] 114 args.append(part) 115 116 result = '|{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|'.format(*tuple(args)) 82 117 return result 83 118 84 def divider(lengths):85 86 result = ('-' * (1 + lengths['count']) + '+' +87 '-' * (1 + lengths['name']) + '+' +88 '-' * (1 + lengths['branch']) + '+' +89 '-' * (1 + lengths['work']) + '+' +90 '-' * (1 + lengths['untranslated']) + '+' +91 '-' * (1 + lengths['fuzzy']) + '+' +92 '-' * (1 + lengths['translated']) + '+' +93 '-' * (1 + lengths['total']))94 119 120 def title_line(max_len): 121 args = [] 122 for i in range(len(max_len)): 123 width = max_len[i] + 1 124 method_name = titles[i][1] 125 part = getattr(titles[i][0], method_name)(width)[:width] 126 args.append(part) 127 128 result = '|{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|'.format(*tuple(args)) 95 129 return result 96 130 97 def ljust(length, sth):98 s = str(sth)99 result = (s + ' ' * length)[:length+1]100 #print('ljust', length, sth, '>'+result+'<')101 return result102 103 def rjust(length, sth):104 s = str(sth)105 result = (' ' * length + s)[-length:]106 #print('rjust', length, sth, '>'+result+'<')107 return result108 109 def line(lengths, stat):110 result = (rjust(lengths['count'], stat['count']) + '|' +111 ljust(lengths['name'], stat['name']) + '|' +112 ljust(lengths['branch'], stat['branch']) + '|' +113 rjust(lengths['work'], stat['work']) + '|' +114 rjust(lengths['untranslated'], stat['untranslated']) + '|' +115 rjust(lengths['fuzzy'], stat['fuzzy']) + '|' +116 rjust(lengths['translated'], stat['translated']) + '|' +117 rjust(lengths['total'], stat['total']))118 return result119 131 120 132 def main(): … … 125 137 # print('Will use {}'.format(versions[0])) 126 138 stats = get_stats('gnome-3-18') 127 # sorts are stable 128 stats.sort(key=lambda s: s['name']) 129 stats.sort(key=lambda s: s['fuzzy'], reverse=True) 130 stats.sort(key=lambda s: s['untranslated'], reverse=True) 131 stats.sort(key=lambda s: s['work'], reverse=True) 132 print(stats) 133 lengths, sums = stats_max_lengths_sums(stats) 134 print(lengths) 135 print(divider(lengths)) 136 lengths = display_max_lengths(lengths) 137 print(lengths) 138 print(divider(lengths)) 139 i = 1 139 sms = stats_max_lengths_sums(stats) 140 max_len = sms['max_len'] 141 sums = sms['sums'] 142 143 print(max_len) 144 print(sums) 145 d = divider(max_len) 146 print(d) 147 print(title_line(max_len)) 148 print(d) 140 149 for s in stats: 141 s['count'] = i 142 i+=1 143 print(line(lengths, s)) 144 print(sums) 150 print(stat_line(max_len, s)) 151 print(d) 152 print(stat_line(max_len, sums)) 145 153 146 154 if __name__ == '__main__':
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/project/gtp/chrome/site/your_project_logo.png)