grabber/app.py
2026-02-12 16:58:28 +01:00

132 lines
4.0 KiB
Python

from fastapi import FastAPI, Request, HTTPException, Form
from fastapi.responses import RedirectResponse, HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.templating import Jinja2Templates
from typing import Annotated
from pydantic import BaseModel
from sqlmodel import SQLModel, Relationship, Session, create_engine, select
import json
from models import ordinateur
from forms import EmployeeForm
app = FastAPI()
#ordi1 = ordinateur()
app.mount("/static", StaticFiles(directory="static"), name="static")
templates = Jinja2Templates(directory="templates")
#sqlitemodel
sqlite_file_name = "mydb.db"
sqlite_url = f"sqlite:///mydb.db"
engine = create_engine(sqlite_url)
def create_db_and_tables():
SQLModel.metadata.create_all(engine)
SQLModel.metadata.create_all(engine)
@app.get("/ordi/{ordi_id}", response_class=HTMLResponse)
async def get_ordi1_info(request: Request, ordi_id: int):
with Session(engine) as session:
statement= select(ordinateur).where(ordinateur.id == ordi_id)
this_ordi = session.exec(statement).first()
return templates.TemplateResponse(
request=request, name="item.html", context={"ordi": this_ordi}
)
@app.get("/employee/create", response_class=HTMLResponse)
async def get_employee_form(request: Request):
return templates.TemplateResponse(
request=request, name="employee_form.html", success= True )
@app.post("/employee/create", response_class=RedirectResponse)
async def submit_employee_form(data: Annotated[EmployeeForm, Form()]):
print(f"data obtained is {data}")
with Session(engine) as session:
employee = Employee(
first_name=data.first_name,
family_name=data.family_name
)
session.add(employee)
session.commit()
session.refresh(employee)
return RedirectResponse("/employees")
'''@app.post("/employee/delete", response=RedirectResponse)
async def delete_employee(request: Request):
with Session(engine) as session:
statement = select(ordinateur)
results = session.exec(statement)
ordi1 = results.one()
session.delete(ordi1)
session.commit()'''
@app.post("/endpoint")
async def receive_info(request: Request):
# Lire le body brut
body = await request.body()
print(body)
# Parser le JSON
try:
data = json.loads(body)
except json.JSONDecodeError:
raise HTTPException(status_code=400, detail="Invalid JSON")
# Debug
hardware = data.get('HARDWARE',{})
software = data.get('SOFTWARE',{})
with Session(engine) as session:
statement = select(ordinateur).where(ordinateur.mac_address == hardware.get("mac_address", ""))
ordi1 = session.exec(statement).first()
is_new = False
if not ordi1:
ordi1 = ordinateur()
is_new = True
print("Infos reçues :", data)
ordi1.mb_serial = hardware.get("mb_serial", "")
ordi1.hostname = hardware.get("hostname", "")
ordi1.cpu = hardware.get("cpu", "")
ordi1.cpu_id = hardware.get("cpu_id", "")
ordi1.memory_mb = hardware.get("memory_mb", "")
ordi1.ram_size = hardware.get("ram_size", "")
ordi1.ram_gen = hardware.get("ram_gen", "")
ordi1.sizes = hardware.get("sizes", "")
ordi1.cpu_freq_min = hardware.get("cpu_freq_min", "")
ordi1.cpu_freq_cur = hardware.get("cpu_freq_cur", "")
ordi1.cpu_freq_max = hardware.get("cpu_freq_max", "")
ordi1.gpu_model = hardware.get("gpu_model", "")
ordi1.chassis_serial = hardware.get("chassis_serial", "")
ordi1.cpu_cores_nb = hardware.get("cpu_cores_nb", "")
ordi1.cpu_threads_nb = hardware.get("cpu_threads_nb", "")
ordi1.ram_number = hardware.get("ram_number", "")
ordi1.ram_slots_nb = hardware.get("ram_slots_nb", "")
ordi1.mac_address = hardware.get("mac_address", "")
ordi1.os = software.get("os", "")
ordi1.arch = software.get("arch", "")
ordi1.desktop = software.get("desktop", "")
ordi1.wm = software.get("wm", "")
ordi1.kernel = software.get("kernel", "")
if is_new:
session.add(ordi1)
session.commit()
#session.close()
return ({"status": "ok"})