summaryrefslogtreecommitdiff
path: root/py-fake-service
diff options
context:
space:
mode:
authorBruno Wagner Goncalves <bwagner@thoughtworks.com>2014-09-03 18:05:39 -0300
committerBruno Wagner Goncalves <bwagner@thoughtworks.com>2014-09-03 18:06:06 -0300
commitc54674c20aa9bd746d967044ac8cd29788d87f93 (patch)
tree568372a083a415555ffc4faa3d82de7f273d4a13 /py-fake-service
parent2da2783e2ee984d37b66807c57b1ae9d41750ff4 (diff)
The mailset is not automatically loaded on startup, you can use an csv file as mailset
Diffstat (limited to 'py-fake-service')
-rw-r--r--py-fake-service/app/adapter/contacts.py2
-rw-r--r--py-fake-service/app/adapter/mail.py4
-rw-r--r--py-fake-service/app/adapter/mail_service.py8
-rw-r--r--py-fake-service/app/adapter/tag.py4
-rw-r--r--py-fake-service/app/adapter/tagsset.py7
-rw-r--r--py-fake-service/app/pixelated_user_agent.py32
6 files changed, 48 insertions, 9 deletions
diff --git a/py-fake-service/app/adapter/contacts.py b/py-fake-service/app/adapter/contacts.py
index 19debdf1..f241de98 100644
--- a/py-fake-service/app/adapter/contacts.py
+++ b/py-fake-service/app/adapter/contacts.py
@@ -22,7 +22,7 @@ class Contacts:
self.contacts = []
def add(self, mbox_mail):
- contact = mbox_mail.from_addr
+ contact = mbox_mail.get('From')
self.contacts.append(Contact(contact))
def search(self, query):
diff --git a/py-fake-service/app/adapter/mail.py b/py-fake-service/app/adapter/mail.py
index 39676fac..a18f6276 100644
--- a/py-fake-service/app/adapter/mail.py
+++ b/py-fake-service/app/adapter/mail.py
@@ -71,7 +71,7 @@ class Mail:
def _get_headers(self, mbox_mail):
headers = {}
- headers['from'] = mbox_mail.from_addr
+ headers['from'] = mbox_mail.get('From')
headers['to'] = [mbox_mail.get('To')]
headers['subject'] = mbox_mail.get('Subject')
headers['date'] = datetime.fromtimestamp(
@@ -83,7 +83,7 @@ class Mail:
return headers
def _get_tags(self, mbox_mail):
- return mbox_mail.get('X-TW-Pixelated-Tags').split(', ')
+ return filter(len, mbox_mail.get('X-TW-Pixelated-Tags').split(', '))
@property
def subject(self):
diff --git a/py-fake-service/app/adapter/mail_service.py b/py-fake-service/app/adapter/mail_service.py
index 5c3a6d78..a422ad9a 100644
--- a/py-fake-service/app/adapter/mail_service.py
+++ b/py-fake-service/app/adapter/mail_service.py
@@ -49,14 +49,20 @@ class MailService:
msg.from_addr = msg.get('From')
return msg
+ def _create_message_from_string(self, data):
+ return mailbox.Message(data)
+
def load_mailset(self):
mbox_filenames = [
filename
for filename in os.listdir
(self.MAILSET_PATH) if filename.startswith('mbox')]
messages = (self._create_message_from_file(os.path.join(self.MAILSET_PATH, mbox))
- for mbox in mbox_filenames)
+ for mbox in mbox_filenames)
+
+ self.index_messages(messages)
+ def index_messages(self, messages):
for message in messages:
self.mailset.add(message)
self.tagsset.add(message)
diff --git a/py-fake-service/app/adapter/tag.py b/py-fake-service/app/adapter/tag.py
index e1a08eb2..b866d789 100644
--- a/py-fake-service/app/adapter/tag.py
+++ b/py-fake-service/app/adapter/tag.py
@@ -13,12 +13,14 @@
#
# You should have received a copy of the GNU Affero General Public License
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+
+
class Tag:
DEFAULT_TAGS = ["inbox", "sent", "trash", "drafts"]
def __init__(self, name, ident):
self.counts = {
- 'total': 1,
+ 'total': 0,
'read': 0,
'starred': 0,
'reply': 0
diff --git a/py-fake-service/app/adapter/tagsset.py b/py-fake-service/app/adapter/tagsset.py
index b56fc4f8..8e0d7ca3 100644
--- a/py-fake-service/app/adapter/tagsset.py
+++ b/py-fake-service/app/adapter/tagsset.py
@@ -18,12 +18,15 @@ from tag import Tag
class TagsSet:
+ DEFAULT_TAGS = ["inbox", "sent", "trash", "drafts"]
+
def __init__(self):
- self.tags = {}
self.ident = 0
+ self.tags = {}
+ self.tags = {tag: self._create_new_tag(tag) for tag in self.DEFAULT_TAGS}
def add(self, mbox_mail):
- tags = mbox_mail.get('X-TW-Pixelated-Tags').split(', ')
+ tags = filter(len, mbox_mail.get('X-TW-Pixelated-Tags').split(', '))
for tag in tags:
tag = self._create_new_tag(tag)
tag.increment_count()
diff --git a/py-fake-service/app/pixelated_user_agent.py b/py-fake-service/app/pixelated_user_agent.py
index 2bcc9de7..c500dd08 100644
--- a/py-fake-service/app/pixelated_user_agent.py
+++ b/py-fake-service/app/pixelated_user_agent.py
@@ -14,9 +14,11 @@
# You should have received a copy of the GNU Affero General Public License
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
from flask import Flask, request, Response, redirect
-
+import csv
import json
import datetime
+import mailbox
+import StringIO
import requests
from adapter import MailService
from search import SearchQuery
@@ -26,7 +28,7 @@ MEDIUM_TAGGED_URL = 'https://static.wazokazi.is/py-mediumtagged.tar.gz'
client = None
converter = None
account = None
-loaded = False
+loaded = True
mail_service = MailService()
@@ -125,6 +127,32 @@ def draft_reply_for(mail_id):
return respond_json(None)
+def utf_8_encoder(unicode_csv_data):
+ for line in unicode_csv_data:
+ yield line.encode('utf-8')
+
+
+@app.route('/control/mailset/csv/load', methods=['POST'])
+def load_mailset_from_csv():
+ csv_data = request.form.keys()[0]
+ csv_string = StringIO.StringIO(csv_data)
+ csv_reader = csv.reader(utf_8_encoder(csv_string))
+ headers = csv_reader.next()
+ messages = []
+ for row in csv_reader:
+ mail = ""
+ row[3] = ', '.join(filter(len, row[3].split(' ')))
+ for header, value in zip(headers, row):
+ if header == 'Body':
+ mail += "\n"
+ else:
+ mail += header + ": "
+ mail += value + "\n"
+ messages.append(mailbox.mboxMessage(mail))
+ mail_service.index_messages(messages)
+ return respond_json(None)
+
+
@app.route('/control/mailset/<mailset>/load', methods=['POST'])
def load_mailset(mailset):
import os