Select Git revision
device-hotplug.c
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
main.py 5.13 KiB
import json
from fastapi import FastAPI
from fastapi.responses import FileResponse
import os
import xml.etree.ElementTree as ET
from subprocess import Popen, PIPE
from fastapi.middleware.cors import CORSMiddleware
from pydantic import BaseModel
import xmltodict
from fastapi.encoders import jsonable_encoder
app = FastAPI()
origins = [
"http://localhost",
"http://localhost:5173",
]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
class Convergence(BaseModel):
SetupSteps: list = []
StudyMission: list = []
SizingLoop: list = []
PostprocessingSteps: list = []
class Modules(BaseModel):
groups: list = []
class Conf(BaseModel):
name: str;
controll_settings: dict = {}
def search_modules(dict, name, root):
list = []
for i in range(len(root.findall(f"ProgramSettings/{name}/Program/Name"))):
list.append(root.find(f"ProgramSettings/{name}/Program[@ID='{i + 1}']/Name").text)
dict[name] = list
def get_modulePath(module):
tree = ET.parse('newProject/convergenceLoop/convergenceLoop_conf.xml')
root = tree.getroot()
return "newProject"+root.find(f"ProgramSettings//Program[Name='{module}']/Directory").text[2:]+root.find(f"ProgramSettings//Program[Name='{module}']/Name").text+"_conf.xml"
@app.get("/start/{module}")
async def start_module(module: str):
cwd = os.getcwd()
os.chdir(f"./newProject/{module}")
# os.system(f"{module}.exe")
p = Popen(f"{module}.exe", stdin=PIPE, stdout=PIPE)
output, _ = p.communicate(b'Y\n')
os.chdir(cwd)
return {"message": f"running {module} without problems"}
@app.get("/convergence")
async def get_conv_modules():
tree = ET.parse('newProject/convergenceLoop/convergenceLoop_conf.xml')
root = tree.getroot()
dict = {}
search_modules(dict, "SetupSteps", root)
search_modules(dict, "SizingLoop", root)
search_modules(dict, "StudyMission", root)
search_modules(dict, "PostprocessingSteps", root)
tree.write("test.xml")
return dict
@app.get("/modules")
async def get_modules():
with open("test", "r") as fp:
modules= json.load(fp)
return modules
@app.put("/convergence/update")
async def update_convergence(item: Convergence):
tree = ET.parse('newProject/convergenceLoop/convergenceLoop_conf.xml')
root = tree.getroot()
# item in form ({key:array},{key:array},....)
for key in item:
for i in key[1]:
root.find(f"ProgramSettings/{key[0]}/Program[Name='{i}']").set("ID", str(key[1].index(i) + 1))
# such i in key und schreibe die id im array als id in der xml
tree.write('newProject/convergenceLoop/convergenceLoop_conf.xml')
return item
@app.put("/modules/update")
async def update_modules(item:Modules):
print(jsonable_encoder(item))
with open("test", "w") as fp:
json.dump(jsonable_encoder(item), fp)
return item
@app.get("/convergence/{module}/config")
async def get_module_config(module: str):
tree = ET.parse(get_modulePath(module))
root = tree.getroot()
config = xmltodict.XmlDictConfig(root)
return config
@app.get("/modules/{module}/config")
async def get_module_config(module: str):
tree = ET.parse("xml_configs/"+module+"_conf.xml")
root = tree.getroot()
config = json.dumps(xmltodict.XmlDictConfig(root))
return config
@app.put("/modules/config/update")
async def update_module_config(config: Conf):
print(config)
return config
@app.get("/graph/")
async def get_plotData():
plotData = {}
convergenceLoopDf = pd.read_csv('newProject/projects/CSR/CSR-02/reporting/plots/csvFiles/convergenceLoop_plot.csv', sep = ';', skiprows=2)
fusalageDesignDatapointDf = pd.read_csv('newProject/projects/CSR/CSR-02/reporting/plots/csvFiles/fuselageDesign_crossSection_DataPoints.csv', sep = ';', names=['x','y'] , index_col=False)
fusalageDesignEllipseDf = pd.read_csv('newProject/projects/CSR/CSR-02/reporting/plots/csvFiles/fuselageDesign_crossSection_Ellipse.csv', sep = ';', names=['x','y'] , index_col=False)
wingDesignAirFoilDf = pd.read_csv('newProject/projects/CSR/CSR-02/reporting/plots/csvFiles/wingDesign_airfoil_plot.csv', sep=';', index_col=False, names=['x','y'],skiprows=3)
wingDesignWingSizingDf = pd.read_csv('newProject/projects/CSR/CSR-02/reporting/plots/csvFiles/wingDesign_initialWingSizing_plot.csv', sep=';', index_col=False, names=['x','y'],skiprows=3)
plotData['convergenceLoop'] = convergenceLoopDf.drop(columns=['# Iteration']).to_dict(orient='list')
plotData['fuselageDesignData'] = fusalageDesignDatapointDf.to_dict(orient='list')
plotData['fuselageDesginEllipse'] = fusalageDesignEllipseDf.to_dict(orient='list')
plotData['wingDesignAirFoil'] = wingDesignAirFoilDf.to_dict(orient='list')
plotData['wingDesignWing'] = wingDesignWingSizingDf.to_dict(orient='list')
return plotData
@app.get("/log/{file}")
async def get_csv(file: str):
return FileResponse(f"newProject/projects/CSR/CSR-02/reporting/logFiles/{file}")
@app.get("/report/{file}")
async def get_report(file: str):
return FileResponse(f"newProject/projects/CSR/CSR-02/reporting/reportHTML/{file}")