From 8a32adcaf8392d6f62af4c38c61edc157d813ff3 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 23 Aug 2016 17:53:38 +0530 Subject: [PATCH] [command] bench setup-help will make the help db --- frappe/commands/utils.py | 11 +++++++++++ frappe/model/db_schema.py | 14 ++++++-------- frappe/translate.py | 7 +++++-- frappe/utils/help.py | 10 +++++++--- frappe/utils/jinja.py | 24 ++++++++++++++++-------- 5 files changed, 45 insertions(+), 21 deletions(-) diff --git a/frappe/commands/utils.py b/frappe/commands/utils.py index d0bfd0005b..0353625045 100644 --- a/frappe/commands/utils.py +++ b/frappe/commands/utils.py @@ -383,6 +383,16 @@ def get_version(): if hasattr(module, "__version__"): print "{0} {1}".format(m, module.__version__) +@click.command('setup-help') +def setup_help(): + "Make a database for help documentation" + frappe.local.flags = frappe._dict() + frappe.local.flags.in_setup_help = True + frappe.local.lang = 'en' + frappe.local.conf = frappe.get_site_config(sites_path='.') + from frappe.utils.help import sync + sync() + commands = [ build, clear_cache, @@ -407,4 +417,5 @@ commands = [ watch, _bulk_rename, add_to_email_queue, + setup_help ] diff --git a/frappe/model/db_schema.py b/frappe/model/db_schema.py index aa4d4cd04a..3f62859487 100644 --- a/frappe/model/db_schema.py +++ b/frappe/model/db_schema.py @@ -487,13 +487,10 @@ class DbManager: if not host: host = self.get_current_host() - try: - if password: - self.db.sql("CREATE USER '%s'@'%s' IDENTIFIED BY '%s';" % (user[:16], host, password)) - else: - self.db.sql("CREATE USER '%s'@'%s';" % (user[:16], host)) - except Exception: - raise + if password: + self.db.sql("CREATE USER '%s'@'%s' IDENTIFIED BY '%s';" % (user[:16], host, password)) + else: + self.db.sql("CREATE USER '%s'@'%s';" % (user[:16], host)) def delete_user(self, target, host=None): if not host: @@ -519,7 +516,8 @@ class DbManager: if not host: host = self.get_current_host() - self.db.sql("GRANT ALL PRIVILEGES ON `%s`.* TO '%s'@'%s';" % (target, user, host)) + self.db.sql("GRANT ALL PRIVILEGES ON `%s`.* TO '%s'@'%s';" % (target, + user, host)) def grant_select_privilges(self, db, table, user, host=None): if not host: diff --git a/frappe/translate.py b/frappe/translate.py index 3bf212a32f..869a2f282e 100644 --- a/frappe/translate.py +++ b/frappe/translate.py @@ -168,11 +168,11 @@ def get_full_dict(lang): :param lang: Language Code, e.g. `hi` """ - if not lang: + if not lang or lang=='en': return {} # found in local, return! - if frappe.local.lang_full_dict is not None: + if getattr(frappe.local, 'lang_full_dict', None) is not None: return frappe.local.lang_full_dict frappe.local.lang_full_dict = load_lang(lang) @@ -193,6 +193,9 @@ def load_lang(lang, apps=None): For derivative languages (es-GT), take translations from the base language (es) and then update translations from the child (es-GT)""" + if lang=='en': + return {} + out = frappe.cache().hget("lang_full_dict", lang) if not out: out = {} diff --git a/frappe/utils/help.py b/frappe/utils/help.py index c0d9595380..c068f86a45 100644 --- a/frappe/utils/help.py +++ b/frappe/utils/help.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe +import hashlib from frappe.model.db_schema import DbManager from frappe.installer import get_root_connection @@ -32,10 +33,12 @@ def get_help_content(path): class HelpDatabase(object): def __init__(self): - self.help_db_name = '_frappe_help' + bench_name = os.path.basename(os.path.abspath(frappe.get_app_path('frappe')).split('/apps/')[0]) + self.help_db_name = hashlib.sha224(bench_name).hexdigest()[:15] def make_database(self): dbman = DbManager(get_root_connection()) + dbman.drop_database(self.help_db_name) # make database if not self.help_db_name in dbman.get_database_list(): @@ -61,7 +64,7 @@ class HelpDatabase(object): full_path text, fulltext(title), fulltext(content), - fulltext(path)) + index (path)) COLLATE=utf8mb4_unicode_ci ENGINE=MyISAM CHARACTER SET=utf8mb4''') @@ -95,8 +98,9 @@ class HelpDatabase(object): app_name = frappe.get_attr('{app}.__title__'.format(app=app)) or app doc_contents += '
  • {app_name}
  • '.format( app=app, app_name=app_name) - except Exception, e: + except Exception: pass + for basepath, folders, files in os.walk(docs_folder): files = self.reorder_files(files) for fname in files: diff --git a/frappe/utils/jinja.py b/frappe/utils/jinja.py index 96cede6491..0a9ec46d2f 100644 --- a/frappe/utils/jinja.py +++ b/frappe/utils/jinja.py @@ -5,7 +5,7 @@ from __future__ import unicode_literals def get_jenv(): import frappe - if not frappe.local.jenv: + if not getattr(frappe.local, 'jenv', None): from jinja2 import Environment, DebugUndefined # frappe will be loaded last, so app templates will get precedence @@ -73,7 +73,7 @@ def get_allowed_functions_for_jenv(): if "_" in frappe.local.form_dict: del frappe.local.form_dict["_"] - return { + out = { # make available limited methods of frappe "frappe": { "_": frappe._, @@ -93,7 +93,6 @@ def get_allowed_functions_for_jenv(): "get_all": frappe.get_all, "utils": datautils, "user": getattr(frappe.local, "session", None) and frappe.local.session.user or "Guest", - "date_format": frappe.db.get_default("date_format") or "yyyy-mm-dd", "get_fullname": frappe.utils.get_fullname, "get_gravatar": frappe.utils.get_gravatar_url, "full_name": getattr(frappe.local, "session", None) and frappe.local.session.data.full_name or "Guest", @@ -104,8 +103,6 @@ def get_allowed_functions_for_jenv(): "automodule": automodule, "get_controller": get_controller }, - "get_visible_columns": \ - frappe.get_attr("frappe.www.print.get_visible_columns"), "_": frappe._, "get_shade": get_shade, "scrub": scrub, @@ -113,13 +110,22 @@ def get_allowed_functions_for_jenv(): "dev_server": 1 if os.environ.get('DEV_SERVER', False) else 0 } + if not frappe.flags.in_setup_help: + out['date_format'] = frappe.db.get_default("date_format") or "yyyy-mm-dd" + out['get_visible_columns'] = frappe.get_attr("frappe.www.print.get_visible_columns") + + return out + def get_jloader(): import frappe - if not frappe.local.jloader: + if not getattr(frappe.local, 'jloader', None): from jinja2 import ChoiceLoader, PackageLoader, PrefixLoader - apps = frappe.local.flags.web_pages_apps or frappe.get_installed_apps(sort=True) - apps.reverse() + if frappe.local.flags.in_setup_help: + apps = ['frappe'] + else: + apps = frappe.local.flags.web_pages_apps or frappe.get_installed_apps(sort=True) + apps.reverse() if not "frappe" in apps: apps.append('frappe') @@ -151,6 +157,8 @@ def set_filters(jenv): jenv.filters["flt"] = flt jenv.filters["abs_url"] = abs_url + if frappe.flags.in_setup_help: return + # load jenv_filters from hooks.py for app in frappe.get_installed_apps(): for jenv_filter in (frappe.get_hooks(app_name=app).jenv_filter or []):