misc: add site option to force lazy evaluation (#29951)

This commit is contained in:
Frédéric Péters 2019-04-16 09:33:00 +02:00
parent 653db00150
commit dcb0b0fc58
3 changed files with 19 additions and 9 deletions

View File

@ -58,13 +58,14 @@ def assert_equal_zip(stream1, stream2):
def pytest_generate_tests(metafunc):
if 'pub' in metafunc.fixturenames:
metafunc.parametrize('pub', ['pickle', 'sql', 'pickle-templates'], indirect=True)
metafunc.parametrize('pub', ['pickle', 'sql', 'pickle-templates', 'pickle-lazy'], indirect=True)
@pytest.fixture
def pub(request, emails):
pub = create_temporary_pub(
sql_mode=bool('sql' in request.param),
templates_mode=bool('templates' in request.param)
templates_mode=bool('templates' in request.param),
lazy_mode=bool('lazy' in request.param),
)
pub.cfg['identification'] = {'methods': ['password']}
pub.cfg['language'] = {'language': 'en'}

View File

@ -37,10 +37,11 @@ class KnownElements(object):
sql_app_dir = None
sql_db_name = None
templates_app_dir = None
lazy_app_dir = None
known_elements = KnownElements()
def create_temporary_pub(sql_mode=False, templates_mode=False):
def create_temporary_pub(sql_mode=False, templates_mode=False, lazy_mode=False):
if sql_mode is True:
if pytest.config.getoption('without_postgresql_tests'):
pytest.skip("unsupported configuration")
@ -50,17 +51,21 @@ def create_temporary_pub(sql_mode=False, templates_mode=False):
cleanup()
if templates_mode and known_elements.templates_app_dir:
APP_DIR = known_elements.templates_app_dir
elif (not sql_mode and not templates_mode) and known_elements.pickle_app_dir:
APP_DIR = known_elements.pickle_app_dir
elif sql_mode is True and known_elements.sql_app_dir:
elif lazy_mode and known_elements.lazy_app_dir:
APP_DIR = known_elements.lazy_app_dir
elif sql_mode and known_elements.sql_app_dir:
APP_DIR = known_elements.sql_app_dir
elif not (templates_mode or lazy_mode or sql_mode) and known_elements.pickle_app_dir:
APP_DIR = known_elements.pickle_app_dir
else:
APP_DIR = tempfile.mkdtemp()
if templates_mode:
known_elements.templates_app_dir = APP_DIR
elif sql_mode is True:
elif lazy_mode:
known_elements.lazy_app_dir = APP_DIR
elif sql_mode:
known_elements.sql_app_dir = APP_DIR
elif sql_mode is False:
else:
known_elements.pickle_app_dir = APP_DIR
compat.CompatWcsPublisher.APP_DIR = APP_DIR
@ -105,6 +110,8 @@ def create_temporary_pub(sql_mode=False, templates_mode=False):
fd.write('formdef-captcha-option = true\n')
fd.write('formdef-appearance-keywords = true\n')
fd.write('workflow-resubmit-action = true\n')
if lazy_mode:
fd.write('force-lazy-mode = true\n')
if sql_mode:
fd.write('postgresql = true\n')

View File

@ -104,7 +104,9 @@ class Substitutions(object):
def get_context_variables(self, mode=None):
if self._forced_mode:
mode = self._forced_mode
lazy = mode in get_publisher().get_lazy_variables_modes() if mode else False
lazy = get_publisher().has_site_option('force-lazy-mode')
if not lazy and mode:
lazy = mode in get_publisher().get_lazy_variables_modes()
d = getattr(self, '_cache_context_variables%r' % lazy, None)
if d is not None:
return d