in firebase_admin/_messaging_encoder.py [0:0]
def encode_aps_alert(cls, alert):
"""Encodes an ``ApsAlert`` instance into JSON."""
if alert is None:
return None
if isinstance(alert, str):
return alert
if not isinstance(alert, _messaging_utils.ApsAlert):
raise ValueError('Aps.alert must be a string or an instance of ApsAlert class.')
result = {
'title': _Validators.check_string('ApsAlert.title', alert.title),
'subtitle': _Validators.check_string('ApsAlert.subtitle', alert.subtitle),
'body': _Validators.check_string('ApsAlert.body', alert.body),
'title-loc-key': _Validators.check_string(
'ApsAlert.title_loc_key', alert.title_loc_key),
'title-loc-args': _Validators.check_string_list(
'ApsAlert.title_loc_args', alert.title_loc_args),
'loc-key': _Validators.check_string(
'ApsAlert.loc_key', alert.loc_key),
'loc-args': _Validators.check_string_list(
'ApsAlert.loc_args', alert.loc_args),
'action-loc-key': _Validators.check_string(
'ApsAlert.action_loc_key', alert.action_loc_key),
'launch-image': _Validators.check_string(
'ApsAlert.launch_image', alert.launch_image),
}
if result.get('loc-args') and not result.get('loc-key'):
raise ValueError(
'ApsAlert.loc_key is required when specifying loc_args.')
if result.get('title-loc-args') and not result.get('title-loc-key'):
raise ValueError(
'ApsAlert.title_loc_key is required when specifying title_loc_args.')
if alert.custom_data is not None:
if not isinstance(alert.custom_data, dict):
raise ValueError('ApsAlert.custom_data must be a dict.')
for key, val in alert.custom_data.items():
_Validators.check_string('ApsAlert.custom_data key', key)
# allow specifying key override because Apple could update API so that key
# could have unexpected value type
result[key] = val
return cls.remove_null_values(result)