comparison blast2html.py @ 76:7d0d46168fd5 py2.6

Format all numbers in a predictable way
author Jan Kanis <jan.code@jankanis.nl>
date Thu, 19 Jun 2014 14:07:00 +0200
parents 4d2c25baf5a3
children c0804e6443c6
comparison
equal deleted inserted replaced
75:4d2c25baf5a3 76:7d0d46168fd5
19 from lxml import objectify 19 from lxml import objectify
20 import jinja2 20 import jinja2
21 21
22 22
23 23
24 _filters = dict(int='int', float='float') 24 _filters = dict(float='float')
25 def filter(func_or_name): 25 def filter(func_or_name):
26 "Decorator to register a function as filter in the current jinja environment" 26 "Decorator to register a function as filter in the current jinja environment"
27 if isinstance(func_or_name, six.string_types): 27 if isinstance(func_or_name, six.string_types):
28 def inner(func): 28 def inner(func):
29 _filters[func_or_name] = func.__name__ 29 _filters[func_or_name] = func.__name__
46 return 4 46 return 4
47 47
48 @filter 48 @filter
49 def fmt(val, fmt): 49 def fmt(val, fmt):
50 return format(float(val), fmt) 50 return format(float(val), fmt)
51
52 @filter
53 def numfmt(val):
54 """Format numbers in decimal notation, but without excessive trailing 0's.
55 Default python float formatting will use scientific notation for some values,
56 or append trailing zeros with the 'f' format type, and the number of digits differs
57 between python 2 and 3."""
58 fpart, ipart = math.modf(val)
59 if fpart == 0:
60 return str(int(val))
61 # round to 10 to get identical representations in python 2 and 3
62 s = format(round(val, 10), '.10f').rstrip('0')
63 if s[-1] == '.':
64 s += '0'
65 return s
51 66
52 @filter 67 @filter
53 def firsttitle(hit): 68 def firsttitle(hit):
54 return hit.Hit_def.text.split('>')[0] 69 return hit.Hit_def.text.split('>')[0]
55 70