Projekt

Obecné

Profil

Stáhnout (8.74 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
                                                           "licenses": licenses, "devs": devices,
55
                                                           "teams": teams, "user": current_user})
56 2fe004b1 Matej Zeman
    else:
57 7fe7be79 zemanm98@students.zcu.cz
        current_user = "guest"
58 35168e5f zemanm98@students.zcu.cz
        return templates.TemplateResponse("devices_normal.html", {"request": request, "devices": device_dict,
59
                                                                  "licenses": licenses, "user": current_user})
60 b6f0e019 Matej Zeman
61
62
@device_web.post("/devices-web", response_class=HTMLResponse)
63 35168e5f zemanm98@students.zcu.cz
async def filter_devices(request: Request, skip: int = 0, limit: int = 100,
64
                         keyman_id: str = Form("all"), lic_name: str = Form("all"),
65
                         lic_id: str = Form("all"), team: str = Form("all"),
66 7fe7be79 zemanm98@students.zcu.cz
                         db: Session = Depends(get_db), Authorize: AuthJWT = Depends()):
67 4911f0ea Matej Zeman
    """
68 0fcb708f Matej Zeman
    Endpoint used for filtering devices by user given inputs. returns html template with only
69 4911f0ea Matej Zeman
    devices that has assigned license defined by user input
70
    """
71 7fe7be79 zemanm98@students.zcu.cz
    Authorize.jwt_optional()
72
    current_user = Authorize.get_jwt_subject()
73 35168e5f zemanm98@students.zcu.cz
    device_dict = []
74
    devices_f = crud.get_filtered_devices(db, keyman_id, lic_name, lic_id, team)
75
    ids = []
76
    for d in devices_f:
77
        ids.append(d[0])
78
    devices = crud.get_devices_with_ids(db, ids)
79
    teams = crud.get_teams(db, skip=skip, limit=limit)
80
    # adding dictionary entry with all inforamtions needed in template
81 b6f0e019 Matej Zeman
    for dev in devices:
82 35168e5f zemanm98@students.zcu.cz
        if len(dev.licenses) > 0:
83
            for lic in dev.licenses:
84
                device_dict.append({"device": dev, "license": lic.licenses, "log": dev.logs[len(dev.logs) - 1]})
85
        else:
86
            device_dict.append({"device": dev, "license": dev.licenses, "log": dev.logs[len(dev.logs) - 1]})
87 eaf8ace4 Matej Zeman
    licenses = crud.get_licenses(db, skip=skip, limit=limit)
88 7fe7be79 zemanm98@students.zcu.cz
    if current_user == "admin":
89 35168e5f zemanm98@students.zcu.cz
        return templates.TemplateResponse("devices.html", {"request": request, "devices": device_dict,
90
                                                           "licenses": licenses, "devs": devices,
91
                                                           "teams": teams, "user": current_user})
92 7fe7be79 zemanm98@students.zcu.cz
    else:
93
        current_user = "guest"
94 35168e5f zemanm98@students.zcu.cz
        return templates.TemplateResponse("devices_normal.html", {"request": request, "devices": device_dict,
95
                                                                  "licenses": licenses, "user": current_user})
96 eaf8ace4 Matej Zeman
97
98
@device_web.get("/device-license/{device_id}", response_class=HTMLResponse)
99 5dc6d077 Matej Zeman
async def connect_dev_lic(request: Request, device_id: int, db: Session = Depends(get_db),
100
                          Authorize: AuthJWT = Depends()):
101 4911f0ea Matej Zeman
    """
102 0fcb708f Matej Zeman
    Returns template with one device and all available licenses that can be assigned to it. Plus all teams that can
103
    be assigned to device, inventory number text input and comment text input
104 4911f0ea Matej Zeman
    """
105 5dc6d077 Matej Zeman
    Authorize.jwt_optional()
106
    current_user = Authorize.get_jwt_subject()
107
    if current_user != "admin":
108
        return RedirectResponse(url=f"/logs-web", status_code=303)
109 eaf8ace4 Matej Zeman
    device = crud.get_device(db, device_id)
110 7fe7be79 zemanm98@students.zcu.cz
    dev_licenses = crud.get_device_licenses(db, device_id)
111 35168e5f zemanm98@students.zcu.cz
    lic_ids = []
112 7fe7be79 zemanm98@students.zcu.cz
    dev_lics = []
113
    for dev_lic in dev_licenses:
114
        dev_lics.append(dev_lic.licenses)
115
    for dev_lic in dev_licenses:
116 35168e5f zemanm98@students.zcu.cz
        lic_ids.append(dev_lic.licenses.license_id)
117 eaf8ace4 Matej Zeman
    licenses = crud.get_licenses(db, 0, 100)
118 7fe7be79 zemanm98@students.zcu.cz
    lic_left = []
119
    for lic in licenses:
120 35168e5f zemanm98@students.zcu.cz
        if lic.license_id not in lic_ids and lic not in lic_left:
121 7fe7be79 zemanm98@students.zcu.cz
            lic_left.append(lic)
122 35168e5f zemanm98@students.zcu.cz
    teams = crud.get_teams(db, 0, 100)
