packages
parent
23b7799aef
commit
85d7744ef0
@ -1,26 +1,245 @@
|
|||||||
from calculate.templates.template_engine import TemplateEngine, Variables,\
|
from calculate.templates.template_engine import TemplateEngine, Variables,\
|
||||||
ConditionFailed, DIR, FILE
|
FILE, DIR, LINK,\
|
||||||
|
ParametersProcessor
|
||||||
from calculate.templates.template_processor import TemplateAction
|
from calculate.templates.template_processor import TemplateAction
|
||||||
|
import shutil
|
||||||
|
import os
|
||||||
|
|
||||||
template_text = '''{% calculate append = 'join', path = '/etc/file.conf' %}
|
template_text = '''{% calculate append = 'join' -%}
|
||||||
{% calculate package = "dev-lang/python" %}
|
{% calculate package = 'dev-lang/python', format = 'samba' -%}
|
||||||
{% calculate name = 'filename', format = 'samba' %}
|
|
||||||
[section one]
|
[section one]
|
||||||
parameter_1 = value_1
|
parameter_1 = {{ vars_1.value_1 }}
|
||||||
!parameter_2 = value_2
|
!parameter_2
|
||||||
|
'''
|
||||||
|
|
||||||
|
backup_template_text = '''{% calculate append = 'join' -%}
|
||||||
|
[section one]
|
||||||
|
parameter_1 = value
|
||||||
|
parameter_2 = value_2
|
||||||
'''
|
'''
|
||||||
|
|
||||||
APPENDS_SET = TemplateAction().available_appends
|
APPENDS_SET = TemplateAction().available_appends
|
||||||
|
|
||||||
template_engine = TemplateEngine(appends_set=APPENDS_SET)
|
vars_1 = Variables({'value_1': 'value_1'})
|
||||||
template_engine.process_template_from_string(template_text, FILE)
|
DATAVARS_MODULE = Variables({'vars_1': vars_1})
|
||||||
template_parameters = template_engine.parameters
|
|
||||||
target_path = '/etc/dir/file.conf'
|
CHROOT_PATH = os.path.join(os.getcwd(), 'tests/templates/testfiles/test_root')
|
||||||
|
|
||||||
|
template_engine = TemplateEngine(datavars_module=DATAVARS_MODULE,
|
||||||
|
appends_set=APPENDS_SET,
|
||||||
|
chroot_path=CHROOT_PATH)
|
||||||
|
|
||||||
|
target_path = os.path.join(CHROOT_PATH,
|
||||||
|
'etc/dir/file.conf')
|
||||||
|
|
||||||
|
|
||||||
|
class TemplateActionError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class TargetFile:
|
||||||
|
type_checks = {DIR: os.path.isdir,
|
||||||
|
FILE: os.path.isfile,
|
||||||
|
LINK: os.path.islink}
|
||||||
|
|
||||||
|
def __init__(self, target_file_path, template_type, package=None):
|
||||||
|
self._file_path = target_file_path
|
||||||
|
self._package = package
|
||||||
|
|
||||||
|
if not os.path.exists(target_file_path):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def check_conflicts(self, parameters):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class TemplateActionDraft:
|
||||||
|
def __init__(self, datavars_module=Variables(), chroot_path='/'):
|
||||||
|
self.datavars_module = datavars_module
|
||||||
|
|
||||||
|
self.chroot_path = chroot_path
|
||||||
|
|
||||||
|
self.directory_default_parameters =\
|
||||||
|
ParametersProcessor.directory_default_parameters
|
||||||
|
|
||||||
|
self.file_default_parameters =\
|
||||||
|
ParametersProcessor.file_default_parameters
|
||||||
|
|
||||||
|
self.directory_appends = {'join': self._append_join_directory,
|
||||||
|
'remove': self._append_remove_directory,
|
||||||
|
'clear': self._append_clear_directory}
|
||||||
|
|
||||||
|
self.file_appends = {'join': self._append_join_file}
|
||||||
|
|
||||||
|
self.formats_classes = ParametersProcessor.available_formats
|
||||||
|
|
||||||
|
def use_directory_template(self, target_path, parameters):
|
||||||
|
print('Template parameters:')
|
||||||
|
parameters.print_parameters_for_debug()
|
||||||
|
|
||||||
|
self.template_parameters = parameters
|
||||||
|
self.directory_appends[self.template_parameters.append](target_path)
|
||||||
|
|
||||||
|
def use_file_template(self, target_path, parameters, template_text=''):
|
||||||
|
print('Template parameters:')
|
||||||
|
parameters.print_parameters_for_debug()
|
||||||
|
|
||||||
|
self.template_parameters = parameters
|
||||||
|
self.template_text = template_text
|
||||||
|
|
||||||
|
self.file_appends[self.template_parameters.append](target_path)
|
||||||
|
|
||||||
def use_template(target_path, parameters, chroot_path):
|
def _append_join_directory(self, target_path):
|
||||||
print('Template parameters:')
|
print("append = 'join'")
|
||||||
parameters.print_parameters_for_debug()
|
if os.access(target_path, os.F_OK):
|
||||||
|
if self.template_parameters.chmod:
|
||||||
|
self.chmod_directory(target_path)
|
||||||
|
|
||||||
|
if self.template_parameters.chown:
|
||||||
|
self.chown_directory(target_path)
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
directories_to_create = [target_path]
|
||||||
|
directory_path = os.path.dirname(target_path)
|
||||||
|
|
||||||
|
while not os.access(directory_path, os.F_OK) and directory_path:
|
||||||
|
directories_to_create.append(directory_path)
|
||||||
|
directory_path = os.path.dirname(directory_path)
|
||||||
|
|
||||||
|
try:
|
||||||
|
current_mod, current_uid, current_gid = self.get_file_info(
|
||||||
|
directory_path,
|
||||||
|
'all')
|
||||||
|
current_owner = {'uid': current_uid, 'gid': current_gid}
|
||||||
|
except OSError:
|
||||||
|
raise TemplateActionError('No access to the directory: {}'.format(
|
||||||
|
directory_path))
|
||||||
|
|
||||||
|
directories_to_create.reverse()
|
||||||
|
|
||||||
|
for create_path in directories_to_create:
|
||||||
|
try:
|
||||||
|
os.mkdir(create_path)
|
||||||
|
|
||||||
|
if (self.template_parameters.chmod and
|
||||||
|
self.template_parameters.chmod != current_mod):
|
||||||
|
self.chmod_directory(create_path)
|
||||||
|
elif 'chmod' in self.directory_default_parameters:
|
||||||
|
self.chmod_directory(
|
||||||
|
create_path,
|
||||||
|
chmod_value=self.directory_default_parameters['chown'])
|
||||||
|
|
||||||
|
if (self.template_parameters.chown and
|
||||||
|
self.template_parameters.chown != current_owner):
|
||||||
|
self.chown_directory
|
||||||
|
elif 'chown' in self.directory_default_parameters:
|
||||||
|
self.chown_directory(
|
||||||
|
create_path,
|
||||||
|
chown_value=self.directory_default_parameters['chmod'])
|
||||||
|
|
||||||
|
except OSError as error:
|
||||||
|
raise TemplateActionError(
|
||||||
|
'Failed to create directory: {}, reason: {}'.
|
||||||
|
format(create_path, str(error)))
|
||||||
|
|
||||||
|
def _append_remove_directory(self, target_path):
|
||||||
|
print("append = 'remove'")
|
||||||
|
if os.path.isdir(target_path) or os.path.exists(target_path):
|
||||||
|
try:
|
||||||
|
if os.path.islink(target_path):
|
||||||
|
os.unlink(target_path)
|
||||||
|
else:
|
||||||
|
shutil.rmtree(target_path)
|
||||||
|
return True
|
||||||
|
except Exception as error:
|
||||||
|
self.output.set_error("Failed to delete the directory: {}".
|
||||||
|
format(target_path))
|
||||||
|
self.output.set_error("Reason: {}".
|
||||||
|
format(str(error)))
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
self.output.set_error("Failed to delete the directory: {}".
|
||||||
|
format(target_path))
|
||||||
|
self.output.set_error(
|
||||||
|
"Target file is not directory or not exists.".
|
||||||
|
format(target_path))
|
||||||
|
return False
|
||||||
|
|
||||||
|
def _append_clear_directory(self, target_path):
|
||||||
|
print("append = 'clear'")
|
||||||
|
if os.path.isdir(target_path):
|
||||||
|
if os.path.exists(target_path):
|
||||||
|
try:
|
||||||
|
if os.path.islink(target_path):
|
||||||
|
os.unlink(target_path)
|
||||||
|
else:
|
||||||
|
shutil.rmtree(target_path)
|
||||||
|
return
|
||||||
|
except Exception as error:
|
||||||
|
raise TemplateActionError(
|
||||||
|
("Failed to delete the directory: {},"
|
||||||
|
"reason: {}").format(target_path,
|
||||||
|
str(error)))
|
||||||
|
else:
|
||||||
|
error_message = "target directory does not exist"
|
||||||
|
else:
|
||||||
|
error_message = "target file is not directory"
|
||||||
|
|
||||||
|
raise TemplateActionError(
|
||||||
|
"Failed to delete the directory: {}, reason: {}.".
|
||||||
|
format(target_path, error_message))
|
||||||
|
|
||||||
|
def _append_skip_directory(self, target_path):
|
||||||
|
print("append = 'skip'")
|
||||||
|
return
|
||||||
|
|
||||||
|
def _append_join_file(self, target_path):
|
||||||
|
print("append = 'join'")
|
||||||
|
if not self.template_parameters.format:
|
||||||
|
print('Format not defined.')
|
||||||
|
return
|
||||||
|
|
||||||
|
format_class = self.formats_classes[self.template_parameters.format]
|
||||||
|
|
||||||
|
if os.path.exists(target_path):
|
||||||
|
with open(target_path, 'r') as original_file:
|
||||||
|
original_file_text = original_file.read()
|
||||||
|
print('ORIGINAL:')
|
||||||
|
print(original_file_text)
|
||||||
|
else:
|
||||||
|
open(target_path, 'w').close()
|
||||||
|
original_file_text = ''
|
||||||
|
|
||||||
|
original_object = format_class(original_file_text)
|
||||||
|
template_object = format_class(self.template_text)
|
||||||
|
|
||||||
|
print('TEMPLATE:')
|
||||||
|
print(self.template_text)
|
||||||
|
|
||||||
|
original_object.join_template(template_object)
|
||||||
|
|
||||||
|
print('RESULT:')
|
||||||
|
print(original_object.document_text)
|
||||||
|
|
||||||
|
def _append_clear_file(self, target_path):
|
||||||
|
print("append = 'clear'")
|
||||||
|
try:
|
||||||
|
with open(target_path, 'w') as file:
|
||||||
|
file.truncate(0)
|
||||||
|
except IOError:
|
||||||
|
raise TemplateActionError("Failed to clear the file: {}".
|
||||||
|
format(target_path))
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
template_engine.process_template_from_string(template_text, FILE)
|
||||||
|
template_parameters = template_engine.parameters
|
||||||
|
template_text = template_engine.template_text
|
||||||
|
|
||||||
|
template_action_obj = TemplateActionDraft(datavars_module=DATAVARS_MODULE,
|
||||||
|
chroot_path=CHROOT_PATH)
|
||||||
|
|
||||||
use_template(target_path, template_parameters)
|
result = template_action_obj.use_file_template(target_path,
|
||||||
|
template_parameters,
|
||||||
|
template_text=template_text)
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
[section one]
|
||||||
|
parameter_1 = value
|
||||||
|
|
||||||
|
[section two]
|
||||||
|
parameter_3 = value_3
|
Loading…
Reference in new issue