|
|
|
@ -1689,13 +1689,13 @@ class DirectoryProcessor:
|
|
|
|
|
self.template_paths = self.datavars_module.main.cl_template_path
|
|
|
|
|
|
|
|
|
|
# Список обработанных пакетов.
|
|
|
|
|
self.processed_packages = []
|
|
|
|
|
self.processed_packages = set()
|
|
|
|
|
|
|
|
|
|
# Список пакетов, взятый из значений параметра merge.
|
|
|
|
|
self.packages_to_merge = []
|
|
|
|
|
self.packages_to_merge = set()
|
|
|
|
|
|
|
|
|
|
# Словарь для хранения деревьев директорий для различных пакетов.
|
|
|
|
|
self.packages_file_trees = {}
|
|
|
|
|
self.packages_file_trees = OrderedDict()
|
|
|
|
|
|
|
|
|
|
# Список обработчиков.
|
|
|
|
|
self._handlers = {}
|
|
|
|
@ -1764,7 +1764,7 @@ class DirectoryProcessor:
|
|
|
|
|
|
|
|
|
|
if self.for_package:
|
|
|
|
|
self.output.set_info('Processing packages from merge parameter...')
|
|
|
|
|
self.processed_packages.append(self.for_package)
|
|
|
|
|
self.processed_packages.add(self.for_package)
|
|
|
|
|
self._merge_packages()
|
|
|
|
|
|
|
|
|
|
if self._handlers_queue:
|
|
|
|
@ -1829,9 +1829,18 @@ class DirectoryProcessor:
|
|
|
|
|
'''Метод для выполнения шаблонов относящихся к пакетам, указанным во
|
|
|
|
|
всех встреченных значениях параметра merge.'''
|
|
|
|
|
not_merged_packages = []
|
|
|
|
|
founded_packages = iter(self.packages_file_trees.keys())
|
|
|
|
|
|
|
|
|
|
while self.packages_to_merge:
|
|
|
|
|
self.for_package = self.packages_to_merge.pop()
|
|
|
|
|
self.for_package = next(founded_packages, None)
|
|
|
|
|
|
|
|
|
|
if self.for_package is None:
|
|
|
|
|
# Если список найденных пакетов пройден, но пакеты для
|
|
|
|
|
# настройки еще есть -- заново проходимся по списку.
|
|
|
|
|
founded_packages = iter(self.packages_file_trees.keys())
|
|
|
|
|
continue
|
|
|
|
|
elif self.for_package not in self.packages_to_merge:
|
|
|
|
|
continue
|
|
|
|
|
self.template_engine.for_package = self.for_package
|
|
|
|
|
|
|
|
|
|
if self.for_package not in self.packages_file_trees:
|
|
|
|
@ -1856,11 +1865,12 @@ class DirectoryProcessor:
|
|
|
|
|
directory_tree=directory_tree,
|
|
|
|
|
package=package)
|
|
|
|
|
|
|
|
|
|
self.processed_packages.append(self.for_package)
|
|
|
|
|
self.processed_packages.add(self.for_package)
|
|
|
|
|
self.packages_to_merge.remove(self.for_package)
|
|
|
|
|
|
|
|
|
|
if not_merged_packages:
|
|
|
|
|
self.output.set_error('Packages {} is not merged.'.
|
|
|
|
|
format(','.join(self.packages_to_merge)))
|
|
|
|
|
format(','.join(not_merged_packages)))
|
|
|
|
|
else:
|
|
|
|
|
self.output.set_success('All packages are merged.')
|
|
|
|
|
|
|
|
|
@ -1922,6 +1932,8 @@ class DirectoryProcessor:
|
|
|
|
|
self.template_engine.change_directory(current_directory_path)
|
|
|
|
|
template_directories, template_files = self._scan_directory(
|
|
|
|
|
current_directory_path)
|
|
|
|
|
template_files = sorted(template_files)
|
|
|
|
|
print('template files:', template_files)
|
|
|
|
|
|
|
|
|
|
# обрабатываем в первую очередь шаблон директории.
|
|
|
|
|
if '.calculate_directory' in template_files:
|
|
|
|
@ -1979,7 +1991,9 @@ class DirectoryProcessor:
|
|
|
|
|
# Если есть параметр merge -- сохраняем присутствующие в нем пакеты
|
|
|
|
|
# для последующей обработки.
|
|
|
|
|
if self.for_package and directory_parameters.merge:
|
|
|
|
|
self.packages_to_merge.extend(directory_parameters.merge)
|
|
|
|
|
for pkg in directory_parameters.merge:
|
|
|
|
|
if pkg not in self.processed_packages:
|
|
|
|
|
self.packages_to_merge.add(pkg)
|
|
|
|
|
|
|
|
|
|
if directory_parameters.notify:
|
|
|
|
|
for handler_id in directory_parameters.notify:
|
|
|
|
@ -2026,6 +2040,9 @@ class DirectoryProcessor:
|
|
|
|
|
|
|
|
|
|
# Просто псевдоним, чтобы меньше путаницы было далее.
|
|
|
|
|
template_parameters = directory_parameters
|
|
|
|
|
print("\nLET'S USE TEMPLATE FILES: {}\n".format(template_files))
|
|
|
|
|
print("THIS PARAMETERS WOULD BE INHERITED BY TEMPLATE FILES:")
|
|
|
|
|
print(template_parameters)
|
|
|
|
|
|
|
|
|
|
# Обрабатываем файлы шаблонов.
|
|
|
|
|
for template_name in template_files:
|
|
|
|
@ -2056,6 +2073,17 @@ class DirectoryProcessor:
|
|
|
|
|
# добавляем ее в словарь обработчиков и пропускаем ее.
|
|
|
|
|
self._handlers.update({template_parameters.handler:
|
|
|
|
|
(FILE, template_path)})
|
|
|
|
|
print('SKIPPED:', template_path)
|
|
|
|
|
|
|
|
|
|
# * * * ПРИДУМАТЬ ОПТИМИЗАЦИЮ * * *
|
|
|
|
|
# TODO Потому что накладывать дерево каждый раз, когда
|
|
|
|
|
# обнаружены файлы какого-то пакета не рационально.
|
|
|
|
|
# Обновляем дерево директорий для данного пакета, если
|
|
|
|
|
# происходит его заполнение.
|
|
|
|
|
if self.fill_trees:
|
|
|
|
|
self._update_package_tree(template_parameters.package,
|
|
|
|
|
directory_tree[directory_name])
|
|
|
|
|
directory_tree[directory_name] = {}
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
if self._handling is not None and template_parameters.handler:
|
|
|
|
@ -2068,7 +2096,9 @@ class DirectoryProcessor:
|
|
|
|
|
# Если есть параметр merge добавляем его содержимое в список
|
|
|
|
|
# пакетов для последующей обработки.
|
|
|
|
|
if self.for_package and template_parameters.merge:
|
|
|
|
|
self.packages_to_merge.extend(template_parameters.merge)
|
|
|
|
|
for pkg in template_parameters.merge:
|
|
|
|
|
if pkg not in self.processed_packages:
|
|
|
|
|
self.packages_to_merge.add(pkg)
|
|
|
|
|
|
|
|
|
|
if template_parameters.notify:
|
|
|
|
|
for handler_id in template_parameters.notify:
|
|
|
|
@ -2098,16 +2128,6 @@ class DirectoryProcessor:
|
|
|
|
|
if not target_file_path:
|
|
|
|
|
continue
|
|
|
|
|
|
|
|
|
|
# * * * ПРИДУМАТЬ ОПТИМИЗАЦИЮ * * *
|
|
|
|
|
# TODO Потому что накладывать дерево каждый раз, когда обнаружены
|
|
|
|
|
# файлы какого-то пакета не рационально.
|
|
|
|
|
# Обновляем дерево директорий для данного пакета, если происходит
|
|
|
|
|
# его заполнение.
|
|
|
|
|
if self.fill_trees:
|
|
|
|
|
self._update_package_tree(template_parameters.package,
|
|
|
|
|
directory_tree[directory_name])
|
|
|
|
|
directory_tree[directory_name] = {}
|
|
|
|
|
|
|
|
|
|
# Проходимся далее по директориям.
|
|
|
|
|
for directory in template_directories:
|
|
|
|
|
if self.fill_trees:
|
|
|
|
@ -2309,9 +2329,6 @@ class DirectoryProcessor:
|
|
|
|
|
дерево каталогов, то в случае несовпадения значений package для файла
|
|
|
|
|
или директории, им в дереве присваивается значение None.'''
|
|
|
|
|
if parameters.handler:
|
|
|
|
|
print('\nHANDLER WAS FOUND:', template_path)
|
|
|
|
|
print('NOW HANDLERS:', *list(self._handlers.keys()))
|
|
|
|
|
print()
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
if parameters.append != 'skip' or parameters.action:
|
|
|
|
@ -2340,9 +2357,12 @@ class DirectoryProcessor:
|
|
|
|
|
|
|
|
|
|
elif parameters.package != self.for_package:
|
|
|
|
|
if directory_tree is not None:
|
|
|
|
|
print('IS ADDED TO TREE')
|
|
|
|
|
template_name = os.path.basename(template_path)
|
|
|
|
|
directory_tree[template_name] = None
|
|
|
|
|
|
|
|
|
|
print('CURRENT TREE:', self.directory_tree)
|
|
|
|
|
else:
|
|
|
|
|
print('IS NOT ADDED TO TREE')
|
|
|
|
|
self.output.set_warning(
|
|
|
|
|
("'package' parameter value '{0}' does not "
|
|
|
|
|
"match its current target package '{1}'. "
|
|
|
|
|