source file: /home/buildslave/tahoe/edgy/build/src/allmydata/util/abbreviate.py
file stats: 60 lines, 60 executed: 100.0% covered
coverage versus previous test: 0 lines added, 0 lines removed
1.
2. import re
3.
4. HOUR = 3600
5. DAY = 24*3600
6. WEEK = 7*DAY
7. MONTH = 30*DAY
8. YEAR = 365*DAY
9.
10. def abbreviate_time(s):
11. def _plural(count, unit):
12. count = int(count)
13. if count == 1:
14. return "%d %s" % (count, unit)
15. return "%d %ss" % (count, unit)
16. if s is None:
17. return "unknown"
18. if s < 120:
19. return _plural(s, "second")
20. if s < 3*HOUR:
21. return _plural(s/60, "minute")
22. if s < 2*DAY:
23. return _plural(s/HOUR, "hour")
24. if s < 2*MONTH:
25. return _plural(s/DAY, "day")
26. if s < 4*YEAR:
27. return _plural(s/MONTH, "month")
28. return _plural(s/YEAR, "year")
29.
30. def abbreviate_space(s, SI=True):
31. if s is None:
32. return "unknown"
33. if SI:
34. U = 1000.0
35. isuffix = "B"
36. else:
37. U = 1024.0
38. isuffix = "iB"
39. def r(count, suffix):
40. return "%.2f %s%s" % (count, suffix, isuffix)
41.
42. if s < 1024: # 1000-1023 get emitted as bytes, even in SI mode
43. return "%d B" % s
44. if s < U*U:
45. return r(s/U, "k")
46. if s < U*U*U:
47. return r(s/(U*U), "M")
48. if s < U*U*U*U:
49. return r(s/(U*U*U), "G")
50. if s < U*U*U*U*U:
51. return r(s/(U*U*U*U), "T")
52. return r(s/(U*U*U*U*U), "P")
53.
54. def abbreviate_space_both(s):
55. return "(%s, %s)" % (abbreviate_space(s, True),
56. abbreviate_space(s, False))
57.
58. def parse_abbreviated_size(s):
59. if s is None or s == "":
60. return None
61. m = re.match(r"^(\d+)([kKmMgG]?[iB]?[bB]?)$", s)
62. if not m:
63. raise ValueError("unparseable value %s" % s)
64. number, suffix = m.groups()
65. suffix = suffix.upper()
66. if suffix.endswith("B"):
67. suffix = suffix[:-1]
68. multiplier = {"": 1,
69. "I": 1,
70. "K": 1000,
71. "M": 1000 * 1000,
72. "G": 1000 * 1000 * 1000,
73. "KI": 1024,
74. "MI": 1024*1024,
75. "GI": 1024*1024*1024,
76. }[suffix]
77. return int(number) * multiplier