- 
    Type:
New Feature
 - 
    Resolution: Done
 - 
    Priority:
Major - P3
 - 
    Affects Version/s: None
 - 
    Component/s: None
 - 
    None
 
- 
        None
 
- 
        None
 - 
        None
 - 
        None
 - 
        None
 - 
        None
 - 
        None
 
This is a followup to my mongodb-user post:
http://groups.google.com/group/mongodb-user/browse_thread/thread/18e3234c938de1c8
Please consider this patch for inclusion in the MongoDB Python driver.
Summary
-------
A patch that implements a bson.tzinfo module attribute that allows the
user to work with naive local datetimes which the driver automatically
converts to and from the recommended UTC storage format.
Use cases
---------
Web applications run on the server but are viewed and controlled from
the client browser:
- Clients and servers are are often in different timezones.
 - Clients expect to view and input localized datetimes.
 - Frameworks such as Django work best with naive local datetimes.
 - Typically the client's timezone is available to the server in login
profiles or possibly calculated using client-side JavaScript. 
Non-Web apps are also simplified by not having to perform manual local
to UTC conversions.
How it works
------------
If the bson.tzinfo module attribute is set to a pytz timezone then:
- All naive datetimes feed to PyMongo are assumed to be in the
bson.tzinfo timezone and are automatically converted UTC before
being written to the database. 
- All aware datetimes feed to PyMongo are automatically converted UTC
before being written to the database. 
- All (UTC) datetimes read from a database with PyMongo are
automatically converted to aware datetimes in the bson.tzinfo
timezone. 
To set the timezone do something like this:
bson.tzinfo = pytz.timezone('Pacific/Auckland')
To revert to default PyMongo behavior:
bson.tzinfo = None
Most Linux distribution store the local Olson timezone name in
/etc/timezone – you can get a local tzinfo instance with something
like:
pytz.timezone(open('/etc/timezone').read().strip())
Implementation
--------------
- The attached patch is against PyMongo 1.9 (at Git commit b6b0e7d).
Apply with: 
patch -p1 <pymongo-timezone-transparency.patch
- The patch includes both Python and CPython implementations.
 - The implementation is not dependent on pytz (but the user will need
pytz to use the feature). - I've also attached a simple standalone sanity checker test
(timezone-transparency-test.py). 
- causes
 - 
                    
PYTHON-1554 Memory Leak when decoding datetimes with CodecOptions: tz_aware and tzinfo
-         
 - Closed
 
 -         
 
- is duplicated by
 - 
                    
PYTHON-824 Why not convert the UTC time to Local timezone automatically when retrieving data from server?
-         
 - Closed
 
 -