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 2022/01/04 01:45:48 UTC
[incubator-ponymail-foal] 02/02: Simplify and eliminate unnecessary fetch
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 7eb007a17b3fe368ec4d12ae94192da35eda30f5
Author: Sebb <se...@apache.org>
AuthorDate: Tue Jan 4 01:45:36 2022 +0000
Simplify and eliminate unnecessary fetch
message-id must be accompanied by list id
and vice-versa
---
server/endpoints/email.py | 12 +++++++-----
server/endpoints/source.py | 10 ++++++----
server/endpoints/thread.py | 8 ++++++--
3 files changed, 19 insertions(+), 11 deletions(-)
diff --git a/server/endpoints/email.py b/server/endpoints/email.py
index f23508e..affe4ca 100644
--- a/server/endpoints/email.py
+++ b/server/endpoints/email.py
@@ -32,12 +32,14 @@ async def process(
server: plugins.server.BaseServer, session: plugins.session.SessionObject, indata: dict,
) -> typing.Union[dict, aiohttp.web.Response]:
- # First, assume permalink and look up the email based on that
- email = await plugins.messages.get_email(session, permalink=indata.get("id"))
+ # Has a list id been provided?
+ listid = indata.get("list", "")
- # If not found via permalink, it might be message-id instead, so try that
- if email is None:
- email = await plugins.messages.get_email(session, messageid=indata.get("id"), listid=indata.get("list", ""))
+ # lookup by message id must always include a list id for disambiguation
+ if listid:
+ email = await plugins.messages.get_email(session, messageid=indata.get("id"), listid=listid)
+ else: # Else assume permalink and look up the email based on that
+ email = await plugins.messages.get_email(session, permalink=indata.get("id"))
if email is None:
return aiohttp.web.Response(headers={}, status=404, text="Email not found")
diff --git a/server/endpoints/source.py b/server/endpoints/source.py
index 0a071b4..0b7e24e 100644
--- a/server/endpoints/source.py
+++ b/server/endpoints/source.py
@@ -27,13 +27,15 @@ import plugins.aaa
async def process(
server: plugins.server.BaseServer, session: plugins.session.SessionObject, indata: dict,
) -> aiohttp.web.Response:
+
+ # Has a list id been provided?
listid = indata.get("list", "")
- # First, assume permalink and look up the email based on that
- email = await plugins.messages.get_email(session, permalink=indata.get("id"))
- # If not found via permalink, it might be message-id instead, so try that
- if email is None:
+ # lookup by message id must always include a list id for disambiguation
+ if listid:
email = await plugins.messages.get_email(session, messageid=indata.get("id"), listid=listid)
+ else: # Else assume permalink and look up the email based on that
+ email = await plugins.messages.get_email(session, permalink=indata.get("id"))
if email and isinstance(email, dict) and not email.get("deleted"):
if plugins.aaa.can_access_email(session, email):
diff --git a/server/endpoints/thread.py b/server/endpoints/thread.py
index b8dbe94..6ee9fab 100644
--- a/server/endpoints/thread.py
+++ b/server/endpoints/thread.py
@@ -28,9 +28,13 @@ async def process(
) -> typing.Optional[dict]:
mailid = indata.get("id", "")
listid = indata.get("list", "")
- email = await plugins.messages.get_email(session, permalink=mailid)
- if not email:
+
+ # lookup by message id must always include a list id for disambiguation
+ if listid:
email = await plugins.messages.get_email(session, messageid=mailid, listid=listid)
+ else: # Else assume permalink and look up the email based on that
+ email = await plugins.messages.get_email(session, permalink=mailid)
+
# The id is passed via the path thread/id
# This means that + is converted into space
# So we need to try both space and '+', and hope no msg ids contain both