aboutsummaryrefslogtreecommitdiff
path: root/gnunet/strings.py
diff options
context:
space:
mode:
Diffstat (limited to 'gnunet/strings.py')
-rw-r--r--gnunet/strings.py97
1 files changed, 97 insertions, 0 deletions
diff --git a/gnunet/strings.py b/gnunet/strings.py
new file mode 100644
index 0000000..cfbdaa5
--- /dev/null
+++ b/gnunet/strings.py
@@ -0,0 +1,97 @@
1import datetime
2
3from gnunet import *
4
5encTable = "0123456789ABCDEFGHIJKLMNOPQRSTUV"
6
7def data_to_string(data):
8 data = bytearray(data)
9 size = len(data)
10 bits = 0
11 rpos = 0
12 vbit = 0
13 ret = ""
14 while rpos < size:
15 while rpos < size and vbit < 5:
16 bits = (bits << 8) | data[rpos]
17 rpos += 1
18 vbit += 8
19 while vbit >= 5:
20 vbit -= 5
21 ret += encTable[(bits >> vbit) & 31]
22 if vbit > 0:
23 ret += encTable[(bits << (5 - vbit)) & 31]
24 return ret
25
26def string_to_data(s):
27 s = str(s)
28 size = len(s)
29 bits = 0
30 rpos = 0
31 vbit = 0
32 ret = bytearray([])
33 try:
34 while rpos < size:
35 while rpos < size and vbit < 8:
36 bits = (bits << 5) | int(s[rpos], 32)
37 rpos += 1
38 vbit += 5
39 while vbit >= 8:
40 vbit -= 8
41 ret.append((bits >> vbit) & 255)
42 if vbit > 0:
43 if bits & ((1 << vbit) - 1) != 0:
44 raise ValueError("")
45 except ValueError:
46 raise ValueError("'" + s + "' is not a valid data-encoding string")
47 return ret
48
49def absolute_time_to_string(t):
50 return t.strftime("%a %b %d %H:%M:%S %Y")
51
52def string_to_absolute_time(s):
53 if s == "end of time":
54 return None
55 try:
56 return datetime.datetime.strptime(s, "%a %b %d %H:%M:%S %Y")
57 except ValueError:
58 pass
59 try:
60 return datetime.datetime.strptime(s, "%c")
61 except ValueError:
62 pass
63 try:
64 return datetime.datetime.strptime(s, "%Ec")
65 except ValueError:
66 pass
67 try:
68 return datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S")
69 except ValueError:
70 pass
71 try:
72 return datetime.datetime.strptime(s, "%Y-%m-%d %H:%M")
73 except ValueError:
74 pass
75 try:
76 return datetime.datetime.strptime(s, "%x")
77 except ValueError:
78 pass
79 try:
80 return datetime.datetime.strptime(s, "%Ex")
81 except ValueError:
82 pass
83 try:
84 return datetime.datetime.strptime(s, "%Y-%m-%d")
85 except ValueError:
86 pass
87 try:
88 return datetime.datetime.strptime(s, "%Y-%m")
89 except ValueError:
90 pass
91 try:
92 return datetime.datetime.strptime(s, "%Y")
93 except ValueError:
94 pass
95 raise ValueError("%s is not a properly formatted time string" % s)
96
97