|  | @@ -14,6 +14,8 @@ import os
 | 
	
		
			
				|  |  |  import sys
 | 
	
		
			
				|  |  |  import traceback
 | 
	
		
			
				|  |  |  import warnings
 | 
	
		
			
				|  |  | +import types
 | 
	
		
			
				|  |  | +import datetime
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  from functools import partial, wraps
 | 
	
		
			
				|  |  |  from inspect import getargspec
 | 
	
	
		
			
				|  | @@ -199,6 +201,35 @@ def strtobool(term, table={'false': False, 'no': False, '0': False,
 | 
	
		
			
				|  |  |      return term
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +def jsonify(obj):
 | 
	
		
			
				|  |  | +    "Transforms object making it suitable for json serialization"
 | 
	
		
			
				|  |  | +    if isinstance(obj, (int, float, basestring, types.NoneType)):
 | 
	
		
			
				|  |  | +        return obj
 | 
	
		
			
				|  |  | +    elif isinstance(obj, (tuple, list)):
 | 
	
		
			
				|  |  | +        return map(jsonify, obj)
 | 
	
		
			
				|  |  | +    elif isinstance(obj, dict):
 | 
	
		
			
				|  |  | +        return dict([(k,jsonify(v)) for k,v in obj.iteritems()])
 | 
	
		
			
				|  |  | +    # See "Date Time String Format" in the ECMA-262 specification.
 | 
	
		
			
				|  |  | +    elif isinstance(obj, datetime.datetime):
 | 
	
		
			
				|  |  | +        r = obj.isoformat()
 | 
	
		
			
				|  |  | +        if obj.microsecond:
 | 
	
		
			
				|  |  | +            r = r[:23] + r[26:]
 | 
	
		
			
				|  |  | +        if r.endswith('+00:00'):
 | 
	
		
			
				|  |  | +            r = r[:-6] + 'Z'
 | 
	
		
			
				|  |  | +        return r
 | 
	
		
			
				|  |  | +    elif isinstance(obj, datetime.date):
 | 
	
		
			
				|  |  | +        return obj.isoformat()
 | 
	
		
			
				|  |  | +    elif isinstance(obj, datetime.time):
 | 
	
		
			
				|  |  | +        r = obj.isoformat()
 | 
	
		
			
				|  |  | +        if obj.microsecond:
 | 
	
		
			
				|  |  | +            r = r[:12]
 | 
	
		
			
				|  |  | +        return r
 | 
	
		
			
				|  |  | +    elif isinstance(obj, datetime.timedelta):
 | 
	
		
			
				|  |  | +        return str(obj)
 | 
	
		
			
				|  |  | +    else:
 | 
	
		
			
				|  |  | +        raise ValueError("Unsupported type: %s" % type(obj))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  def gen_task_name(app, name, module_name):
 | 
	
		
			
				|  |  |      try:
 | 
	
		
			
				|  |  |          module = sys.modules[module_name]
 |