[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [gettor/master] Refactor email keyword parser



commit 4fa4d6368c3c8dd40090196c6ff1cebb9c2ad5e7
Author: Cecylia Bocovich <cohosh@xxxxxxxxxxxxxx>
Date:   Mon Jan 27 09:58:26 2020 -0500

    Refactor email keyword parser
    
    This commit refactors build_request to prevent duplicate code. It
    also moves the platforms definition to the parser constructor.
---
 gettor/parse/email.py       | 38 +++++++++++++++++---------------------
 tests/test_email_service.py |  3 +--
 2 files changed, 18 insertions(+), 23 deletions(-)

diff --git a/gettor/parse/email.py b/gettor/parse/email.py
index 56b91bf..d487684 100644
--- a/gettor/parse/email.py
+++ b/gettor/parse/email.py
@@ -57,6 +57,7 @@ class EmailParser(object):
         self.dkim = dkim
         self.to_addr = to_addr
         self.locales = []
+        self.platforms = self.settings.get("platforms")
 
     def normalize(self, msg):
         # Normalization will convert <Alice Wonderland> alice@xxxxxxxxxxxxxx
@@ -112,8 +113,20 @@ class EmailParser(object):
         else:
             return True
 
+    def parse_keywords(self, text, request):
+
+        for word in re.split(r"\s+", text.strip()):
+            if word.lower() in self.locales:
+                request["language"] = word.lower()
+            if word.lower() in self.platforms:
+                request["command"] = "links"
+                request["platform"] = word.lower()
+            if word.lower() == "help":
+                request["command"] = "help"
+                break
+        return request
 
-    def build_request(self, msg_str, norm_addr, platforms):
+    def build_request(self, msg_str, norm_addr):
         # Search for commands keywords
         subject_re = re.compile(r"Subject: (.*)\r\n")
         subject = subject_re.search(msg_str)
@@ -128,26 +141,10 @@ class EmailParser(object):
 
         if subject:
             subject = subject.group(1)
-            for word in re.split(r"\s+", subject.strip()):
-                if word.lower() in self.locales:
-                    request["language"] = word.lower()
-                if word.lower() in platforms:
-                    request["command"] = "links"
-                    request["platform"] = word.lower()
-                if word.lower() == "help":
-                    request["command"] = "help"
-                    break
+            request = self.parse_keywords(subject, request)
 
         if not request["command"] or not request["language"]:
-            for word in re.split(r"\s+", msg_str.strip()):
-                if word.lower() in self.locales:
-                    request["language"] = word.lower()
-                if word.lower() in platforms:
-                    request["command"] = "links"
-                    request["platform"] = word.lower()
-                if word.lower() == "help":
-                    request["command"] = "help"
-                    break
+            request = self.parse_keywords(msg_str, request)
 
         return request
 
@@ -186,7 +183,6 @@ class EmailParser(object):
 
         log.msg("Building email message from string.", system="email parser")
 
-        platforms = self.settings.get("platforms")
         msg = message_from_string(msg_str)
 
         name, norm_addr, to_name, norm_to_addr = self.normalize(msg)
@@ -212,7 +208,7 @@ class EmailParser(object):
         except ValueError as e:
             log.msg("DKIM error: {}".format(e.args))
 
-        request = self.build_request(msg_str, norm_addr, platforms)
+        request = self.build_request(msg_str, norm_addr)
 
         return request
 
diff --git a/tests/test_email_service.py b/tests/test_email_service.py
index 5fa87fc..407937c 100644
--- a/tests/test_email_service.py
+++ b/tests/test_email_service.py
@@ -65,9 +65,8 @@ class EmailServiceTests(unittest.TestCase):
         ep = conftests.EmailParser(self.settings, "gettor@xxxxxxxxxxxxxx")
         msg_str = "From: \"silvia [hiro]\" <hiro@xxxxxxxxxxxxxx>\n Subject: \r\n Reply-To: hiro@xxxxxxxxxxxxxx \nTo: gettor@xxxxxxxxxxxxxx\r\n osx es"
         msg = conftests.message_from_string(msg_str)
-        platforms = self.settings.get('platforms')
         ep.locales = ["es", "en"]
-        request = ep.build_request(msg_str, "hiro@xxxxxxxxxxxxxx", platforms)
+        request = ep.build_request(msg_str, "hiro@xxxxxxxxxxxxxx")
         self.assertEqual(request["command"], "links")
         self.assertEqual(request["platform"], "osx")
         self.assertEqual(request["language"], "es")



_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits