Skip to content

Commit 40c2657

Browse files
authored
[TOOLSLIBS-435] Localization (#181)
* wires up localization * adds push localizaiton * adds localized_ids to PushResponse * adds push localization tests * adds docstring * rm debug line
1 parent 571843d commit 40c2657

File tree

5 files changed

+92
-0
lines changed

5 files changed

+92
-0
lines changed

tests/push/test_push.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
import requests
77
import urbanairship as ua
88
from tests import TEST_KEY, TEST_SECRET
9+
from urbanairship.push.payload import in_app, localization
910

1011

1112
class TestPush(unittest.TestCase):
1213
def test_full_payload(self):
14+
1315
p = ua.Push(None)
1416
p.audience = ua.all_
1517
p.notification = ua.notification(alert="Hello")
@@ -26,6 +28,11 @@ def test_full_payload(self):
2628
icons={"list_icon": "http://cdn.example.com/message.png"},
2729
options={"some_delivery_option": "true"},
2830
)
31+
p.localizations = [
32+
ua.localization(
33+
country="us", language="es", notification=ua.notification(alert="Hola")
34+
)
35+
]
2936
self.assertEqual(
3037
p.payload,
3138
{
@@ -44,6 +51,13 @@ def test_full_payload(self):
4451
"icons": {"list_icon": "http://cdn.example.com/message.png"},
4552
"options": {"some_delivery_option": "true"},
4653
},
54+
"localizations": [
55+
{
56+
"language": "es",
57+
"country": "us",
58+
"notification": {"alert": "Hola"},
59+
}
60+
],
4761
},
4862
)
4963

@@ -1066,3 +1080,33 @@ def test_standard_amazon_push(self):
10661080
},
10671081
},
10681082
)
1083+
1084+
def test_localization(self):
1085+
localization = ua.localization(
1086+
country="fr",
1087+
language="fr",
1088+
notification=ua.notification(alert="bonjour"),
1089+
in_app=ua.in_app(alert="bonjour", display_type="banner"),
1090+
message=ua.message(title="bonjour", body="<html><h1>Bonjour!</h1></html>"),
1091+
)
1092+
self.assertEqual(
1093+
localization,
1094+
{
1095+
"country": "fr",
1096+
"language": "fr",
1097+
"notification": {"alert": "bonjour"},
1098+
"in_app": {"alert": "bonjour", "display_type": "banner"},
1099+
"message": {
1100+
"title": "bonjour",
1101+
"body": "<html><h1>Bonjour!</h1></html>",
1102+
},
1103+
},
1104+
)
1105+
1106+
def test_localization_raises_no_country_lang(self):
1107+
with self.assertRaises(ValueError):
1108+
ua.localization(notification=ua.notification(alert="oops"))
1109+
1110+
def testlocalization_raises_no_content(self):
1111+
with self.assertRaises(ValueError):
1112+
ua.localization(country="us", language="en")

urbanairship/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
ios,
6464
ios_channel,
6565
local_scheduled_time,
66+
localization,
6667
location,
6768
merge_data,
6869
message,

urbanairship/push/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
in_app,
3838
interactive,
3939
ios,
40+
localization,
4041
message,
4142
mms,
4243
notification,

urbanairship/push/core.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ def __init__(self, airship):
2020
self.campaigns = None
2121
self.message = None
2222
self.in_app = None
23+
self.localizations = None
2324

2425
@property
2526
def payload(self):
@@ -36,6 +37,8 @@ def payload(self):
3637
data["message"] = self.message
3738
if self.in_app is not None:
3839
data["in_app"] = self.in_app
40+
if self.localizations is not None:
41+
data["localizations"] = self.localizations
3942
return data
4043

4144
@property
@@ -498,13 +501,15 @@ class PushResponse(object):
498501
"""
499502

500503
ok = None
504+
localized_ids = None
501505
push_ids = None
502506
schedule_url = None
503507
operation_id = None
504508
payload = None
505509

506510
def __init__(self, response):
507511
data = response.json()
512+
self.localized_ids = data.get("localized_ids", [])
508513
self.push_ids = data.get("push_ids")
509514
self.schedule_url = data.get("schedule_urls", [])
510515
self.operation_id = data.get("operation_id")

urbanairship/push/payload.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1172,3 +1172,44 @@ def crop(x=None, y=None, width=None, height=None):
11721172
"""
11731173
payload = {"x": x, "y": y, "width": width, "height": height}
11741174
return {key: val for key, val in iter(payload.items()) if val is not None}
1175+
1176+
1177+
def localization(
1178+
language=None, country=None, notification=None, message=None, in_app=None
1179+
):
1180+
"""
1181+
Localized content for a push notification, message center message, or in app
1182+
message. Localization must include at least one of language or country.
1183+
Localization content must include at least one of notificaiton, message, or
1184+
in_app.
1185+
1186+
:param language: Optional. The ISO 639-1 two-letter language code for this
1187+
localization.
1188+
:param country: Optional. The ISO 3166-2 two-letter country code for this
1189+
localization.
1190+
:param notification: Optional. An urbanairship.notification containing localized
1191+
push notification content.
1192+
:param message: Optional. An urbanairship.message containing localized message
1193+
center content.
1194+
:param in_app: Optional. An urbanarship.in_app containing localized in_app content.
1195+
"""
1196+
if language is None and country is None:
1197+
raise ValueError("One of language or country must be included.")
1198+
if all([notification is None, message is None, in_app is None]):
1199+
raise ValueError(
1200+
"At least one of notification, message, or in_app must be included."
1201+
)
1202+
1203+
data = {}
1204+
if language:
1205+
data["language"] = language
1206+
if country:
1207+
data["country"] = country
1208+
if notification:
1209+
data["notification"] = notification
1210+
if message:
1211+
data["message"] = message
1212+
if in_app:
1213+
data["in_app"] = in_app
1214+
1215+
return data

0 commit comments

Comments
 (0)