diff --git a/frappe/commands/utils.py b/frappe/commands/utils.py index da9d67be3b..3610393d9a 100644 --- a/frappe/commands/utils.py +++ b/frappe/commands/utils.py @@ -443,7 +443,7 @@ def console(context): for app in all_apps: locals()[app] = __import__(app) print("Apps in this namespace:\n{}".format(", ".join(all_apps))) - IPython.embed(display_banner="", header="") + IPython.embed(display_banner="", header="", colors="neutral") @click.command('run-tests') diff --git a/frappe/desk/query_report.py b/frappe/desk/query_report.py index 164f6389eb..74e841f107 100644 --- a/frappe/desk/query_report.py +++ b/frappe/desk/query_report.py @@ -299,7 +299,6 @@ def export_query(): _("You can try changing the filters of your report.")) return - data.columns = [col for col in data.columns if isinstance(col, dict) and not col.get('hidden')] columns = get_columns_dict(data.columns) from frappe.utils.xlsxutils import make_xlsx @@ -316,7 +315,8 @@ def build_xlsx_data(columns, data, visible_idx, include_indentation): # add column headings for idx in range(len(data.columns)): - result[0].append(columns[idx]["label"]) + if not columns[idx].get("hidden"): + result[0].append(columns[idx]["label"]) # build table from result for i, row in enumerate(data.result): diff --git a/frappe/integrations/offsite_backup_utils.py b/frappe/integrations/offsite_backup_utils.py index c280a1d9dd..7e80cb68c4 100644 --- a/frappe/integrations/offsite_backup_utils.py +++ b/frappe/integrations/offsite_backup_utils.py @@ -10,7 +10,7 @@ from frappe.utils import split_emails, get_backups_path def send_email(success, service_name, doctype, email_field, error_status=None): - recipients = get_recipients(service_name, email_field) + recipients = get_recipients(doctype, email_field) if not recipients: frappe.log_error("No Email Recipient found for {0}".format(service_name), "{0}: Failed to send backup status email".format(service_name)) @@ -36,11 +36,11 @@ def send_email(success, service_name, doctype, email_field, error_status=None): frappe.sendmail(recipients=recipients, subject=subject, message=message) -def get_recipients(service_name, email_field): +def get_recipients(doctype, email_field): if not frappe.db: frappe.connect() - return split_emails(frappe.db.get_value(service_name, None, email_field)) + return split_emails(frappe.db.get_value(doctype, None, email_field)) def get_latest_backup_file(with_files=False): diff --git a/frappe/model/meta.py b/frappe/model/meta.py index cb7c77c57d..7bf93d1968 100644 --- a/frappe/model/meta.py +++ b/frappe/model/meta.py @@ -452,6 +452,7 @@ class Meta(Document): for link in self.links: link.added = False for group in data.transactions: + group = frappe._dict(group) # group found if link.group and group.label == link.group: if link.link_doctype not in group.get('items'): @@ -460,7 +461,7 @@ class Meta(Document): if not link.added: # group not found, make a new group - data.transactions.append(frappe._dict( + data.transactions.append(dict( label = link.group, items = [link.link_doctype] )) diff --git a/frappe/public/js/frappe/recorder/RequestDetail.vue b/frappe/public/js/frappe/recorder/RequestDetail.vue index 804c1c2f55..60795076ec 100644 --- a/frappe/public/js/frappe/recorder/RequestDetail.vue +++ b/frappe/public/js/frappe/recorder/RequestDetail.vue @@ -126,27 +126,9 @@ @@ -244,7 +226,6 @@ export default { }, group_duplicates: false, showing: null, - showing_traceback: null, request: { calls: [], }, diff --git a/frappe/recorder.py b/frappe/recorder.py index ffafffb93f..388efcbf6e 100644 --- a/frappe/recorder.py +++ b/frappe/recorder.py @@ -9,12 +9,8 @@ import inspect import json import re import time -import traceback import frappe import sqlparse -from pygments import highlight -from pygments.lexers import PythonLexer -from pygments.formatters import HtmlFormatter from frappe import _ @@ -30,7 +26,7 @@ def sql(*args, **kwargs): stack = list(get_current_stack_frames()) - if frappe.db.db_type == 'postgres': + if frappe.db.db_type == "postgres": query = frappe.db._cursor.query else: query = frappe.db._cursor._executed @@ -65,9 +61,6 @@ def get_current_stack_frames(): "filename": re.sub(".*/apps/", "", filename), "lineno": lineno, "function": function, - "context": "".join(context), - "index": index, - "locals": json.dumps(frame.f_locals, skipkeys=True, default=str) } @@ -83,7 +76,7 @@ def dump(): frappe.local._recorder.dump() -class Recorder(): +class Recorder: def __init__(self): self.uuid = frappe.generate_hash(length=10) self.time = datetime.datetime.now() @@ -105,12 +98,18 @@ class Recorder(): "cmd": self.cmd, "time": self.time, "queries": len(self.calls), - "time_queries": float("{:0.3f}".format(sum(call["duration"] for call in self.calls))), - "duration": float("{:0.3f}".format((datetime.datetime.now() - self.time).total_seconds() * 1000)), + "time_queries": float( + "{:0.3f}".format(sum(call["duration"] for call in self.calls)) + ), + "duration": float( + "{:0.3f}".format((datetime.datetime.now() - self.time).total_seconds() * 1000) + ), "method": self.method, } frappe.cache().hset(RECORDER_REQUEST_SPARSE_HASH, self.uuid, request_data) - frappe.publish_realtime(event="recorder-dump-event", message=json.dumps(request_data, default=str)) + frappe.publish_realtime( + event="recorder-dump-event", message=json.dumps(request_data, default=str) + ) self.mark_duplicates() @@ -137,6 +136,7 @@ def do_not_record(function): del frappe.local._recorder frappe.db.sql = frappe.db._sql return function(*args, **kwargs) + return wrapper @@ -145,6 +145,7 @@ def administrator_only(function): if frappe.session.user != "Administrator": frappe.throw(_("Only Administrator is allowed to use Recorder")) return function(*args, **kwargs) + return wrapper @@ -175,11 +176,6 @@ def stop(*args, **kwargs): def get(uuid=None, *args, **kwargs): if uuid: result = frappe.cache().hget(RECORDER_REQUEST_HASH, uuid) - lexer = PythonLexer(tabsize=4) - for call in result["calls"]: - for stack in call["stack"]: - formatter = HtmlFormatter(noclasses=True, hl_lines=[stack["index"] + 1]) - stack["context"] = highlight(stack["context"], lexer, formatter) else: result = list(frappe.cache().hgetall(RECORDER_REQUEST_SPARSE_HASH).values()) return result diff --git a/frappe/templates/base.html b/frappe/templates/base.html index 907a7b6113..dd5dd63a1f 100644 --- a/frappe/templates/base.html +++ b/frappe/templates/base.html @@ -65,7 +65,7 @@ frappe.ready_events.push(fn); } window.dev_server = {{ dev_server }}; - window.socketio_port = {{ frappe.socketio_port }}; + window.socketio_port = {{ (frappe.socketio_port or 'null') }}; diff --git a/requirements.txt b/requirements.txt index 6c22d66139..85f0329b3a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -23,7 +23,7 @@ googlemaps==3.1.1 gunicorn==19.10.0 html2text==2016.9.19 html5lib==1.0.1 -ipython==5.9.0 +ipython==7.14.0 Jinja2==2.11.1 ldap3==2.7 markdown2==2.3.8 @@ -38,7 +38,6 @@ Pillow==6.2.2 premailer==3.6.1 psycopg2-binary==2.8.4 pyasn1==0.4.8 -Pygments==2.5.2 PyJWT==1.7.1 PyMySQL==0.9.3 pyOpenSSL==19.1.0