Changeset 14134
- Timestamp:
- 03/15/12 17:00:56 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sara_cmt/sara_cmt/cluster/templatetags/cmts_extras.py
r14133 r14134 160 160 return '' 161 161 162 class MetaNode(template.Node): 163 """ 164 Renderer, which stores the save path to the context. 165 """ 166 167 def __init__(self, tag, values): 162 163 @register.tag(name='store') 164 def do_save_meta(parser, token): 165 """ 166 Compilation function to use for meta-info. 167 168 Usage: {% store '/path/to/file' %} 169 {% store variable %} # variable = '/path/to/file' 170 """ 171 try: 172 # RB: split_contents respects quoted 'strings containing spaces' 173 tag, path_str = token.split_contents() 174 except ValueError: 175 raise template.TemplateSyntaxError, '%r tag requires at least 1 argument' % tag 176 177 # RB: parse the template thing until %endstore found 178 nodelist = parser.parse(('endstore',)) 179 parser.delete_first_token() 180 181 # RB: Now lets start writing output files 182 return generateStoreOutput(tag, path_str, nodelist) 183 184 class generateStoreOutput(template.Node): 185 186 def __init__(self, tag, path_str, nodelist): 168 187 self.tag = tag 169 self.values = values 170 171 def render(self, context): 172 # This is where the work actually happens 173 context[self.tag] = self.values 174 return '' 175 176 177 @register.tag(name='store') 178 #@stringfilter 179 def do_save_meta(parser, token): 180 """ 181 Compilation function to use for meta-info. 182 """ 183 tag = token.contents.split()[0] 184 try: 185 meta_info = token.split_contents() 186 # meta_info should look like ['<tag>', '<path>', 'as', '<key>'] 187 except ValueError: 188 raise template.TemplateSyntaxError, '%r tag requires at least 3 arguments' % tag 189 if len(meta_info) != 4: 190 raise template.TemplateSyntaxError, '%r tag requires at least 3 arguments' % tag 191 if meta_info[-2] != 'as': 192 raise template.TemplateSyntaxError, "second last argument of %r tag has to be 'as'" % tag 193 return MetaNode(meta_info[-1], meta_info[1]) 188 self.nodelist = nodelist 189 self.path_str = path_str 190 191 def render(self, context): 192 193 if (self.path_str[0] == self.path_str[-1] and self.path_str[0] in ('"', "'")): 194 195 mypath_str = str(self.path_str)[1:-1] 196 197 else: 198 # RB: Not quoted: must be a variable: attempt to resolve to value 199 try: 200 pathvar = template.Variable( str(self.path_str) ) 201 mypath_str = pathvar.resolve(context) 202 except template.VariableDoesNotExist: 203 #raise template.TemplateSyntaxError, '%r tag argument 1: not a variable %r' %( tag, path_str ) 204 pass 205 206 # RB: render template between store tags 207 output = self.nodelist.render(context) 208 209 # RB: store output in context dict for later writing to file 210 context['stores'][ mypath_str ] = output 211 212 # RB: output generated into context dict, so we return nothing 213 return '' 194 214 195 215
Note: See TracChangeset
for help on using the changeset viewer.