You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ponymail.apache.org by hu...@apache.org on 2020/09/08 07:35:10 UTC
[incubator-ponymail-foal] 01/02: Improve type tests, assert values
This is an automated email from the ASF dual-hosted git repository.
humbedooh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-ponymail-foal.git
commit d4cd874ed4b53a798420ab0049386a0d1b949738
Author: Daniel Gruno <hu...@apache.org>
AuthorDate: Tue Sep 8 09:33:52 2020 +0200
Improve type tests, assert values
---
server/plugins/server.py | 5 +++--
server/plugins/session.py | 17 +++++++++++------
2 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/server/plugins/server.py b/server/plugins/server.py
index ae2a775..0d96ed3 100644
--- a/server/plugins/server.py
+++ b/server/plugins/server.py
@@ -5,7 +5,7 @@ import aiohttp
from elasticsearch import AsyncElasticsearch
import plugins.configuration
-
+import plugins.offloader
class Endpoint:
exec: typing.Callable
@@ -18,8 +18,9 @@ class BaseServer:
"""Main server class, base def"""
config: plugins.configuration.Configuration
- server: aiohttp.web.Server
+ server: typing.Optional[aiohttp.web.Server]
data: plugins.configuration.InterData
handlers: typing.Dict[str, Endpoint]
database: AsyncElasticsearch
dbpool: asyncio.Queue
+ runners: plugins.offloader.ExecutorPool
diff --git a/server/plugins/session.py b/server/plugins/session.py
index aae98b7..4592484 100644
--- a/server/plugins/session.py
+++ b/server/plugins/session.py
@@ -27,6 +27,7 @@ import aiohttp.web
import plugins.database
import plugins.server
import copy
+import typing
FOAL_MAX_SESSION_AGE = 86400 * 7 # Max 1 week between visits before voiding a session
FOAL_SAVE_SESSION_INTERVAL = 3600 # Update sessions on disk max once per hour
@@ -61,11 +62,11 @@ class SessionCredentials:
class SessionObject:
- cid: str
+ cid: typing.Optional[str]
cookie: str
created: int
last_accessed: int
- credentials: SessionCredentials
+ credentials: typing.Optional[SessionCredentials]
database: typing.Optional[plugins.database.Database]
def __init__(self, server: plugins.server.BaseServer, **kwargs):
@@ -78,9 +79,9 @@ class SessionObject:
self.cookie = str(uuid.uuid4())
self.cid = None
else:
- self.last_accessed = kwargs.get("last_accessed")
+ self.last_accessed = kwargs.get("last_accessed", 0)
self.credentials = SessionCredentials(kwargs.get("credentials"))
- self.cookie = kwargs.get("cookie")
+ self.cookie = kwargs.get("cookie", "___")
self.cid = kwargs.get("cid")
@@ -100,7 +101,7 @@ async def get_session(
break
# Do we have the session in local memory?
- if session_id in server.data.sessions:
+ if session_id and session_id in server.data.sessions:
x_session = server.data.sessions[session_id]
if (now - x_session.last_accessed) > FOAL_MAX_SESSION_AGE:
del server.data.sessions[session_id]
@@ -122,7 +123,7 @@ async def get_session(
session.database = await server.dbpool.get()
# If a cookie was supplied, look for a session object in ES
- if session_id:
+ if session_id and session.database:
try:
session_doc = await session.database.get(
session.database.dbs.session, id=session_id
@@ -185,6 +186,7 @@ async def set_session(server: plugins.server.BaseServer, cid, **credentials):
async def save_session(session: SessionObject):
"""Save a session object in the ES database"""
+ assert session.database, "Database not connected!"
await session.database.index(
index=session.database.dbs.session,
id=session.cookie,
@@ -198,6 +200,7 @@ async def save_session(session: SessionObject):
async def remove_session(session: SessionObject):
"""Remove a session object in the ES database"""
+ assert session.database, "Database not connected!"
await session.database.delete(
index=session.database.dbs.session,
id=session.cookie
@@ -206,6 +209,8 @@ async def remove_session(session: SessionObject):
async def save_credentials(session: SessionObject):
"""Save a user account object in the ES database"""
+ assert session.database, "Database not connected!"
+ assert session.credentials, "Session object without credentials, cannot save!"
await session.database.index(
index=session.database.dbs.account,
id=session.cid,