Projekt

Obecné

Profil

Stáhnout (9.65 KB) Statistiky
| Větev: | Tag: | Revize:
1 b6f0e019 Matej Zeman
from datetime import datetime
2 c78ad6f2 Matej Zeman
3
from fastapi import Depends, APIRouter, Form
4
from fastapi import Request
5 2fe004b1 Matej Zeman
from fastapi.responses import HTMLResponse, RedirectResponse
6 b6f0e019 Matej Zeman
from fastapi.templating import Jinja2Templates
7 c78ad6f2 Matej Zeman
from fastapi_jwt_auth import AuthJWT
8
from pydantic import BaseModel
9
from sqlalchemy.orm import Session
10 2fe004b1 Matej Zeman
from sql_app.api.auth import fake_users_db
11 35168e5f zemanm98@students.zcu.cz
from sql_app import crud, models, schemas
12 c78ad6f2 Matej Zeman
from ..database import SessionLocal, engine
13 b6f0e019 Matej Zeman
14
models.Base.metadata.create_all(bind=engine)
15
16 4911f0ea Matej Zeman
# Path to html templates used in this file
17 4babde6c Matej Zeman
templates = Jinja2Templates(directory="templates/devices")
18 4911f0ea Matej Zeman
19
# prefix used for all endpoints in this file
20 af6f5886 Matěj Zeman
device_web = APIRouter(prefix="")
21 b6f0e019 Matej Zeman
22
23
# Dependency
24
def get_db():
25
    db = SessionLocal()
26
    try:
27
        yield db
28
    finally:
29
        db.close()
30
31
32
@device_web.get("/devices-web", response_class=HTMLResponse)
33 c78ad6f2 Matej Zeman
async def read_devices(request: Request, skip: int = 0, limit: int = 100, db: Session = Depends(get_db),
34
                       Authorize: AuthJWT = Depends()):
35 4911f0ea Matej Zeman
    """
36 0fcb708f Matej Zeman
    Returns template with all devices and its necessary attributes
37 4911f0ea Matej Zeman
    """
38 c78ad6f2 Matej Zeman
    Authorize.jwt_optional()
39
    current_user = Authorize.get_jwt_subject()
40
41 35168e5f zemanm98@students.zcu.cz
    device_dict = []
42 b6f0e019 Matej Zeman
    devices = crud.get_devices(db, skip=skip, limit=limit)
43 35168e5f zemanm98@students.zcu.cz
    teams = crud.get_teams(db, skip=skip, limit=limit)
44
    # adding dictionary entry with all inforamtions needed in template
45
    for dev in devices:
46
        if len(dev.licenses) > 0:
47
            for lic in dev.licenses:
48
                device_dict.append({"device": dev, "license": lic.licenses, "log": dev.logs[len(dev.logs) - 1]})
49
        else:
50
            device_dict.append({"device": dev, "license": dev.licenses, "log": dev.logs[len(dev.logs) - 1]})
51 eaf8ace4 Matej Zeman
    licenses = crud.get_licenses(db, skip=skip, limit=limit)
52 2fe004b1 Matej Zeman
    if current_user == "admin":
53 35168e5f zemanm98@students.zcu.cz
        return templates.TemplateResponse("devices.html", {"request": request, "devices": device_dict,
54 93d0ec10 Matej Zeman
                                                           "licenses": licenses, "devs": devices, "keyman_val": "",
55
                                                           "licn_val": "", "lici_val": "", "team_val": "",
56 35168e5f zemanm98@students.zcu.cz
                                                           "teams": teams, "user": current_user})
57 2fe004b1 Matej Zeman
    else:
58 7fe7be79 zemanm98@students.zcu.cz
        current_user = "guest"
59 35168e5f zemanm98@students.zcu.cz
        return templates.TemplateResponse("devices_normal.html", {"request": request, "devices": device_dict,
60 93d0ec10 Matej Zeman
                                                                  "licenses": licenses, "devs": devices, "keyman_val": "",
61
                                                                  "licn_val": "", "lici_val": "", "team_val": "",
62
                                                                  "teams": teams, "user": current_user})
63 b6f0e019 Matej Zeman
64
65
@device_web.post("/devices-web", response_class=HTMLResponse)
66 35168e5f zemanm98@students.zcu.cz
async def filter_devices(request: Request, skip: int = 0, limit: int = 100,
67
                         keyman_id: str = Form("all"), lic_name: str = Form("all"),
68
                         lic_id: str = Form("all"), team: str = Form("all"),
69 7fe7be79 zemanm98@students.zcu.cz
                         db: Session = Depends(get_db), Authorize: AuthJWT = Depends()):
70 4911f0ea Matej Zeman
    """
71 0fcb708f Matej Zeman
    Endpoint used for filtering devices by user given inputs. returns html template with only
72 4911f0ea Matej Zeman
    devices that has assigned license defined by user input
73
    """
