diff --git a/kallithea/lib/inifile.py b/kallithea/lib/inifile.py --- a/kallithea/lib/inifile.py +++ b/kallithea/lib/inifile.py @@ -23,11 +23,13 @@ other custom values. import logging import re +import mako.template + log = logging.getLogger(__name__) -def expand(template, desc, selected_mako_conditionals, mako_variable_values, settings): +def expand(template, desc, mako_variable_values, settings): """Expand mako template and tweak it. Not entirely stable for random templates as input, but good enough for our single template. @@ -49,21 +51,21 @@ def expand(template, desc, selected_mako ... %endif ... ''' >>> desc = 'Description\\nof this config file' - >>> selected_mako_conditionals = ["conditional_options == 'option-a'"] - >>> mako_variable_values = {'mako_variable': 'VALUE', 'mako_function()': 'FUNCTION RESULT'} + >>> selected_mako_conditionals = [] + >>> mako_variable_values = {'mako_variable': 'VALUE', 'mako_function': (lambda: 'FUNCTION RESULT'), + ... 'conditional_options': 'option-a'} >>> settings = { # only partially used ... '[first-section]': {'variable2': 'VAL2', 'first_extra': 'EXTRA'}, ... '[third-section]': {'third_extra': ' 3'}, ... '[fourth-section]': {'fourth_extra': '4', 'fourth': '"four"'}, ... } - >>> print expand(template, desc, selected_mako_conditionals, mako_variable_values, settings) + >>> print expand(template, desc, mako_variable_values, settings) [first-section] variable=VALUE #variable2 = value after tab variable2 = VAL2 - ## This section had some whitespace and stuff # FUNCTION RESULT @@ -72,33 +74,7 @@ def expand(template, desc, selected_mako # of this config file # """ - # select the right mako conditionals for the other less sophisticated formats - def sub_conditionals(m): - """given a %if...%endif match, replace with just the selected - conditional sections enabled and the rest as comments - """ - conditional_lines = m.group(1) - def sub_conditional(m): - """given a conditional and the corresponding lines, return them raw - or commented out, based on whether conditional is selected - """ - criteria, lines = m.groups() - if criteria not in selected_mako_conditionals: - lines = '' - return lines - conditional_lines = re.sub(r'^%(?:el)?if (.*):\n((?:^[^%\n].*\n|\n)*)', - sub_conditional, conditional_lines, flags=re.MULTILINE) - return conditional_lines - mako_no_conditionals = re.sub(r'^(%if .*\n(?:[^%\n].*\n|%elif .*\n|\n)*)%endif\n', - sub_conditionals, template, flags=re.MULTILINE) - - # expand mako variables - def pyrepl(m): - return mako_variable_values.get(m.group(1), m.group(0)) - mako_no_variables = re.sub(r'\${([^}]*)}', pyrepl, mako_no_conditionals) - - # remove utf-8 coding header - ini_lines = re.sub(r'^## -\*- coding: utf-8 -\*-\n', '', mako_no_variables) + ini_lines = mako.template.Template(template).render(**mako_variable_values) ini_lines = re.sub( '# Kallithea - config file generated with kallithea-config *#\n', diff --git a/scripts/generate-ini.py b/scripts/generate-ini.py --- a/scripts/generate-ini.py +++ b/scripts/generate-ini.py @@ -11,17 +11,13 @@ from kallithea.lib import inifile makofile = 'kallithea/lib/paster_commands/template.ini.mako' -# the mako conditionals used in all other ini files and templates -selected_mako_conditionals = set([ - "database_engine == 'sqlite'", - "http_server == 'waitress'", -]) - # the mako variables used in all other ini files and templates mako_variable_values = { + 'database_engine': 'sqlite', + 'http_server': 'waitress', 'host': '127.0.0.1', 'port': '5000', - 'uuid()': '${app_instance_uuid}', + 'uuid': lambda: '${app_instance_uuid}', } # files to be generated from the mako template @@ -97,7 +93,7 @@ def main(): # create ini files for fn, desc, settings in ini_files: print 'updating:', fn - ini_lines = inifile.expand(mako_no_text_markup, desc, selected_mako_conditionals, mako_variable_values, settings) + ini_lines = inifile.expand(mako_marked_up, desc, mako_variable_values, settings) open(fn, 'w').write(ini_lines) if __name__ == '__main__':