Projekt

Obecné

Profil

« Předchozí | Další » 

Revize 6c1e92e3

Přidáno uživatelem Matěj Zeman před více než 2 roky(ů)

re #9425 Struktury upraveny dle vize. Endpointy rozděleny do souboru podle funkcionality.

Zobrazit rozdíly:

server/sql_app/api/devices.py
1
from typing import List
2

  
3
from fastapi import Depends, FastAPI, HTTPException, APIRouter
4
from sqlalchemy.orm import Session
5
from ...sql_app import crud, models, schemas
6
from ..database import SessionLocal, engine
7

  
8
models.Base.metadata.create_all(bind=engine)
9

  
10
device = APIRouter()
11

  
12
# Dependency
13
def get_db():
14
    db = SessionLocal()
15
    try:
16
        yield db
17
    finally:
18
        db.close()
19

  
20

  
21
@device.post("/device/", response_model=schemas.Device)
22
def create_device(device: schemas.DeviceCreate, db: Session = Depends(get_db)):
23
    print(crud.create_device(db=db, device=device))
24

  
25

  
26
@device.get("/devices/", response_model=List[schemas.Device])
27
def read_devices(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
28
    devices = crud.get_devices(db, skip=skip, limit=limit)
29
    return devices
30

  
31

  
32
@device.get("/device/{device_id}", response_model=schemas.Device)
33
def read_device(device_id: int, db: Session = Depends(get_db)):
34
    db_device = crud.get_device(db, device_id=device_id)
35
    if db_device is None:
36
        raise HTTPException(status_code=404, detail="Device not found")
37
    return db_device
server/sql_app/api/licenses.py
1
from typing import List
2

  
3
from fastapi import Depends, FastAPI, HTTPException, APIRouter
4
from sqlalchemy.orm import Session
5
from ...sql_app import crud, models, schemas
6
from ..database import SessionLocal, engine
7

  
8
models.Base.metadata.create_all(bind=engine)
9

  
10
licenses = APIRouter()
11

  
12

  
13
# Dependency
14
def get_db():
15
    db = SessionLocal()
16
    try:
17
        yield db
18
    finally:
19
        db.close()
20

  
21

  
22
@licenses.post("/license/", response_model=schemas.License)
23
def create_license(license: schemas.LicenseCreate, db: Session = Depends(get_db)):
24
    print(crud.create_license(db=db, license=license))
25

  
26

  
27
@licenses.get("/licenses/", response_model=List[schemas.License])
28
def read_licenses(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
29
    licenses = crud.get_licenses(db, skip=skip, limit=limit)
30
    return licenses
31

  
32

  
33
@licenses.post("/device_license/", response_model=schemas.DeviceLicense)
34
def create_device_license(device_license: schemas.DeviceLicenseCreate, db: Session = Depends(get_db)):
35
    print(crud.create_device_license(db=db, device_license=device_license))
server/sql_app/api/pcs.py
1
from typing import List
2
from fastapi import Depends, FastAPI, HTTPException, APIRouter
3
from sqlalchemy.orm import Session
4
from ...sql_app import crud, models, schemas
5
from ..database import SessionLocal, engine
6

  
7
models.Base.metadata.create_all(bind=engine)
8

  
9
pcs = APIRouter()
10

  
11

  
12
# Dependency
13
def get_db():
14
    db = SessionLocal()
15
    try:
16
        yield db
17
    finally:
18
        db.close()
19

  
20

  
21
@pcs.post("/pc/", response_model=schemas.PC)
22
def create_pc(pc: schemas.PCCreate, db: Session = Depends(get_db)):
23
    print(crud.create_pc(db=db, user=pc.username, host=pc.hostname))
24

  
25

  
26
@pcs.get("/pcs/", response_model=List[schemas.PC])
27
def read_pcs(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
28
    pcs = crud.get_pcs(db, skip=skip, limit=limit)
29
    return pcs
30

  
31

  
32
@pcs.get("/pc/{pc_id}", response_model=schemas.PC)
33
def read_pc(pc_id: int, db: Session = Depends(get_db)):
34
    db_pc = crud.get_pc(db, pc_id=pc_id)
35
    if db_pc is None:
36
        raise HTTPException(status_code=404, detail="Device not found")
37
    return db_pc
server/sql_app/api/usb_logs.py
1
from typing import List
2
from fastapi import Depends, FastAPI, HTTPException, APIRouter, Form
3
from sqlalchemy.orm import Session
4
from ...sql_app import crud, models, schemas
5
from ..database import SessionLocal, engine
6

  
7
models.Base.metadata.create_all(bind=engine)
8

  
9
usblogs = APIRouter()
10

  
11

  
12
# Dependency
13
def get_db():
14
    db = SessionLocal()
15
    try:
16
        yield db
17
    finally:
18
        db.close()
19

  
20

  
21
@usblogs.post("/usb-logs/", response_model=schemas.USBLog)
22
def create_device_logs(log: schemas.USBTempBase, db: Session = Depends(get_db)):
23
    dev = crud.find_device(db, log.device)
24
    if dev is None:
25
        dev = crud.create_device(db=db, device=log.device)
26
    pc = crud.find_pc(db, log.username, log.hostname)
27
    if pc is None:
28
        pc = crud.create_pc(db=db, user=log.username, host=log.hostname)
29

  
30
    print(crud.create_device_logs(db=db, item=log, dev_id=dev.id, pc_id=pc.id))
31

  
32

  
33
@usblogs.get("/logs/", response_model=List[schemas.USBLog])
34
def read_logs(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
35
    items = crud.get_logs(db, skip=skip, limit=limit)
36
    return items
37

  
38

  
39
@usblogs.get("/logs/{device_id}", response_model=List[schemas.USBLog])
40
def read_log(device_id: int, db: Session = Depends(get_db)):
41
    db_log = crud.get_log(db, device_id=device_id)
42
    if db_log is None:
43
        raise HTTPException(status_code=404, detail="Logs not found")
44
    return db_log
server/sql_app/crud.py
26 26
    return db_device
27 27

  
28 28

  
29
def get_license(db: Session, license_id: int):
30
    return db.query(models.License).filter(models.License.id == license_id).first()
31

  
32

  
33
def get_licenses(db: Session, skip: int = 0, limit: int = 100):
34
    return db.query(models.License).offset(skip).limit(limit).all()
35

  
36

  
37
def create_license(db: Session, license: schemas.LicenseBase):
38
    db_license = models.License(name=license.name, expiration_date=license.expiration_date)
39
    db.add(db_license)
40
    db.commit()
41
    db.refresh(db_license)
42
    return db_license
43

  
44

  
45
def create_device_license(db: Session, device_license: schemas.DeviceLicenseBase):
46
    db_device_license = models.DeviceLicense(device_id=device_license.device_id, license_id=device_license.license_id,
47
                                             assigned_datetime=device_license.assigned_datetime)
48
    db.add(db_device_license)
49
    db.commit()
50
    db.refresh(db_device_license)
51
    return db_device_license
52

  
53

  
54
def get_pc(db: Session, pc_id: int):
55
    return db.query(models.PC).filter(models.PC.id == pc_id).first()
56

  
57

  
58
def get_pcs(db: Session, skip: int = 0, limit: int = 100):
59
    return db.query(models.PC).offset(skip).limit(limit).all()
60

  
61

  
62
def find_pc(db: Session, username: str, hostname: str):
63
    return db.query(models.PC).filter(models.PC.username == username and
64
                                      models.PC.hostname == hostname).first()
65

  
66

  
67
def create_pc(db: Session, user: str, host: str):
68
    db_pc = models.PC(username=user, hostname=host)
69
    db.add(db_pc)
70
    db.commit()
71
    db.refresh(db_pc)
72
    return db_pc
73

  
74

  
29 75
def get_logs(db: Session, skip: int = 0, limit: int = 100):
30 76
    return db.query(models.USBLog).offset(skip).limit(limit).all()
31 77

  
......
34 80
    return db.query(models.USBLog).filter(models.USBLog.device_id == device_id).offset(skip).limit(limit).all()
35 81

  
36 82

  
37
def create_device_logs(db: Session, item: schemas.USBTempBase, dev_id: int):
38
    db_log = models.USBLog(username=item.username, hostname=item.hostname, timestamp=item.timestamp,
39
                           status=item.status, device_id=dev_id)
83
def create_device_logs(db: Session, item: schemas.USBTempBase, dev_id: int, pc_id: int):
84
    db_log = models.USBLog(pc_id=pc_id, timestamp=item.timestamp, status=item.status, device_id=dev_id)
40 85
    db.add(db_log)
41 86
    db.commit()
42 87
    db.refresh(db_log)
server/sql_app/main.py
1
from typing import List
2

  
3
from fastapi import Depends, FastAPI, HTTPException
4
from sqlalchemy.orm import Session
5
from sql_app import crud, models, schemas
6 1
import uvicorn
7
from database import SessionLocal, engine
2
from server.sql_app.api.devices import device
3
from server.sql_app.api.licenses import licenses
4
from server.sql_app.api.pcs import pcs
5
from server.sql_app.api.usb_logs import usblogs
6
from fastapi import FastAPI
8 7

  
9
models.Base.metadata.create_all(bind=engine)
10 8

  
11 9
app = FastAPI(root_path="/api/v1")
12

  
13

  
14
# Dependency
15
def get_db():
16
    db = SessionLocal()
17
    try:
18
        yield db
19
    finally:
20
        db.close()
21

  
22

  
23
@app.post("/device/", response_model=schemas.Device)
24
def create_device(device: schemas.DeviceCreate, db: Session = Depends(get_db)):
25
    print(crud.create_device(db=db, device=device))
26

  
27

  
28
@app.get("/devices/", response_model=List[schemas.Device])
29
def read_devices(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
30
    devices = crud.get_devices(db, skip=skip, limit=limit)
31
    return devices
32

  
33

  
34
@app.get("/device/{device_id}", response_model=schemas.Device)
35
def read_device(device_id: int, db: Session = Depends(get_db)):
36
    db_device = crud.get_device(db, device_id=device_id)
37
    if db_device is None:
38
        raise HTTPException(status_code=404, detail="Device not found")
39
    return db_device
40

  
41

  
42
@app.post("/usb-logs/", response_model=schemas.USBLog)
43
def create_device_logs(log: schemas.USBTempBase, db: Session = Depends(get_db)):
44
    dev = crud.find_device(db, log.device)
45
    if dev is None:
46
        dev = crud.create_device(db=db, device=log.device)
47

  
48
    print(crud.create_device_logs(db=db, item=log, dev_id=dev.id))
49

  
50

  
51
@app.get("/logs/", response_model=List[schemas.USBLog])
52
def read_logs(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
53
    items = crud.get_logs(db, skip=skip, limit=limit)
54
    return items
55

  
56

  
57
@app.get("/logs/{device_id}", response_model=List[schemas.USBLog])
58
def read_log(device_id: int, db: Session = Depends(get_db)):
59
    db_log = crud.get_log(db, device_id=device_id)
60
    if db_log is None:
61
        raise HTTPException(status_code=404, detail="Logs not found")
62
    return db_log
63

  
10
app.include_router(device)
11
app.include_router(licenses)
12
app.include_router(pcs)
13
app.include_router(usblogs)
64 14

  
65 15
if __name__ == "__main__":
66 16
    uvicorn.run(app, host="192.168.0.22", port=8000)
17

  
server/sql_app/models.py
13 13
    serial_number = Column(String, index=True, nullable=False)
14 14

  
15 15
    logs = relationship("USBLog", back_populates="device")
16
    licenses = relationship("DeviceLicense", back_populates="device_lic")
16 17

  
17 18

  
18 19
class USBLog(Base):
19 20
    __tablename__ = "usb_logs"
20 21

  
21 22
    id = Column(Integer, primary_key=True, index=True)
22
    username = Column(String, index=True, nullable=False)
23
    hostname = Column(String, index=True, nullable=False)
23
    pc_id = Column(Integer, ForeignKey("pc.id"))
24 24
    timestamp = Column(String, index=True, nullable=False)
25 25
    status = Column(String, index=True, nullable=False)
26 26
    device_id = Column(Integer, ForeignKey("devices.id"))
27 27

  
28 28
    device = relationship("Device", back_populates="logs")
29
    pc = relationship("PC", back_populates="logs_pc")
30

  
31

  
32
class License(Base):
33
    __tablename__ = "licenses"
34

  
35
    id = Column(Integer, primary_key=True, index=True)
36
    name = Column(String, index=True, nullable=False)
37
    expiration_date = Column(String, index=True, nullable=False)
38

  
39
    devices = relationship("DeviceLicense", back_populates="licenses")
40

  
41

  
42
class DeviceLicense(Base):
43
    __tablename__ = "devices_licenses"
44

  
45
    id = Column(Integer, primary_key=True, index=True)
46
    device_id = Column(Integer, ForeignKey("devices.id"))
47
    license_id = Column(Integer, ForeignKey("licenses.id"))
48
    assigned_datetime = Column(String, index=True, nullable=False)
49

  
50
    device_lic = relationship("Device", back_populates="licenses")
51
    licenses = relationship("License", back_populates="devices")
52

  
53

  
54
class PC(Base):
55
    __tablename__ = "pc"
56

  
57
    id = Column(Integer, primary_key=True, index=True)
58
    username = Column(String, index=True, nullable=False)
59
    hostname = Column(String, index=True, nullable=False)
60
    logs_pc = relationship("USBLog", back_populates="pc")
server/sql_app/schemas.py
4 4

  
5 5

  
6 6

  
7
class DeviceLicenseBase(BaseModel):
8
    device_id: int
9
    license_id: int
10
    assigned_datetime: str
11

  
12

  
13
class DeviceLicenseCreate(DeviceLicenseBase):
14
    pass
15

  
16

  
17
class DeviceLicense(DeviceLicenseCreate):
18
    id: int
19

  
20
    class Config:
21
        orm_mode = True
22

  
23

  
7 24
class USBLogBase(BaseModel):
8 25
    timestamp: str
9 26
    status: str
......
16 33
class USBLog(USBLogBase):
17 34
    id: int
18 35
    device_id: int
36
    pc_id: int
19 37

  
20 38
    class Config:
21 39
        orm_mode = True
......
34 52
class Device(DeviceBase):
35 53
    id: int
36 54
    logs: List[USBLog] = []
55
    licenses: List[DeviceLicense] = []
56

  
57
    class Config:
58
        orm_mode = True
59

  
60

  
61
class PCBase(BaseModel):
62
    username: str
63
    hostname: str
64

  
65

  
66
class PCCreate(PCBase):
67
    pass
68

  
69

  
70
class PC(PCCreate):
71
    id: int
72
    logs_pc: List[USBLog] = []
73

  
74
    class Config:
75
        orm_mode = True
76

  
77

  
78
class LicenseBase(BaseModel):
79
    name: str
80
    expiration_date: str
81

  
82

  
83
class LicenseCreate(LicenseBase):
84
    pass
85

  
86

  
87
class License(LicenseCreate):
88
    id: int
89
    devices: List[DeviceLicense] = []
37 90

  
38 91
    class Config:
39 92
        orm_mode = True

Také k dispozici: Unified diff