74 7fe7be79 zemanm98@students.zcu.cz
    Authorize.jwt_optional()
75
    current_user = Authorize.get_jwt_subject()
76 35168e5f zemanm98@students.zcu.cz
    device_dict = []
77
    devices_f = crud.get_filtered_devices(db, keyman_id, lic_name, lic_id, team)
78
    ids = []
79
    for d in devices_f:
80
        ids.append(d[0])
81
    devices = crud.get_devices_with_ids(db, ids)
82
    teams = crud.get_teams(db, skip=skip, limit=limit)
83
    # adding dictionary entry with all inforamtions needed in template
84 b6f0e019 Matej Zeman
    for dev in devices:
85 35168e5f zemanm98@students.zcu.cz
        if len(dev.licenses) > 0:
86
            for lic in dev.licenses:
87
                device_dict.append({"device": dev, "license": lic.licenses, "log": dev.logs[len(dev.logs) - 1]})
88
        else:
89
            device_dict.append({"device": dev, "license": dev.licenses, "log": dev.logs[len(dev.logs) - 1]})
90 eaf8ace4 Matej Zeman
    licenses = crud.get_licenses(db, skip=skip, limit=limit)
91 93d0ec10 Matej Zeman
    if keyman_id == "all":
92
        keyman_id = ""
93
    if lic_name == "all":
94
        lic_name = ""
95
    if lic_id == "all":
96
        lic_id = ""
97
    if team == "all":
98
        team = ""
99 7fe7be79 zemanm98@students.zcu.cz
    if current_user == "admin":
100 35168e5f zemanm98@students.zcu.cz
        return templates.TemplateResponse("devices.html", {"request": request, "devices": device_dict,
101 93d0ec10 Matej Zeman
                                                           "licenses": licenses, "devs": devices, "keyman_val": keyman_id,
102
                                                           "licn_val": lic_name, "lici_val": lic_id, "team_val": team,
103 35168e5f zemanm98@students.zcu.cz
                                                           "teams": teams, "user": current_user})
104 7fe7be79 zemanm98@students.zcu.cz
    else:
105
        current_user = "guest"
106 35168e5f zemanm98@students.zcu.cz
        return templates.TemplateResponse("devices_normal.html", {"request": request, "devices": device_dict,
107 93d0ec10 Matej Zeman
                                                                  "licenses": licenses, "devs": devices, "keyman_val": keyman_id,
108
                                                                  "licn_val": lic_name, "lici_val": lic_id, "team_val": team,
109
                                                                  "teams": teams, "user": current_user})
110 eaf8ace4 Matej Zeman
111
112
@device_web.get("/device-license/{device_id}", response_class=HTMLResponse)
113 5dc6d077 Matej Zeman
async def connect_dev_lic(request: Request, device_id: int, db: Session = Depends(get_db),
114
                          Authorize: AuthJWT = Depends()):
115 4911f0ea Matej Zeman
    """
116 0fcb708f Matej Zeman
    Returns template with one device and all available licenses that can be assigned to it. Plus all teams that can
117
    be assigned to device, inventory number text input and comment text input
118 4911f0ea Matej Zeman
    """
119 5dc6d077 Matej Zeman
    Authorize.jwt_optional()
120
    current_user = Authorize.get_jwt_subject()
121
    if current_user != "admin":
122
        return RedirectResponse(url=f"/logs-web", status_code=303)
123 eaf8ace4 Matej Zeman
    device = crud.get_device(db, device_id)
124 7fe7be79 zemanm98@students.zcu.cz
    dev_licenses = crud.get_device_licenses(db, device_id)
125 35168e5f zemanm98@students.zcu.cz
    lic_ids = []
126 7fe7be79 zemanm98@students.zcu.cz
    dev_lics = []
127
    for dev_lic in dev_licenses:
128
        dev_lics.append(dev_lic.licenses)
129
    for dev_lic in dev_licenses:
130 35168e5f zemanm98@students.zcu.cz
        lic_ids.append(dev_lic.licenses.license_id)
131 eaf8ace4 Matej Zeman
    licenses = crud.get_licenses(db, 0, 100)
132 7fe7be79 zemanm98@students.zcu.cz
    lic_left = []
133
    for lic in licenses:
134 35168e5f zemanm98@students.zcu.cz
        if lic.license_id not in lic_ids and lic not in lic_left:
135 7fe7be79 zemanm98@students.zcu.cz
            lic_left.append(lic)
136 35168e5f zemanm98@students.zcu.cz
    teams = crud.get_teams(db, 0, 100)
137 eaf8ace4 Matej Zeman
    return templates.TemplateResponse("devicelicense.html",
138 35168e5f zemanm98@students.zcu.cz
                                      {"request": request, "device": device, "licenses": lic_left, "dev_lic": dev_lics,
139
                                       "teams": teams})