123 eaf8ace4 Matej Zeman
    return templates.TemplateResponse("devicelicense.html",
124 35168e5f zemanm98@students.zcu.cz
                                      {"request": request, "device": device, "licenses": lic_left, "dev_lic": dev_lics,
125
                                       "teams": teams})
126 eaf8ace4 Matej Zeman
127
128 7fe7be79 zemanm98@students.zcu.cz
@device_web.post("/devices-web/{device_id}")
129 5dc6d077 Matej Zeman
async def connect_post(device_id: int, lic: str = Form(...), db: Session = Depends(get_db),
130
                       Authorize: AuthJWT = Depends()):
131 4911f0ea Matej Zeman
    """
132 0fcb708f Matej Zeman
    Endpoint called from devicelicense.html template. Adds entry to devices_licenses
133 7fe7be79 zemanm98@students.zcu.cz
    table and redirects to devices-web endpoint
134 4911f0ea Matej Zeman
    """
135 5dc6d077 Matej Zeman
    Authorize.jwt_optional()
136
    current_user = Authorize.get_jwt_subject()
137
    if current_user != "admin":
138
        return RedirectResponse(url=f"/logs-web", status_code=303)
139 eaf8ace4 Matej Zeman
    crud.create_device_license(db, device_id, int(lic), datetime.now())
140 7fe7be79 zemanm98@students.zcu.cz
    return RedirectResponse(url=f"/devices-web", status_code=303)
141
142
143
@device_web.post("/devices-web-del/{device_id}")
144 5dc6d077 Matej Zeman
async def delete_post(device_id: int, lic_del: str = Form(...), db: Session = Depends(get_db),
145
                      Authorize: AuthJWT = Depends()):
146 7fe7be79 zemanm98@students.zcu.cz
    """
147 0fcb708f Matej Zeman
    Endpoint called from devicelicense.html template for deleting device-license connection. Deletes entry in
148
    bodydevices_licenses table and redirects to devices-web endpoint
149 7fe7be79 zemanm98@students.zcu.cz
    """
150 5dc6d077 Matej Zeman
    Authorize.jwt_optional()
151
    current_user = Authorize.get_jwt_subject()
152
    if current_user != "admin":
153
        return RedirectResponse(url=f"/logs-web", status_code=303)
154 7fe7be79 zemanm98@students.zcu.cz
    crud.delete_device_license(db, device_id, int(lic_del))
155
    return RedirectResponse(url=f"/devices-web", status_code=303)
156 35168e5f zemanm98@students.zcu.cz
157 0fcb708f Matej Zeman
158 35168e5f zemanm98@students.zcu.cz
@device_web.post("/devices-web-team/{device_id}")
159
async def dev_team_con(device_id: int, team_con: str = Form(...), db: Session = Depends(get_db),
160 0fcb708f Matej Zeman
                       Authorize: AuthJWT = Depends()):
161 35168e5f zemanm98@students.zcu.cz
    """
162 0fcb708f Matej Zeman
    Endpoint called from devicelicense.html template, connects device with team and redirects to devices-web endpoint
163 35168e5f zemanm98@students.zcu.cz
    """
164
    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
    crud.update_device(db, device_id, team_con)
169
    return RedirectResponse(url=f"/devices-web", status_code=303)
170
171 0fcb708f Matej Zeman
172 35168e5f zemanm98@students.zcu.cz
@device_web.post("/devices-web-inv/{device_id}")
173
async def dev_inv_new(device_id: int, dev_inv: str = Form(...), db: Session = Depends(get_db),
174
                      Authorize: AuthJWT = Depends()):
175
    """
176 0fcb708f Matej Zeman
    Endpoint called from template devicelicense.html, updates inventory number of device and redirects to devices-web
177
    endpoint
178 35168e5f zemanm98@students.zcu.cz
    """
179
    Authorize.jwt_optional()
180
    current_user = Authorize.get_jwt_subject()
181
    if current_user != "admin":
182
        return RedirectResponse(url=f"/logs-web", status_code=303)
183
    crud.update_device_inv(db, device_id, dev_inv)
184
    return RedirectResponse(url=f"/devices-web", status_code=303)
185
186 0fcb708f Matej Zeman
187 35168e5f zemanm98@students.zcu.cz
@device_web.post("/devices-web-comment/{device_id}")
188
async def dev_comm_new(device_id: int, dev_com: str = Form(...), db: Session = Depends(get_db),
189 0fcb708f Matej Zeman
                       Authorize: AuthJWT = Depends()):
190 35168e5f zemanm98@students.zcu.cz
    """
191 0fcb708f Matej Zeman
    Endpoint called from template devicelicense.html, updates comment of device and redirects to devices-web
192
    endpoint
193 35168e5f zemanm98@students.zcu.cz
    """
194
    Authorize.jwt_optional()
195
    current_user = Authorize.get_jwt_subject()
196
    if current_user != "admin":
197
        return RedirectResponse(url=f"/logs-web", status_code=303)
198
    crud.update_device_com(db, device_id, dev_com)
199
    return RedirectResponse(url=f"/devices-web", status_code=303)