From 27e07e05d97b577ef6b62b74ca7daebafd41db98 Mon Sep 17 00:00:00 2001 From: Bruno Wagner Goncalves Date: Tue, 12 Aug 2014 17:03:19 -0300 Subject: Basic tags implementation --- service/app/adapter/mail_service.py | 3 ++- service/app/pixelated_user_agent.py | 13 ++++++++---- service/app/tags.py | 40 ++++++++++++++++++++++++++++++------- service/test/test_tags.py | 11 +++++++--- 4 files changed, 52 insertions(+), 15 deletions(-) (limited to 'service') diff --git a/service/app/adapter/mail_service.py b/service/app/adapter/mail_service.py index a08b73f9..25fb5188 100644 --- a/service/app/adapter/mail_service.py +++ b/service/app/adapter/mail_service.py @@ -24,6 +24,7 @@ console.setFormatter(formatter) # add the handler to the root logger logging.getLogger('').addHandler(console) + class MailService: SPECIAL_BOXES = ['inbox', 'sent', 'drafts', 'trash'] @@ -114,4 +115,4 @@ class MailService: if __name__ == '__main__': print('Running Standalone') - client = Client() \ No newline at end of file + client = Client() diff --git a/service/app/pixelated_user_agent.py b/service/app/pixelated_user_agent.py index 4286bb34..f5bc9a3a 100644 --- a/service/app/pixelated_user_agent.py +++ b/service/app/pixelated_user_agent.py @@ -6,6 +6,8 @@ from flask import Flask, request, Response import app.search_query as search_query from app.adapter.mail_service import MailService from app.adapter.mail_converter import MailConverter +from app.tags import Tag +from app.tags import Tags app = Flask(__name__, static_url_path='', static_folder='../../web-ui/app') @@ -23,13 +25,13 @@ def respond_json(entity): response = json.dumps(entity) return Response(response=response, mimetype="application/json") + @app.route('/disabled_features') def disabled_features(): return respond_json([ 'saveDraft', 'createNewTag', 'replySection', - 'tags', 'signatureStatus', 'encryptionStatus', 'contacts' @@ -84,8 +86,8 @@ def delete_mails(mail_id): @app.route('/tags') def tags(): - #tags = map(lambda x: converter.from_tag(x), mail_service.all_tags()) - return respond_json(['inbox']) + tags = Tags() + return respond_json(tags.as_dict()) @app.route('/mail/') @@ -128,7 +130,7 @@ def index(): def setup(): - start_reactor() + # start_reactor() app.config.from_envvar('PIXELATED_UA_CFG') account = app.config['ACCOUNT'] app.run(host=app.config['HOST'], debug=app.config['DEBUG'], port=app.config['PORT']) @@ -138,11 +140,14 @@ from twisted.internet import reactor import signal import sys + + def signal_handler(signal, frame): stop_reactor_on_exit() sys.exit(0) signal.signal(signal.SIGINT, signal_handler) + def start_reactor(): def start_reactor_run(): reactor.run(False) diff --git a/service/app/tags.py b/service/app/tags.py index 39709a4c..78d594dd 100644 --- a/service/app/tags.py +++ b/service/app/tags.py @@ -1,7 +1,12 @@ +import json + + class Tag: - def __init__(self, name): + def __init__(self, name, default): self.name = name + self.default = default + self.ident = name.__hash__() def __eq__(self, other): return self.name == other.name @@ -9,24 +14,45 @@ class Tag: def __hash__(self): return self.name.__hash__() + def as_dict(self): + return { + 'name': self.name, + 'default': self.default, + 'ident': self.ident, + 'counts': { + 'total': 0, + 'read': 0, + 'starred': 0, + 'replied': 0 + } + } + class Tags: SPECIAL_TAGS = ['inbox', 'sent', 'drafts', 'trash'] def __init__(self): - self.tags = set([Tag(name) for name in self.SPECIAL_TAGS]) + self.tags = {} + self.create_default_tags() + + def create_default_tags(self): + for name in self.SPECIAL_TAGS: + self.tags[name] = self.add(name) def add(self, name): - self.tags.add(Tag(name)) + tag = Tag(name, name in self.SPECIAL_TAGS) + self.tags[name] = tag + return tag def find(self, name): - for tag in self.tags: - if tag.name == name: - return tag + return self.tags[name] def __len__(self): return len(self.tags) def __iter__(self): - return self.tags.__iter__() \ No newline at end of file + return self.tags.itervalues() + + def as_dict(self): + return [tag.as_dict() for tag in self.tags.values()] diff --git a/service/test/test_tags.py b/service/test/test_tags.py index 5e0ea426..9c57ee07 100644 --- a/service/test/test_tags.py +++ b/service/test/test_tags.py @@ -5,9 +5,10 @@ from app.tags import Tags, Tag class TagTestCase(unittest.TestCase): def test_create_tag(self): - tag = Tag('test') + tag = Tag('test', True) self.assertEqual(tag.name, 'test') + class TagsTestCase(unittest.TestCase): def test_add_tag_to_collection(self): @@ -28,10 +29,14 @@ class TagsTestCase(unittest.TestCase): tag_collection = Tags() tag_collection.add('test') tag_collection.add('test2') - self.assertEqual(tag_collection.find('test'), Tag('test')) + self.assertEqual(tag_collection.find('test'), Tag('test', True)) def test_special_tags_always_exist(self): special_tags = ['inbox', 'sent', 'drafts', 'trash'] tag_collection = Tags() for tag in special_tags: - self.assertIn(Tag(tag), tag_collection) \ No newline at end of file + self.assertIn(Tag(tag, True), tag_collection) + + def test_special_tags_are_default(self): + tags = Tags() + self.assertTrue(tags.find('inbox').default) -- cgit v1.2.3