Hi,

I just noticed an oddity using the TimezoneType as a column type. Suppose 
the following statement:

conn.execute(t_user.update() \
                   .where(t_user.c.id == id_) \
                   .values({
                       'timezone': pytz.timezone(tzname),
                       }))

then tzname="America/Los_Angeles" works, but tzname="UTC" does not. What 
happens is that the _coerce() method 
<https://github.com/kvesteri/sqlalchemy-utils/blob/master/sqlalchemy_utils/types/timezone.py#L74>
 
contains a type check which has different results for the two:

>>> import pytz
>>> pytz.__version__
'2018.3'
>>> utc = pytz.timezone('UTC')
>>> la = pytz.timezone('America/Los_Angeles')
>>> isinstance(utc, pytz.tzinfo.BaseTzInfo)
False
>>> isinstance(la, pytz.tzinfo.BaseTzInfo)
True

Because of that, _coerce() attempts to coerce/convert the utc timezone 
object and fails in this line of code 
<https://github.com/stub42/pytz/blob/master/src/pytz/__init__.py#L162>:

  File "/…/lib/python3.5/site-packages/sqlalchemy/sql/type_api.py", line 
1156, in process
    return impl_processor(process_param(value, dialect))
  File "/…/lib/python3.5/site-packages/sqlalchemy_utils/types/timezone.py", 
line 83, in process_bind_param
    return self._from(self._coerce(value)) if value else None
  File "/…/lib/python3.5/site-packages/sqlalchemy_utils/types/timezone.py", 
line 76, in _coerce
    obj = self._to(value)
  File "/…/lib/python3.5/site-packages/pytz/__init__.py", line 162, in 
timezone
    if zone.upper() == 'UTC':
AttributeError: 'UTC' object has no attribute 'upper'

I am not sure if the above difference with isinstance() is intended or a 
bug on the pytz side (I filed a question/issue here 
<https://github.com/stub42/pytz/issues/10>), or if this is a problem on the 
TimezoneType side. Or am I missing something here?

Thanks!
Jens

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to