6
6
import tarfile
7
7
import yaml
8
8
import json
9
+ import tomlkit
10
+
9
11
app = Flask (__name__ )
10
12
11
13
cors = CORS (app )
14
16
15
17
# Starting container
16
18
client = docker .from_env ()
17
- container = client .containers .run ("playground-fpm " , tty = True , detach = True , network_disabled = True , mem_limit = "16g" )
19
+ container = client .containers .run ("playground-f " , tty = True , detach = True , network_disabled = True , mem_limit = "16g" )
18
20
19
21
#Converting tutorial YAML
20
22
with open ('tutorial.yml' , 'r' ) as file :
25
27
26
28
27
29
# Editing the file with code inside editor
28
- def edit_file (code , input = "" ):
29
- Fortran_file = open ("./main.f90" , "w+" )
30
+ def edit_file (code , input , libs ):
31
+ Fortran_file = open ("./main.f90" , "w+" ) #main source code from editor
30
32
Fortran_file .write (code )
31
33
Fortran_file .close ()
32
- program_input = open ("./program_input.txt" , "w+" )
34
+ program_input = open ("./program_input.txt" , "w+" ) #user input
33
35
program_input .write (input )
34
36
program_input .close ()
37
+ #Generating fpm.toml for fpm processing
38
+ with open ("fpm.toml" , mode = "rt" , encoding = "utf-8" ) as fp :
39
+ fpm = tomlkit .load (fp )
40
+ if "stdlib" in libs :
41
+ fpm ["dependencies" ] = {'stdlib' : {'path' : "libraries/stdlib" }}
42
+ else :
43
+ fpm ["dependencies" ] = {}
44
+ with open ("fpm.toml" , mode = "wt" , encoding = "utf-8" ) as fp :
45
+ tomlkit .dump (fpm , fp )
35
46
36
47
# Copying file with fortran code to container
37
48
def copy_to (src , dst , container ):
@@ -54,9 +65,9 @@ def copy_to(src, dst, container):
54
65
def execute_code_in_container ():
55
66
copy_to ('./main.f90' , '/fortran/playground/app/main.f90' , container )
56
67
copy_to ('./program_input.txt' , '/fortran/playground/program_input.txt' , container )
57
-
58
- container .exec_run ('sh -c "/fortran/fpm-0.6.0-linux-x86_64 build"' )
59
- a = container .exec_run ('sh -c "cat program_input.txt | timeout 15s /fortran/fpm-0.6.0-linux-x86_64 run"' ,demux = True )
68
+ copy_to ( './fpm.toml' , '/fortran/playground/fpm.toml' , container )
69
+ container .exec_run ('sh -c "/fortran/fpm build"' )
70
+ a = container .exec_run ('sh -c "cat program_input.txt | timeout 15s /fortran/fpm run"' ,demux = True )
60
71
61
72
return a
62
73
@@ -66,12 +77,13 @@ def execute_code_in_container():
66
77
@cross_origin ()
67
78
def run_code ():
68
79
data = request .get_json ()
69
- edit_file (data ["code" ], data ["programInput" ])
80
+ edit_file (data ["code" ], data ["programInput" ], data [ "libs" ] )
70
81
code_result = execute_code_in_container ()
71
82
if code_result .output [0 ] == None :
72
83
output = jsonify ({"executed" : "" })
73
84
return output , 202
74
85
output = jsonify ({"executed" : code_result .output [0 ].decode ()})
86
+ print (code_result .output )
75
87
76
88
77
89
return output , 202
0 commit comments