Added processing template files from template base directory. fixed #32

master
root 3 years ago
parent dca33902d9
commit 462a1e37f5

@ -2232,14 +2232,29 @@ class DirectoryProcessor:
self.base_directory = directory_path.strip()
entries = os.scandir(self.base_directory)
files: list = []
directories: list = []
for node in entries:
if node.is_file():
continue
if (node.name != ".calculate_directory" and
self._check_file_name(node.name)):
files.append(node.name)
elif node.is_dir():
directories.append(node.path)
self.directory_tree = {}
self._run_template_from_base_directory(
files, self.base_directory,
package=package,
directory_tree=self.directory_tree)
for directory_path in directories:
self.directory_tree = {}
parameters = ParametersContainer()
if self._namespace:
parameters.set_inheritable({'env': {self._namespace}})
self._walk_directory_tree(node.path,
self._walk_directory_tree(directory_path,
self.templates_root,
parameters,
directory_tree=self.directory_tree,
@ -2262,6 +2277,82 @@ class DirectoryProcessor:
self.template_executor.save_changes()
return self.template_executor.changed_files
def _run_template_from_base_directory(
self, template_names: List[str],
base_directory: str,
package: Union[Package, None] = None,
directory_tree: Union[dict, None] = None
) -> None:
'''Метод для запуска шаблонов файлов находящихся в базовой директории.
'''
self.template_engine.change_directory(base_directory)
for template_name in template_names:
template_path = join_paths(base_directory, template_name)
target_path = join_paths(self.templates_root, template_name)
parameters = ParametersContainer()
if self._namespace:
parameters.set_inheritable({'env': {self._namespace}})
template_text = self._parse_template(parameters,
template_name,
FILE, base_directory)
if template_text is False:
continue
if not self._check_package_and_action(
parameters,
template_path,
directory_tree=directory_tree):
if parameters.handler:
# Если директория шаблонов является обработчиком --
# добавляем ее в словарь обработчиков и пропускаем ее.
self._handlers.update({parameters.handler:
(FILE, template_path)})
self._update_package_tree(parameters.package,
directory_tree)
continue
# Если есть параметр merge добавляем его содержимое в список
# пакетов для последующей обработки.
if self.for_package and parameters.merge:
for pkg in parameters.merge:
if pkg not in self.processed_packages:
self.packages_to_merge.add(pkg)
# Если присутствует параметр notify, в котором указаны хэндлеры для
# последующего выполнения -- добавляем их в очередь.
if parameters.notify:
for handler_id in parameters.notify:
if handler_id not in self._handlers_queue:
self._handlers_queue.append(handler_id)
# Корректируем путь к целевому файлу.
target_path = self._make_target_path(target_path,
template_name,
parameters)
if parameters.package:
template_package = Package(parameters.package,
chroot_path=self.cl_chroot_path)
else:
template_package = package
if not parameters.run and not parameters.exec:
if not parameters.format:
parameters.set_parameter({'format': 'raw'})
if not parameters.append:
if parameters.format == "raw":
parameters.set_parameter({'append': 'replace'})
else:
parameters.set_parameter({'append': 'join'})
if parameters.append != 'skip':
# Выполняем действия, указанные в шаблоне.
self._execute_template(target_path, parameters,
FILE, template_path,
template_text=template_text,
package=template_package)
def _execute_handlers(self) -> None:
'''Метод для запуска обработчиков добавленных в очередь обработчиков
с помощью параметра notify.'''
@ -2619,8 +2710,8 @@ class DirectoryProcessor:
template_package = package
if template_parameters.package:
if (template_package is None or
package.package_name != directory_parameters.package):
template_package = Package(directory_parameters.package,
package.package_name != template_parameters.package):
template_package = Package(template_parameters.package,
chroot_path=self.cl_chroot_path)
if not template_parameters.run and not template_parameters.exec:

@ -1715,6 +1715,18 @@ class TestDirectoryProcessor:
'/etc/dir_78/file_1')).st_mode
assert int(mode) == 0o100655
def test_using_file_templates_from_base_directory(self):
datavars.main['cl_template_path'] = os.path.join(CHROOT_PATH,
'templates_61')
directory_processor = DirectoryProcessor('install',
datavars_module=datavars
)
directory_processor.process_template_directories()
assert os.path.exists(join_paths(CHROOT_PATH, '/etc/file_21'))
assert os.path.exists(join_paths(CHROOT_PATH, '/etc/file_22'))
def test_view_tree(self):
list_path = join_paths(CHROOT_PATH, '/etc')
show_tree(list_path)

@ -0,0 +1,3 @@
{% calculate package = 'test-category/test-package', append = "join",
action = "install" %}
enter shikari -- sorry, you are not a winner

@ -0,0 +1,2 @@
{% calculate package = 'test-category/test-package', append = "join" %}
enter shikari -- return to energiser
Loading…
Cancel
Save