def setUp(self): self.airship = ua.Airship(TEST_KEY, TEST_SECRET) self.name = "Experiment Test" self.audience = "all" self.description = "just testing" self.device_types = ["ios", "android"] self.campaigns = ua.campaigns(categories=["campaign", "categories"]) self.operation_id = "d67d4de6-934f-4ebb-aef0-250d89699b6b" self.experiment_id = "f0c975e4-c01a-436b-92a0-2a360f87b211" self.push_id = "0edb9e6f-2198-4c42-aada-5a49eb03bcbb" push_1 = self.airship.create_push() push_1.notification = ua.notification(alert="test message 1") push_2 = self.airship.create_push() push_2.notification = ua.notification(alert="test message 2") push_3 = self.airship.create_push() push_3.notification = ua.notification(alert="test message 1") push_3.in_app = ua.in_app(alert="This part appears in-app!", display_type="banner") push_4 = self.airship.create_push() push_4.notification = ua.notification(alert="test message 2") push_4.in_app = ua.in_app(alert="This part appears in-app!", display_type="banner", expiry="2025-10-14T12:00:00", display={"position": "top"}, actions={"add_tag": "in-app"} ) variant_1 = ua.Variant(push_1, description="A description of the variant", name="Testing") variant_2 = ua.Variant(push_2) variant_3 = ua.Variant(push_3, description="A description of the variant one", name="Testing", schedule=ua.scheduled_time( datetime.datetime(2025, 10, 10, 18, 45, 30)), weight=2 ) variant_4 = ua.Variant(push_4, description="A description of the variant two", name="Testing", schedule=ua.scheduled_time(datetime.datetime( 2025, 10, 10, 18, 45, 30)), weight=3 ) self.variants_1 = [variant_1, variant_2] self.variants_2 = [variant_3, variant_4]
def test_update_schedule(self): airship = ua.Airship('key', 'secret') sched = ua.ScheduledPush(airship) # Fail w/o URL self.assertRaises(ValueError, sched.update) with mock.patch.object(ua.Airship, '_request') as mock_request: url = "https://go.urbanairship.com/api/schedules/0492662a-1b52-4343-a1f9-c6b0c72931c0" response = requests.Response() response.status_code = 202 response._content = ( '''{"schedule_urls": ["https://go.urbanairship.com/api/schedules/0492662a-1b52-4343-a1f9-c6b0c72931c0"]}''') mock_request.return_value = response sched.url = url push = airship.create_push() push.audience = ua.all_ push.notification = ua.notification(alert='Hello') push.device_types = ua.all_ sched.push = push sched.schedule = ua.scheduled_time(datetime.datetime.now()) sched.update()
def push(self, notification): if not config.get(config.SERVICES_ENABLED, 'off') == 'on': logger.info('notifications disabled: %s marked as pending' % notification.id) return push = self.airship.create_push() push.audience = self.make_tags(notification.tags) push.notification = ua.notification( ios=ua.ios(alert=notification.message, extra=notification.payload)) push.device_types = ua.device_types('ios') if notification.scheduled_for: schedule = self.airship.create_scheduled_push() schedule.push = push schedule.name = notification.type if notification.scheduled_for_local: schedule.schedule = local_scheduled_time( notification.scheduled_for) else: schedule.schedule = ua.scheduled_time( notification.scheduled_for) logger.info("Sending scheduled push to Urban Airship") resp = schedule.send() else: logger.info("Sending push to Urban Airship") resp = push.send() notification.meta['ua_response'] = resp.payload notification.sent = True
def test_full_scheduled_payload(self): p = ua.Push(None) p.audience = ua.all_ p.notification = ua.notification(alert='Hello') p.options = {} p.device_types = ua.all_ p.message = ua.message("Title", "Body", "text/html", "utf8") sched = ua.ScheduledPush(None) sched.push = p sched.name = "a schedule" sched.schedule = ua.scheduled_time( datetime.datetime(2014, 1, 1, 12, 0, 0)) self.assertEqual(sched.payload, { "name": "a schedule", "schedule": {'scheduled_time': '2014-01-01T12:00:00'}, "push": { "audience": "all", "notification": {"alert": "Hello"}, "device_types": "all", "options": {}, "message": { "title": "Title", "body": "Body", "content_type": "text/html", "content_encoding": "utf8", }, } })
def test_schedule_success(self): with mock.patch.object(ua.Airship, '_request') as mock_request: response = requests.Response() response._content = json.dumps( { 'schedule_urls': [ ( 'https://go.urbanairship.com/api/schedules/' '0492662a-1b52-4343-a1f9-c6b0c72931c0' ) ] } ).encode('utf-8') response.status_code = 202 mock_request.return_value = response airship = ua.Airship(TEST_KEY, TEST_SECRET) sched = ua.ScheduledPush(airship) push = airship.create_push() push.audience = ua.all_ push.notification = ua.notification(alert='Hello') push.device_types = ua.all_ sched.push = push sched.schedule = ua.scheduled_time(datetime.datetime.now()) sched.send() self.assertEquals( sched.url, ( 'https://go.urbanairship.com/api/schedules/' '0492662a-1b52-4343-a1f9-c6b0c72931c0' ) )
def test_update_schedule(self): airship = ua.Airship('key', 'secret') sched = ua.ScheduledPush(airship) # Fail w/o URL self.assertRaises(ValueError, sched.update) with mock.patch.object(ua.Airship, '_request') as mock_request: url = ('https://go.urbanairship.com/api/schedules/' '0492662a-1b52-4343-a1f9-c6b0c72931c0') response = requests.Response() response.status_code = 202 response._content = json.dumps({ 'schedule_urls': [('https://go.urbanairship.com/api/schedules/' '0492662a-1b52-4343-a1f9-c6b0c72931c0')] }).encode('utf-8') mock_request.return_value = response sched.url = url push = airship.create_push() push.audience = ua.all_ push.notification = ua.notification(alert='Hello') push.device_types = ua.all_ sched.push = push sched.schedule = ua.scheduled_time(datetime.datetime.now()) sched.update()
def test_schedule_success(self): with mock.patch.object(ua.Airship, '_request') as mock_request: response = requests.Response() response._content = json.dumps( { 'schedule_urls': [ ( 'https://go.urbanairship.com/api/schedules/' '0492662a-1b52-4343-a1f9-c6b0c72931c0' ) ] } ).encode('utf-8') response.status_code = 202 mock_request.return_value = response airship = ua.Airship('key', 'secret') sched = ua.ScheduledPush(airship) push = airship.create_push() push.audience = ua.all_ push.notification = ua.notification(alert='Hello') push.device_types = ua.all_ sched.push = push sched.schedule = ua.scheduled_time(datetime.datetime.now()) sched.send() self.assertEquals( sched.url, ( 'https://go.urbanairship.com/api/schedules/' '0492662a-1b52-4343-a1f9-c6b0c72931c0' ) )
def test_scheduled_template(self): with mock.patch.object(ua.Airship, '_request') as mock_request: response = requests.Response() response._content = json.dumps({ 'schedule_urls': [ 'https://go.urbanairship.com/api/schedules/40fe5b31-8997-4819-9aeb-e6c4ae95e5d3' ] }).encode('utf-8') response.status_code = 202 mock_request.return_value = response airship = ua.Airship(TEST_KEY, TEST_SECRET) sched = ua.ScheduledPush(airship) sched.schedule = ua.scheduled_time(datetime.datetime.now()) template_push = airship.create_template_push() template_push.audience = ua.ios_channel( '780ba0c5-45be-4f29-befa-39135cb05b59') template_push.device_types = ua.device_types('ios') template_push.merge_data = ua.merge_data( template_id='780ba0c5-45be-4f29-befa-39135cb05b59', substitutions={'key': 'value'}) sched.push = template_push sched.send() self.assertEqual( sched.url, 'https://go.urbanairship.com/api/schedules/40fe5b31-8997-4819-9aeb-e6c4ae95e5d3' )
def test_full_scheduled_payload(self): p = ua.Push(None) p.audience = ua.all_ p.notification = ua.notification(alert='Hello') p.options = {} p.device_types = ua.all_ p.message = ua.message("Title", "Body", "text/html", "utf8") sched = ua.ScheduledPush(None) sched.push = p sched.name = "a schedule" sched.schedule = ua.scheduled_time( datetime.datetime(2014, 1, 1, 12, 0, 0)) self.assertEqual( sched.payload, { "name": "a schedule", "schedule": { 'scheduled_time': '2014-01-01T12:00:00' }, "push": { "audience": "all", "notification": { "alert": "Hello" }, "device_types": "all", "options": {}, "message": { "title": "Title", "body": "Body", "content_type": "text/html", "content_encoding": "utf8", }, } })
def push(self, notification): if not config.get(config.SERVICES_ENABLED, 'off') == 'on': logger.info('notifications disabled: %s marked as pending' % notification.id) return push = self.airship.create_push() push.audience = self.make_tags(notification.tags) push.notification = ua.notification(ios=ua.ios(alert=notification.message, extra=notification.payload)) push.device_types = ua.device_types('ios') if notification.scheduled_for: schedule = self.airship.create_scheduled_push() schedule.push = push schedule.name = notification.type if notification.scheduled_for_local: schedule.schedule = local_scheduled_time(notification.scheduled_for) else: schedule.schedule = ua.scheduled_time(notification.scheduled_for) logger.info("Sending scheduled push to Urban Airship") resp = schedule.send() else: logger.info("Sending push to Urban Airship") resp = push.send() notification.meta['ua_response'] = resp.payload notification.sent = True
def test_scheduled_template(self): with mock.patch.object(ua.Airship, '_request') as mock_request: response = requests.Response() response._content = json.dumps( { 'schedule_urls': [ 'https://go.urbanairship.com/api/schedules/40fe5b31-8997-4819-9aeb-e6c4ae95e5d3' ] } ).encode('utf-8') response.status_code = 202 mock_request.return_value = response airship = ua.Airship(TEST_KEY, TEST_SECRET) sched = ua.ScheduledPush(airship) sched.schedule = ua.scheduled_time(datetime.datetime.now()) template_push = airship.create_template_push() template_push.audience = ua.ios_channel('780ba0c5-45be-4f29-befa-39135cb05b59') template_push.device_types = ua.device_types('ios') template_push.merge_data = ua.merge_data( template_id='780ba0c5-45be-4f29-befa-39135cb05b59', substitutions={'key': 'value'} ) sched.push = template_push sched.send() self.assertEqual( sched.url, 'https://go.urbanairship.com/api/schedules/40fe5b31-8997-4819-9aeb-e6c4ae95e5d3' )
def create_schedule_obj(test, airship): schedule = airship.create_scheduled_push() schedule.push = create_push_obj(test, airship) schedule_info = test['schedule'] if 'name' in schedule_info: schedule.name = schedule_info['name'] if 'delta' in schedule_info: delta_time = datetime.datetime.utcnow() + datetime.timedelta( **schedule_info['delta']) schedule.schedule = ua.scheduled_time(delta_time) elif 'time' in schedule_info: schedule_time = datetime.datetime.strptime( schedule_info['time'], '%Y-%m-%dT%H:%M:%S') schedule.schedule = ua.scheduled_time(schedule_time) return schedule
def test_full_scheduled_payload(self): p = ua.Push(None) p.audience = ua.all_ p.notification = ua.notification(alert='Hello') p.options = ua.options(10080) p.device_types = ua.all_ p.message = ua.message( title='Title', body='Body', content_type='text/html', content_encoding='utf8', extra={'more': 'stuff'}, expiry=10080, icons={'list_icon': 'http://cdn.example.com/message.png'}, options={'some_delivery_option': 'true'}, ) sched = ua.ScheduledPush(None) sched.push = p sched.name = 'a schedule' sched.schedule = ua.scheduled_time( datetime.datetime(2014, 1, 1, 12, 0, 0)) self.assertEqual( sched.payload, { 'name': 'a schedule', 'schedule': { 'scheduled_time': '2014-01-01T12:00:00' }, 'push': { 'audience': 'all', 'notification': { 'alert': 'Hello' }, 'device_types': 'all', 'options': { 'expiry': 10080 }, 'message': { 'title': 'Title', 'body': 'Body', 'content_type': 'text/html', 'content_encoding': 'utf8', 'extra': { 'more': 'stuff' }, 'expiry': 10080, 'icons': { 'list_icon': 'http://cdn.example.com/message.png' }, 'options': { 'some_delivery_option': 'true' }, }, } })
def test_scheduled_send(self): cas = ua.CreateAndSendPush( airship=self.airship, channels=self.test_sms_objs ) cas.notification = ua.notification( alert='test sms' ) cas.device_types = ua.device_types('sms') cas.campaigns = ua.campaigns( categories=['sms', 'offers'] ) schedule = ua.ScheduledPush(airship=self.airship) schedule.name = 'test schedule name' schedule.push = cas schedule.schedule = ua.scheduled_time( datetime.datetime(2025, 10, 8, 12, 15) ) self.assertEqual( schedule.payload, { 'schedule': { 'scheduled_time': '2025-10-08T12:15:00' }, 'name': 'test schedule name', 'push': { 'audience': { 'create_and_send': [ { 'ua_msisdn': '15035556789', 'ua_sender': '12345', 'ua_opted_in': '2018-02-13T11:58:59' }, { 'ua_msisdn': '15035556788', 'ua_sender': '12345', 'ua_opted_in': '2018-02-13T11:58:59' }, { 'ua_msisdn': '15035556787', 'ua_sender': '12345', 'ua_opted_in': '2018-02-13T11:58:59' }, ] }, 'notification': {'alert': 'test sms'}, 'device_types': ['sms'], 'campaigns': { 'categories': ['sms', 'offers'] } } } )
def test_full_scheduled_payload(self): p = ua.Push(None) p.audience = ua.all_ p.notification = ua.notification(alert='Hello') p.options = ua.options(10080) p.device_types = ua.all_ p.message = ua.message( title='Title', body='Body', content_type='text/html', content_encoding='utf8', extra={'more': 'stuff'}, expiry=10080, icons={ 'list_icon': 'http://cdn.example.com/message.png' }, options={'some_delivery_option': 'true'}, ) sched = ua.ScheduledPush(None) sched.push = p sched.name = 'a schedule' sched.schedule = ua.scheduled_time( datetime.datetime(2014, 1, 1, 12, 0, 0) ) self.assertEqual( sched.payload, { 'name': 'a schedule', 'schedule': {'scheduled_time': '2014-01-01T12:00:00'}, 'push': { 'audience': 'all', 'notification': {'alert': 'Hello'}, 'device_types': 'all', 'options': { 'expiry': 10080 }, 'message': { 'title': 'Title', 'body': 'Body', 'content_type': 'text/html', 'content_encoding': 'utf8', 'extra': {'more': 'stuff'}, 'expiry': 10080, 'icons': { 'list_icon': 'http://cdn.example.com/message.png' }, 'options': {'some_delivery_option': 'true'}, }, } } )
def test_schedule_success(self): with mock.patch.object(ua.Airship, '_request') as mock_request: response = requests.Response() response._content = ( '''{"schedule_urls": ["https://go.urbanairship.com/api/schedules/0492662a-1b52-4343-a1f9-c6b0c72931c0"]}''' ) response.status_code = 202 mock_request.return_value = response airship = ua.Airship('key', 'secret') sched = ua.ScheduledPush(airship) push = airship.create_push() push.audience = ua.all_ push.notification = ua.notification(alert='Hello') push.device_types = ua.all_ sched.push = push sched.schedule = ua.scheduled_time(datetime.datetime.now()) sched.send() self.assertEquals( sched.url, "https://go.urbanairship.com/api/schedules/0492662a-1b52-4343-a1f9-c6b0c72931c0" )
def test_update_schedule(self): airship = ua.Airship(TEST_KEY, TEST_SECRET) sched = ua.ScheduledPush(airship) # Fail w/o URL self.assertRaises(ValueError, sched.update) with mock.patch.object(ua.Airship, '_request') as mock_request: url = ( 'https://go.urbanairship.com/api/schedules/' '0492662a-1b52-4343-a1f9-c6b0c72931c0' ) response = requests.Response() response.status_code = 202 response._content = json.dumps( { 'schedule_urls': [ ( 'https://go.urbanairship.com/api/schedules/' '0492662a-1b52-4343-a1f9-c6b0c72931c0' ) ] } ).encode('utf-8') mock_request.return_value = response sched.url = url push = airship.create_push() push.audience = ua.all_ push.notification = ua.notification(alert='Hello') push.device_types = ua.all_ sched.push = push sched.schedule = ua.scheduled_time(datetime.datetime.now()) sched.update()
def test_scheduled_time(self): d = datetime.datetime(2013, 1, 1, 12, 56) self.assertEqual( ua.scheduled_time(d), {'scheduled_time': '2013-01-01T12:56:00'} )
def test_scheduled_time(self): d = datetime.datetime(2013, 1, 1, 12, 56) self.assertEqual(ua.scheduled_time(d), {'scheduled_time': '2013-01-01T12:56:00'})