You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ponymail.apache.org by se...@apache.org on 2021/12/14 12:35:53 UTC

[incubator-ponymail-foal] branch master updated (221c8d2 -> e881a75)

This is an automated email from the ASF dual-hosted git repository.

sebb pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-ponymail-foal.git.


    from 221c8d2  Update version
     new 5b23fd3  Add type hints
     new e881a75  Update version

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 server/endpoints/gravatar.py   |  4 ++--
 server/endpoints/mbox.py       |  2 +-
 server/plugins/aaa.py          |  6 +++---
 server/plugins/auditlog.py     |  2 +-
 server/plugins/background.py   |  2 +-
 server/plugins/database.py     | 14 +++++++-------
 server/plugins/messages.py     | 26 +++++++++++++++-----------
 server/plugins/oauthGeneric.py |  7 ++++---
 server/plugins/oauthGithub.py  |  2 +-
 server/plugins/oauthGoogle.py  |  5 +++--
 server/plugins/session.py      |  2 +-
 server/server_version.py       |  2 +-
 12 files changed, 40 insertions(+), 34 deletions(-)

[incubator-ponymail-foal] 01/02: Add type hints

Posted by se...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-ponymail-foal.git

commit 5b23fd3bd2445ac944f6f65125ba7396e38fbc42
Author: Sebb <se...@apache.org>
AuthorDate: Tue Dec 14 12:24:24 2021 +0000

    Add type hints
---
 server/endpoints/gravatar.py   |  4 ++--
 server/endpoints/mbox.py       |  2 +-
 server/plugins/aaa.py          |  6 +++---
 server/plugins/auditlog.py     |  2 +-
 server/plugins/background.py   |  2 +-
 server/plugins/database.py     | 14 +++++++-------
 server/plugins/messages.py     | 26 +++++++++++++++-----------
 server/plugins/oauthGeneric.py |  7 ++++---
 server/plugins/oauthGithub.py  |  2 +-
 server/plugins/oauthGoogle.py  |  5 +++--
 server/plugins/session.py      |  2 +-
 11 files changed, 39 insertions(+), 33 deletions(-)

diff --git a/server/endpoints/gravatar.py b/server/endpoints/gravatar.py
index c0b1cf9..e5a4b97 100644
--- a/server/endpoints/gravatar.py
+++ b/server/endpoints/gravatar.py
@@ -29,7 +29,7 @@ gravatars = []
 gravatar_cache = {}
 
 
-async def fetch_gravatar(gid):
+async def fetch_gravatar(gid: str) -> None:
     headers = {"User-Agent": "Pony Mail Agent/0.1"}
     fetch_url = GRAVATAR_URL % gid
     # Fetch image and store internally
@@ -42,7 +42,7 @@ async def fetch_gravatar(gid):
         pass
 
 
