Changeset 3002


Ignore:
Timestamp:
Sep 3, 2015, 1:16:58 PM (10 years ago)
Author:
Александър Шопов
Message:

Форматиран изход, да се оправят аргументи на командния ред

File:
1 edited

Legend:

Unmodified
Added
Removed
  • scripts/xml-stats/stats.py

    r3001 r3002  
    99import sys
    1010
    11 titles = {'count': 'Номе',
    12           'name': 'Име',
    13           'branch': 'Клон',
    14           'work':'Работ',
    15           'untranslated': 'Непре',
    16           'fuzzy': 'Мъгля',
    17           'translated': 'Превед',
    18           'total': 'Всичко'}
     11Stat = 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
     18titles = 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
    1923
    2024def get_versions():
     
    2832    versions = [e.text for e in version_elements]
    2933    return versions
     34
    3035
    3136def get_stats(version):
     
    5459            work = fuzzy + untranslated
    5560            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)
    6364            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)
    6472    return results
    6573
     74
    6675def 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
    7184    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
    7492
    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}
    79101
    80 def display_max_lengths(lengths):
    81     result = {k:max(len(titles[k]), lengths[k]) for k,v in titles.items()}
     102
     103def divider(s):
     104    inner = '+'.join(['-' * (f + 1) for f in s])
     105    return inner.join(['|'] * 2)
     106
     107
     108def 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))
    82117    return result
    83118
    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']))                 
    94119
     120def 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))
    95129    return result
    96130
    97 def ljust(length, sth):
    98     s = str(sth)
    99     result = (s + ' ' * length)[:length+1]
    100     #print('ljust', length, sth, '>'+result+'<')
    101     return result
    102 
    103 def rjust(length, sth):
    104     s = str(sth)
    105     result = (' ' * length + s)[-length:]
    106     #print('rjust', length, sth, '>'+result+'<')
    107     return result
    108 
    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 result
    119131
    120132def main():
     
    125137    #    print('Will use {}'.format(versions[0]))
    126138    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)
    140149    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))
    145153             
    146154if __name__ == '__main__':
Note: See TracChangeset for help on using the changeset viewer.