This is an automated email from the ASF dual-hosted git repository.

damccorm pushed a commit to branch users/damccorm/tzinfo
in repository https://gitbox.apache.org/repos/asf/beam.git

commit 12293153ab67c3bee645188a0275a9a3cf68b317
Author: Danny McCormick <[email protected]>
AuthorDate: Mon Feb 13 10:22:22 2023 -0500

    Better error for missing timezone info
---
 sdks/python/apache_beam/runners/direct/transform_evaluator.py | 5 ++++-
 sdks/python/apache_beam/utils/timestamp.py                    | 2 ++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/sdks/python/apache_beam/runners/direct/transform_evaluator.py 
b/sdks/python/apache_beam/runners/direct/transform_evaluator.py
index a0600255028..bfb27c4adc0 100644
--- a/sdks/python/apache_beam/runners/direct/transform_evaluator.py
+++ b/sdks/python/apache_beam/runners/direct/transform_evaluator.py
@@ -678,7 +678,10 @@ class _PubSubReadEvaluator(_TransformEvaluator):
       else:
         if message.publish_time is None:
           raise ValueError('No publish time present in message: %s' % message)
-        timestamp = Timestamp.from_utc_datetime(message.publish_time)
+        try:
+          timestamp = Timestamp.from_utc_datetime(message.publish_time)
+        except ValueError as e:
+          raise ValueError('Bad timestamp value for message %s: %s', message, 
e)
 
       return timestamp, parsed_message
 
diff --git a/sdks/python/apache_beam/utils/timestamp.py 
b/sdks/python/apache_beam/utils/timestamp.py
index 502d1f78fa7..0e4f402a695 100644
--- a/sdks/python/apache_beam/utils/timestamp.py
+++ b/sdks/python/apache_beam/utils/timestamp.py
@@ -103,6 +103,8 @@ class Timestamp(object):
     Args:
       dt: A ``datetime.datetime`` object in UTC (offset-aware).
     """
+    if dt.tzinfo is None:
+      raise ValueError('dt has no timezone info 
(https://docs.python.org/3/library/datetime.html#datetime.tzinfo:~:text=For%20applications%20requiring,is%20in%20effect.):
 %s' % dt)
     if dt.tzinfo != pytz.utc and dt.tzinfo != datetime.timezone.utc:
       raise ValueError('dt not in UTC: %s' % dt)
     duration = dt - cls._epoch_datetime_utc()

Reply via email to