utils.py
changeset 3375 ebb11fa58ab9
parent 3369 7b88d12b4ee2
parent 3372 26b89dfe4170
child 3890 d7a270f50f54
equal deleted inserted replaced
3373:3cd644bfab12 3375:ebb11fa58ab9
    17 from datetime import datetime, timedelta, date
    17 from datetime import datetime, timedelta, date
    18 from time import time, mktime
    18 from time import time, mktime
    19 from random import randint, seed
    19 from random import randint, seed
    20 from calendar import monthrange
    20 from calendar import monthrange
    21 import decimal
    21 import decimal
    22 
       
    23 import simplejson
       
    24 
    22 
    25 # initialize random seed from current time
    23 # initialize random seed from current time
    26 seed()
    24 seed()
    27 try:
    25 try:
    28     strptime = datetime.strptime
    26     strptime = datetime.strptime
   362         return False
   360         return False
   363     __answer[0] = True
   361     __answer[0] = True
   364     return True
   362     return True
   365 
   363 
   366 try:
   364 try:
   367     # may not be there is cubicweb-web not there
   365     # may not be there if cubicweb-web not installed
   368     from simplejson import JSONEncoder, dumps
   366     from simplejson import dumps, JSONEncoder
   369 except ImportError:
   367 except ImportError:
   370     pass
   368     pass
   371 else:
   369 else:
       
   370 
   372     class CubicWebJsonEncoder(JSONEncoder):
   371     class CubicWebJsonEncoder(JSONEncoder):
   373         """define a simplejson encoder to be able to encode yams std types"""
   372         """define a simplejson encoder to be able to encode yams std types"""
   374         def default(self, obj):
   373         def default(self, obj):
   375             if isinstance(obj, datetime):
   374             if isinstance(obj, pydatetime.datetime):
   376                 return obj.strftime('%Y/%m/%d %H:%M:%S')
   375                 return obj.strftime('%Y/%m/%d %H:%M:%S')
   377             elif isinstance(obj, date):
   376             elif isinstance(obj, pydatetime.date):
   378                 return obj.strftime('%Y/%m/%d')
   377                 return obj.strftime('%Y/%m/%d')
   379             elif isinstance(obj, pydatetime.time):
   378             elif isinstance(obj, pydatetime.time):
   380                 return obj.strftime('%H:%M:%S')
   379                 return obj.strftime('%H:%M:%S')
   381             elif isinstance(obj, decimal.Decimal):
   380             elif isinstance(obj, decimal.Decimal):
   382                 return float(obj)
   381                 return float(obj)
   383             try:
   382             try:
   384                 return simplejson.JSONEncoder.default(self, obj)
   383                 return JSONEncoder.default(self, obj)
   385             except TypeError:
   384             except TypeError:
   386                 # we never ever want to fail because of an unknown type,
   385                 # we never ever want to fail because of an unknown type,
   387                 # just return None in those cases.
   386                 # just return None in those cases.
   388                 return None
   387                 return None