mirror of
https://git.collinwebdesigns.de/oscar.krause/fastapi-dls.git
synced 2025-11-03 15:30:21 +01:00
added optional query parameter to '/-/origins' and '/-/leases' for linked leases/origin
This commit is contained in:
19
app/main.py
19
app/main.py
@@ -77,17 +77,28 @@ async def status(request: Request):
|
||||
|
||||
|
||||
@app.get('/-/origins')
|
||||
async def _origins(request: Request):
|
||||
async def _origins(request: Request, leases: bool = False):
|
||||
session = sessionmaker(bind=db)()
|
||||
response = list(map(lambda x: jsonable_encoder(x), session.query(Origin).all()))
|
||||
response = []
|
||||
for origin in session.query(Origin).all():
|
||||
x = origin.serialize()
|
||||
if leases:
|
||||
x['leases'] = list(map(lambda _: _.serialize(), Lease.find_by_origin_ref(db, origin.origin_ref)))
|
||||
response.append(x)
|
||||
session.close()
|
||||
return JSONResponse(response)
|
||||
|
||||
|
||||
@app.get('/-/leases')
|
||||
async def _leases(request: Request):
|
||||
async def _leases(request: Request, origin: bool = False):
|
||||
session = sessionmaker(bind=db)()
|
||||
response = list(map(lambda x: jsonable_encoder(x), session.query(Lease).all()))
|
||||
response = []
|
||||
for lease in session.query(Lease).all():
|
||||
x = lease.serialize()
|
||||
if origin:
|
||||
# assume that each lease has a valid origin record
|
||||
x['origin'] = session.query(Origin).filter(Origin.origin_ref == lease.origin_ref).first().serialize()
|
||||
response.append(x)
|
||||
session.close()
|
||||
return JSONResponse(response)
|
||||
|
||||
|
||||
18
app/orm.py
18
app/orm.py
@@ -21,6 +21,15 @@ class Origin(Base):
|
||||
def __repr__(self):
|
||||
return f'Origin(origin_ref={self.origin_ref}, hostname={self.hostname})'
|
||||
|
||||
def serialize(self) -> dict:
|
||||
return {
|
||||
'origin_ref': self.origin_ref,
|
||||
'hostname': self.hostname,
|
||||
'guest_driver_version': self.guest_driver_version,
|
||||
'os_platform': self.os_platform,
|
||||
'os_version': self.os_version,
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def create_statement(engine: Engine):
|
||||
from sqlalchemy.schema import CreateTable
|
||||
@@ -59,6 +68,15 @@ class Lease(Base):
|
||||
def __repr__(self):
|
||||
return f'Lease(origin_ref={self.origin_ref}, lease_ref={self.lease_ref}, expires={self.lease_expires})'
|
||||
|
||||
def serialize(self) -> dict:
|
||||
return {
|
||||
'lease_ref': self.lease_ref,
|
||||
'origin_ref': self.origin_ref,
|
||||
'lease_created': self.lease_created.isoformat(),
|
||||
'lease_expires': self.lease_expires.isoformat(),
|
||||
'lease_updated': self.lease_updated.isoformat(),
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def create_statement(engine: Engine):
|
||||
from sqlalchemy.schema import CreateTable
|
||||
|
||||
Reference in New Issue
Block a user