-
Notifications
You must be signed in to change notification settings - Fork 41
/
utils.py
43 lines (35 loc) · 1.29 KB
/
utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import urllib
import base64
def firebase_escape(string):
"""'.$[]#/' are not valid Firebase key characters, so we have to
not store them before we can store the URL"""
escaped = base64.urlsafe_b64encode(string.encode("utf8")).decode('utf8')
return escaped
def firebase_unescape(string):
unescaped = base64.urlsafe_b64decode(string.encode("utf8")).decode('utf8')
assert firebase_escape(unescaped) == string
return unescaped
def escape_string_args(func):
def wrapper(*args, **kwargs):
escaped_args = []
escaped_kwargs = {}
if args is not None:
escaped_args = [firebase_escape(arg)
if isinstance(arg, str)
else arg
for arg in args]
if kwargs is not None:
escaped_kwargs = {
key: firebase_escape(value)
if isinstance(value, str)
else value
for key, value in kwargs.items()
}
return func(*escaped_args, **escaped_kwargs)
return wrapper
def unescape_output(func, *args, **kwargs):
def wrapper(*args, **kwargs):
output = func(*args, **kwargs)
if isinstance(output, str):
return firebase_unescape(output)
return output