summaryrefslogtreecommitdiff
path: root/py-fake-service/app/adapter
diff options
context:
space:
mode:
Diffstat (limited to 'py-fake-service/app/adapter')
-rw-r--r--py-fake-service/app/adapter/__init__.py2
-rw-r--r--py-fake-service/app/adapter/contacts.py19
-rw-r--r--py-fake-service/app/adapter/mail.py12
-rw-r--r--py-fake-service/app/adapter/mail_service.py33
-rw-r--r--py-fake-service/app/adapter/mailset.py8
-rw-r--r--py-fake-service/app/adapter/tag.py17
-rw-r--r--py-fake-service/app/adapter/tagsset.py16
7 files changed, 93 insertions, 14 deletions
diff --git a/py-fake-service/app/adapter/__init__.py b/py-fake-service/app/adapter/__init__.py
index 8b137891..47addd32 100644
--- a/py-fake-service/app/adapter/__init__.py
+++ b/py-fake-service/app/adapter/__init__.py
@@ -1 +1 @@
-
+from mail_service import MailService
diff --git a/py-fake-service/app/adapter/contacts.py b/py-fake-service/app/adapter/contacts.py
new file mode 100644
index 00000000..45aa2177
--- /dev/null
+++ b/py-fake-service/app/adapter/contacts.py
@@ -0,0 +1,19 @@
+import re
+
+class Contacts:
+ def __init__(self):
+ self.contacts = []
+
+ def add(self, mbox_mail):
+ contact = mbox_mail.get_from()
+ self.contacts.append(Contact(contact))
+
+ def search(self, query):
+ contacts_query = re.compile(query)
+ return [contact.__dict__ for contact in self.contacts if contacts_query.match(contact.addresses[0])]
+
+class Contact:
+ def __init__(self, contact):
+ self.addresses = [contact]
+ self.name = ''
+
diff --git a/py-fake-service/app/adapter/mail.py b/py-fake-service/app/adapter/mail.py
index 1140f062..859eb50c 100644
--- a/py-fake-service/app/adapter/mail.py
+++ b/py-fake-service/app/adapter/mail.py
@@ -1,4 +1,5 @@
from datetime import datetime
+import random
class Mail:
@@ -13,14 +14,15 @@ class Mail:
def _get_headers(self, mbox_mail):
headers = {}
headers['from'] = mbox_mail.get_from()
- headers['to'] = [mbox_mail.items()['To']]
- headers['subject'] = mbox_mail.items()['Subject']
+ headers['to'] = [mbox_mail.get('To')]
+ headers['subject'] = mbox_mail.get('Subject')
headers['date'] = datetime.fromtimestamp(random.randrange(1222222222, 1444444444)).isoformat()
return headers
def _get_tags(self, mbox_mail):
- return mbox_mail.items()['X-TW-Pixelated-Tags'].split(', ')
-
-
+ return mbox_mail.get('X-TW-Pixelated-Tags').split(', ')
+ @property
+ def subject(self):
+ return self.headers['subject']
diff --git a/py-fake-service/app/adapter/mail_service.py b/py-fake-service/app/adapter/mail_service.py
index b657e59a..649ea96e 100644
--- a/py-fake-service/app/adapter/mail_service.py
+++ b/py-fake-service/app/adapter/mail_service.py
@@ -1,19 +1,38 @@
import os
import mailbox
+from tagsset import TagsSet
+from mailset import MailSet
+from contacts import Contacts
class MailService:
- MAILSET_PATH = os.join(os.environ('HOME'), 'mailset', 'mediumtagged'))
+ MAILSET_PATH = os.path.join(os.environ['HOME'], 'mailsets', 'mediumtagged')
def __init__(self):
- self.mails = MailSet()
+ self.mailset = MailSet()
+ self.tagsset = TagsSet()
+ self.contacts = Contacts()
def load_mailset(self):
- mbox_filenames = [filename for filename in os.listdir(MAILSET_PATH) if mbox.startswith('mbox')]
- boxes = (mailbox.mbox(os.path.join(MAILSET_PATH, mbox)) for mbox in mbox_filenames)
+ mbox_filenames = [filename for filename in os.listdir(self.MAILSET_PATH) if filename.startswith('mbox')]
+ boxes = (mailbox.mbox(os.path.join(self.MAILSET_PATH, mbox)) for mbox in mbox_filenames)
for box in boxes:
- message = box.popitem()
- self.mails.add(message[1])
+ message = box.popitem()[1]
+ if message.is_multipart():
+ continue
+ self.mailset.add(message)
+ self.tagsset.add(message)
+ self.contacts.add(message)
+
+ def mails(self, query, page, window_size):
+ mails = self.mailset.values()
+ mails = [mail for mail in mails if query.test(mail)]
+ return mails
+
+ def mail(self, mail_id):
+ return self.mailset.get(mail_id)
+
+ def search_contacts(self, query):
+ return self.contacts.search(query)
-
diff --git a/py-fake-service/app/adapter/mailset.py b/py-fake-service/app/adapter/mailset.py
index d81600e0..2b1627ae 100644
--- a/py-fake-service/app/adapter/mailset.py
+++ b/py-fake-service/app/adapter/mailset.py
@@ -8,7 +8,13 @@ class MailSet:
self.mails = {}
def add(self, mbox_mail):
- self.mails[self.ident] = Mail(mbox_mail)
+ self.mails[self.ident] = Mail(mbox_mail, self.ident)
self.ident += 1
+ def values(self):
+ return self.mails.values()
+
+ def get(self, mail_id):
+ return self.mails.get(int(mail_id))
+
diff --git a/py-fake-service/app/adapter/tag.py b/py-fake-service/app/adapter/tag.py
new file mode 100644
index 00000000..bc98669d
--- /dev/null
+++ b/py-fake-service/app/adapter/tag.py
@@ -0,0 +1,17 @@
+class Tag:
+ DEFAULT_TAGS = ["inbox", "sent", "trash", "drafts"]
+
+ def __init__(self, name, ident):
+ self.counts = {
+ 'total': 1,
+ 'read': 0,
+ 'starred': 0,
+ 'reply': 0
+ }
+
+ self.ident = ident
+ self.name = name
+ self.default = name in self.DEFAULT_TAGS
+
+ def increment_count(self):
+ self.counts['total'] += 1
diff --git a/py-fake-service/app/adapter/tagsset.py b/py-fake-service/app/adapter/tagsset.py
new file mode 100644
index 00000000..23941735
--- /dev/null
+++ b/py-fake-service/app/adapter/tagsset.py
@@ -0,0 +1,16 @@
+from tag import Tag
+
+class TagsSet:
+ def __init__(self):
+ self.tags = {}
+ self.ident = 0
+
+ def add(self, mbox_mail):
+ tags = mbox_mail.get('X-TW-Pixelated-Tags').split(', ')
+ for tag in tags:
+ tag = self.tags.setdefault(tag, Tag(tag, self.ident))
+ tag.increment_count()
+ self.ident += 1
+
+ def all_tags(self):
+ return self.tags.values()