Skip to content
Snippets Groups Projects
Select Git revision
  • v2.3.1
  • master default
  • sp/trace-zero-ranges
  • stable-2.5
  • stable-2.4
  • stable-2.3
  • stable-2.2
  • stable-2.1
  • stable-2.0
  • stable-1.7
  • stable-1.6
  • stable-1.5
  • stable-1.4
  • stable-1.3
  • stable-1.2
  • stable-1.1
  • stable-1.0
  • stable-0.15
  • stable-0.14
  • stable-0.13
  • stable-0.12
  • v2.7.0-rc1
  • v2.7.0-rc0
  • v2.6.0
  • v2.5.1.1
  • v2.6.0-rc5
  • v2.6.0-rc4
  • v2.6.0-rc3
  • v2.6.0-rc2
  • v2.6.0-rc1
  • v2.6.0-rc0
  • v2.5.1
  • v2.5.0
  • v2.5.0-rc4
  • v2.5.0-rc3
  • v2.5.0-rc2
  • v2.5.0-rc1
  • v2.5.0-rc0
  • v2.4.1
  • v2.4.0.1
40 results

device-hotplug.c

Blame
  • 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}")