/
filehelper.py
58 lines (45 loc) · 1.47 KB
/
filehelper.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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import os
import time
# Local imports
import pickle
import config
# Remove underscore and dot from a filename to avoid filename injection attacks
def safe_filename(filename):
ext = get_extension(filename)
temp_name = filename[:(-len(ext))]
return temp_name.replace('/', '_').replace('.', '_') + ext
def get_filename(upload_dir):
filename = str(int(time.time()))
return create_filename(upload_dir, filename, '')
def get_extension(filename):
return filename[filename.rfind('.'):]
# Recursively add underscore until valid path found,
# just in case we have a lot of concurrent uploads
def create_filename(directory, filename, ext=''):
if not os.path.exists(directory + filename + ext):
return filename + ext
else:
return create_filename(directory, filename + '_', ext)
def save_metadata(filename, params):
path = config.get_upload_path() + filename + '.metadata'
if not os.path.exists(path):
f = open(path, 'w+')
f.write(pickle.dumps(params))
f.close()
return params
else:
f = open(path, 'r+')
data = f.read()
obj = pickle.loads(data)
f.close()
for k, v in params.iteritems():
obj[k] = v
f = open(path, 'w')
f.write(pickle.dumps(obj))
f.close()
return obj
def get_metadata(filename):
path = config.get_upload_path() + filename + '.metadata'
f = open(path, 'r')
return pickle.loads(f.read())
f.close()