]>
Commit | Line | Data |
---|---|---|
9523790a | 1 | #!/usr/bin/python3 |
66862195 | 2 | |
e96e445b | 3 | import random |
9523790a | 4 | import re |
e96e445b | 5 | import string |
75d9b3da | 6 | import unicodedata |
e96e445b | 7 | |
9523790a MT |
8 | def parse_search_query(query): |
9 | q = [] | |
10 | for word in query.split(): | |
11 | # Is this lexeme negated? | |
12 | negated = word.startswith("!") | |
13 | ||
14 | # Remove any special characters | |
15 | word = re.sub(r"\W+", "", word, flags=re.UNICODE) | |
16 | if not word: | |
17 | continue | |
18 | ||
19 | # Restore negation | |
20 | if negated: | |
21 | word = "!%s" % word | |
22 | ||
23 | q.append(word) | |
24 | ||
25 | return " & ".join(q) | |
26 | ||
84604476 MT |
27 | def format_size(s, max_unit=None): |
28 | units = ("B", "kB", "MB", "GB", "TB") | |
66862195 MT |
29 | |
30 | i = 0 | |
31 | while s >= 1024 and i < len(units) - 1: | |
32 | s /= 1024 | |
33 | i += 1 | |
34 | ||
84604476 MT |
35 | if max_unit and units[i] == max_unit: |
36 | break | |
37 | ||
66862195 MT |
38 | return "%.0f%s" % (s, units[i]) |
39 | ||
5ac74b02 | 40 | def format_time(s, shorter=True): |
66862195 MT |
41 | #_ = handler.locale.translate |
42 | _ = lambda x: x | |
43 | ||
44 | hrs, s = divmod(s, 3600) | |
45 | min, s = divmod(s, 60) | |
46 | ||
47 | if s >= 30: | |
48 | min += 1 | |
49 | ||
50 | if shorter and not hrs: | |
51 | return _("%(min)d min") % { "min" : min } | |
52 | ||
53 | return _("%(hrs)d:%(min)02d hrs") % {"hrs" : hrs, "min" : min} | |
e96e445b MT |
54 | |
55 | def random_string(length=8): | |
56 | input_chars = string.ascii_letters + string.digits | |
57 | ||
58 | r = (random.choice(input_chars) for i in range(length)) | |
59 | ||
60 | return "".join(r) | |
75d9b3da MT |
61 | |
62 | def normalize(s): | |
63 | # Remove any non-ASCII characters | |
64 | try: | |
65 | s = unicodedata.normalize("NFKD", s) | |
66 | except TypeError: | |
67 | pass | |
68 | ||
69 | # Remove excessive whitespace | |
70 | s = re.sub(r"[^\w]+", " ", s) | |
71 | ||
72 | return "-".join(s.split()) |