This change updates the `TZDateTime` type decorator to use the timezone awareness checks described in the Python documentation located here:
https://docs.python.org/3/library/datetime.html#determining-if-an-object-is-aware-or-naive
The specific lines state:
> A [`datetime`](https://docs.python.org/3/library/datetime.html#datetime.datetime) object `d` is aware if both of the following hold:
>
> `d.tzinfo is not None`
>
> `d.tzinfo.utcoffset(d)` does not return `None`
>
> Otherwise, `d` is naive.
Closes: #10719
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/10719
Pull-request-sha:
bb30cb3cfe57f326addec21a6cae5f81184c2e74
Change-Id: I1ac51c1ec2820c3f224a79b7af5057fe2b3a55e2
def process_bind_param(self, value, dialect):
if value is not None:
- if not value.tzinfo:
+ if not value.tzinfo or value.tzinfo.utcoffset(value) is None:
raise TypeError("tzinfo is required")
value = value.astimezone(datetime.timezone.utc).replace(tzinfo=None)
return value