@@ -13,7 +13,7 @@ import os, sys, importlib, inspect, json | |||||
from .exceptions import * | from .exceptions import * | ||||
from .utils.jinja import get_jenv, get_template, render_template | from .utils.jinja import get_jenv, get_template, render_template | ||||
__version__ = "7.0.27" | |||||
__version__ = "7.1-beta" | |||||
__title__ = "Frappe Framework" | __title__ = "Frappe Framework" | ||||
local = Local() | local = Local() | ||||
@@ -383,20 +383,47 @@ def get_version(): | |||||
if hasattr(module, "__version__"): | if hasattr(module, "__version__"): | ||||
print "{0} {1}".format(m, module.__version__) | print "{0} {1}".format(m, module.__version__) | ||||
@click.command('setup-help') | |||||
@click.command('setup-global-help') | |||||
@click.option('--mariadb_root_password') | @click.option('--mariadb_root_password') | ||||
def setup_help(mariadb_root_password=None): | |||||
"Make a database for help documentation" | |||||
def setup_global_help(mariadb_root_password=None): | |||||
'''setup help table in a separate database that will be | |||||
shared by the whole bench and set `global_help_setup` as 1 in | |||||
common_site_config.json''' | |||||
from frappe.installer import update_site_config | |||||
frappe.local.flags = frappe._dict() | frappe.local.flags = frappe._dict() | ||||
frappe.local.flags.in_setup_help = True | frappe.local.flags.in_setup_help = True | ||||
frappe.local.flags.in_install = True | frappe.local.flags.in_install = True | ||||
frappe.local.lang = 'en' | frappe.local.lang = 'en' | ||||
frappe.local.conf = frappe.get_site_config(sites_path='.') | frappe.local.conf = frappe.get_site_config(sites_path='.') | ||||
update_site_config('global_help_setup', 1, | |||||
site_config_path=os.path.join('.', 'common_site_config.json')) | |||||
if mariadb_root_password: | if mariadb_root_password: | ||||
frappe.local.conf.root_password = mariadb_root_password | frappe.local.conf.root_password = mariadb_root_password | ||||
from frappe.utils.help import sync | from frappe.utils.help import sync | ||||
sync() | sync() | ||||
@click.command('setup-help') | |||||
@pass_context | |||||
def setup_help(context): | |||||
'''Setup help table in the current site (called after migrate)''' | |||||
from frappe.utils.help import sync | |||||
for site in context.sites: | |||||
try: | |||||
frappe.init(site) | |||||
frappe.connect() | |||||
sync() | |||||
finally: | |||||
frappe.destroy() | |||||
commands = [ | commands = [ | ||||
build, | build, | ||||
clear_cache, | clear_cache, | ||||
@@ -421,5 +448,6 @@ commands = [ | |||||
watch, | watch, | ||||
_bulk_rename, | _bulk_rename, | ||||
add_to_email_queue, | add_to_email_queue, | ||||
setup_global_help, | |||||
setup_help | setup_help | ||||
] | ] |
@@ -265,9 +265,12 @@ def make_site_config(db_name=None, db_password=None, site_config=None): | |||||
with open(site_file, "w") as f: | with open(site_file, "w") as f: | ||||
f.write(json.dumps(site_config, indent=1, sort_keys=True)) | f.write(json.dumps(site_config, indent=1, sort_keys=True)) | ||||
def update_site_config(key, value, validate=True): | |||||
def update_site_config(key, value, validate=True, site_config_path=None): | |||||
"""Update a value in site_config""" | """Update a value in site_config""" | ||||
with open(get_site_config_path(), "r") as f: | |||||
if not site_config_path: | |||||
site_config_path = get_site_config_path() | |||||
with open(site_config_path, "r") as f: | |||||
site_config = json.loads(f.read()) | site_config = json.loads(f.read()) | ||||
# In case of non-int value | # In case of non-int value | ||||
@@ -288,7 +291,7 @@ def update_site_config(key, value, validate=True): | |||||
else: | else: | ||||
site_config[key] = value | site_config[key] = value | ||||
with open(get_site_config_path(), "w") as f: | |||||
with open(site_config_path, "w") as f: | |||||
f.write(json.dumps(site_config, indent=1, sort_keys=True)) | f.write(json.dumps(site_config, indent=1, sort_keys=True)) | ||||
if frappe.local.conf: | if frappe.local.conf: | ||||
@@ -13,6 +13,7 @@ from frappe.desk.notifications import clear_notifications | |||||
from frappe.website import render | from frappe.website import render | ||||
from frappe.desk.doctype.desktop_icon.desktop_icon import sync_desktop_icons | from frappe.desk.doctype.desktop_icon.desktop_icon import sync_desktop_icons | ||||
from frappe.core.doctype.language.language import sync_languages | from frappe.core.doctype.language.language import sync_languages | ||||
import frappe.utils.help | |||||
def migrate(verbose=True, rebuild_website=False): | def migrate(verbose=True, rebuild_website=False): | ||||
'''Migrate all apps to the latest version, will: | '''Migrate all apps to the latest version, will: | ||||
@@ -40,6 +41,10 @@ def migrate(verbose=True, rebuild_website=False): | |||||
frappe.db.commit() | frappe.db.commit() | ||||
if not frappe.conf.get('global_help_setup'): | |||||
# sync help if not set as global | |||||
frappe.utils.help.sync() | |||||
clear_notifications() | clear_notifications() | ||||
frappe.publish_realtime("version-update") | frappe.publish_realtime("version-update") |
@@ -33,10 +33,16 @@ def get_help_content(path): | |||||
class HelpDatabase(object): | class HelpDatabase(object): | ||||
def __init__(self): | def __init__(self): | ||||
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] | |||||
self.global_help_setup = frappe.conf.get('global_help_setup') | |||||
if self.global_help_setup: | |||||
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): | def make_database(self): | ||||
'''make database for global help setup''' | |||||
if not self.global_help_setup: | |||||
return | |||||
dbman = DbManager(get_root_connection()) | dbman = DbManager(get_root_connection()) | ||||
dbman.drop_database(self.help_db_name) | dbman.drop_database(self.help_db_name) | ||||
@@ -52,7 +58,10 @@ class HelpDatabase(object): | |||||
dbman.flush_privileges() | dbman.flush_privileges() | ||||
def connect(self): | def connect(self): | ||||
self.db = Database(user=self.help_db_name, password=self.help_db_name) | |||||
if self.global_help_setup: | |||||
self.db = Database(user=self.help_db_name, password=self.help_db_name) | |||||
else: | |||||
self.db = frappe.db | |||||
def make_table(self): | def make_table(self): | ||||
if not 'help' in self.db.get_tables(): | if not 'help' in self.db.get_tables(): | ||||