Skip to content
This repository has been archived by the owner on Jun 12, 2018. It is now read-only.

Commit

Permalink
Remove opt out middleware
Browse files Browse the repository at this point in the history
  • Loading branch information
justinvdm committed Dec 24, 2014
1 parent ed9355c commit 9338257
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 123 deletions.
39 changes: 0 additions & 39 deletions go/vumitools/middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,45 +39,6 @@ def handle_outbound(self, message, endpoint):
return message


class OptOutMiddleware(BaseMiddleware):

@inlineCallbacks
def setup_middleware(self):
self.vumi_api = yield VumiApi.from_config_async(self.config)

self.case_sensitive = self.config.get('case_sensitive', False)
keywords = self.config.get('optout_keywords', [])
self.optout_keywords = set([self.casing(word) for word in keywords])

def casing(self, word):
if not self.case_sensitive:
return word.lower()
return word

@inlineCallbacks
def handle_inbound(self, message, endpoint):
optout_disabled = False
msg_mdh = MessageMetadataHelper(self.vumi_api, message)
if msg_mdh.tag is not None:
tagpool_metadata = yield msg_mdh.get_tagpool_metadata()
optout_disabled = tagpool_metadata.get(
'disable_global_opt_out', False)
keyword = (message['content'] or '').strip()
helper_metadata = message['helper_metadata']
optout_metadata = helper_metadata.setdefault(
'optout', {'optout': False})

if (not optout_disabled
and self.casing(keyword) in self.optout_keywords):
optout_metadata['optout'] = True
optout_metadata['optout_keyword'] = self.casing(keyword)
returnValue(message)

@staticmethod
def is_optout_message(message):
return message['helper_metadata'].get('optout', {}).get('optout')


class TimeMetric(Metric):
"""
A time-based metric that fires both sums and averages.
Expand Down
85 changes: 1 addition & 84 deletions go/vumitools/tests/test_middleware.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

from go.vumitools.app_worker import GoWorkerMixin, GoWorkerConfigMixin
from go.vumitools.middleware import (
NormalizeMsisdnMiddleware, OptOutMiddleware, MetricsMiddleware,
NormalizeMsisdnMiddleware, MetricsMiddleware,
ConversationStoringMiddleware, RouterStoringMiddleware)
from go.vumitools.tests.helpers import VumiApiHelper, GoMessageHelper

Expand Down Expand Up @@ -94,89 +94,6 @@ def test_outbound_normalization(self):
self.assertEqual(msg['to_addr'], '+256123456789')


class TestOptOutMiddleware(VumiTestCase):

@inlineCallbacks
def setUp(self):
self.mw_helper = self.add_helper(MiddlewareHelper(OptOutMiddleware))
yield self.mw_helper.setup_vumi_api()
self.config = {
'optout_keywords': ['STOP', 'HALT', 'QUIT']
}

@inlineCallbacks
def get_middleware(self, extra_config={}, extra_tagpool_metadata={}):
config = self.config.copy()
config.update(extra_config)
mw = yield self.mw_helper.create_middleware(config)
tagpool_metadata = {
"transport_type": "other",
"msg_options": {"transport_name": "other_transport"},
}
tagpool_metadata.update(extra_tagpool_metadata)
yield self.mw_helper.setup_tagpool(
"pool", ["tag1"], metadata=tagpool_metadata)
returnValue(mw)

@inlineCallbacks
def send_keyword(self, mw, word, expected_response):
msg = self.mw_helper.make_inbound(
word, to_addr='to@domain.org', from_addr='from@domain.org')
TaggingMiddleware.add_tag_to_msg(msg, ("pool", "tag1"))
yield mw.handle_inbound(msg, 'dummy_endpoint')
expected_response = dict(expected_response,
tag={'tag': ['pool', 'tag1']})
# MessageMetadataHelper can add 'go' metadata and we want to ignore it.
if 'go' in msg['helper_metadata']:
expected_response['go'] = msg['helper_metadata']['go']
self.assertEqual(msg['helper_metadata'], expected_response)

@inlineCallbacks
def test_optout_flag(self):
mw = yield self.get_middleware()
for keyword in self.config['optout_keywords']:
yield self.send_keyword(mw, keyword, {
'optout': {
'optout': True,
'optout_keyword': keyword.lower(),
}
})

@inlineCallbacks
def test_non_optout_keywords(self):
mw = yield self.get_middleware()
for keyword in ['THESE', 'DO', 'NOT', 'OPT', 'OUT']:
yield self.send_keyword(mw, keyword, {
'optout': {'optout': False},
})

@inlineCallbacks
def test_disabled_by_tagpool(self):
mw = yield self.get_middleware(extra_tagpool_metadata={
"disable_global_opt_out": True,
})
yield self.send_keyword(mw, 'STOP', {
'optout': {'optout': False},
})

@inlineCallbacks
def test_case_sensitivity(self):
mw = yield self.get_middleware({'case_sensitive': True})

yield self.send_keyword(mw, 'STOP', {
'optout': {
'optout': True,
'optout_keyword': 'STOP',
}
})

yield self.send_keyword(mw, 'stop', {
'optout': {
'optout': False,
}
})


class TestMetricsMiddleware(VumiTestCase):

def setUp(self):
Expand Down

0 comments on commit 9338257

Please sign in to comment.