@ -1,7 +1,8 @@
# vim: fileencoding=utf-8
# vim: fileencoding=utf-8
#
#
from pprint import pprint
from pprint import pprint
from . . utils . package import PackageAtomParser , Package , PackageNotFound
from . . utils . package import PackageAtomParser , Package , PackageNotFound , \
PackageAtomName
from . . utils . files import join_paths , write_file , read_file_lines , FilesError , \
from . . utils . files import join_paths , write_file , read_file_lines , FilesError , \
check_directory_link , read_link , Process , \
check_directory_link , read_link , Process , \
get_target_from_link
get_target_from_link
@ -330,9 +331,11 @@ class TemplateWrapper:
parameter_package = None
parameter_package = None
if self . target_type is not None :
if self . target_type is not None :
print ( ' looking for package for file: {} ' . format ( self . target_path ) )
try :
try :
file_package = self . package_atom_parser . get_file_package (
file_package = self . package_atom_parser . get_file_package (
self . target_path )
self . target_path )
print ( ' package is found: {} ' . format ( file_package ) )
except PackageNotFound :
except PackageNotFound :
file_package = None
file_package = None
self . target_without_package = True
self . target_without_package = True
@ -569,8 +572,8 @@ class TemplateWrapper:
def save_changes ( self ) :
def save_changes ( self ) :
''' Метод для сохранения изменений внесенных в CONTENTS. '''
''' Метод для сохранения изменений внесенных в CONTENTS. '''
print ( ' in save changes method ' )
if self . target_package :
if self . target_package :
print ( ' SAVING TO CONTENTS: {} ' . format ( self . target_package ) )
self . target_package . remove_empty_directories ( )
self . target_package . remove_empty_directories ( )
self . target_package . write_contents_file ( )
self . target_package . write_contents_file ( )
@ -634,8 +637,6 @@ class TemplateExecutor:
target_package = None ) :
target_package = None ) :
''' Метод для запуска выполнения шаблонов. '''
''' Метод для запуска выполнения шаблонов. '''
# Словарь с данными о результате работы исполнительного метода.
# Словарь с данными о результате работы исполнительного метода.
print ( ' PARAMETERS: {} ' . format ( parameters ) )
print ( ' PACKAGE: {} ' . format ( target_package ) )
self . executor_output = { ' target_path ' : None ,
self . executor_output = { ' target_path ' : None ,
' stdout ' : None ,
' stdout ' : None ,
' stderr ' : None }
' stderr ' : None }
@ -658,6 +659,7 @@ class TemplateExecutor:
# Удаляем оригинал, если это необходимо из-за наличия force или по
# Удаляем оригинал, если это необходимо из-за наличия force или по
# другим причинам.
# другим причинам.
if template_object . remove_original :
if template_object . remove_original :
print ( ' REMOVE ORIGINAL ' )
if template_object . target_type == DIR :
if template_object . target_type == DIR :
self . _remove_directory ( template_object . target_path )
self . _remove_directory ( template_object . target_path )
else :
else :
@ -788,7 +790,6 @@ class TemplateExecutor:
output_path = template_object . output_path
output_path = template_object . output_path
template_format = template_object . format_class
template_format = template_object . format_class
print ( ' JOIN FILE ' )
# Задаемся значениями chmod и chown в зависимости от наличия или
# Задаемся значениями chmod и chown в зависимости от наличия или
# отсутствия файла, принадлежности е г о пакету и наличия значений
# отсутствия файла, принадлежности е г о пакету и наличия значений
@ -810,16 +811,13 @@ class TemplateExecutor:
chown = self . file_default_parameters . get ( ' chown ' , False )
chown = self . file_default_parameters . get ( ' chown ' , False )
if template_format . EXECUTABLE or template_object . md5_matching :
if template_format . EXECUTABLE or template_object . md5_matching :
print ( ' MD5 MATCHES ' )
# Действия при совпадении md5 из CONTENTS и md5 целевого файла.
# Действия при совпадении md5 из CONTENTS и md5 целевого файла.
# А также если шаблон просто исполнительный.
# А также если шаблон просто исполнительный.
output_paths = [ output_path ]
output_paths = [ output_path ]
# Если целевой файл защищен, а шаблон не userspace.
# Если целевой файл защищен, а шаблон не userspace.
print ( ' PROTECTED: {} ' . format ( template_object . _protected_set ) )
if template_object . protected and not template_object . is_userspace :
if template_object . protected and not template_object . is_userspace :
# Тогда также обновляем архив.
# Тогда также обновляем архив.
print ( ' SAVE ARCHIVE: {} ' . format ( template_object . archive_path ) )
output_paths . append ( template_object . archive_path )
output_paths . append ( template_object . archive_path )
if template_object . target_type is not None and not replace :
if template_object . target_type is not None and not replace :
@ -827,17 +825,14 @@ class TemplateExecutor:
# текст целевого файла.
# текст целевого файла.
if ( not input_path . startswith ( self . cl_config_archive_path ) or
if ( not input_path . startswith ( self . cl_config_archive_path ) or
os . path . exists ( input_path ) ) :
os . path . exists ( input_path ) ) :
print ( ' INPUT FROM FILE ' )
# Если входной файл просто не из архива, или из архива и
# Если входной файл просто не из архива, или из архива и
# при этом существует -- используем е г о
# при этом существует -- используем е г о
with open ( input_path , ' r ' ) as input_file :
with open ( input_path , ' r ' ) as input_file :
input_text = input_file . read ( )
input_text = input_file . read ( )
else :
else :
print ( ' INPUT IS EMPTY ARCHIVE FILE ' )
# В противном случае используем пустой файл. (!)
# В противном случае используем пустой файл. (!)
input_text = ' '
input_text = ' '
else :
else :
print ( ' INPUT IS NEW EMPTY FILE ' )
input_text = ' '
input_text = ' '
parsed_template = template_format ( template_object . template_text ,
parsed_template = template_format ( template_object . template_text ,
@ -1584,12 +1579,17 @@ class DirectoryProcessor:
appends_set = self . template_executor . available_appends )
appends_set = self . template_executor . available_appends )
if package :
if package :
try :
if isinstance ( package , PackageAtomName ) :
self . for_package = self . template_engine . parameters_processor . \
self . for_package = package
check_package_parameter ( package )
elif isinstance ( package , str ) :
except ConditionFailed as error :
try :
self . output . set_error ( str ( error ) )
self . for_package = self . template_engine . \
return
parameters_processor . check_package_parameter ( package )
except ConditionFailed as error :
self . output . set_error ( str ( error ) )
return
else :
self . for_package = False
else :
else :
self . for_package = False
self . for_package = False
@ -1642,8 +1642,6 @@ class DirectoryProcessor:
for node in entries :
for node in entries :
self . directory_tree = { }
self . directory_tree = { }
print ( ' Empty parameters container: {} ' . format (
ParametersContainer ( ) ) )
self . walk_directory_tree ( node . path ,
self . walk_directory_tree ( node . path ,
self . cl_chroot_path ,
self . cl_chroot_path ,
ParametersContainer ( ) ,
ParametersContainer ( ) ,
@ -1690,7 +1688,7 @@ class DirectoryProcessor:
def get_directories_queue ( self , path ) :
def get_directories_queue ( self , path ) :
''' Уже не актуальный метод для построение очередей из путей к
''' Уже не актуальный метод для построение очередей из путей к
шаблонам . '''
шаблонам . Хотя возможно еще пригодится . '''
directories_queue = [ ]
directories_queue = [ ]
for base_dir in self . template_paths :
for base_dir in self . template_paths :
@ -1715,6 +1713,9 @@ class DirectoryProcessor:
def walk_directory_tree ( self , current_directory_path , target_path ,
def walk_directory_tree ( self , current_directory_path , target_path ,
directory_parameters , directory_tree = { } ) :
directory_parameters , directory_tree = { } ) :
''' Метод для рекурсивного обхода директорий с шаблонами, а также, при
необходимости , заполнения деревьев директорий шаблонов , с помощью
которых далее выполняются шаблоны пакетов из merge . '''
print ( ' current_directory: {} ' . format ( current_directory_path ) )
print ( ' current_directory: {} ' . format ( current_directory_path ) )
print ( ' fill trees = {} ' . format ( self . fill_trees ) )
print ( ' fill trees = {} ' . format ( self . fill_trees ) )
template_files = [ ]
template_files = [ ]
@ -1731,12 +1732,8 @@ class DirectoryProcessor:
self . template_engine . change_directory ( current_directory_path )
self . template_engine . change_directory ( current_directory_path )
for node in entries :
for node in entries :
print ( ' check: {} ' . format ( node . name ) )
if self . check_file_name ( node . name ) :
if self . check_file_name ( node . name ) :
print ( ' ignore it ' )
continue
continue
else :
print ( ' all is good ' )
if node . is_symlink ( ) :
if node . is_symlink ( ) :
self . output . set_warning ( ' symlink: {} is ignored ' .
self . output . set_warning ( ' symlink: {} is ignored ' .
@ -1757,13 +1754,13 @@ class DirectoryProcessor:
template_type = DIR ,
template_type = DIR ,
parameters = directory_parameters )
parameters = directory_parameters )
except ConditionFailed as error :
except ConditionFailed as error :
self . output . set_warning ( ' {} . \n Template: {} ' .
self . output . set_warning ( ' {} . Template: {} ' .
format ( str ( error ) ,
format ( str ( error ) ,
current_directory_path ) )
current_directory_path ) )
directory_tree = { }
directory_tree = { }
return
return
except Exception as error :
except Exception as error :
self . output . set_error ( ' Template error: {0} \n Template: {1} ' .
self . output . set_error ( ' Template error: {0} Template: {1} ' .
format ( str ( error ) ,
format ( str ( error ) ,
current_directory_path ) )
current_directory_path ) )
directory_tree = { }
directory_tree = { }
@ -1781,77 +1778,102 @@ class DirectoryProcessor:
current_target_path = join_paths ( self . cl_chroot_path ,
current_target_path = join_paths ( self . cl_chroot_path ,
directory_parameters . path )
directory_parameters . path )
if self . fill_trees and self . check_package_and_action (
# В зависимости от того, нужно ли нам заполнять дерево директорий,
directory_parameters ,
# отправляем в метод для проверки параметров package и action
current_directory_path ,
# или текущее дерево, или пустое значение.
directory_tree = directory_tree ) :
if self . fill_trees :
if not directory_parameters . append == ' skip ' :
tree_for_checker = directory_tree
current_target_path = os . path . join ( current_target_path ,
else :
directory_name )
tree_for_checker = None
elif not self . fill_trees and self . check_package_and_action (
directory_parameters ,
if self . check_package_and_action ( directory_parameters ,
current_directory_path ) :
current_directory_path ,
directory_tree = tree_for_checker ) :
# Если проверка параметров package и action пройдена и
# и параметр append не равен skip -- обновляем целевой путь
# именем текущей директории.
if not directory_parameters . append == ' skip ' :
if not directory_parameters . append == ' skip ' :
current_target_path = os . path . join ( current_target_path ,
current_target_path = os . path . join ( current_target_path ,
directory_name )
directory_name )
else :
else :
# Обновляем дерево директорий для данного пакета.
# Если проверка не пройдена, включено заполнение дерева, а
# метод для проверки заменил для текущей директории значение {}
# на None (являющейся для этого дерева заглушкой), то,
# используя нынешнее состояние дерева директорий, обновляем
# дерево пакета текущего шаблона директории.
if ( self . fill_trees and
if ( self . fill_trees and
directory_tree [ directory_name ] is None ) :
directory_tree [ directory_name ] is None ) :
package_name = directory_parameters . package
package_name = directory_parameters . package
if package_name in self . packages_file_trees :
if package_name in self . packages_file_trees :
# Если для данного пакета уже есть дерево --
# накладываем на него текущее.
self . packages_file_trees [ package_name ] . update_tree (
self . packages_file_trees [ package_name ] . update_tree (
copy . deepcopy ( self . directory_tree )
copy . deepcopy ( self . directory_tree )
)
)
else :
else :
# Если для данного пакета еще нет дерева --
# копируем для него текущее.
directory_tree = DirectoryTree ( self . base_directory )
directory_tree = DirectoryTree ( self . base_directory )
directory_tree . update_tree (
directory_tree . update_tree (
copy . deepcopy ( self . directory_tree ) )
copy . deepcopy ( self . directory_tree ) )
self . packages_file_trees [ package_name ] = directory_tree
self . packages_file_trees [ package_name ] = directory_tree
# Перед выходом из директории очищаем текущий уровень
# дерева.
directory_tree = { }
directory_tree = { }
return
return
# Если есть параметр merge -- сохраняем присутствующие в нем пакеты
# для последующей обработки.
if self . for_package and directory_parameters . merge :
if self . for_package and directory_parameters . merge :
self . packages_to_merge . extend ( directory_parameters . merge )
self . packages_to_merge . extend ( directory_parameters . merge )
else :
else :
# Если .calculate_directory отсутствует -- создаем директорию
# Если .calculate_directory отсутствует -- создаем директорию
# используя унаследованные параметры и имя самой директории.
# используя унаследованные параметры и имя самой директории.
if self . fill_trees :
tree_for_checker = directory_tree
else :
tree_for_checker = None
if not self . check_package_and_action (
if not self . check_package_and_action (
directory_parameters ,
directory_parameters ,
current_directory_path ,
current_directory_path ,
directory_tree = directory_tree ) :
directory_tree = tree_for_checker ) :
# Обновляем дерево директорий для данного пакета.
# Обновляем дерево директорий для данного пакета.
if ( directory_tree [ directory_name ] is None and
if ( directory_tree [ directory_name ] is None and
self . fill_trees ) :
self . fill_trees ) :
package_name = directory_parameters . package
package_name = directory_parameters . package
if package_name in self . packages_file_trees :
if package_name in self . packages_file_trees :
# Если для данного пакета уже есть дерево --
# накладываем на него текущее.
self . packages_file_trees [ package_name ] . update_tree (
self . packages_file_trees [ package_name ] . update_tree (
copy . deepcopy ( self . directory_tree )
copy . deepcopy ( self . directory_tree )
)
)
else :
else :
# Если для данного пакета еще нет дерева --
# копируем для него текущее.
directory_tree = DirectoryTree ( self . base_directory )
directory_tree = DirectoryTree ( self . base_directory )
directory_tree . update_tree (
directory_tree . update_tree (
copy . deepcopy ( self . directory_tree ) )
copy . deepcopy ( self . directory_tree ) )
self . packages_file_trees [ package_name ] = directory_tree
self . packages_file_trees [ package_name ] = directory_tree
# Перед выходом из директории очищаем текущий уровень
# дерева.
directory_tree = { }
directory_tree = { }
return
return
# Для того чтобы директория была создана просто добавляем параметр
# append = join.
directory_parameters . set_parameter ( { ' append ' : ' join ' } )
directory_parameters . set_parameter ( { ' append ' : ' join ' } )
current_target_path = os . path . join ( current_target_path ,
current_target_path = os . path . join ( current_target_path ,
directory_name )
directory_name )
# Выполняем действие с директорией.
# * * * МОЖНО ВЫДЕЛИТЬ В ОТДЕЛЬНЫЙ МЕТОД * * *
self . output . set_success ( ' Processing directory: {} ' .
# Выполняем наложение шаблона.
format ( current_directory_path ) )
print ( ' target_path: {} ' . format ( current_target_path ) )
try :
try :
output = self . template_executor . execute_template (
output = self . template_executor . execute_template (
current_target_path ,
current_target_path ,
directory_parameters ,
directory_parameters ,
DIR )
DIR )
# Если во время выполнения шаблона был изменен целевой путь,
# Если во время выполнения шаблона был изменен целевой путь,
# например, из-за ссылки на директорию в source -- обновляем
# например, из-за ссылки на директорию в source -- обновляем
# целевой путь.
# целевой путь.
@ -1860,27 +1882,34 @@ class DirectoryProcessor:
# Если есть вывод от параметра run -- выводим как info.
# Если есть вывод от параметра run -- выводим как info.
if output [ ' stdout ' ] is not None :
if output [ ' stdout ' ] is not None :
self . output . set_info ( " stdout from template: {} \n {} " . format (
self . output . set_info ( " stdout from template: {} : \n {} \n " . format (
current_directory_path ,
current_directory_path ,
output [ ' stdout ' ]
output [ ' stdout ' ]
) )
) )
# Если есть ошибки от параметра run -- выводим их как error
# Если есть ошибки от параметра run -- выводим их как error .
if output [ ' stderr ' ] is not None :
if output [ ' stderr ' ] is not None :
self . output . set_error ( " stderr from template: {} \n {} " .
self . output . set_error ( " stderr from template: {} : \n {} \n " .
format ( current_directory_path ,
format ( current_directory_path ,
output [ ' stderr ' ] ) )
output [ ' stderr ' ] ) )
# Если run выполнен с ошибками -- пропускаем директорию.
# Если run выполнен с ошибками -- пропускаем директорию.
return
return
except Template TypeConflict as error :
except Template ExecutorError as error :
self . output . set_error ( ' T ype conflict: {} \n Template: {} ' .
self . output . set_error ( ' T emplate execution error: {} Template: {} ' .
format ( str ( error ) ,
format ( str ( error ) ,
current_directory_path ) )
current_directory_path ) )
return
return
# Если режим заполнения очередей выключен и дерево, которое обходим в
self . output . set_success ( ' Processing directory: {} ' .
# данный момент еще не пусто -- используем имеющееся дерево для
format ( current_directory_path ) )
# получения списков обрабатываемых файлов и директорий.
# * * * МОЖНО ВЫДЕЛИТЬ В ОТДЕЛЬНЫЙ МЕТОД * * *
# Далее обрабатываем файлы шаблонов хранящихся в директории.
# Список файлов и директорий для дальнейшего обхода получаем из
# списоков полученных при начальном сканировании директории или,
# если в данный момент обходим дерево директорий, что можно определить
# по выключенному флагу fill_trees и по наличию дерева в переменной
# directory_tree, берем файлы и каталоги для обхода из дерева.
if not self . fill_trees and directory_tree :
if not self . fill_trees and directory_tree :
tree_files = [ ]
tree_files = [ ]
tree_directories = [ ]
tree_directories = [ ]
@ -1896,7 +1925,7 @@ class DirectoryProcessor:
template_files = tree_files
template_files = tree_files
template_directories = tree_directories
template_directories = tree_directories
# о брабатываем файлы шаблонов хранящихся в директории .
# О брабатываем файлы шаблонов.
for template_name in template_files :
for template_name in template_files :
# Удаляем все параметры, которые не наследуются и используем
# Удаляем все параметры, которые не наследуются и используем
# полученный контейнер для с б о р а параметров файлов шаблонов.
# полученный контейнер для с б о р а параметров файлов шаблонов.
@ -1910,43 +1939,44 @@ class DirectoryProcessor:
template_name , FILE ,
template_name , FILE ,
parameters = directory_parameters )
parameters = directory_parameters )
except ConditionFailed as error :
except ConditionFailed as error :
self . output . set_warning ( ' {0} . \n Template: {1} ' .
self . output . set_warning ( ' {0} . Template: {1} ' .
format ( str ( error ) ,
format ( str ( error ) ,
current_directory _path) )
template _path) )
continue
continue
except Exception as error :
except Exception as error :
self . output . set_error ( ' Template error: {0} \n Template: {1} ' .
self . output . set_error ( ' Template error: {0} Template: {1} ' .
format ( str ( error ) ,
format ( str ( error ) ,
current_directory _path) )
template _path) )
continue
continue
# directory_parameters.print_parameters_for_debug( )
directory_parameters . print_parameters_for_debug ( )
template_text = self . template_engine . template_text
template_text = self . template_engine . template_text
if self . fill_trees and not self . check_package_and_action (
# Если находимся на стадии заполнения дерева директорий --
# проверяем параметры package и action с заполнением дерева.
if self . fill_trees :
tree_for_checker = directory_tree [ directory_name ]
else :
tree_for_checker = None
# Проверяем параметры action и package.
if not self . check_package_and_action (
directory_parameters ,
directory_parameters ,
template_path ,
template_path ,
directory_tree = directory_tree [ directory_name ] ) :
directory_tree = tree_for_checker ) :
# Если находимся на стадии заполнения дерева директорий --
# проверяем параметры package и action с заполнением дерева.
continue
continue
elif not self . fill_trees and not self . check_package_and_action (
# Если есть параметр merge добавляем в список пакетов для
directory_parameters ,
# последующей обработки.
template_path ) :
# В противном случае проверяем без заполнения.
continue
# Если есть параметр merge добавляем в список
if self . for_package and directory_parameters . merge :
if self . for_package and directory_parameters . merge :
self . packages_to_merge . extend ( directory_parameters . merge )
self . packages_to_merge . extend ( directory_parameters . merge )
# Если для шаблона задано имя -- меняем е г о
# Если для шаблона задано имя -- меняем е г о .
if directory_parameters . name :
if directory_parameters . name :
template_name = directory_parameters . name
template_name = directory_parameters . name
# Если для шаблона задан путь -- меняем е г о
# Если для шаблона задан путь -- меняем е г о .
if directory_parameters . path :
if directory_parameters . path :
target_file_path = join_paths ( self . cl_chroot_path ,
target_file_path = join_paths ( self . cl_chroot_path ,
directory_parameters . path ,
directory_parameters . path ,
@ -1956,11 +1986,18 @@ class DirectoryProcessor:
template_name )
template_name )
# Выполняем действия, указанные в шаблоне.
# Выполняем действия, указанные в шаблоне.
output = self . template_executor . execute_template (
try :
target_file_path ,
output = self . template_executor . execute_template (
directory_parameters ,
target_file_path ,
FILE ,
directory_parameters ,
template_text = template_text )
FILE ,
template_text = template_text )
except TemplateExecutorError as error :
self . output . set_error (
' Template execution error: {0} Template: {1} ' .
format ( str ( error ) ,
template_path ) )
continue
# Если во время выполнения шаблона был изменен целевой путь,
# Если во время выполнения шаблона был изменен целевой путь,
# например, из-за ссылки на директорию в source -- обновляем
# например, из-за ссылки на директорию в source -- обновляем
@ -1986,22 +2023,25 @@ class DirectoryProcessor:
self . output . set_success ( ' Processed template: {} ... ' .
self . output . set_success ( ' Processed template: {} ... ' .
format ( template_path ) )
format ( template_path ) )
# Обновляем дерево директорий для данного пакета, если происходит
# Обновляем дерево директорий для данного пакета, если происходит
# е г о заполнение.
# е г о заполнение.
if ( self . fill_trees and directory_tree [ directory_name ] ) :
self . output . set_info ( " Let ' s update tree using current: {} " .
package_name = directory_parameters . package
format ( directory_tree ) )
if ( self . fill_trees and directory_tree [ directory_name ] ) :
package_name = directory_parameters . package
if package_name in self . packages_file_trees :
if package_name in self . packages_file_trees :
# Если для данного пакета дерево уже есть -- обновляем е г о .
# Если для данного пакета дерево уже есть -- обновляем е г о .
self . packages_file_trees [ package_name ] . update_tree (
self . packages_file_trees [ package_name ] . update_tree (
copy . deepcopy ( self . directory_tree ) )
copy . deepcopy ( self . directory_tree ) )
else :
else :
# Если нет создаем новое.
# Если нет создаем новое.
directory_tree = DirectoryTree ( self . base_directory )
directory_tree = DirectoryTree ( self . base_directory )
directory_tree . update_tree ( copy . deepcopy ( self . directory_tree ) )
directory_tree . update_tree ( copy . deepcopy (
self . packages_file_trees [ package_name ] = directory_tree
self . directory_tree ) )
self . packages_file_trees [ package_name ] = directory_tree
directory_tree [ directory_name ] = { }
directory_tree [ directory_name ] = { }
# проходимся далее по директориям.
# проходимся далее по директориям.
for directory in template_directories :
for directory in template_directories :
@ -2042,7 +2082,7 @@ class DirectoryProcessor:
elif parameters . action != self . action :
elif parameters . action != self . action :
self . output . set_warning (
self . output . set_warning (
( " Action parameter value ' {0} ' does not match its "
( " Action parameter value ' {0} ' does not match its "
" current value ' {1} ' . \n Template: {2} " ) . format (
" current value ' {1} ' . Template: {2} " ) . format (
parameters . action ,
parameters . action ,
self . action ,
self . action ,
template_path ) )
template_path ) )
@ -2051,21 +2091,25 @@ class DirectoryProcessor:
if self . for_package :
if self . for_package :
if not parameters . package :
if not parameters . package :
self . output . set_warning (
self . output . set_warning (
" ' package ' parameter is not defined. \n Template: {} " .
" ' package ' parameter is not defined. Template: {} " .
format ( template_path ) )
format ( template_path ) )
# считаем наличие параметра package необязательным на данном
# пока что считаем наличие параметра package необязательным
# этапе.
# return False
# return False
elif parameters . package != self . for_package :
elif parameters . package != self . for_package :
if directory_tree is not None :
if directory_tree is not None :
template_name = os . path . basename ( template_path )
template_name = os . path . basename ( template_path )
directory_tree [ template_name ] = None
directory_tree [ template_name ] = None
self . output . set_warning ( ' DirectoryTree: {} ' .
format ( directory_tree ) )
self . output . set_warning (
self . output . set_warning (
( " ' package ' parameter value ' {0} ' does not "
( " ' package ' parameter value ' {0} ' does not "
" match its current target package. \n Template: {1} " ) .
" match its current target package ' {1} ' . "
format ( parameters . package , template_path )
" Template: {2} " ) .
format ( parameters . package . atom ,
self . for_package . atom ,
template_path )
)
)
return False
return False