Skip to content

Commit 47db6e7

Browse files
committed
Fix multiple runtime errors
- `firebase_admin._auth_utils._parse_error_body`: AttributeError: 'str' object has no attribute 'get' - `firebase_admin._http_client.HttpClient.headers`: TypeError: 'ABCMeta' object is not subscriptable - `firebase_admin.db.Reference.__init__`: ValueError: Invalid path: "None". Path must be a string. - `firebase_admin.functions.TaskQueue._validate_task_options`: TypeError: isinstance() arg 2 must be a type, a tuple of types, or a union - `firebase_admin.ml.Model._convert_to_millis`: TypeError: can't subtract offset-naive and offset-aware datetimes
1 parent af4a6f0 commit 47db6e7

File tree

5 files changed

+8
-5
lines changed

5 files changed

+8
-5
lines changed

firebase_admin/_auth_utils.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -619,8 +619,11 @@ def _parse_error_body(response: requests.Response) -> typing.Tuple[typing.Option
619619
return None, None
620620

621621
# Auth error response format: {"error": {"message": "AUTH_ERROR_CODE: Optional text"}}
622-
parsed_body = typing.cast(typing.Dict[str, typing.Dict[str, str]], parsed_body)
622+
parsed_body = typing.cast(typing.Dict[str, typing.Any], parsed_body)
623623
error_dict = parsed_body.get('error', {})
624+
if not isinstance(error_dict, dict):
625+
return None, None
626+
error_dict = typing.cast(typing.Dict[str, str], error_dict)
624627
code, custom_message = error_dict.get('message'), None
625628
if code:
626629
separator = code.find(':')

firebase_admin/_http_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ class call this method to send HTTP requests out. Refer to
154154
resp.raise_for_status()
155155
return resp
156156

157-
def headers(self, method: str, url: str, **kwargs: typing.Any) -> requests.structures.CaseInsensitiveDict[str]:
157+
def headers(self, method: str, url: str, **kwargs: typing.Any) -> 'requests.structures.CaseInsensitiveDict[str]':
158158
resp = self.request(method, url, **kwargs)
159159
return resp.headers
160160

firebase_admin/db.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ def __init__(
186186
Reference.
187187
"""
188188
self._client = client
189-
if segments:
189+
if segments is not None:
190190
self._segments = segments
191191
else:
192192
self._segments = _parse_path(path)

firebase_admin/functions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ def _validate_task_options(
249249
raise ValueError(
250250
'Both sechdule_delay_seconds and schedule_time cannot be set at the same time.')
251251
if opts.schedule_time is not None and opts.schedule_delay_seconds is None:
252-
if not isinstance(opts.schedule_time, datetime):
252+
if not isinstance(opts.schedule_time, datetime.datetime):
253253
raise ValueError('schedule_time should be UTC datetime.')
254254
task.schedule_time = opts.schedule_time.strftime('%Y-%m-%dT%H:%M:%S.%fZ')
255255
if opts.schedule_delay_seconds is not None and opts.schedule_time is None:

firebase_admin/ml.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ def _convert_to_millis(date_string: typing.Optional[str]) -> typing.Optional[int
287287
return None
288288
format_str = '%Y-%m-%dT%H:%M:%S.%fZ'
289289
epoch = datetime.datetime.fromtimestamp(0, datetime.timezone.utc)
290-
datetime_object = datetime.datetime.strptime(date_string, format_str)
290+
datetime_object = datetime.datetime.strptime(date_string, format_str).replace(tzinfo=datetime.timezone.utc)
291291
millis = int((datetime_object - epoch).total_seconds() * 1000)
292292
return millis
293293

0 commit comments

Comments
 (0)