mirror of
				https://git.collinwebdesigns.de/oscar.krause/fastapi-dls.git
				synced 2025-10-26 18:05:28 +03:00 
			
		
		
		
	implemented "lease_renewal" attribute as calculated value within what period of time the license must be renewed
This commit is contained in:
		
							parent
							
								
									742fa07ed4
								
							
						
					
					
						commit
						3c19fc9d5b
					
				| @ -9,7 +9,7 @@ from dotenv import load_dotenv | |||||||
| from fastapi import FastAPI | from fastapi import FastAPI | ||||||
| from fastapi.requests import Request | from fastapi.requests import Request | ||||||
| from json import loads as json_loads | from json import loads as json_loads | ||||||
| from datetime import datetime | from datetime import datetime, timedelta | ||||||
| from dateutil.relativedelta import relativedelta | from dateutil.relativedelta import relativedelta | ||||||
| from calendar import timegm | from calendar import timegm | ||||||
| from jose import jws, jwk, jwt, JWTError | 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))) | 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_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_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}'] | 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) | 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(): |     for origin in session.query(Origin).all(): | ||||||
|         x = origin.serialize() |         x = origin.serialize() | ||||||
|         if leases: |         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) |         response.append(x) | ||||||
|     session.close() |     session.close() | ||||||
|     return JSONr(response) |     return JSONr(response) | ||||||
| @ -168,7 +170,8 @@ async def _leases(request: Request, origin: bool = False): | |||||||
|     session = sessionmaker(bind=db)() |     session = sessionmaker(bind=db)() | ||||||
|     response = [] |     response = [] | ||||||
|     for lease in session.query(Lease).all(): |     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: |         if origin: | ||||||
|             lease_origin = session.query(Origin).filter(Origin.origin_ref == lease.origin_ref).first() |             lease_origin = session.query(Origin).filter(Origin.origin_ref == lease.origin_ref).first() | ||||||
|             if lease_origin is not None: |             if lease_origin is not None: | ||||||
|  | |||||||
							
								
								
									
										16
									
								
								app/orm.py
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								app/orm.py
									
									
									
									
									
								
							| @ -81,7 +81,7 @@ class Lease(Base): | |||||||
|     def __repr__(self): |     def __repr__(self): | ||||||
|         return f'Lease(origin_ref={self.origin_ref}, lease_ref={self.lease_ref}, expires={self.lease_expires})' |         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 { |         return { | ||||||
|             'lease_ref': self.lease_ref, |             'lease_ref': self.lease_ref, | ||||||
|             'origin_ref': self.origin_ref, |             'origin_ref': self.origin_ref, | ||||||
| @ -89,6 +89,7 @@ class Lease(Base): | |||||||
|             'lease_created': self.lease_created.isoformat(), |             'lease_created': self.lease_created.isoformat(), | ||||||
|             'lease_expires': self.lease_expires.isoformat(), |             'lease_expires': self.lease_expires.isoformat(), | ||||||
|             'lease_updated': self.lease_updated.isoformat(), |             'lease_updated': self.lease_updated.isoformat(), | ||||||
|  |             'lease_renewal': Lease.calculate_renewal(renewal_period, renewal_delta), | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|     @staticmethod |     @staticmethod | ||||||
| @ -156,6 +157,19 @@ class Lease(Base): | |||||||
|         session.close() |         session.close() | ||||||
|         return deletions |         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): | def init(engine: Engine): | ||||||
|     tables = [Origin, Lease] |     tables = [Origin, Lease] | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Oscar Krause
						Oscar Krause