From cce7b837e4180167d426224ef625e12a8abc4994 Mon Sep 17 00:00:00 2001 From: Duda Dornelles Date: Tue, 12 Aug 2014 14:34:27 -0300 Subject: updating tags on py-fake-service --- py-fake-service/app/adapter/mail_service.py | 22 ++++++++++++++++++++++ py-fake-service/app/adapter/mailset.py | 16 ++++++++++++++-- py-fake-service/app/adapter/tag.py | 3 +++ py-fake-service/app/adapter/tagsset.py | 7 +++++++ py-fake-service/app/pixelated_user_agent.py | 15 +++++++++------ py-fake-service/app/search/search_query.py | 8 ++++++-- 6 files changed, 61 insertions(+), 10 deletions(-) diff --git a/py-fake-service/app/adapter/mail_service.py b/py-fake-service/app/adapter/mail_service.py index 7073e549..c6bd3ab4 100644 --- a/py-fake-service/app/adapter/mail_service.py +++ b/py-fake-service/app/adapter/mail_service.py @@ -40,5 +40,27 @@ class MailService: self.mailset.mark_as_read(mail_id) self.tagsset.mark_as_read(self.mail(mail_id).tags) + def delete_mail(self, mail_id): + purged = self.mailset.delete(mail_id) + if not purged: + self.tagsset.increment_tag_total_count('trash') + + + def update_tags_for(self, mail_id, new_tags): + mail = self.mail(mail_id) + + new_tags_set = set(new_tags) + old_tags_set = set(mail.tags) + + increment_set = new_tags_set - old_tags_set + decrement_set = old_tags_set - new_tags_set + + map(lambda x : self.tagsset.increment_tag_total_count(x), increment_set) + map(lambda x : self.tagsset.decrement_tag_total_count(x), decrement_set) + + mail.tags = new_tags + + + diff --git a/py-fake-service/app/adapter/mailset.py b/py-fake-service/app/adapter/mailset.py index 2568e33b..5a6f27a4 100644 --- a/py-fake-service/app/adapter/mailset.py +++ b/py-fake-service/app/adapter/mailset.py @@ -15,8 +15,20 @@ class MailSet: return self.mails.values() def get(self, mail_id): - return self.mails.get(int(mail_id)) + return self.mails.get(mail_id) def mark_as_read(self, mail_id): - mail = self.mails.get(int(mail_id)) + mail = self.get(mail_id) mail.status.append('read') + + def delete(self, mail_id): + """ Returns True if the email got purged, else returns False meaning the email got moved to trash """ + + mail = self.get(mail_id) + if 'trash' in mail.tags: + del self.mails[mail_id] + return True + mail.tags.append('trash') + return False + + diff --git a/py-fake-service/app/adapter/tag.py b/py-fake-service/app/adapter/tag.py index 73103490..a0f3ec1b 100644 --- a/py-fake-service/app/adapter/tag.py +++ b/py-fake-service/app/adapter/tag.py @@ -18,3 +18,6 @@ class Tag: def increment_read(self): self.counts['read'] += 1 + + def decrement_count(self): + self.counts['total'] -= 1 diff --git a/py-fake-service/app/adapter/tagsset.py b/py-fake-service/app/adapter/tagsset.py index 04c712d4..abe7ef7e 100644 --- a/py-fake-service/app/adapter/tagsset.py +++ b/py-fake-service/app/adapter/tagsset.py @@ -19,3 +19,10 @@ class TagsSet: for tag in tags: tag = self.tags.get(tag) tag.increment_read() + + def increment_tag_total_count(self, tag): + self.tags.get(tag).increment_count() + + def decrement_tag_total_count(self, tag): + self.tags.get(tag).decrement_count() + diff --git a/py-fake-service/app/pixelated_user_agent.py b/py-fake-service/app/pixelated_user_agent.py index 48081bda..41188b01 100644 --- a/py-fake-service/app/pixelated_user_agent.py +++ b/py-fake-service/app/pixelated_user_agent.py @@ -53,8 +53,9 @@ def mails(): return respond_json(response) -@app.route('/mail/', methods=['DELETE']) +@app.route('/mail/', methods=['DELETE']) def delete_mails(mail_id): + mail_service.delete_mail(mail_id) return respond_json(None) @@ -64,17 +65,19 @@ def tags(): return respond_json([tag.__dict__ for tag in tags]) -@app.route('/mail/') +@app.route('/mail/') def mail(mail_id): return respond_json(mail_service.mail(mail_id).__dict__) -@app.route('/mail//tags') +@app.route('/mail//tags', methods=['POST']) def mail_tags(mail_id): - return respond_json([]) + new_tags = request.json['newtags'] + mail_service.update_tags_for(mail_id, new_tags) + return respond_json(request.json['newtags']) -@app.route('/mail//read', methods=['POST']) +@app.route('/mail//read', methods=['POST']) def mark_mail_as_read(mail_id): mail_service.mark_as_read(mail_id) return "" @@ -85,7 +88,7 @@ def contacts(): return respond_json({'contacts': mail_service.search_contacts(contacts_query)}) -@app.route('/draft_reply_for/') +@app.route('/draft_reply_for/') def draft_reply_for(mail_id): return respond_json(None) diff --git a/py-fake-service/app/search/search_query.py b/py-fake-service/app/search/search_query.py index cb8d5f57..e8da89d8 100644 --- a/py-fake-service/app/search/search_query.py +++ b/py-fake-service/app/search/search_query.py @@ -48,8 +48,11 @@ class SearchQuery: self.compiled = compiled def test(self, mail): - if set(self.compiled.get('tags')).intersection(mail.tags) or 'all' in self.compiled.get('tags'): - return True + if set(self.compiled.get('not_tags')).intersection(set(mail.tags)): + return False + + if set(self.compiled.get('tags')).intersection(set(mail.tags)) or 'all' in self.compiled.get('tags'): + return True if self.compiled.get('general'): search_terms = re.compile(self.compiled['general']) @@ -59,6 +62,7 @@ class SearchQuery: if not self.compiled.get('tags') and not self.compiled.get('not_tags'): return True + return False -- cgit v1.2.3