googleapis / googleapis/google-cloud-python

class `pubsub_v1.types.PubsubMessage` is mangling `Timestamps` into `DatetimeWithNanoseconds`

Đang mở
#15,637 3 bình luận 0 reaction 1 người được giao Được @abbrowne126 nhận Xem trên GitHub
api: pubsub priority: p2 type: bug
Ngôn ngữ chính
Python
Star
5.4k
Fork
1.8k
Merge trung bình
3 ngày 4 giờ
Pull request đã merge (30 ngày)
122

Mô tả

Thanks for stopping by to let us know something could be better!

**PLEASE READ**: If you have a support contract with Google, please create an issue in the [support console](https://cloud.google.com/support/) instead of filing on GitHub. This will ensure a timely response.

Please run down the following list and make sure you've tried the usual "quick fixes":

- Search the issues already opened: https://github.com/googleapis/python-pubsub/issues
- Search StackOverflow: https://stackoverflow.com/questions/tagged/google-cloud-platform+python

If you are still having issues, please be sure to include as much information as possible:

#### Environment details

- OS type and version: Mac OS 15.3.1
- Python version: 3.11
- pip version: 25.0.1
- `google-cloud-pubsub` version: 2.23.0

#### Steps to reproduce

1. ?
2. ?

#### Code example

```python
from google.protobuf.timestamp_pb2 import Timestamp
from import protoclass # Here just use *any `Message`* from any `_pb2.py` protobuf file.
from google.cloud import pubsub_v1
from queue import Queue

payload = protoclass()
publish_time = Timestamp()
pubsub_v1.types.PubsubMessage(data=payload.SerializeToString(), publish_time = publish_time)

queue = Queue()
message = pubsub_v1.subscriber.message.Message(message=pubsub_message, ack_id="whatever", delivery_attempt=2, request_queue=queue) # This will fail with wrong data type, see below
```

#### Stack trace
```
>>> message = pubsub_v1.subscriber.message.Message(message=pubsub_message, ack_id="whatever", delivery_attempt=2, request_queue=queue)
Traceback (most recent call last):
File "", line 1, in
File ".../3.11/lib/python/site-packages/google/cloud/pubsub_v1/subscriber/message.py", line 141, in __init__
message.publish_time.seconds + message.publish_time.nanos / 1e9,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'DatetimeWithNanoseconds' object has no attribute 'seconds'. Did you mean: 'second'?
```

#### Further Details

As you can see above, *somehow* the `pubsub_message` object has altered the `publish_time` from a `Timestamp()` object to a `DatetimeWithNanoseconds` object.

If you step back, you can see this actually happens *not* when trying to create the `Message` object, but when *successfully* creating the `PubsubMessage` object:

```
>>> pubsub_message.publish_time
DatetimeWithNanoseconds(1970, 1, 1, 0, 0, tzinfo=datetime.timezone.utc)
>>> type(pubsub_message.publish_time)

```

Therefore, when the `pubsub_v1.types.PubsubMessage` object creation call _properly receives a `Timestamp` object_, it is *mangling* it into a `DatetimeWithNanoseconds` object, _even though_ it both [says that it creates a `Timestamp` object](https://cloud.google.com/python/docs/reference/pubsub/latest/google.cloud.pubsub_v1.types.PubsubMessage), and downstream usage like the call to `pubsub_v1.subscriber.message.Message`, *expect it* to populate a `Timestamp` object.

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.