-async def gravatar_exists_in_db(session, gid):
+async def gravatar_exists_in_db(session: plugins.session.SessionObject, gid: str) -> bool:
     res = await session.database.search(
         index=session.database.dbs.db_mbox,
         size=1,
diff --git a/server/endpoints/mbox.py b/server/endpoints/mbox.py
index 624a889..27dd2dc 100644
--- a/server/endpoints/mbox.py
+++ b/server/endpoints/mbox.py
@@ -33,7 +33,7 @@ import email.utils as eutils
 import datetime
 
 
-async def convert_source(session: plugins.session.SessionObject, email: dict):
+async def convert_source(session: plugins.session.SessionObject, email: dict) -> str:
     source = await plugins.messages.get_source(session, permalink=email.get("dbid", email["mid"]))
     if source:
         source_as_text = source["_source"]["source"]
diff --git a/server/plugins/aaa.py b/server/plugins/aaa.py
index 789901c..a3f920a 100644
--- a/server/plugins/aaa.py
+++ b/server/plugins/aaa.py
@@ -23,15 +23,15 @@ It handles rights management for lists.
 import plugins.session
 
 
-def can_access_email(session: plugins.session.SessionObject, email) -> bool:
+def can_access_email(session: plugins.session.SessionObject, email: dict) -> bool:
     """Determine if an email can be accessed by the current user"""
     # If public email, it can always be accessed
     if not email.get("private", True): # Assume private if the flag is missing
         return True
     # If user can access the list, they can read the email
-    return can_access_list(session, email.get("list_raw"))
+    return can_access_list(session, email.get("list_raw", None))
 
-def can_access_list(session: plugins.session.SessionObject, _listid) -> bool:
+def can_access_list(session: plugins.session.SessionObject, _listid: str) -> bool:
     """Determine if a list can be accessed by the current user"""
     # If logged in via a known oauth, we assume access for now...TO BE CHANGED
     if session.credentials and session.credentials.authoritative:
diff --git a/server/plugins/auditlog.py b/server/plugins/auditlog.py
index 955ba82..43d69db 100644
--- a/server/plugins/auditlog.py
+++ b/server/plugins/auditlog.py
@@ -68,7 +68,7 @@ async def view(
             yield AuditLogEntry(doc["_source"])
 
 
-async def add_entry(session: plugins.session.SessionObject, action: str, target: str, lid: str, log: str):
+async def add_entry(session: plugins.session.SessionObject, action: str, target: str, lid: str, log: str) -> None:
     """ Adds an entry to the audit log"""
 
     # Default log entries based on type
diff --git a/server/plugins/background.py b/server/plugins/background.py
index 72c626d..d61f872 100644
--- a/server/plugins/background.py
+++ b/server/plugins/background.py
@@ -208,7 +208,7 @@ async def get_public_activity(database: plugins.configuration.DBConfig) -> dict:
     return activity
 
 
-async def run_tasks(server: plugins.server.BaseServer):
+async def run_tasks(server: plugins.server.BaseServer) -> None:
     """
         Runs long-lived background data gathering tasks such as gathering statistics about email activity and the list
         of archived mailing lists, for populating the pony mail main index.
diff --git a/server/plugins/database.py b/server/plugins/database.py
index eccb18b..ffe2d3c 100644
--- a/server/plugins/database.py
+++ b/server/plugins/database.py
@@ -113,13 +113,13 @@ class Database:
         return res
 
     async def scan(self,
-                   query=None,
-                   scroll="5m",
-                   preserve_order=False,
-                   size=1000,
-                   request_timeout=60,
-                   clear_scroll=True,
-                   scroll_kwargs=None,
+                   query: dict = None,
+                   scroll: str = "5m",
+                   preserve_order: bool = False,
+                   size: int = 1000,
+                   request_timeout: int = 60,
+                   clear_scroll: bool = True,
+                   scroll_kwargs: dict = None,
                    **kwargs) -> typing.AsyncIterator[typing.List[dict]]:
         
         scroll_kwargs = scroll_kwargs or {}
diff --git a/server/plugins/messages.py b/server/plugins/messages.py
index c7da36d..db99c5b 100644
--- a/server/plugins/messages.py
+++ b/server/plugins/messages.py
@@ -75,7 +75,7 @@ USED_UI_FIELDS = [
 MUST_HAVE = [ 'private', 'deleted', 'list_raw']
 
 
-def trim_email(doc, external=False):
+def trim_email(doc: dict, external: bool = False) -> None:
     """Trims away document fields not used by the UI"""
     for header in list(doc.keys()):
         # Remove meta data fields which start with an underscore
@@ -89,7 +89,7 @@ def trim_email(doc, external=False):
 
 # Format an email address given a name (optional) and an email address.
 # Same as email.utils.formataddr except no Unicode escaping happens.
-def make_address(name, email):
+def make_address(name: str, email: str) -> str:
     if name and email:
         quotes = ''
         if NEEDS_QUOTES.search(name):
@@ -103,7 +103,7 @@ def make_address(name, email):
 
 
 # anonymise a string of email entries
-def anonymize_mail_address(emailstring):
+def anonymize_mail_address(emailstring: str) -> str:
     out = []
     if not emailstring:
         return ""
@@ -116,7 +116,7 @@ def anonymize_mail_address(emailstring):
     # rejoin one per line
     return ",\n ".join(out)
 
-def anonymize(doc):
+def anonymize(doc: dict) -> dict:
     """ Anonymizes an email, hiding author email addresses."""
     # ES direct hit?
     ptr: typing.Dict[str, str] = doc
@@ -161,7 +161,11 @@ async def find_parent(session, doc: typing.Dict[str, str]):
     return doc
 
 
-async def fetch_children(session, pdoc, counter=0, pdocs=None, short=False):
+async def fetch_children(session: plugins.session.SessionObject,
+        pdoc: dict,
+        counter: int = 0,
+        pdocs: dict = None,
+        short: bool = False) -> typing.Tuple[list,list,dict]:
     """
     Fetches all child messages of a parent email
     """
@@ -169,8 +173,8 @@ async def fetch_children(session, pdoc, counter=0, pdocs=None, short=False):
         pdocs = {}
     counter = counter + 1
     if counter > 250:
-        return []
-    docs = await get_email_irt(session, pdoc["message-id"])
+        return [], [], {}
+    docs: typing.List[dict] = await get_email_irt(session, pdoc["message-id"])
 
     thread = []
     emails = []
@@ -211,8 +215,8 @@ async def fetch_children(session, pdoc, counter=0, pdocs=None, short=False):
 async def get_email(
     session: plugins.session.SessionObject,
     permalink: str = None,
-    messageid=None,
-    source=False,
+    messageid: str = None,
+    source: bool = False,
 ) -> typing.Optional[dict]:
     """
     Returns a matching mbox or source document or None
@@ -268,8 +272,8 @@ async def get_email(
 
 async def get_email_irt(
     session: plugins.session.SessionObject,
-    irt,
-    source=False,
+    irt: str,
+    source: bool = False,
 ) -> typing.List[dict]:
     """
     Returns a list of mbox or source document(s) that are related. May be empty.
diff --git a/server/plugins/oauthGeneric.py b/server/plugins/oauthGeneric.py
index 77c2d0f..20edd38 100644
--- a/server/plugins/oauthGeneric.py
+++ b/server/plugins/oauthGeneric.py
@@ -19,11 +19,11 @@
 
 # Generic OAuth plugin
 import re
+import typing
 import aiohttp.client
 
 
-async def process(formdata, _session, _server):
-    js = None
+async def process(formdata: dict, _session, _server) -> typing.Optional[dict]:
     # Extract domain, allowing for :port
     # Does not handle user/password prefix etc
     m = re.match(r"https?://([^/:]+)(?::\d+)?/", formdata["oauth_token"])
@@ -35,4 +35,5 @@ async def process(formdata, _session, _server):
             js = await rv.json()
             js["oauth_domain"] = oauth_domain
             js["authoritative"] = True
-    return js
+        return js
+    return None
\ No newline at end of file
diff --git a/server/plugins/oauthGithub.py b/server/plugins/oauthGithub.py
index 07d6f6a..55ae1e9 100644
--- a/server/plugins/oauthGithub.py
+++ b/server/plugins/oauthGithub.py
@@ -32,7 +32,7 @@ import plugins.server
 import typing
 
 
-async def process(formdata, _session, server: plugins.server.BaseServer) -> typing.Optional[dict]:
+async def process(formdata: dict, _session, server: plugins.server.BaseServer) -> typing.Optional[dict]:
     formdata["client_id"] = server.config.oauth.github_client_id
     formdata["client_secret"] = server.config.oauth.github_client_secret
     headers = {"Accept": "application/json"}
diff --git a/server/plugins/oauthGoogle.py b/server/plugins/oauthGoogle.py
index 99edd8c..24a5d5f 100644
--- a/server/plugins/oauthGoogle.py
+++ b/server/plugins/oauthGoogle.py
@@ -29,11 +29,12 @@ import google.auth.transport.urllib3 # type: ignore
 import google.oauth2.id_token # type: ignore
 import plugins.server
 import plugins.session
+import typing
 import urllib3
 
 
-async def process(formdata, _session, server: plugins.server.BaseServer):
-    js = None
+async def process(formdata: dict, _session, server: plugins.server.BaseServer) -> typing.Optional[dict]:
+    js: typing.Optional[dict] = None
     request = google.auth.transport.urllib3.Request(urllib3.PoolManager())
     # This is a synchronous process, so we offload it to an async runner in order to let the main loop continue.
     id_info = await server.runners.run(
diff --git a/server/plugins/session.py b/server/plugins/session.py
index ed44730..ccb8ce7 100644
--- a/server/plugins/session.py
+++ b/server/plugins/session.py
@@ -184,7 +184,7 @@ async def get_session(
     return session
 
 
-async def set_session(server: plugins.server.BaseServer, cid, **credentials):
+async def set_session(server: plugins.server.BaseServer, cid: str, **credentials):
     """Create a new user session in the database"""
     session_id = str(uuid.uuid4())
     cookie: http.cookies.SimpleCookie = http.cookies.SimpleCookie()

[incubator-ponymail-foal] 02/02: Update version

Posted by se...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-ponymail-foal.git

commit e881a75922442ee394f7f82d273b0575012fa47b
Author: Sebb <se...@apache.org>
AuthorDate: Tue Dec 14 12:35:40 2021 +0000

    Update version
---
 server/server_version.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/server/server_version.py b/server/server_version.py
index 7a806d9..3b10dbd 100644
--- a/server/server_version.py
+++ b/server/server_version.py
@@ -1,2 +1,2 @@
 # This file is generated by server/update_version.sh
-PONYMAIL_SERVER_VERSION = 'ddf4a77'
+PONYMAIL_SERVER_VERSION = '5b23fd3'