]> git.ipfire.org Git - ipfire.org.git/blame - src/backend/util.py
footer: Add spacing between user name and logout button
[ipfire.org.git] / src / backend / util.py
CommitLineData
9523790a 1#!/usr/bin/python3
66862195 2
e96e445b 3import random
9523790a 4import re
e96e445b 5import string
75d9b3da 6import unicodedata
e96e445b 7
9523790a
MT
8def 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
27def 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 40def 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
55def 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
62def 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())