in automation/tincrepo/main/mpp/models/sql_tc.py [0:0]
def handle_templates(cls):
"""
This class method checks if any template directory exists.
If they do, copy/parse all the sql and ans directories to out_dir.
@rtype: boolean
@return: Return True, if templates are found. False, otherwise
"""
# Variables to store non-template directories
sql_dir = cls.get_sql_dir()
sql_setup_dir = os.path.join(sql_dir, "setup")
sql_teardown_dir = os.path.join(sql_dir, "teardown")
ans_dir = cls.get_ans_dir()
ans_setup_dir = os.path.join(ans_dir, "setup")
ans_teardown_dir = os.path.join(ans_dir, "teardown")
# Variables to store template directories
sql_template_dir = os.path.join(sql_dir, cls.template_dir)
sql_setup_template_dir = os.path.join(sql_setup_dir, cls.template_dir)
sql_teardown_template_dir = os.path.join(sql_teardown_dir, cls.template_dir)
ans_template_dir = os.path.join(ans_dir, cls.template_dir)
ans_setup_template_dir = os.path.join(ans_setup_dir, cls.template_dir)
ans_teardown_template_dir = os.path.join(ans_teardown_dir, cls.template_dir)
# Define a set for all template dir
# Check if any exists, while creating a set.
template_dir_set = set([sql_template_dir, sql_setup_template_dir, sql_teardown_template_dir, ans_template_dir, ans_setup_template_dir, ans_teardown_template_dir])
for each_dir in template_dir_set:
# Check if any of the template directory exists.
tinctest.logger.debug("Checking if directory %s exists..." % each_dir)
if os.path.exists(each_dir):
cls._template_exist = True
break
if not cls._template_exist:
# Nothing to do
tinctest.logger.debug("No template directories found.")
return False
####################################################
# If here, we have at least one template directory #
####################################################
# Define local variables to store all the out directories
# SQL files go in out/sql directory, and ans file go in out/ans directory
out_dir = cls.get_out_dir()
out_sql_dir = os.path.join(out_dir, cls.__name__, cls.sql_dir)
out_sql_setup_dir = os.path.join(out_dir, cls.__name__, cls.sql_dir, "setup")
out_sql_teardown_dir = os.path.join(out_dir, cls.__name__, cls.sql_dir, "teardown")
out_ans_dir = os.path.join(out_dir, cls.__name__, cls.ans_dir)
out_ans_setup_dir = os.path.join(out_dir, cls.__name__, cls.ans_dir, "setup")
out_ans_teardown_dir = os.path.join(out_dir, cls.__name__, cls.ans_dir, "teardown")
out_dir_set = sorted(set([out_sql_dir, out_sql_setup_dir, out_sql_teardown_dir, out_ans_dir, out_ans_setup_dir, out_ans_teardown_dir]))
tinctest.logger.debug("Templates are found. Copy or parse sql files/dirs to directory %s. Copy or parse ans files/dirs to directory %s" % (out_sql_dir, out_ans_dir))
for each_dir in out_dir_set:
if os.path.exists(each_dir):
tinctest.logger.warning("Directory %s already exists. Deleting it to start from scratch. Use different output directory to avoid this behavior!" % each_dir)
shutil.rmtree(each_dir, ignore_errors = True)
TINCSystem.make_dirs(each_dir, ignore_exists_error = True)
# Define several sets to store all the sql dirs, ans dirs, setup dirs, etc.
# Define sets for all sql and ans dirs
sql_dir_set = set([sql_dir, sql_setup_dir, sql_teardown_dir, sql_template_dir, sql_setup_template_dir, sql_teardown_template_dir])
ans_dir_set = set([ans_dir, ans_setup_dir, ans_teardown_dir, ans_template_dir, ans_setup_template_dir, ans_teardown_template_dir])
# Define sets for all setup and teardown dirs
setup_dir_set = set([sql_setup_dir, ans_setup_dir, sql_setup_template_dir, ans_setup_template_dir])
teardown_dir_set = set([sql_teardown_dir, ans_teardown_dir, sql_teardown_template_dir, ans_teardown_template_dir])
# Define a set for all dirs as union of sql and ans dir
dir_set = sql_dir_set.union(ans_dir_set)
# Type of files that will be copied or parsed
file_types = ["*.sql", "*.ans", "*.ans.orca", "*.ans.planner"]
# Go through each directory to either copy it or parse it
for each_dir in dir_set:
if not os.path.exists(each_dir):
continue
# SQL dir goes to out_dir/sql; ANS dir goes to out_dir/ans
destination_dir = out_sql_dir
if each_dir in ans_dir_set:
destination_dir = out_ans_dir
# Setup and Teardown files go in out/sql/setup, out/ans/teardown, etc.
if each_dir in setup_dir_set:
destination_dir = os.path.join(destination_dir, 'setup')
elif each_dir in teardown_dir_set:
destination_dir = os.path.join(destination_dir, 'teardown')
# If template directory, parse it. Else, copy it.
if each_dir in template_dir_set:
tinctest.logger.debug("Directory %s is a template directory. Parse it and save the results in %s." % (each_dir, destination_dir))
TINCSystem.substitute_strings_in_directory(each_dir, destination_dir, cls.template_subs, file_types, destination_file_prefix = "template_")
else:
tinctest.logger.debug("Directory %s is not a template directory. Copy its sql and ans files as is in %s." % (each_dir, destination_dir))
TINCSystem.copy_directory(each_dir, destination_dir, file_types)
return True