PyAPI: Skip user scripts w/ factory-startup

Adds bpy.app.factory_startup,
used to check if user scripts should be loaded.
This commit is contained in:
Campbell Barton
2017-07-25 20:50:12 +10:00
parent 35d9f68121
commit edc6bec9d6
2 changed files with 23 additions and 8 deletions

View File

@@ -72,6 +72,7 @@ import addon_utils as _addon_utils
_user_preferences = _bpy.context.user_preferences
_script_module_dirs = "startup", "modules"
_is_factory_startup = _bpy.app.factory_startup
def _test_import(module_name, loaded_modules):
@@ -145,6 +146,7 @@ def load_scripts(reload_scripts=False, refresh_scripts=False):
:type refresh_scripts: bool
"""
use_time = use_class_register_check = _bpy.app.debug_python
use_user = not _is_factory_startup
if use_time:
import time
@@ -235,7 +237,7 @@ def load_scripts(reload_scripts=False, refresh_scripts=False):
from bpy_restrict_state import RestrictBlend
with RestrictBlend():
for base_path in script_paths():
for base_path in script_paths(use_user=use_user):
for path_subdir in _script_module_dirs:
path = _os.path.join(base_path, path_subdir)
if _os.path.isdir(path):
@@ -307,7 +309,7 @@ def script_path_pref():
return _os.path.normpath(path) if path else None
def script_paths(subdir=None, user_pref=True, check_all=False):
def script_paths(subdir=None, user_pref=True, check_all=False, use_user=True):
"""
Returns a list of valid script paths.
@@ -331,13 +333,24 @@ def script_paths(subdir=None, user_pref=True, check_all=False):
if check_all:
# All possible paths, no duplicates, keep order.
base_paths = (
*(path for path in (_os.path.join(resource_path(res), "scripts")
for res in ('LOCAL', 'USER', 'SYSTEM')) if path not in base_paths),
*base_paths,
)
if use_user:
test_paths = ('LOCAL', 'USER', 'SYSTEM')
else:
test_paths = ('LOCAL', 'SYSTEM')
for path in (*base_paths, script_path_user(), script_path_pref()):
base_paths = (
*(path for path in (
_os.path.join(resource_path(res), "scripts")
for res in test_paths) if path not in base_paths),
*base_paths,
)
if use_user:
test_paths = (*base_paths, script_path_user(), script_path_pref())
else:
test_paths = (*base_paths, script_path_pref())
for path in test_paths:
if path:
path = _os.path.normpath(path)
if path not in scripts and _os.path.isdir(path):