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,