# HG changeset patch # User Jeff Hammel # Date 1294352119 28800 # Node ID b087a14a664ba015cb2a365a335d231e54753e52 # Parent d3e1e5745f240eeef36e44fe48add7e940fac3f7 fix several issues involving variable interpolation diff -r d3e1e5745f24 -r b087a14a664b makeitso/makeitso.py --- a/makeitso/makeitso.py Thu Jan 06 13:14:12 2011 -0800 +++ b/makeitso/makeitso.py Thu Jan 06 14:15:19 2011 -0800 @@ -123,11 +123,11 @@ defaults = {'include': include} - def __init__(self, content, name=None, interactive=True, **variables): + def __init__(self, content, name=None, interactive=True, variables=None): # default variables self.defaults = self.__class__.defaults.copy() - self.defaults.update(variables) + self.defaults.update(variables or {}) # TODO: automagically tell if the program is interactive or not self.interactive = interactive @@ -136,7 +136,7 @@ def missing(self, **variables): """return additional variables needed""" - vars = variables.copy() + vars = self.get_variables(**variables) missing = set([]) while True: try: @@ -192,7 +192,7 @@ class URITemplate(ContentTemplate): """template for a file or URL""" - def __init__(self, uri, output=None, interactive=True, **variables): + def __init__(self, uri, output=None, interactive=True, variables=None): self.output = output or sys.stdout content = include(uri) @@ -200,10 +200,10 @@ if shebang_re.match(content): content = os.linesep.join(content.splitlines()[1:]) - variables['here'] = parent_uri(uri) + variables['here'] = parent_uri(uri) ContentTemplate.__init__(self, content, name=uri, interactive=interactive, - **variables) + variables=variables) def substitute(self, **variables): output = ContentTemplate.substitute(self, **variables) @@ -221,7 +221,7 @@ class DirectoryTemplate(ContentTemplate): """template for a directory structure""" - def __init__(self, directory, output=None, interactive=True, **variables): + def __init__(self, directory, output=None, interactive=True, variables=None): """ - output : output directory; if None will render in place """ @@ -233,17 +233,18 @@ if os.path.exists(output): assert os.path.isdir(output), "%s: Must be a directory" % self.name self.defaults = ContentTemplate.defaults.copy() - self.defaults.update(variables) + self.defaults.update(variables or {}) def missing(self, **variables): - variables = variables.copy() + vars = self.defaults.copy() + vars.update(variables) missing = set([]) for dirpath, dirnames, filenames in os.walk(self.name): # find variables from directory names for d in dirnames: - missed = ContentTemplate(d).missing(**variables) + missed = ContentTemplate(d).missing(**vars) missing.update(missed) variables.update(dict([(i, '') for i in missed])) @@ -251,7 +252,7 @@ for f in filenames: path = os.path.join(dirpath, f) template = URITemplate(path, interactive=self.interactive) - missed = template.missing(**variables) + missed = template.missing(**vars) missing.update(missed) variables.update(dict([(i, '') for i in missed])) @@ -298,7 +299,7 @@ class PolyTemplate(ContentTemplate): """template for several files/directories""" - def __init__(self, templates, output=None, interactive=True, **variables): + def __init__(self, templates, output=None, interactive=True, variables=None): assert templates, "No templates given!" @@ -309,9 +310,9 @@ for template in templates: # TODO: check if the template is a [e.g] PasteScript.template entry point if os.path.isdir(template): - self.templates.append(DirectoryTemplate(template, interactive=self.interactive, output=output, **variables)) + self.templates.append(DirectoryTemplate(template, interactive=self.interactive, output=output, variables=variables)) else: - self.templates.append(URITemplate(template, interactive=self.interactive, output=output, **variables)) + self.templates.append(URITemplate(template, interactive=self.interactive, output=output, variables=variables)) def missing(self, **variables): vars = variables.copy()