Now scripts namespace is inherited by templates as their env parameter. fixed #13

master
Иванов Денис 3 years ago
parent 841adf07d9
commit 44c3ff8f9f

@ -308,6 +308,7 @@ class RunTemplate:
package=self._package,
output_module=output,
dbpkg=self._dbpkg,
namespace=namespace,
**self._groups)
changed_files = template_processor.process_template_directories()
self._create_result_var(script_namespace,

@ -787,7 +787,6 @@ class ParametersProcessor:
def resolve_or_missing(context, key, missing=missing, env={}):
'''Переопределение функции из для поиска значений переменных из jinja2.
Ищет переменные в datavars.'''
print('looking for:', key)
datavars = context.parent['__datavars__']
if key in context.vars:
@ -800,7 +799,6 @@ def resolve_or_missing(context, key, missing=missing, env={}):
return datavars[key]
for namespace in env:
print(namespace)
if key in namespace:
return namespace[key]

@ -1980,9 +1980,12 @@ class DirectoryProcessor:
for node in entries:
self.directory_tree = {}
parameters = ParametersContainer()
if self._namespace:
parameters.set_inheritable({'env': {self._namespace}})
self._walk_directory_tree(node.path,
self.templates_root,
ParametersContainer(),
parameters,
directory_tree=self.directory_tree,
package=package)
@ -2021,15 +2024,21 @@ class DirectoryProcessor:
with self._start_handling(handler):
if handler_type is DIR:
self.directory_tree = {}
parameters = ParametersContainer()
if self._namespace:
parameters.set_inheritable({'env': {self._namespace}})
self._walk_directory_tree(
handler_path,
self.templates_root,
ParametersContainer(),
parameters,
directory_tree=self.directory_tree)
elif handler_type is FILE:
handler_dir, handler_name = os.path.split(handler_path)
self.template_engine.change_directory(handler_dir)
parameters = ParametersContainer()
if self._namespace:
parameters.set_inheritable({'env': {self._namespace}})
handler_text = self._parse_template(parameters,
handler_name,
@ -2099,9 +2108,12 @@ class DirectoryProcessor:
directory_tree = self.packages_file_trees[self.for_package].\
get_directory_tree(directory_name)
parameters = ParametersContainer()
if self._namespace:
parameters.set_inheritable({'env': {self._namespace}})
self._walk_directory_tree(directory_tree.base_directory,
self.templates_root,
ParametersContainer(),
parameters,
directory_tree=directory_tree,
package=package)

@ -835,6 +835,9 @@ class NamespaceNode:
def __repr__(self):
return '<Namespace: {}>'.format(self.get_fullname())
def __deepcopy__(self, memo):
return self
class DependenceAPI(metaclass=Singleton):
'''Класс образующий интерфейс для создания зависимостей.'''

@ -1895,6 +1895,9 @@ class TestTasks():
def test_run_templates_using_script_and_namespace_is_set(self):
datavars = Datavars(variables_path=os.path.join(TESTFILES_PATH,
'variables'))
assert 'linux' in datavars.os
assert 'test_3' in datavars.os.linux
Script('test_script',
).tasks(RunTemplate(id="templates_1",
action='action_2',

@ -1,4 +1,4 @@
{% calculate append = "join", format = "kde" %}
[section][first]
parameter_1 = value
parameter_1 = {{ linux.test_3 }}
parameter_2 = no

@ -1,5 +1,5 @@
import os
from calculate.variables.datavars import Variable, StringType
from calculate.variables.datavars import Variable, StringType, ListType
TESTFILES_PATH = os.path.join(os.getcwd(), 'tests/scripts/testfiles')
@ -10,3 +10,5 @@ Variable('cl_root_path', type=StringType.readonly, source='/')
Variable('cl_template_path', type=StringType.readonly,
source=os.path.join(TESTFILES_PATH, 'templates'))
Variable('cl_ignore_files', type=ListType, source=['*.swp'])

Loading…
Cancel
Save