diff options
Diffstat (limited to 'gnunet/strings.py')
-rw-r--r-- | gnunet/strings.py | 97 |
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 @@ | |||
1 | import datetime | ||
2 | |||
3 | from gnunet import * | ||
4 | |||
5 | encTable = "0123456789ABCDEFGHIJKLMNOPQRSTUV" | ||
6 | |||
7 | def 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 | |||
26 | def 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 | |||
49 | def absolute_time_to_string(t): | ||
50 | return t.strftime("%a %b %d %H:%M:%S %Y") | ||
51 | |||
52 | def 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 | |||