From 43941d40d76e234fad62cdefa8e4ab32f5d2f83c Mon Sep 17 00:00:00 2001 From: Ritesh Shrivastav Date: Wed, 31 Jan 2018 11:25:01 +0530 Subject: [PATCH] Provision to print a complex object for all 'bench execute' commands (#4908) --- frappe/commands/utils.py | 3 ++- frappe/utils/response.py | 22 ++++++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/frappe/commands/utils.py b/frappe/commands/utils.py index a09a0fca81..2a4a283371 100644 --- a/frappe/commands/utils.py +++ b/frappe/commands/utils.py @@ -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') diff --git a/frappe/utils/response.py b/frappe/utils/response.py index bfbcdffe2a..c96f705972 100644 --- a/frappe/utils/response.py +++ b/frappe/utils/response.py @@ -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)))