Changeset 52 for trunk

Show
Ignore:
Timestamp:
01/02/06 16:18:02 (6 years ago)
Author:
steve
Message:

Allow #macro in #parse'd files (fixes #9)

Location:
trunk
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/airspeed.py

    r51 r52  
    143143            return parent_value 
    144144 
     145    def top(self): 
     146        if hasattr(self.parent, "top"): 
     147            return self.parent.top() 
     148        return self.parent 
     149 
    145150    def __repr__(self): 
    146151        return dict.__repr__(self) + '->' + repr(self.parent) 
     
    581586 
    582587    def evaluate(self, stream, namespace, loader): 
     588        global_ns = namespace.top() 
    583589        macro_key = '#' + self.macro_name.lower() 
    584         if namespace.has_key(macro_key): 
     590        if global_ns.has_key(macro_key): 
    585591            raise Exception("cannot redefine macro") 
    586         namespace[macro_key] = self 
     592        global_ns[macro_key] = self 
    587593 
    588594    def execute_macro(self, stream, namespace, arg_value_elements, loader): 
  • trunk/airspeed_test.py

    r50 r52  
    522522        value = unicode('Grüße', 'latin1') 
    523523        self.assertEquals(value, template.merge(locals())) 
     524 
     525    def test_can_define_macros_in_parsed_files(self): 
     526        class Loader: 
     527            def load_template(self, name): 
     528                if name == 'foo.tmpl': 
     529                    return airspeed.Template('#macro(themacro)works#end') 
     530        template = airspeed.Template('#parse("foo.tmpl")#themacro()') 
     531        self.assertEquals('works', template.merge({}, loader=Loader())) 
    524532 
    525533