Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 34 additions & 15 deletions gcm/gcm.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,13 +118,10 @@ def __init__(self, api_key, url=GCM_URL, proxy=None):
else:
self.proxy = proxy

self.headers = {
'Authorization': 'key=%s' % self.api_key,
}


def construct_payload(self, registration_ids, data=None, collapse_key=None,
delay_while_idle=False, time_to_live=None, is_json=True, dry_run=False):
delay_while_idle=False, time_to_live=None, is_json=True, dry_run=False,
restricted_package_name=None):
"""
Construct the dictionary mapping of parameters.
Encodes the dictionary into JSON if for json requests.
Expand Down Expand Up @@ -161,6 +158,9 @@ def construct_payload(self, registration_ids, data=None, collapse_key=None,
if dry_run:
payload['dry_run'] = True

if restricted_package_name:
payload['restricted_package_name'] = restricted_package_name

if is_json:
payload = json.dumps(payload)

Expand All @@ -178,14 +178,17 @@ def make_request(self, data, is_json=True):

# Default Content-Type is
# application/x-www-form-urlencoded;charset=UTF-8
headers = {
'Authorization': 'key=%s' % self.api_key,
}
if is_json:
self.headers['Content-Type'] = 'application/json'
headers['Content-Type'] = 'application/json'

if not is_json:
data = urlencode_utf8(data)

response = requests.post(
self.url, data=data, headers=self.headers,
self.url, data=data, headers=headers,
proxies=self.proxy
)
# Successful response
Expand Down Expand Up @@ -258,7 +261,8 @@ def extract_unsent_reg_ids(self, info):
return []

def plaintext_request(self, registration_id, data=None, collapse_key=None,
delay_while_idle=False, time_to_live=None, retries=5, dry_run=False):
delay_while_idle=False, time_to_live=None, retries=5,
dry_run=False, restricted_package_name=None):
"""
Makes a plaintext request to GCM servers

Expand All @@ -272,8 +276,14 @@ def plaintext_request(self, registration_id, data=None, collapse_key=None,
raise GCMMissingRegistrationException("Missing registration_id")

payload = self.construct_payload(
registration_id, data, collapse_key,
delay_while_idle, time_to_live, False, dry_run
registration_id,
data=data,
collapse_key=collapse_key,
delay_while_idle=delay_while_idle,
time_to_live=time_to_live,
is_json=False,
dry_run=dry_run,
restricted_package_name=restricted_package_name,
)

attempt = 0
Expand All @@ -291,7 +301,8 @@ def plaintext_request(self, registration_id, data=None, collapse_key=None,
raise IOError("Could not make request after %d attempts" % attempt)

def json_request(self, registration_ids, data=None, collapse_key=None,
delay_while_idle=False, time_to_live=None, retries=5, dry_run=False):
delay_while_idle=False, time_to_live=None, retries=5,
dry_run=False, restricted_package_name=None):
"""
Makes a JSON request to GCM servers

Expand All @@ -308,12 +319,20 @@ def json_request(self, registration_ids, data=None, collapse_key=None,
raise GCMTooManyRegIdsException(
"Exceded number of registration_ids")

payload = self.construct_payload(
registration_ids,
data=data,
collapse_key=collapse_key,
delay_while_idle=delay_while_idle,
time_to_live=time_to_live,
is_json=True,
dry_run=dry_run,
restricted_package_name=restricted_package_name,
)

backoff = self.BACKOFF_INITIAL_DELAY
for attempt in range(retries):
payload = self.construct_payload(
registration_ids, data, collapse_key,
delay_while_idle, time_to_live, True, dry_run
)

response = self.make_request(payload, is_json=True)
info = self.handle_json_response(response, registration_ids)

Expand Down
3 changes: 0 additions & 3 deletions gcm/test.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,9 +188,6 @@ def test_make_request_header(self, mock_request):
self.gcm.make_request(
{'message': 'test'}, is_json=True
)
self.assertEqual(self.gcm.headers['Content-Type'],
'application/json'
)
self.assertTrue(mock_request.return_value.json.called)


Expand Down