mirror of
				https://git.collinwebdesigns.de/oscar.krause/fastapi-dls.git
				synced 2025-10-31 23:00:15 +01:00 
			
		
		
		
	implemented "lease_renewal" attribute as calculated value within what period of time the license must be renewed
This commit is contained in:
		| @@ -9,7 +9,7 @@ from dotenv import load_dotenv | ||||
| from fastapi import FastAPI | ||||
| from fastapi.requests import Request | ||||
| from json import loads as json_loads | ||||
| from datetime import datetime | ||||
| from datetime import datetime, timedelta | ||||
| from dateutil.relativedelta import relativedelta | ||||
| from calendar import timegm | ||||
| from jose import jws, jwk, jwt, JWTError | ||||
| @@ -43,6 +43,7 @@ INSTANCE_KEY_PUB = load_key(str(env('INSTANCE_KEY_PUB', join(dirname(__file__), | ||||
| TOKEN_EXPIRE_DELTA = relativedelta(days=int(env('TOKEN_EXPIRE_DAYS', 1)), hours=int(env('TOKEN_EXPIRE_HOURS', 0))) | ||||
| LEASE_EXPIRE_DELTA = relativedelta(days=int(env('LEASE_EXPIRE_DAYS', 90)), hours=int(env('LEASE_EXPIRE_HOURS', 0))) | ||||
| LEASE_RENEWAL_PERIOD = float(env('LEASE_RENEWAL_PERIOD', 0.15)) | ||||
| LEASE_RENEWAL_DELTA = timedelta(days=int(env('LEASE_EXPIRE_DAYS', 90)), hours=int(env('LEASE_EXPIRE_HOURS', 0))) | ||||
| CORS_ORIGINS = str(env('CORS_ORIGINS', '')).split(',') if (env('CORS_ORIGINS')) else [f'https://{DLS_URL}'] | ||||
|  | ||||
| jwt_encode_key = jwk.construct(INSTANCE_KEY_RSA.export_key().decode('utf-8'), algorithm=ALGORITHMS.RS256) | ||||
| @@ -151,7 +152,8 @@ async def _origins(request: Request, leases: bool = False): | ||||
|     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))) | ||||
|             serialize = dict(renewal_period=LEASE_RENEWAL_PERIOD, renewal_delta=LEASE_RENEWAL_DELTA) | ||||
|             x['leases'] = list(map(lambda _: _.serialize(**serialize), Lease.find_by_origin_ref(db, origin.origin_ref))) | ||||
|         response.append(x) | ||||
|     session.close() | ||||
|     return JSONr(response) | ||||
| @@ -168,7 +170,8 @@ async def _leases(request: Request, origin: bool = False): | ||||
|     session = sessionmaker(bind=db)() | ||||
|     response = [] | ||||
|     for lease in session.query(Lease).all(): | ||||
|         x = lease.serialize() | ||||
|         serialize = dict(renewal_period=LEASE_RENEWAL_PERIOD, renewal_delta=LEASE_RENEWAL_DELTA) | ||||
|         x = lease.serialize(**serialize) | ||||
|         if origin: | ||||
|             lease_origin = session.query(Origin).filter(Origin.origin_ref == lease.origin_ref).first() | ||||
|             if lease_origin is not None: | ||||
|   | ||||
							
								
								
									
										16
									
								
								app/orm.py
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								app/orm.py
									
									
									
									
									
								
							| @@ -81,7 +81,7 @@ 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: | ||||
|     def serialize(self, renewal_period: float, renewal_delta: datetime.timedelta) -> dict: | ||||
|         return { | ||||
|             'lease_ref': self.lease_ref, | ||||
|             'origin_ref': self.origin_ref, | ||||
| @@ -89,6 +89,7 @@ class Lease(Base): | ||||
|             'lease_created': self.lease_created.isoformat(), | ||||
|             'lease_expires': self.lease_expires.isoformat(), | ||||
|             'lease_updated': self.lease_updated.isoformat(), | ||||
|             'lease_renewal': Lease.calculate_renewal(renewal_period, renewal_delta), | ||||
|         } | ||||
|  | ||||
|     @staticmethod | ||||
| @@ -156,6 +157,19 @@ class Lease(Base): | ||||
|         session.close() | ||||
|         return deletions | ||||
|  | ||||
|     @staticmethod | ||||
|     def calculate_renewal(renewal_period: float, delta: datetime.timedelta): | ||||
|         """ | ||||
|         LEASE_RENEWAL_PERIOD=0.2  # 20% | ||||
|         delta = datetime.timedelta(days=1) | ||||
|         renew = delta.total_seconds() * LEASE_RENEWAL_PERIOD | ||||
|         renew = timedelta(seconds=renew) | ||||
|         expires = delta - renew  # 19.2 | ||||
|         """ | ||||
|         renew = delta.total_seconds() * renewal_period | ||||
|         renew = datetime.timedelta(seconds=renew) | ||||
|         return delta - renew | ||||
|  | ||||
|  | ||||
| def init(engine: Engine): | ||||
|     tables = [Origin, Lease] | ||||
|   | ||||
		Reference in New Issue
	
	Block a user