DeprecationWarning on Python 3.12+: bundled well_known_types.py uses deprecated datetime.datetime.utcfromtimestamp
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 1/5
- Thời gian dự kiến
- 1-3 giờ
- Mức phù hợp với người mới
- 88/100
Hướng nghiên cứu
Bắt đầu tại lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91 và so sánh giá trị epoch naive với giá trị timezone-aware ngay bên dưới. Giữ nguyên ngữ nghĩa UTC naive đồng thời loại bỏ lệnh gọi đã deprecated. Chạy python -W error::DeprecationWarning -c "import lark_oapi.ws.pb.google.protobuf.internal.well_known_types"; hoàn tất khi việc import thành công mà không có cảnh báo.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
Description
lark_oapi bundles a vendored copy of protobuf's well_known_types.py under lark_oapi/ws/pb/google/protobuf/internal/. That vendored file still calls datetime.datetime.utcfromtimestamp(0), which is deprecated in Python 3.12+ and emits a DeprecationWarning on Python 3.13/3.14:
.../lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning:
datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version.
Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
_EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0)
Upstream google.protobuf already replaced this call (it now uses datetime.fromtimestamp(0, datetime.timezone.utc)), but the copy pinned inside lark_oapi has not been regenerated, so users on Python 3.12+ still hit the warning whenever the WebSocket (lark_oapi.ws) protobuf code is imported.
Reproduction
Environment:
- Python: 3.14.6
- lark-oapi: 1.7.1 (installed from PyPI; also reproducible against
v2_mainat the path below) - OS: macOS
Steps:
python -W error::DeprecationWarning -c "import lark_oapi.ws.pb.google.protobuf.internal.well_known_types"
Expected: import succeeds with no warning.
Actual:
.../lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91: DeprecationWarning:
datetime.datetime.utcfromtimestamp() is deprecated and scheduled for removal in a future version.
Use timezone-aware objects to represent datetimes in UTC: datetime.datetime.fromtimestamp(timestamp, datetime.UTC).
Location
lark_oapi/ws/pb/google/protobuf/internal/well_known_types.py:91 (still present on v2_main):
_EPOCH_DATETIME_NAIVE = datetime.datetime.utcfromtimestamp(0)
_EPOCH_DATETIME_AWARE = datetime.datetime.fromtimestamp(
0, tz=datetime.timezone.utc)
The _AWARE variant right below already uses the timezone-aware form; only the _NAIVE line needs to change.
Suggested fix
utcfromtimestamp cannot be made timezone-aware directly; replace it with the equivalent naive UTC datetime constructed from the already-correct aware value, e.g.:
_EPOCH_DATETIME_NAIVE = datetime.datetime.fromtimestamp(
0, tz=datetime.timezone.utc).replace(tzinfo=None)
This preserves the original "naive UTC" semantics that callers of _EPOCH_DATETIME_NAIVE rely on (used at line 251: return _EPOCH_DATETIME_NAIVE + delta) while removing the deprecated API call.
Alternatively, regenerate the vendored protobuf stubs from a current googleapis/python-protobuf release so the whole bundled copy tracks upstream fixes.
Impact
- Functional impact: none (warning only; behavior is unchanged).
- DX impact: noisy logs, fails test runs that elevate
DeprecationWarningto errors, and will turn into a hardAttributeErroronce Python removes the API (currently scheduled for a future 3.x release).
Workaround
Users can suppress the warning locally, e.g.:
import warnings
warnings.filterwarnings(
"ignore",
message="datetime.datetime.utcfromtimestamp.*",
category=DeprecationWarning,
)
—but the bundled protobuf code should be updated at the source.
- Ngôn ngữ chính
- Python
- Star
- 559
- Fork
- 102
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
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 larksuite/oapi-sdk-python
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 67/100
larksuite/oapi-sdk-python#163 · 1 bình luận ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
larksuite/oapi-sdk-python#162 · 1 bình luận ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 94/100
larksuite/oapi-sdk-python#161 ·
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
larksuite/oapi-sdk-python#160 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
larksuite/oapi-sdk-python#159 ·
Tất cả issue của larksuite/oapi-sdk-python
Issue tương tự
-
documentation help wanted
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 90/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 90/100
simonw/sqlite-utils#872 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100