Skip to content

Commit 00b9f1f

Browse files
authored
Merge pull request #5 from amit-62/dev
updated FRI
2 parents 8be5db4 + 47b631f commit 00b9f1f

2 files changed

Lines changed: 108 additions & 41 deletions

File tree

fri/server/main.py

Lines changed: 107 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,116 @@
1-
from flask import Flask, request, jsonify, render_template
1+
from flask import Flask, request, jsonify, send_file, send_from_directory
22
from werkzeug.utils import secure_filename
33
import os
4+
from subprocess import call
5+
from pathlib import Path
46

57

6-
UPLOAD_FOLDER = "./uploaded_files"
7-
8-
if not os.path.exists(UPLOAD_FOLDER):
9-
os.makedirs(UPLOAD_FOLDER)
10-
118
app = Flask(__name__)
129
app.secret_key = "secret key"
13-
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
14-
15-
16-
@app.route('/upload', methods=['POST'])
17-
def upload():
18-
if 'files[]' not in request.files:
19-
resp = jsonify({'message' : 'No file in the request'})
20-
resp.status_code = 400
21-
return resp
22-
23-
files = request.files.getlist('files[]')
24-
25-
errors = {}
26-
success = False
27-
28-
for file in files:
29-
if file:
30-
filename = secure_filename(file.filename)
31-
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
32-
success = True
33-
34-
if success and errors:
35-
errors['message'] = 'File(s) successfully uploaded'
36-
resp = jsonify(errors)
37-
resp.status_code = 500
38-
return resp
39-
if success:
40-
resp = jsonify({'message' : 'Files successfully uploaded'})
41-
resp.status_code = 201
42-
return resp
43-
else:
44-
resp = jsonify(errors)
45-
resp.status_code = 500
46-
return resp
10+
11+
# To upload multiple file. For example, /upload/test?apikey=xyz
12+
@app.route('/upload/<dir>', methods=['POST'])
13+
def upload(dir):
14+
apikey = request.args.get('apikey')
15+
dirname = dir + "_" + apikey
16+
17+
if 'files[]' not in request.files:
18+
resp = jsonify({'message': 'No file in the request'})
19+
resp.status_code = 400
20+
return resp
21+
22+
files = request.files.getlist('files[]')
23+
24+
errors = {}
25+
success = False
26+
27+
if not os.path.exists(secure_filename(dirname)):
28+
os.makedirs(secure_filename(dirname))
29+
30+
for file in files:
31+
if file:
32+
filename = secure_filename(file.filename)
33+
file.save(secure_filename(dirname)+"/"+filename)
34+
success = True
35+
36+
if success and errors:
37+
errors['message'] = 'File(s) successfully uploaded'
38+
resp = jsonify(errors)
39+
resp.status_code = 500
40+
return resp
41+
if success:
42+
resp = jsonify({'message': 'Files successfully uploaded'})
43+
resp.status_code = 201
44+
return resp
45+
else:
46+
resp = jsonify(errors)
47+
resp.status_code = 500
48+
return resp
49+
50+
# To execute any python file. For example, /execute/test?apikey=xyz
51+
@app.route('/execute/<dir>', methods=['POST'])
52+
def execute(dir):
53+
apikey = request.args.get('apikey')
54+
dirname = dir + "_" + apikey
55+
56+
if 'file' not in request.files:
57+
resp = jsonify({'message': 'No file in the request'})
58+
resp.status_code = 400
59+
return resp
60+
61+
file = request.files['file']
62+
63+
if file.filename == '':
64+
resp = jsonify({'message': 'No file selected for Executing'})
65+
resp.status_code = 400
66+
return resp
67+
68+
errors = {}
69+
success = False
70+
71+
if not os.path.exists(secure_filename(dirname)):
72+
os.makedirs(secure_filename(dirname))
73+
74+
if file:
75+
filename = secure_filename(file.filename)
76+
file.save(secure_filename(dirname)+"/"+filename)
77+
output_filename = filename + ".out"
78+
file_path = secure_filename(dirname) + "/"+filename
79+
outputfile_path = secure_filename(dirname)+"/"+output_filename
80+
f = open(outputfile_path, "w")
81+
call(["nohup", "python3", file_path], stdout=f)
82+
success = True
83+
84+
if success:
85+
resp = jsonify({'message': 'Files successfully executed'})
86+
resp.status_code = 201
87+
return resp
88+
else:
89+
resp = jsonify(errors)
90+
resp.status_code = 500
91+
return resp
92+
93+
94+
95+
# to download /download/<dir>?fetch=<downloadfile>. For example, /download/test?fetch=example.py.out&apikey=xyz
96+
@app.route('/download/<dir>', methods=['POST', 'GET'])
97+
def download(dir):
98+
download_file = request.args.get('fetch')
99+
apikey = request.args.get('apikey')
100+
dirname = dir + "_" + apikey
101+
102+
if not os.path.exists(secure_filename(dirname)):
103+
resp = jsonify({'message': 'Directory not found'})
104+
resp.status_code = 400
105+
return resp
106+
107+
try:
108+
return send_from_directory(secure_filename(dirname), download_file, as_attachment=True)
109+
except:
110+
resp = jsonify({'message': 'file not found'})
111+
resp.status_code = 400
112+
return resp
113+
47114

48115
if __name__ == "__main__":
49116
app.run(host="0.0.0.0")

fri/service_config.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22

3-
SERVICES=('upload' 'execute')
3+
SERVICES=('upload' 'execute' 'download')
44
for service in "${SERVICES[@]}"
55
do
66
name="name="$service

0 commit comments

Comments
 (0)