From c54674c20aa9bd746d967044ac8cd29788d87f93 Mon Sep 17 00:00:00 2001 From: Bruno Wagner Goncalves Date: Wed, 3 Sep 2014 18:05:39 -0300 Subject: The mailset is not automatically loaded on startup, you can use an csv file as mailset --- py-fake-service/app/adapter/contacts.py | 2 +- py-fake-service/app/adapter/mail.py | 4 ++-- py-fake-service/app/adapter/mail_service.py | 8 +++++++- py-fake-service/app/adapter/tag.py | 4 +++- py-fake-service/app/adapter/tagsset.py | 7 +++++-- py-fake-service/app/pixelated_user_agent.py | 32 +++++++++++++++++++++++++++-- 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 . + + 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 . 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//load', methods=['POST']) def load_mailset(mailset): import os -- cgit v1.2.3