diff --git a/frappe/__init__.py b/frappe/__init__.py index 02b8d71e40..9b208f7c2d 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -10,9 +10,16 @@ be used to build database driven apps. Read the documentation: https://frappeframework.com/docs """ +import os, warnings + +_dev_server = os.environ.get('DEV_SERVER', False) + +if _dev_server: + warnings.simplefilter('always', DeprecationWarning) + warnings.simplefilter('always', PendingDeprecationWarning) from werkzeug.local import Local, release_local -import os, sys, importlib, inspect, json, warnings +import sys, importlib, inspect, json import typing from past.builtins import cmp import click @@ -31,8 +38,6 @@ __title__ = "Frappe Framework" local = Local() controllers = {} -warnings.simplefilter('always', DeprecationWarning) -warnings.simplefilter('always', PendingDeprecationWarning) class _dict(dict): """dict like object that exposes keys as attributes""" @@ -197,7 +202,7 @@ def init(site, sites_path=None, new_site=False): local.meta_cache = {} local.form_dict = _dict() local.session = _dict() - local.dev_server = os.environ.get('DEV_SERVER', False) + local.dev_server = _dev_server setup_module_map() diff --git a/frappe/build.py b/frappe/build.py index d710cd04f6..c970ae3a28 100644 --- a/frappe/build.py +++ b/frappe/build.py @@ -317,13 +317,20 @@ def clear_broken_symlinks(): -def unstrip(message): +def unstrip(message: str) -> str: + """Pads input string on the right side until the last available column in the terminal + """ + _len = len(message) try: max_str = os.get_terminal_size().columns except Exception: max_str = 80 - _len = len(message) - _rem = max_str - _len + + if _len < max_str: + _rem = max_str - _len + else: + _rem = max_str % _len + return f"{message}{' ' * _rem}" @@ -336,6 +343,7 @@ def make_asset_dirs(hard_link=False): start_message = unstrip(f"{'Copying assets from' if hard_link else 'Linking'} {source} to {target}") fail_message = unstrip(f"Cannot {'copy' if hard_link else 'link'} {source} to {target}") + # Used '\r' instead of '\x1b[1K\r' to print entire lines in smaller terminal sizes try: print(start_message, end="\r") link_assets_dir(source, target, hard_link=hard_link) diff --git a/frappe/commands/utils.py b/frappe/commands/utils.py index 2fff120852..4da0f6bb78 100644 --- a/frappe/commands/utils.py +++ b/frappe/commands/utils.py @@ -507,8 +507,6 @@ frappe.db.connect() @pass_context def console(context): "Start ipython console for a site" - import warnings - site = get_site(context) frappe.init(site=site) frappe.connect() @@ -529,7 +527,6 @@ def console(context): if failed_to_import: print("\nFailed to import:\n{}".format(", ".join(failed_to_import))) - warnings.simplefilter('ignore') IPython.embed(display_banner="", header="", colors="neutral") diff --git a/frappe/public/js/frappe/desk.js b/frappe/public/js/frappe/desk.js index b7681a8f1a..46812f5fb6 100644 --- a/frappe/public/js/frappe/desk.js +++ b/frappe/public/js/frappe/desk.js @@ -289,7 +289,7 @@ frappe.Application = class Application { } if (!frappe.workspaces['home']) { // default workspace is settings for Frappe - frappe.workspaces['home'] = frappe.workspaces['build']; + frappe.workspaces['home'] = frappe.workspaces[Object.keys(frappe.workspaces)[0]]; } } diff --git a/frappe/public/js/frappe/form/form.js b/frappe/public/js/frappe/form/form.js index a188c42950..88d7ceaa94 100644 --- a/frappe/public/js/frappe/form/form.js +++ b/frappe/public/js/frappe/form/form.js @@ -1125,9 +1125,17 @@ frappe.ui.form.Form = class FrappeForm { add_custom_button(label, fn, group) { // temp! old parameter used to be icon - if(group && group.indexOf("fa fa-")!==-1) group = null; - var btn = this.page.add_inner_button(label, fn, group); - if(btn) { + if (group && group.indexOf("fa fa-") !== -1) + group = null; + + let btn = this.page.add_inner_button(label, fn, group); + + if (btn) { + // Add actions as menu item in Mobile View + let menu_item_label = group ? `${group} > ${label}` : label; + let menu_item = this.page.add_menu_item(menu_item_label, fn, false); + menu_item.parent().addClass("hidden-lg"); + this.custom_buttons[label] = btn; } return btn; diff --git a/frappe/public/scss/desk/global.scss b/frappe/public/scss/desk/global.scss index 4442795c62..afcf2957cc 100644 --- a/frappe/public/scss/desk/global.scss +++ b/frappe/public/scss/desk/global.scss @@ -120,6 +120,12 @@ pre { } } +.hidden-lg { + @include media-breakpoint-up(md) { + display: none !important; + } +} + .visible-xs { @include media-breakpoint-up(sm) { display: none !important; diff --git a/frappe/utils/bench_helper.py b/frappe/utils/bench_helper.py index 633d867306..2fb0bda058 100644 --- a/frappe/utils/bench_helper.py +++ b/frappe/utils/bench_helper.py @@ -6,6 +6,7 @@ import json import importlib import frappe.utils import traceback +import warnings click.disable_unicode_literals_warning = True @@ -98,5 +99,6 @@ def get_apps(): return frappe.get_all_apps(with_internal_apps=False, sites_path='.') if __name__ == "__main__": + if not frappe._dev_server: + warnings.simplefilter('ignore') main() - diff --git a/frappe/utils/safe_exec.py b/frappe/utils/safe_exec.py index 6c1fa21685..643812b226 100644 --- a/frappe/utils/safe_exec.py +++ b/frappe/utils/safe_exec.py @@ -119,7 +119,7 @@ def get_safe_globals(): scrub=scrub, guess_mimetype=mimetypes.guess_type, html2text=html2text, - dev_server=1 if os.environ.get('DEV_SERVER', False) else 0, + dev_server=1 if frappe._dev_server else 0, run_script=run_script ) diff --git a/frappe/www/printview.py b/frappe/www/printview.py index 3ddf032e9e..132d863375 100644 --- a/frappe/www/printview.py +++ b/frappe/www/printview.py @@ -505,8 +505,9 @@ window.print(); // close the window after print // NOTE: doesn't close if print is cancelled in Chrome +// Changed timeout to 5s from 1s because it blocked mobile view rendering setTimeout(function() { window.close(); -}, 1000); +}, 5000); """