[ISSUE] `get_api_error` fails with `TypeError: object of type '_io.BufferedReader' has no len()¨`
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
- Độ khó
- 2/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 76/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Ít trao đổi
- Công nghệ
- python
- Lĩnh vực
- backend-api-design
Hướng nghiên cứu
Bắt đầu với databricks/sdk/logger/round_trip_logger.py tại _redacted_dump và lần theo lệnh gọi của nó từ databricks/sdk/errors/parser.py. Tái hiện lỗi API đối với một yêu cầu PUT có body là stream của một tệp cục bộ, sau đó xác minh rằng trình phân tích lỗi và logger xử lý BufferedReader mà không phát sinh TypeError.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Description
When the HTTP PUT request body is streamed from a local file, request.body is not a string but a _io.BufferedReader.
In case of API error, _BaseClient._error_parser.get_api_error(response) will try to return the error and the associated query.
Unfortunately, response.request.body is still a BufferedReader, not necessarily a string. When this body is passed to the logger, it fails
eventually calls self._redacted_dump("> ", request.body) but the latter is not meant to handle streams
Full strack trace :
Traceback (most recent call last):
File "C:\_dev\my_proj\.venv\Lib\site-packages\dvc_objects\fs\generic.py", line 350, in transfer
_try_links(
File "C:\_dev\my_proj\.venv\Lib\site-packages\dvc_objects\fs\generic.py", line 281, in _try_links
return copy(
^^^^^
File "C:\_dev\my_proj\.venv\Lib\site-packages\dvc_objects\fs\generic.py", line 88, in copy
return _put(
^^^^^
File "C:\_dev\my_proj\.venv\Lib\site-packages\dvc_objects\fs\generic.py", line 161, in _put
_put_one(from_paths[0], to_paths[0])
File "C:\_dev\my_proj\.venv\Lib\site-packages\dvc_objects\fs\generic.py", line 151, in _put_one
return to_fs.put_file(
^^^^^^^^^^^^^^^
File "C:\_dev\my_proj\.venv\Lib\site-packages\dvc_objects\fs\base.py", line 673, in put_file
self.fs.put_file(os.fspath(from_file), to_info, callback=callback, **kwargs)
File "C:\_dev\my_proj\.venv\Lib\site-packages\dvc_databricks\filesystem.py", line 308, in put_file
self._client.files.upload(rpath, fh, overwrite=True)
File "C:\_dev\my_proj\.venv\Lib\site-packages\databricks\sdk\mixins\files.py", line 1430, in upload
self._upload_single_thread_with_known_size(ctx, contents)
File "C:\_dev\my_proj\.venv\Lib\site-packages\databricks\sdk\mixins\files.py", line 1513, in _upload_single_thread_with_known_size
return self._single_thread_single_shot_upload(ctx, contents)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\_dev\my_proj\.venv\Lib\site-packages\databricks\sdk\mixins\files.py", line 1521, in _single_thread_single_shot_upload
return super().upload(file_path=ctx.target_path, contents=contents, overwrite=ctx.overwrite)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\_dev\my_proj\.venv\Lib\site-packages\databricks\sdk\service\files.py", line 1027, in upload
self._api.do(
File "C:\_dev\my_proj\.venv\Lib\site-packages\databricks\sdk\core.py", line 95, in do
return self._api_client.do(
^^^^^^^^^^^^^^^^^^^^
File "C:\_dev\my_proj\.venv\Lib\site-packages\databricks\sdk\_base_client.py", line 197, in do
response = call(
^^^^^
File "C:\_dev\my_proj\.venv\Lib\site-packages\databricks\sdk\retries.py", line 59, in wrapper
raise err
File "C:\_dev\my_proj\.venv\Lib\site-packages\databricks\sdk\retries.py", line 38, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "C:\_dev\my_proj\.venv\Lib\site-packages\databricks\sdk\_base_client.py", line 297, in _perform
error = self._error_parser.get_api_error(response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\_dev\my_proj\.venv\Lib\site-packages\databricks\sdk\errors\parser.py", line 95, in get_api_error
{"message": "unable to parse response. " + _unknown_error(response, self._debug_headers)},
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\_dev\my_proj\.venv\Lib\site-packages\databricks\sdk\errors\parser.py", line 45, in _unknown_error
request_log = RoundTrip(response, debug_headers=debug_headers, debug_truncate_bytes=10 * 1024).generate()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\_dev\my_proj\.venv\Lib\site-packages\databricks\sdk\logger\round_trip_logger.py", line 47, in generate
sb.append("> [raw stream]" if self._raw else self._redacted_dump("> ", request.body))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\_dev\my_proj\.venv\Lib\site-packages\databricks\sdk\logger\round_trip_logger.py", line 113, in _redacted_dump
if len(body) == 0:
^^^^^^^^^
TypeError: object of type '_io.BufferedReader' has no len()
A suggested fix could be :
def _redacted_dump(self, prefix: str, body: str) -> str:
if isinstance(body, io.IOBase):
# Read the stream into a string-like
body.seek(0)
body = body.read().decode("utf-8")
if len(body) == 0:
return ""
- Ngôn ngữ chính
- Python
- Star
- 577
- Fork
- 229
- Merge trung bình
- 40 phút
- Pull request đã merge (30 ngày)
- 12
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của databricks/databricks-sdk-py
-
Độ khó 1/5 1-3 giờ Mức phù hợp với người mới 62/100
databricks/databricks-sdk-py#1602 · 2 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[ISSUE] Docs state serving endpoints support at most ten served entities; actual limit is 15Có thể đã có người làm @divya0709 đã nhận 95 ngày trước. Đang mở
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 92/100
databricks/databricks-sdk-py#1496 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 65/100
databricks/databricks-sdk-py#1495 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
databricks/databricks-sdk-py#1451 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[ISSUE] TypeError in _unknown_error() when API returns unparseable error on streaming requestCó thể đã có người làm @davwil đã nhận 269 ngày trước. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
databricks/databricks-sdk-py#1264 · 1 reaction ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của databricks/databricks-sdk-py
Issue tương tự
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 67/100
FinanceFlash/unvibecode#699 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
enhancement Website
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
OWASP/OWASP-Hunting#96 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
micropython/micropython#19942 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
A rebuild posts "not part of this build" success to the commit's failed `nix-build` gate and effectsCó thể đã có người làm @Padraic-O-Mhuiris đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
`epoch.Integer` raises a raw OverflowError for integers too large to convert to a floatCó thể đã có người làm @arindam77 đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
pydantic/pydantic-extra-types#479 ·
Maintainer thường phản hồi trong vòng 1 ngày