140 eaf8ace4 Matej Zeman
141
142 7fe7be79 zemanm98@students.zcu.cz
@device_web.post("/devices-web/{device_id}")
143 5dc6d077 Matej Zeman
async def connect_post(device_id: int, lic: str = Form(...), db: Session = Depends(get_db),
144
                       Authorize: AuthJWT = Depends()):
145 4911f0ea Matej Zeman
    """
146 0fcb708f Matej Zeman
    Endpoint called from devicelicense.html template. Adds entry to devices_licenses
147 7fe7be79 zemanm98@students.zcu.cz
    table and redirects to devices-web endpoint
148 4911f0ea Matej Zeman
    """
149 5dc6d077 Matej Zeman
    Authorize.jwt_optional()
150
    current_user = Authorize.get_jwt_subject()
151
    if current_user != "admin":
152
        return RedirectResponse(url=f"/logs-web", status_code=303)
153 eaf8ace4 Matej Zeman
    crud.create_device_license(db, device_id, int(lic), datetime.now())
154 7fe7be79 zemanm98@students.zcu.cz
    return RedirectResponse(url=f"/devices-web", status_code=303)
155
156
157
@device_web.post("/devices-web-del/{device_id}")
158 5dc6d077 Matej Zeman
async def delete_post(device_id: int, lic_del: str = Form(...), db: Session = Depends(get_db),
159
                      Authorize: AuthJWT = Depends()):
160 7fe7be79 zemanm98@students.zcu.cz
    """
161 0fcb708f Matej Zeman
    Endpoint called from devicelicense.html template for deleting device-license connection. Deletes entry in
162
    bodydevices_licenses table and redirects to devices-web endpoint
163 7fe7be79 zemanm98@students.zcu.cz
    """
164 5dc6d077 Matej Zeman
    Authorize.jwt_optional()
165
    current_user = Authorize.get_jwt_subject()
166
    if current_user != "admin":
167
        return RedirectResponse(url=f"/logs-web", status_code=303)
168 7fe7be79 zemanm98@students.zcu.cz
    crud.delete_device_license(db, device_id, int(lic_del))
169
    return RedirectResponse(url=f"/devices-web", status_code=303)
170 35168e5f zemanm98@students.zcu.cz
171 0fcb708f Matej Zeman
172 35168e5f zemanm98@students.zcu.cz
@device_web.post("/devices-web-team/{device_id}")
173
async def dev_team_con(device_id: int, team_con: str = Form(...), db: Session = Depends(get_db),
174 0fcb708f Matej Zeman
                       Authorize: AuthJWT = Depends()):
175 35168e5f zemanm98@students.zcu.cz
    """
176 0fcb708f Matej Zeman
    Endpoint called from devicelicense.html template, connects device with team and redirects to devices-web endpoint
177 35168e5f zemanm98@students.zcu.cz
    """
178
    Authorize.jwt_optional()
179
    current_user = Authorize.get_jwt_subject()
180
    if current_user != "admin":
181
        return RedirectResponse(url=f"/logs-web", status_code=303)
182
    crud.update_device(db, device_id, team_con)
183
    return RedirectResponse(url=f"/devices-web", status_code=303)
184
185 0fcb708f Matej Zeman
186 35168e5f zemanm98@students.zcu.cz
@device_web.post("/devices-web-inv/{device_id}")
187
async def dev_inv_new(device_id: int, dev_inv: str = Form(...), db: Session = Depends(get_db),
188
                      Authorize: AuthJWT = Depends()):
189
    """
190 0fcb708f Matej Zeman
    Endpoint called from template devicelicense.html, updates inventory number of device and redirects to devices-web
191
    endpoint
192 35168e5f zemanm98@students.zcu.cz
    """
193
    Authorize.jwt_optional()
194
    current_user = Authorize.get_jwt_subject()
195
    if current_user != "admin":
196
        return RedirectResponse(url=f"/logs-web", status_code=303)
197
    crud.update_device_inv(db, device_id, dev_inv)
198
    return RedirectResponse(url=f"/devices-web", status_code=303)
199
200 0fcb708f Matej Zeman
201 35168e5f zemanm98@students.zcu.cz
@device_web.post("/devices-web-comment/{device_id}")
202
async def dev_comm_new(device_id: int, dev_com: str = Form(...), db: Session = Depends(get_db),
203 0fcb708f Matej Zeman
                       Authorize: AuthJWT = Depends()):
204 35168e5f zemanm98@students.zcu.cz
    """
205 0fcb708f Matej Zeman
    Endpoint called from template devicelicense.html, updates comment of device and redirects to devices-web
206
    endpoint
207 35168e5f zemanm98@students.zcu.cz
    """
208
    Authorize.jwt_optional()
209
    current_user = Authorize.get_jwt_subject()
210
    if current_user != "admin":
211
        return RedirectResponse(url=f"/logs-web", status_code=303)
212
    crud.update_device_com(db, device_id, dev_com)
213
    return RedirectResponse(url=f"/devices-web", status_code=303)