Skip to content

Commit 68ce607

Browse files
authored
Merge pull request #162 from urbanairship/TOOLSLIBS-354-appkey-header
[TOOLSLIBS-354] Adds App Key to user agent string
2 parents 35598ac + 4b4141d commit 68ce607

File tree

4 files changed

+94
-85
lines changed

4 files changed

+94
-85
lines changed

CHANGELOG

+5
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
--------------------
2+
5.5.1
3+
--------------------
4+
- Adds app key to user agent string
5+
16
--------------------
27
5.5.0
38
--------------------

tests/reports/test_response_statistics.py

+8-8
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ def test_empty_date(self):
272272

273273

274274
class TestOptInList(unittest.TestCase):
275-
test_class = ua.reports.OptInList
275+
class_to_test = ua.reports.OptInList
276276
response_key = 'optins'
277277

278278
def test_list(self):
@@ -305,7 +305,7 @@ def test_list(self):
305305
end_date = datetime(2012, 4, 1)
306306
precision = 'MONTHLY'
307307

308-
response_list = self.test_class(
308+
response_list = self.class_to_test(
309309
airship,
310310
start_date,
311311
end_date,
@@ -381,30 +381,30 @@ def test_empty_precision(self):
381381

382382

383383
class TestOptOutList(TestOptInList):
384-
test_class = ua.reports.OptOutList
384+
class_to_test = ua.reports.OptOutList
385385
response_key = 'optouts'
386386

387387

388388
class TestPushList(TestOptInList):
389-
test_class = ua.reports.PushList
389+
class_to_test = ua.reports.PushList
390390
response_key = 'sends'
391391

392392

393393
class TestResponseReportList(TestOptInList):
394-
test_class = ua.reports.ResponseReportList
394+
class_to_test = ua.reports.ResponseReportList
395395
response_key = 'responses'
396396

397397

398398
class TestAppOpensList(TestOptInList):
399-
test_class = ua.reports.AppOpensList
399+
class_to_test = ua.reports.AppOpensList
400400
response_key = 'opens'
401401

402402

403403
class TestTimeInAppList(TestOptInList):
404-
test_class = ua.reports.TimeInAppList
404+
class_to_test = ua.reports.TimeInAppList
405405
response_key = 'timeinapp'
406406

407407

408408
class TestCustomEventsList(TestOptInList):
409-
test_class = ua.reports.CustomEventsList
409+
class_to_test = ua.reports.CustomEventsList
410410
response_key = 'events'

urbanairship/__about__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11

2-
__version__ = '5.5.0'
2+
__version__ = '5.5.1'

urbanairship/core.py

+80-76
Original file line numberDiff line numberDiff line change
@@ -6,67 +6,66 @@
66
from . import common, __about__
77
from .push import Push, ScheduledPush, TemplatePush
88

9-
logger = logging.getLogger('urbanairship')
9+
logger = logging.getLogger("urbanairship")
1010

11-
VALID_KEY = re.compile(r'^[\w-]{22}$')
12-
VALID_LOCATIONS = ['eu', 'us', None]
11+
VALID_KEY = re.compile(r"^[\w-]{22}$")
12+
VALID_LOCATIONS = ["eu", "us", None]
1313

1414

1515
class Urls(object):
1616
def __init__(self, location=None):
17-
if not location or location.lower() == 'us':
18-
self.base_url = 'https://go.urbanairship.com/api/'
19-
elif location.lower() == 'eu':
20-
self.base_url = 'https://go.airship.eu/api/'
21-
22-
self.channel_url = self.base_url + 'channels/'
23-
self.open_channel_url = self.channel_url + 'open/'
24-
self.device_token_url = self.base_url + 'device_tokens/'
25-
self.apid_url = self.base_url + 'apids/'
26-
self.push_url = self.base_url + 'push/'
27-
self.schedules_url = self.base_url + 'schedules/'
28-
self.tags_url = self.base_url + 'tags/'
29-
self.segments_url = self.base_url + 'segments/'
30-
self.reports_url = self.base_url + 'reports/'
31-
self.lists_url = self.base_url + 'lists/'
32-
self.location_url = self.base_url + 'location/'
33-
34-
self.templates_url = self.base_url + 'templates/'
35-
self.schedule_template_url = self.templates_url + 'schedules/'
36-
37-
self.pipelines_url = self.base_url + 'pipelines/'
38-
39-
self.named_user_url = self.base_url + 'named_users/'
40-
self.named_user_tag_url = self.named_user_url + 'tags/'
41-
self.named_user_disassociate_url = self.named_user_url + 'disassociate/'
42-
self.named_user_associate_url = self.named_user_url + 'associate/'
43-
44-
self.sms_url = self.channel_url + 'sms/'
45-
self.sms_opt_out_url = self.sms_url + 'opt-out/'
46-
self.sms_uninstall_url = self.sms_url + 'uninstall/'
47-
48-
self.email_url = self.channel_url + 'email/'
49-
self.email_tags_url = self.email_url + 'tags/'
50-
self.email_uninstall_url = self.email_url + 'uninstall/'
51-
52-
self.create_and_send_url = self.base_url + 'create-and-send/'
53-
self.schedule_create_and_send_url = self.schedules_url + 'create-and-send/'
54-
55-
self.experiments_url = self.base_url + 'experiments/'
56-
self.experiments_schedule_url = self.experiments_url + 'scheduled/'
57-
self.experiments_validate = self.experiments_url + 'validate/'
17+
if not location or location.lower() == "us":
18+
self.base_url = "https://go.urbanairship.com/api/"
19+
elif location.lower() == "eu":
20+
self.base_url = "https://go.airship.eu/api/"
21+
22+
self.channel_url = self.base_url + "channels/"
23+
self.open_channel_url = self.channel_url + "open/"
24+
self.device_token_url = self.base_url + "device_tokens/"
25+
self.apid_url = self.base_url + "apids/"
26+
self.push_url = self.base_url + "push/"
27+
self.schedules_url = self.base_url + "schedules/"
28+
self.tags_url = self.base_url + "tags/"
29+
self.segments_url = self.base_url + "segments/"
30+
self.reports_url = self.base_url + "reports/"
31+
self.lists_url = self.base_url + "lists/"
32+
self.location_url = self.base_url + "location/"
33+
34+
self.templates_url = self.base_url + "templates/"
35+
self.schedule_template_url = self.templates_url + "schedules/"
36+
37+
self.pipelines_url = self.base_url + "pipelines/"
38+
39+
self.named_user_url = self.base_url + "named_users/"
40+
self.named_user_tag_url = self.named_user_url + "tags/"
41+
self.named_user_disassociate_url = self.named_user_url + "disassociate/"
42+
self.named_user_associate_url = self.named_user_url + "associate/"
43+
44+
self.sms_url = self.channel_url + "sms/"
45+
self.sms_opt_out_url = self.sms_url + "opt-out/"
46+
self.sms_uninstall_url = self.sms_url + "uninstall/"
47+
48+
self.email_url = self.channel_url + "email/"
49+
self.email_tags_url = self.email_url + "tags/"
50+
self.email_uninstall_url = self.email_url + "uninstall/"
51+
52+
self.create_and_send_url = self.base_url + "create-and-send/"
53+
self.schedule_create_and_send_url = self.schedules_url + "create-and-send/"
54+
55+
self.experiments_url = self.base_url + "experiments/"
56+
self.experiments_schedule_url = self.experiments_url + "scheduled/"
57+
self.experiments_validate = self.experiments_url + "validate/"
5858

5959
def get(self, endpoint):
6060
url = getattr(self, endpoint, None)
6161

6262
if not url:
63-
raise AttributeError('No url for endpoint %s' % endpoint)
63+
raise AttributeError("No url for endpoint %s" % endpoint)
6464

6565
return url
6666

6767

6868
class Airship(object):
69-
7069
def __init__(self, key, secret, location=None, timeout=None):
7170
self.key = key
7271
self.secret = secret
@@ -84,7 +83,7 @@ def timeout(self):
8483
@timeout.setter
8584
def timeout(self, value):
8685
if not isinstance(value, int) and value is not None:
87-
raise ValueError('Timeout must be an integer')
86+
raise ValueError("Timeout must be an integer")
8887
self._timeout = value
8988

9089
@property
@@ -94,7 +93,7 @@ def key(self):
9493
@key.setter
9594
def key(self, value):
9695
if not VALID_KEY.match(value):
97-
raise ValueError('keys must be 22 characters')
96+
raise ValueError("keys must be 22 characters")
9897
self._key = value
9998

10099
@property
@@ -104,7 +103,7 @@ def location(self):
104103
@location.setter
105104
def location(self, value):
106105
if value not in VALID_LOCATIONS:
107-
raise ValueError('location must be one of {}'.format(VALID_LOCATIONS))
106+
raise ValueError("location must be one of {}".format(VALID_LOCATIONS))
108107
self._location = value
109108

110109
@property
@@ -114,49 +113,54 @@ def secret(self):
114113
@secret.setter
115114
def secret(self, value):
116115
if not VALID_KEY.match(value):
117-
raise ValueError('secrets must be 22 characters')
116+
raise ValueError("secrets must be 22 characters")
118117
self._secret = value
119118

120-
def request(self, method, body, url,
121-
content_type=None, version=None, params=None):
122-
return self._request(method, body, url,
123-
content_type, version, params)
124-
125-
def _request(self, method, body, url, content_type=None,
126-
version=None, params=None, encoding=None):
127-
128-
headers = \
129-
{'User-agent': 'UAPythonLib/{0}'.format(__about__.__version__)}
119+
def request(self, method, body, url, content_type=None, version=None, params=None):
120+
return self._request(method, body, url, content_type, version, params)
121+
122+
def _request(
123+
self,
124+
method,
125+
body,
126+
url,
127+
content_type=None,
128+
version=None,
129+
params=None,
130+
encoding=None,
131+
):
132+
133+
headers = {
134+
"User-agent": "UAPythonLib/{0} {1}".format(__about__.__version__, self.key),
135+
}
130136
if content_type:
131-
headers['Content-type'] = content_type
137+
headers["Content-type"] = content_type
132138
if version:
133-
headers['Accept'] = ('application/vnd.urbanairship+json; '
134-
'version=%d;' % version)
139+
headers["Accept"] = (
140+
"application/vnd.urbanairship+json; " "version=%d;" % version
141+
)
135142
if encoding:
136-
headers['Content-Encoding'] = encoding
143+
headers["Content-Encoding"] = encoding
137144

138145
logger.debug(
139-
'Making %s request to %s. Headers:\n\t%s\nBody:\n\t%s',
146+
"Making %s request to %s. Headers:\n\t%s\nBody:\n\t%s",
140147
method,
141148
url,
142-
'\n\t'.join(
143-
'%s: %s' % (key, value) for (key, value) in headers.items()
144-
),
145-
body
149+
"\n\t".join("%s: %s" % (key, value) for (key, value) in headers.items()),
150+
body,
146151
)
147152

148153
response = self.session.request(
149-
method, url, data=body, params=params,
150-
headers=headers, timeout=self.timeout)
154+
method, url, data=body, params=params, headers=headers, timeout=self.timeout
155+
)
151156

152157
logger.debug(
153-
'Received %s response. Headers:\n\t%s\nBody:\n\t%s',
158+
"Received %s response. Headers:\n\t%s\nBody:\n\t%s",
154159
response.status_code,
155-
'\n\t'.join(
156-
'%s: %s' % (key, value) for (key, value)
157-
in response.headers.items()
160+
"\n\t".join(
161+
"%s: %s" % (key, value) for (key, value) in response.headers.items()
158162
),
159-
response.content
163+
response.content,
160164
)
161165

162166
if response.status_code == 401:

0 commit comments

Comments
 (0)