Projekt

Obecné

Profil

Stáhnout (4.08 KB) Statistiky
| Větev: | Tag: | Revize:
1 b6f0e019 Matej Zeman
from typing import List
2
3
from fastapi import Depends, FastAPI, HTTPException, APIRouter, Form
4
from sqlalchemy.orm import Session
5
from sql_app import crud, models, schemas
6
from datetime import datetime
7
from ..database import SessionLocal, engine
8
from fastapi import FastAPI, Request
9
from fastapi.responses import HTMLResponse
10
from fastapi.staticfiles import StaticFiles
11
from fastapi.templating import Jinja2Templates
12
13
models.Base.metadata.create_all(bind=engine)
14
15 4911f0ea Matej Zeman
# Path to html templates used in this file
16 4babde6c Matej Zeman
templates = Jinja2Templates(directory="templates/devices")
17 4911f0ea Matej Zeman
18
# prefix used for all endpoints in this file
19 b6f0e019 Matej Zeman
device_web = APIRouter(prefix="/api/v1")
20
21
22
# Dependency
23
def get_db():
24
    db = SessionLocal()
25
    try:
26
        yield db
27
    finally:
28
        db.close()
29
30
31
@device_web.get("/devices-web", response_class=HTMLResponse)
32
async def read_devices(request: Request, skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
33 4911f0ea Matej Zeman
    """
34
    Returns template with all devices and its current states
35
    """
36 b6f0e019 Matej Zeman
    devices = crud.get_devices(db, skip=skip, limit=limit)
37 eaf8ace4 Matej Zeman
    statuses = []
38 4911f0ea Matej Zeman
    # adding state for each device in list
39 eaf8ace4 Matej Zeman
    for i in range(0, len(devices)):
40
        statuses.append(devices[i].logs[len(devices[i].logs)-1].status)
41
    licenses = crud.get_licenses(db, skip=skip, limit=limit)
42
    return templates.TemplateResponse("devices.html", {"request": request, "devs": len(devices), "devices": devices,
43
                                                       "statuses": statuses, "licenses": licenses})
44 b6f0e019 Matej Zeman
45
46
@device_web.post("/devices-web", response_class=HTMLResponse)
47
async def filter_devices(request: Request, skip: int = 0, limit: int = 100, lic: str = Form("all"),
48
                         db: Session = Depends(get_db)):
49 4911f0ea Matej Zeman
    """
50
    Endpoint used for filtering devices by license. returns html template with only
51
    devices that has assigned license defined by user input
52
    """
53 b6f0e019 Matej Zeman
    devices = crud.get_devices(db, skip=skip, limit=limit)
54
    def_devices = []
55
    for dev in devices:
56
        for l in dev.licenses:
57
            if dev not in def_devices and l.licenses.name == lic:
58
                def_devices.append(dev)
59 4911f0ea Matej Zeman
    # if input was default all
60 b6f0e019 Matej Zeman
    if lic == "all":
61
        def_devices = devices
62 eaf8ace4 Matej Zeman
    statuses = []
63
    for i in range(0, len(def_devices)):
64
        statuses.append(def_devices[i].logs[len(def_devices[i].logs) - 1].status)
65
    licenses = crud.get_licenses(db, skip=skip, limit=limit)
66
    return templates.TemplateResponse("devices.html", {"request": request, "devs": len(def_devices), "devices": def_devices,
67
                                                       "statuses": statuses, "licenses": licenses})
68
69
70
@device_web.get("/device-license/{device_id}", response_class=HTMLResponse)
71
async def connect_dev_lic(request: Request, device_id: int, db: Session = Depends(get_db)):
72 4911f0ea Matej Zeman
    """
73
    Returns template with one device and all available licenses that can be assigned to it.
74
    """
75 eaf8ace4 Matej Zeman
    device = crud.get_device(db, device_id)
76
    licenses = crud.get_licenses(db, 0, 100)
77
    return templates.TemplateResponse("devicelicense.html",
78
                                      {"request": request, "device": device, "licenses": licenses})
79
80
81
@device_web.post("/devices-web/{device_id}", response_class=HTMLResponse)
82
async def connect_post(request: Request, device_id: int, lic: str = Form(...), skip: int = 0, limit: int = 100,
83
                       db: Session = Depends(get_db)):
84 4911f0ea Matej Zeman
    """
85
    Endpoint called from template for connecting device with license. Adds entry to devices_licenses
86
    table and returns template with all devices in database
87
    """
88 eaf8ace4 Matej Zeman
    crud.create_device_license(db, device_id, int(lic), datetime.now())
89
    devices = crud.get_devices(db, skip=skip, limit=limit)
90
    statuses = []
91 4911f0ea Matej Zeman
    # adding state for each device in list
92 eaf8ace4 Matej Zeman
    for i in range(0, len(devices)):
93
        statuses.append(devices[i].logs[len(devices[i].logs) - 1].status)
94
    licenses = crud.get_licenses(db, skip=skip, limit=limit)
95
    return templates.TemplateResponse("devices.html", {"request": request, "devs": len(devices), "devices": devices,
96
                                                       "statuses": statuses, "licenses": licenses})