New CLI commands; 'safe' mode and 'default'
This commit is contained in:
parent
f4c94c48b4
commit
051311bbbd
@ -39,15 +39,16 @@ import sys
|
||||
import os
|
||||
import getopt
|
||||
import logging
|
||||
import shutil
|
||||
from glob import glob
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# gramps modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gramps.gen.const import LONGOPTS, SHORTOPTS, PLUGINS_DIR, USER_PLUGINS
|
||||
from gramps.gen.plug import BasePluginManager
|
||||
from gramps.gen.config import config
|
||||
from gramps.gen.const import (LONGOPTS, SHORTOPTS, USER_PLUGINS, VERSION_DIR,
|
||||
HOME_DIR, TEMP_DIR, THUMB_DIR, ENV_DIR, USER_CSS)
|
||||
from gramps.gen.utils.cast import get_type_converter
|
||||
from gramps.gen.const import GRAMPS_LOCALE as glocale
|
||||
_ = glocale.translation.gettext
|
||||
@ -81,6 +82,14 @@ Application options
|
||||
-y, --yes Don't ask to confirm dangerous actions (non-GUI mode only)
|
||||
-q, --quiet Suppress progress indication output (non-GUI mode only)
|
||||
-v, --version Show versions
|
||||
-S, --safe Start Gramps in 'Safe mode'
|
||||
(temporarily use default settings)
|
||||
-D, --default=[APXFE] Reset settings to default;
|
||||
A - addons are cleared
|
||||
P - Preferences to default
|
||||
X - Books are cleared, reports and tool settings to default
|
||||
F - filters are cleared
|
||||
E - Everything is set to default or cleared
|
||||
""")
|
||||
|
||||
_USAGE = _("""
|
||||
@ -342,6 +351,7 @@ class ArgParser:
|
||||
elif option in ['-t']:
|
||||
self.list_table = True
|
||||
elif option in ['-s', '--show']:
|
||||
from gramps.gen.config import config
|
||||
print(_("Gramps config settings from %s:"
|
||||
) % config.filename)
|
||||
for sect in config.data:
|
||||
@ -351,6 +361,7 @@ class ArgParser:
|
||||
print()
|
||||
sys.exit(0)
|
||||
elif option in ['-c', '--config']:
|
||||
from gramps.gen.config import config
|
||||
cfg_name = value
|
||||
set_value = False
|
||||
if cfg_name:
|
||||
@ -396,6 +407,44 @@ class ArgParser:
|
||||
self.auto_accept = True
|
||||
elif option in ['-q', '--quiet']:
|
||||
self.quiet = True
|
||||
elif option in ['-S', '--safe']:
|
||||
cleandbg += [opt_ix]
|
||||
elif option in ['-D', '--default']:
|
||||
def rmtree(path):
|
||||
if os.path.isdir(path):
|
||||
shutil.rmtree(path, ignore_errors=True)
|
||||
|
||||
if 'E' in value or 'A' in value: # clear addons
|
||||
rmtree(USER_PLUGINS)
|
||||
if 'E' in value or 'P' in value: # clear ini preferences
|
||||
for fil in glob(os.path.join(VERSION_DIR, "*.*")):
|
||||
if "custom_filters.xml" in fil:
|
||||
continue
|
||||
os.remove(fil)
|
||||
# create gramps.ini so config won't load the one from an
|
||||
# older version of Gramps.
|
||||
with open(os.path.join(VERSION_DIR, 'gramps.ini'), 'w'):
|
||||
pass
|
||||
if 'E' in value or 'F' in value: # clear filters
|
||||
fil = os.path.join(VERSION_DIR, "custom_filters.xml")
|
||||
if os.path.isfile(fil):
|
||||
os.remove(fil)
|
||||
if 'E' in value or 'X' in value: # clear xml reports/tools
|
||||
for fil in glob(os.path.join(HOME_DIR, "*.xml")):
|
||||
os.remove(fil)
|
||||
if 'E' in value or 'Z' in value: # clear upgrade zips
|
||||
for fil in glob(os.path.join(HOME_DIR, "*.zip")):
|
||||
os.remove(fil)
|
||||
if 'E' in value: # Everything else
|
||||
rmtree(TEMP_DIR)
|
||||
rmtree(THUMB_DIR)
|
||||
rmtree(USER_CSS)
|
||||
rmtree(ENV_DIR)
|
||||
rmtree(os.path.join(HOME_DIR, "maps"))
|
||||
for fil in glob(os.path.join(HOME_DIR, "*")):
|
||||
if os.path.isfile(fil):
|
||||
os.remove(fil)
|
||||
sys.exit(0) # Done with Default
|
||||
|
||||
#clean options list
|
||||
cleandbg.reverse()
|
||||
|
@ -104,6 +104,13 @@ elif 'USERPROFILE' in os.environ:
|
||||
else:
|
||||
USER_HOME = get_env_var('HOME')
|
||||
HOME_DIR = os.path.join(USER_HOME, '.gramps')
|
||||
ORIG_HOME_DIR = HOME_DIR
|
||||
if 'SAFEMODE' in os.environ:
|
||||
if 'USERPROFILE' in os.environ:
|
||||
USER_HOME = get_env_var('USERPROFILE')
|
||||
else:
|
||||
USER_HOME = get_env_var('HOME')
|
||||
HOME_DIR = get_env_var('SAFEMODE')
|
||||
|
||||
|
||||
VERSION_DIR = os.path.join(
|
||||
@ -267,6 +274,7 @@ LONGOPTS = [
|
||||
"class=",
|
||||
"config=",
|
||||
"debug=",
|
||||
"default=",
|
||||
"display=",
|
||||
"disable-sound",
|
||||
"disable-crash-dialog",
|
||||
@ -294,6 +302,7 @@ LONGOPTS = [
|
||||
"password=",
|
||||
"create=",
|
||||
"options=",
|
||||
"safe",
|
||||
"screen=",
|
||||
"show",
|
||||
"sm-client-id=",
|
||||
@ -307,7 +316,7 @@ LONGOPTS = [
|
||||
"quiet",
|
||||
]
|
||||
|
||||
SHORTOPTS = "O:U:P:C:i:e:f:a:p:d:c:r:lLthuv?syq"
|
||||
SHORTOPTS = "O:U:P:C:i:e:f:a:p:d:c:r:lLthuv?syqSD:"
|
||||
|
||||
GRAMPS_UUID = uuid.UUID('516cd010-5a41-470f-99f8-eb22f1098ad6')
|
||||
|
||||
|
@ -37,16 +37,23 @@ LOG = logging.getLogger(".")
|
||||
|
||||
from subprocess import Popen, PIPE
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
# process 'safe mode'; set up for a temp directory for user data
|
||||
# actual directory paths set up in const module
|
||||
if "-S" in sys.argv or "--safe" in sys.argv:
|
||||
from tempfile import TemporaryDirectory
|
||||
tempdir = TemporaryDirectory(prefix='gramps_')
|
||||
os.environ['SAFEMODE'] = tempdir.name
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Gramps modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from .gen.const import APP_GRAMPS, USER_DIRLIST, HOME_DIR
|
||||
from .gen.const import APP_GRAMPS, USER_DIRLIST, HOME_DIR, ORIG_HOME_DIR
|
||||
from .gen.constfunc import mac
|
||||
from .version import VERSION_TUPLE
|
||||
from .gen.constfunc import win, get_env_var
|
||||
from .gen.config import config
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -436,6 +443,18 @@ def run():
|
||||
argv_copy = sys.argv[:]
|
||||
argpars = ArgParser(argv_copy)
|
||||
|
||||
# if in safe mode we should point the db dir back to the original dir.
|
||||
# It is ok to import config here, 'Defaults' command had its chance...
|
||||
from .gen.config import config
|
||||
if 'SAFEMODE' in os.environ:
|
||||
config.set('database.path', os.path.join(ORIG_HOME_DIR, 'grampsdb'))
|
||||
|
||||
# On windows the fontconfig handler may be a better choice; ask user to
|
||||
# choose for now.
|
||||
if(win() and ('PANGOCAIRO_BACKEND' not in os.environ) and
|
||||
config.get('preferences.alternate-fonthandler')):
|
||||
os.environ['PANGOCAIRO_BACKEND'] = "fontconfig"
|
||||
|
||||
# Calls to LOG must be after setup_logging() and ArgParser()
|
||||
LOG = logging.getLogger(".locale")
|
||||
LOG.debug("Encoding: %s", glocale.encoding)
|
||||
@ -477,9 +496,6 @@ def main():
|
||||
resource_path, filename = os.path.split(os.path.abspath(__file__))
|
||||
resource_path, dirname = os.path.split(resource_path)
|
||||
os.environ['GRAMPS_RESOURCES'] = resource_path
|
||||
if win() and ('PANGOCAIRO_BACKEND' not in os.environ) and \
|
||||
config.get('preferences.alternate-fonthandler'):
|
||||
os.environ['PANGOCAIRO_BACKEND'] = "fontconfig"
|
||||
errors = run()
|
||||
if errors and isinstance(errors, list):
|
||||
for error in errors:
|
||||
|
Loading…
Reference in New Issue
Block a user