From c10e3ec75ec2acbeaaad49ee4bb915f5c408f1a6 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Wed, 18 Mar 2015 16:21:41 +0530 Subject: [PATCH] frappe.as_json --- frappe/__init__.py | 7 +++++-- .../core/page/data_import_tool/data_import_tool.py | 2 +- frappe/frappeclient.py | 14 +++++++------- frappe/model/base_document.py | 3 +-- frappe/modules/export_file.py | 2 +- frappe/templates/pages/desk.py | 2 +- frappe/utils/data.py | 8 ++++---- 7 files changed, 20 insertions(+), 18 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index dba5a55321..52e9554be3 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -859,14 +859,17 @@ def get_all(doctype, *args, **kwargs): def add_version(doc): """Insert a new **Version** of the given document. A **Version** is a JSON dump of the current document state.""" - from frappe.utils.response import json_handler get_doc({ "doctype": "Version", "ref_doctype": doc.doctype, "docname": doc.name, - "doclist_json": json.dumps(doc.as_dict(), indent=1, sort_keys=True, default=json_handler) + "doclist_json": as_json(doc.as_dict()) }).insert(ignore_permissions=True) +def as_json(obj): + from frappe.utils.response import json_handler + return json.dumps(obj, indent=1, sort_keys=True, default=json_handler) + def get_test_records(doctype): """Returns list of objects from `test_records.json` in the given doctype's folder.""" from frappe.modules import get_doctype_module, get_module_path diff --git a/frappe/core/page/data_import_tool/data_import_tool.py b/frappe/core/page/data_import_tool/data_import_tool.py index 06e357a0e7..61e000340e 100644 --- a/frappe/core/page/data_import_tool/data_import_tool.py +++ b/frappe/core/page/data_import_tool/data_import_tool.py @@ -66,7 +66,7 @@ def export_json(doctype, path, filters=None): out.append(frappe.get_doc(doctype, doc.name).as_dict()) post_process(out) with open(path, "w") as outfile: - outfile.write(json.dumps(out, default=json_handler, indent=1, sort_keys=True)) + outfile.write(frappe.as_json(out)) @frappe.whitelist() def export_fixture(doctype, app): diff --git a/frappe/frappeclient.py b/frappe/frappeclient.py index fcb28cfdcf..3a83c507ce 100644 --- a/frappe/frappeclient.py +++ b/frappe/frappeclient.py @@ -55,18 +55,18 @@ class FrappeClient(object): def insert(self, doc): res = self.session.post(self.url + "/api/resource/" + doc.get("doctype"), - data={"data":json.dumps(doc)}, verify=self.verify) + data={"data":frappe.as_json(doc)}, verify=self.verify) return self.post_process(res) def update(self, doc): url = self.url + "/api/resource/" + doc.get("doctype") + "/" + doc.get("name") - res = self.session.put(url, data={"data":json.dumps(doc)}, verify=self.verify) + res = self.session.put(url, data={"data":frappe.as_json(doc)}, verify=self.verify) return self.post_process(res) def bulk_update(self, docs): return self.post_request({ "cmd": "frappe.client.bulk_update", - "docs": json.dumps(docs) + "docs": frappe.as_json(docs) }) def delete(self, doctype, name): @@ -79,7 +79,7 @@ class FrappeClient(object): def submit(self, doclist): return self.post_request({ "cmd": "frappe.client.submit", - "doclist": json.dumps(doclist) + "doclist": frappe.as_json(doclist) }) def get_value(self, doctype, fieldname=None, filters=None): @@ -87,7 +87,7 @@ class FrappeClient(object): "cmd": "frappe.client.get_value", "doctype": doctype, "fieldname": fieldname or "name", - "filters": json.dumps(filters) + "filters": frappe.as_json(filters) }) def set_value(self, doctype, docname, fieldname, value): @@ -110,8 +110,8 @@ class FrappeClient(object): params = {} if filters: params["filters"] = json.dumps(filters) - if fields: - params["fields"] = json.dumps(fields) + if fields: + params["fields"] = json.dumps(fields) res = self.session.get(self.url + "/api/resource/" + doctype + "/" + name, params=params, verify=self.verify) diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py index c41601da09..c0f790ad37 100644 --- a/frappe/model/base_document.py +++ b/frappe/model/base_document.py @@ -217,8 +217,7 @@ class BaseDocument(object): return frappe._dict(doc) def as_json(self): - from frappe.utils.response import json_handler - return json.dumps(self.as_dict(), indent=1, sort_keys=True, default=json_handler) + return frappe.as_json(self.as_dict()) def get_table_field_doctype(self, fieldname): return self.meta.get_field(fieldname).options diff --git a/frappe/modules/export_file.py b/frappe/modules/export_file.py index 0fde55caa2..2b7a6cab3b 100644 --- a/frappe/modules/export_file.py +++ b/frappe/modules/export_file.py @@ -41,7 +41,7 @@ def write_document_file(doc, record_module=None, create_init=None): # write the data file fname = (doc.doctype in lower_case_files_for and scrub(doc.name)) or doc.name with open(os.path.join(folder, fname +".json"),'w+') as txtfile: - txtfile.write(json.dumps(newdoc, indent=1, sort_keys=True)) + txtfile.write(frappe.as_json(newdoc)) def get_module_name(doc): if doc.doctype == 'Module Def': diff --git a/frappe/templates/pages/desk.py b/frappe/templates/pages/desk.py index 6b41d2f304..0ebe70cc92 100644 --- a/frappe/templates/pages/desk.py +++ b/frappe/templates/pages/desk.py @@ -27,6 +27,6 @@ def get_context(context): "desk.min.js"))), "include_js": hooks["app_include_js"], "include_css": hooks["app_include_css"], - "boot": json.dumps(boot, default=json_handler, indent=1, sort_keys=True), + "boot": frappe.as_json(boot), "background_image": boot.user.background_image or boot.default_background_image } diff --git a/frappe/utils/data.py b/frappe/utils/data.py index 8eafc581f5..31bd36e9bc 100644 --- a/frappe/utils/data.py +++ b/frappe/utils/data.py @@ -29,7 +29,7 @@ def getdate(string_date): return datetime.datetime.strptime(string_date, "%Y-%m-%d").date() def get_datetime(datetime_str): - if isinstance(datetime_str, datetime.datetime): + if isinstance(datetime_str, (datetime.datetime, datetime.timedelta)): return datetime_str elif isinstance(datetime_str, datetime.date): @@ -97,17 +97,17 @@ def _get_user_time_zone(): user_time_zone = None if frappe.session.user: user_time_zone = frappe.db.get_value("User", frappe.session.user, "time_zone") - + if not user_time_zone: user_time_zone = (frappe.db.get_single_value("System Settings", "time_zone") or "Asia/Kolkata") - + return user_time_zone def get_user_time_zone(): if frappe.local.flags.in_test: return _get_user_time_zone() - + if getattr(frappe.local, "user_time_zone", None) is None: frappe.local.user_time_zone = frappe.cache().get_value("time_zone")