Provision to print a complex object for all 'bench execute' commands (#4908)

This commit is contained in:
Ritesh Shrivastav 2018-01-31 11:25:01 +05:30 committed by Rushabh Mehta
parent 8a3c4891ae
commit 43941d40d7
2 changed files with 18 additions and 7 deletions

View file

@ -7,6 +7,7 @@ from distutils.spawn import find_executable
import frappe
from frappe.commands import pass_context, get_site
from frappe.utils import update_progress_bar
from frappe.utils.response import json_handler
@click.command('build')
@click.option('--make-copy', is_flag=True, default=False, help='Copy the files instead of symlinking')
@ -123,7 +124,7 @@ def execute(context, method, args=None, kwargs=None):
finally:
frappe.destroy()
if ret:
print(json.dumps(ret))
print(json.dumps(ret, default=json_handler))
@click.command('add-to-email-queue')

View file

@ -4,6 +4,7 @@
from __future__ import unicode_literals
import json
import datetime
from decimal import Decimal
import mimetypes
import os
import frappe
@ -104,18 +105,27 @@ def json_handler(obj):
"""serialize non-serializable data for json"""
# serialize date
import collections
if isinstance(obj, (datetime.date, datetime.timedelta, datetime.datetime)):
if isinstance(obj, (datetime.date, datetime.timedelta, datetime.datetime)):
return text_type(obj)
elif isinstance(obj, LocalProxy):
if isinstance(obj, Decimal):
return text_type(obj)
elif isinstance(obj, frappe.model.document.BaseDocument):
elif isinstance(obj, LocalProxy):
return text_type(obj)
elif isinstance(obj, frappe.model.document.BaseDocument):
doc = obj.as_dict(no_nulls=True)
return doc
elif isinstance(obj, collections.Iterable):
elif isinstance(obj, collections.Iterable):
return list(obj)
elif type(obj)==type or isinstance(obj, Exception):
elif type(obj)==type or isinstance(obj, Exception):
return repr(obj)
else:
else:
raise TypeError("""Object of type %s with value of %s is not JSON serializable""" % \
(type(obj), repr(obj)))