firebase-admin 7.2.0__tar.gz → 7.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/PKG-INFO +1 -1
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/__about__.py +1 -1
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_messaging_encoder.py +4 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_messaging_utils.py +22 -2
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_utils.py +0 -1
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin.egg-info/PKG-INFO +1 -1
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_messaging.py +16 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/LICENSE +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/README.md +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/__init__.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_auth_client.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_auth_providers.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_auth_utils.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_http_client.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_retry.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_rfc3339.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_sseclient.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_token_gen.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_user_identifier.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_user_import.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/_user_mgt.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/app_check.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/auth.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/credentials.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/db.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/exceptions.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/firestore.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/firestore_async.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/functions.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/instance_id.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/messaging.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/ml.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/project_management.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/remote_config.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/storage.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin/tenant_mgt.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin.egg-info/SOURCES.txt +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin.egg-info/dependency_links.txt +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin.egg-info/requires.txt +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/firebase_admin.egg-info/top_level.txt +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/setup.cfg +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/setup.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_app.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_app_check.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_auth_providers.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_credentials.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_db.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_exceptions.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_firestore.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_firestore_async.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_functions.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_http_client.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_instance_id.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_ml.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_project_management.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_remote_config.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_retry.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_rfc3339.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_sseclient.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_storage.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_tenant_mgt.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_token_gen.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/test_user_mgt.py +0 -0
- {firebase_admin-7.2.0 → firebase_admin-7.3.0}/tests/testutils.py +0 -0
|
@@ -207,6 +207,10 @@ class MessageEncoder(json.JSONEncoder):
|
|
|
207
207
|
'fcm_options': cls.encode_android_fcm_options(android.fcm_options),
|
|
208
208
|
'direct_boot_ok': _Validators.check_boolean(
|
|
209
209
|
'AndroidConfig.direct_boot_ok', android.direct_boot_ok),
|
|
210
|
+
'bandwidth_constrained_ok': _Validators.check_boolean(
|
|
211
|
+
'AndroidConfig.bandwidth_constrained_ok', android.bandwidth_constrained_ok),
|
|
212
|
+
'restricted_satellite_ok': _Validators.check_boolean(
|
|
213
|
+
'AndroidConfig.restricted_satellite_ok', android.restricted_satellite_ok),
|
|
210
214
|
}
|
|
211
215
|
result = cls.remove_null_values(result)
|
|
212
216
|
priority = result.get('priority')
|
|
@@ -13,6 +13,9 @@
|
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
15
|
"""Types and utilities used by the messaging (FCM) module."""
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
import datetime
|
|
18
|
+
from typing import Dict, Optional, Union
|
|
16
19
|
|
|
17
20
|
from firebase_admin import exceptions
|
|
18
21
|
|
|
@@ -51,10 +54,25 @@ class AndroidConfig:
|
|
|
51
54
|
fcm_options: A ``messaging.AndroidFCMOptions`` to be included in the message (optional).
|
|
52
55
|
direct_boot_ok: A boolean indicating whether messages will be allowed to be delivered to
|
|
53
56
|
the app while the device is in direct boot mode (optional).
|
|
57
|
+
bandwidth_constrained_ok: A boolean indicating whether messages will be allowed to be
|
|
58
|
+
delivered to the app while the device is on a bandwidth constrained network (optional).
|
|
59
|
+
restricted_satellite_ok: A boolean indicating whether messages will be allowed to be
|
|
60
|
+
delivered to the app while the device is on a restricted satellite network (optional).
|
|
54
61
|
"""
|
|
55
62
|
|
|
56
|
-
def __init__(
|
|
57
|
-
|
|
63
|
+
def __init__(
|
|
64
|
+
self,
|
|
65
|
+
collapse_key: Optional[str] = None,
|
|
66
|
+
priority: Optional[str] = None,
|
|
67
|
+
ttl: Optional[Union[int, float, datetime.timedelta]] = None,
|
|
68
|
+
restricted_package_name: Optional[str] = None,
|
|
69
|
+
data: Optional[Dict[str, str]] = None,
|
|
70
|
+
notification: Optional[AndroidNotification] = None,
|
|
71
|
+
fcm_options: Optional[AndroidFCMOptions] = None,
|
|
72
|
+
direct_boot_ok: Optional[bool] = None,
|
|
73
|
+
bandwidth_constrained_ok: Optional[bool] = None,
|
|
74
|
+
restricted_satellite_ok: Optional[bool] = None
|
|
75
|
+
):
|
|
58
76
|
self.collapse_key = collapse_key
|
|
59
77
|
self.priority = priority
|
|
60
78
|
self.ttl = ttl
|
|
@@ -63,6 +81,8 @@ class AndroidConfig:
|
|
|
63
81
|
self.notification = notification
|
|
64
82
|
self.fcm_options = fcm_options
|
|
65
83
|
self.direct_boot_ok = direct_boot_ok
|
|
84
|
+
self.bandwidth_constrained_ok = bandwidth_constrained_ok
|
|
85
|
+
self.restricted_satellite_ok = restricted_satellite_ok
|
|
66
86
|
|
|
67
87
|
|
|
68
88
|
class AndroidNotification:
|
|
@@ -279,7 +279,6 @@ def handle_httpx_error(error: httpx.HTTPError, message=None, code=None) -> excep
|
|
|
279
279
|
message=f'Failed to establish a connection: {error}',
|
|
280
280
|
cause=error)
|
|
281
281
|
if isinstance(error, httpx.HTTPStatusError):
|
|
282
|
-
print("printing status error", error)
|
|
283
282
|
if not code:
|
|
284
283
|
code = _http_status_to_error_code(error.response.status_code)
|
|
285
284
|
if not message:
|
|
@@ -335,6 +335,18 @@ class TestAndroidConfigEncoder:
|
|
|
335
335
|
check_encoding(messaging.Message(
|
|
336
336
|
topic='topic', android=messaging.AndroidConfig(direct_boot_ok=data)))
|
|
337
337
|
|
|
338
|
+
@pytest.mark.parametrize('data', NON_BOOL_ARGS)
|
|
339
|
+
def test_invalid_bandwidth_constrained_ok(self, data):
|
|
340
|
+
with pytest.raises(ValueError):
|
|
341
|
+
check_encoding(messaging.Message(
|
|
342
|
+
topic='topic', android=messaging.AndroidConfig(bandwidth_constrained_ok=data)))
|
|
343
|
+
|
|
344
|
+
@pytest.mark.parametrize('data', NON_BOOL_ARGS)
|
|
345
|
+
def test_invalid_restricted_satellite_ok(self, data):
|
|
346
|
+
with pytest.raises(ValueError):
|
|
347
|
+
check_encoding(messaging.Message(
|
|
348
|
+
topic='topic', android=messaging.AndroidConfig(restricted_satellite_ok=data)))
|
|
349
|
+
|
|
338
350
|
|
|
339
351
|
def test_android_config(self):
|
|
340
352
|
msg = messaging.Message(
|
|
@@ -347,6 +359,8 @@ class TestAndroidConfigEncoder:
|
|
|
347
359
|
data={'k1': 'v1', 'k2': 'v2'},
|
|
348
360
|
fcm_options=messaging.AndroidFCMOptions('analytics_label_v1'),
|
|
349
361
|
direct_boot_ok=True,
|
|
362
|
+
bandwidth_constrained_ok=True,
|
|
363
|
+
restricted_satellite_ok=True,
|
|
350
364
|
)
|
|
351
365
|
)
|
|
352
366
|
expected = {
|
|
@@ -364,6 +378,8 @@ class TestAndroidConfigEncoder:
|
|
|
364
378
|
'analytics_label': 'analytics_label_v1',
|
|
365
379
|
},
|
|
366
380
|
'direct_boot_ok': True,
|
|
381
|
+
'bandwidth_constrained_ok': True,
|
|
382
|
+
'restricted_satellite_ok': True,
|
|
367
383
|
},
|
|
368
384
|
}
|
|
369
385
|
check_encoding(msg, expected)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|