59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
from typing import Self, Optional, Any
|
|
from threading import Thread
|
|
from time import sleep, time as timestamp
|
|
from Interfaces.Application.AnPInterface import AnPInterface
|
|
from Models.SessionModel import SessionModel
|
|
|
|
class SessionsManager:
|
|
|
|
def __init__(self:Self, anp:AnPInterface) -> None:
|
|
|
|
self.anp:AnPInterface = anp
|
|
self.__sessions:dict[str, SessionModel] = {}
|
|
self.__thread:Thread = Thread(target = self.__autoclean)
|
|
self.__timeout:float|int = self.anp.settings.get(("sessions_timeout", "timeout"), None, 3600)
|
|
self.__clean_waiter:float|int = self.anp.settings.get(("sessions_clean_waiter", "clean_waiter"), None, 60)
|
|
|
|
self.update()
|
|
self.__thread.start()
|
|
|
|
def update(self:Self) -> None:pass
|
|
|
|
def reset(self:Self) -> None:
|
|
|
|
self.__sessions = {}
|
|
|
|
self.update()
|
|
|
|
def __autoclean(self:Self) -> None:
|
|
while self.anp.working():
|
|
|
|
id:str
|
|
session:SessionModel
|
|
time:float = timestamp()
|
|
|
|
for id, session in tuple(self.__sessions.items()):
|
|
if time - session.get("date_last", time) > self.__timeout:
|
|
self.remove(id)
|
|
|
|
sleep(self.__clean_waiter)
|
|
|
|
def get(self:Self, id:str, key:str, default:Optional[Any] = None) -> Any|None:
|
|
if id in self.__sessions:
|
|
return self.__sessions[id].get(key, default)
|
|
return default
|
|
|
|
def set(self:Self, id:str, key:str, value:Any|None) -> bool:
|
|
if id in self.__sessions:
|
|
self.__sessions[id].set(key, value)
|
|
return True
|
|
return False
|
|
|
|
def remove(self:Self, id:str) -> bool:
|
|
if id in self.__sessions:
|
|
del self.__sessions[id]
|
|
return True
|
|
return False |