mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-01 18:20:24 +08:00
53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
"""
|
|
Small classes to assist with db access, timezone calculations, and so on.
|
|
"""
|
|
|
|
import datetime
|
|
import pytz
|
|
|
|
class DocWrap():
|
|
"""
|
|
Provides attribute access style on top of dictionary results from pymongo.
|
|
Allows you to access result['field'] as result.field.
|
|
Aliases result['_id'] to result.id.
|
|
|
|
"""
|
|
def __init__(self, store=None):
|
|
if(store == None):
|
|
self.store = {}
|
|
else:
|
|
self.store = store.copy()
|
|
if(self.store.has_key('_id')):
|
|
self.store['id'] = self.store['_id']
|
|
del(self.store['_id'])
|
|
|
|
def __setitem__(self,key,value):
|
|
if(key == '_id'):
|
|
self.store['id'] = value
|
|
else:
|
|
self.store[key] = value
|
|
|
|
def __getitem__(self, key):
|
|
if self.store.has_key(key):
|
|
return self.store[key]
|
|
|
|
def __getattr__(self,attrname):
|
|
if self.store.has_key(attrname):
|
|
return self.store[attrname]
|
|
else:
|
|
raise AttributeError("No attribute named {name}".format(name=attrname))
|
|
|
|
def parse_date(dt_str):
|
|
"""parse strings according to the same format as generated by format_date"""
|
|
if(dt_str == None):
|
|
return None
|
|
parts = dt_str.split(".")
|
|
dt = datetime.datetime.strptime(parts[0], '%Y/%m/%d-%H:%M:%S').replace(microsecond=int(parts[1]+"000")).replace(tzinfo = pytz.utc)
|
|
return dt
|
|
|
|
def format_date(dt):
|
|
"""Format the date into a date with millesecond resolution and string/alphabetical sorting that is equivalent to datetime sorting"""
|
|
if(dt == None):
|
|
return None
|
|
dt_str = dt.strftime('%Y/%m/%d-%H:%M:%S') + "." + str(dt.microsecond / 1000)
|
|
return dt_str |