Changeset 12442 for trunk


Ignore:
Timestamp:
01/28/11 13:40:08 (13 years ago)
Author:
ramonb
Message:

sara_cmt/cluster/templatetags/ramonb_extras.py:

  • rearranged {% store ...%} filename variable resolving a bit
  • added {% assign <variable> = <string|variable> [str|var str|var ..] %} assigns dynamic template variables
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sara_cmt/sara_cmt/cluster/templatetags/ramonb_extras.py

    r12439 r12442  
    1414register = template.Library()
    1515
    16 
    1716class NoBlankLinesNode(template.Node):
    1817    """
     
    3433    return NoBlankLinesNode(nodelist)
    3534
    36 
    37 class MetaNode(template.Node):
    38     """
    39         Renderer, which stores the save path to the context.
    40     """
    41 
    42     def __init__(self, tag, values):
    43         self.tag = tag
    44         self.values = values
    45 
    46     def render(self, context):
    47         # This is where the work actually happens
    48         context[self.tag] = self.values
    49         return ''
    50 
    51 
    5235@stringfilter
    5336def base_net(value):
     
    6548
    6649register.filter( 'ip_last_digit', ip_last_digit )
     50
     51@register.tag(name='assign')
     52def do_assign(parser,token):
     53
     54    """
     55        Leipe shit ouwe
     56    """
     57    mijn_poep = token.split_contents()
     58    tag = mijn_poep[0]
     59    new_var = mijn_poep[1]
     60    is_teken = mijn_poep[2]
     61    assignees = mijn_poep[3:]
     62
     63    return resolveVariables( new_var, assignees )
     64
     65class resolveVariables(template.Node):
     66
     67    def __init__(self, varname, varlist ):
     68
     69        self.varname = varname
     70        self.varlist = varlist
     71        self.resvars = [ ]
     72
     73    def render(self, context):
     74
     75        aarsvars = [ ]
     76
     77        for a in self.varlist:
     78
     79            var_str = ''
     80            if not (a[0] == a[-1] and a[0] in ('"', "'")):
     81                try:
     82                    a_var = template.Variable( a )
     83                    var_str = a_var.resolve(context)
     84                except template.VariableDoesNotExist:
     85                    #raise template.TemplateSyntaxError, 'cannot resolve variable %r' %(  str( self.path ) )
     86                    pass
     87
     88                aarsvars.append( str(var_str) )
     89
     90            else:
     91                a = str( a.strip("'").strip('"') )
     92                aarsvars.append( str(a) )
     93
     94        #print aarsvars
     95
     96        context[ self.varname ] = string.join( aarsvars, '' )
     97
     98        #RB: Django render functions not supposed/allowed to raise Exception, I think
     99        return ''
    67100
    68101@register.tag(name='store')
     
    80113        raise template.TemplateSyntaxError, '%r tag requires at least 1 argument' % tag
    81114
    82     path = None
    83 
    84     if not (path_str[0] == path_str[-1] and path_str[0] in ('"', "'")):
    85         # RB: Not quoted: must be an variable: attempt to resolve to value
    86         try:
    87             path = template.Variable( path_str )
    88         except template.VariableDoesNotExist:
    89             raise template.TemplateSyntaxError, '%r tag argument 1: not an variable %r' %( tag, path_str )
    90         else:
    91             path_str = ''
    92     else:
    93         # RB: remove the quotes
    94         path_str = path_str[1:-1]
    95 
    96115    # RB: parse the template thing until %endstore found
    97116    nodelist = parser.parse(('endstore',))
     
    99118
    100119    # RB: Now lets start writing output files
    101     return generateStoreOutput(tag, path, path_str, nodelist)
     120    return generateStoreOutput(tag, path_str, nodelist)
    102121
    103122class generateStoreOutput(template.Node):
    104123
    105     def __init__(self, tag, path, path_str, nodelist):
     124    def __init__(self, tag, path_str, nodelist):
    106125        self.tag = tag
    107126        self.nodelist = nodelist
    108         self.path = path
    109127        self.path_str = path_str
    110128
    111129    def render(self, context):
    112         if self.path_str == '':
     130
     131        if (self.path_str[0] == self.path_str[-1] and self.path_str[0] in ('"', "'")):
     132
     133            mypath_str = str(self.path_str)[1:-1]
     134
     135        else:
     136            # RB: Not quoted: must be an variable: attempt to resolve to value
    113137            try:
    114                 self.path_str = self.path.resolve(context)
     138                pathvar = template.Variable( str(self.path_str) )
     139                mypath_str = pathvar.resolve(context)
    115140            except template.VariableDoesNotExist:
    116                 raise template.TemplateSyntaxError, '%r tag argument 1: cannot resolve variable %r' %( self.tag, str( self.path ) )
     141                raise template.TemplateSyntaxError, '%r tag argument 1: not an variable %r' %( tag, path_str )
    117142
    118143        # RB: render template between store tags
    119144        output = self.nodelist.render(context)
    120145
    121         if not context.has_key( 'stores' ):
    122                 context['stores'] = {}
    123 
    124146        # RB: store output in context dict for later writing to file
    125         context['stores'][ self.path_str ] = output
     147        context['stores'][ mypath_str ] = output
    126148
    127149        # RB: output generated into context dict, so we return nothing
Note: See TracChangeset for help on using the changeset viewer.