Changeset 12446 for trunk


Ignore:
Timestamp:
01/28/11 16:28:46 (13 years ago)
Author:
ramonb
Message:

sara_cmt/cluster/templatetags/ramonb_extras.py:

  • modified {% use %} tag to accept/resolve variables as queryset
  • added arpanize filter: a.b.c.d -> c.b.a.in-addr.arpa
  • added {% getbasenets <network_name> as <listname> %}
  • i.e.: {% getbasenets 'gina console' as console_nets %} = [ '191.168.32', '192.168.33' ]
File:
1 edited

Legend:

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

    r12445 r12446  
    3232    parser.delete_first_token()
    3333    return NoBlankLinesNode(nodelist)
     34
     35@stringfilter
     36def arpanize(value):
     37    ip_blocks = value.split('.')
     38
     39    reverse_block = [ ip_blocks[2], ip_blocks[1], ip_blocks[0], 'in-addr.arpa' ]
     40
     41    return string.join( reverse_block, '.' )
     42
     43register.filter( 'arpanize', arpanize )
    3444
    3545@stringfilter
     
    154164                mypath_str = pathvar.resolve(context)
    155165            except template.VariableDoesNotExist:
    156                 raise template.TemplateSyntaxError, '%r tag argument 1: not an variable %r' %( tag, path_str )
     166                #raise template.TemplateSyntaxError, '%r tag argument 1: not an variable %r' %( tag, path_str )
     167                pass
    157168
    158169        # RB: render template between store tags
     
    194205
    195206from django.db.models import get_model
     207
     208@register.tag(name='getbasenets')
     209def do_getbasenets(parser, token):
     210
     211    try:
     212        tag, network_name, kw_as, varname = token.split_contents()
     213    except ValueError:
     214        raise template.TemplateSyntaxError, '%r tag requires exactly 4 arguments' % tag
     215
     216    return getBaseNets( varname, network_name )
     217
     218class getBaseNets(template.Node):
     219
     220    """
     221        Get list of basenets in a network (name)
     222
     223        Usage: {% getbasenets <network name> as <listname> %}
     224    """
     225
     226    def __init__(self, varname, network_name ):
     227
     228        self.varname = varname
     229        self.network_name = network_name.strip("'").strip('"').__str__()
     230        self.basenets = [ ]
     231
     232    def render(self, context):
     233
     234        if (self.network_name[0] == self.network_name[-1] and self.network_name[0] in ('"', "'")):
     235
     236            network_str = str( self.network_name.strip("'").strip('"') )
     237        else:
     238            # RB: Not quoted: must be an variable: attempt to resolve to value
     239            try:
     240                networkvar = template.Variable( str(self.network_name) )
     241                network_str = networkvar.resolve(context)
     242            except template.VariableDoesNotExist:
     243                #raise template.TemplateSyntaxError, '%r tag argument 1: not an variable %r' %( tag, path_str )
     244                pass
     245
     246        from IPy import IP
     247
     248        print network_str
     249
     250        network_units = get_model('cluster', 'Network').objects.filter( name=str(network_str) )
     251
     252        print len( network_units )
     253
     254        for n in network_units:
     255
     256            print n.netaddress
     257            for ipnum in IP( n.cidr ):
     258                if not base_net( ipnum ) in self.basenets:
     259                    self.basenets.append( str( base_net( ipnum ) ) )
     260
     261        context[ self.varname ] = self.basenets
     262        print self.basenets
     263        self.basenets = [ ]
     264        return ''
     265
    196266
    197267@register.tag(name='getracks')
     
    249319    if definition[-2] != 'as':
    250320        raise template.TemplateSyntaxError, "second last argument of %r tag has to be 'as'" % tag
     321
    251322    entity = definition[1]
    252323    query = definition[-3]
    253     #attr,val = query.split('=')
    254324    key = definition[-1]
    255     #queryset = get_model('cluster', entity).objects.filter(**{attr:val})
    256     #return ObjectNode(definition[-1], definition[1])
     325
    257326    return QuerySetNode(entity, query, key)
    258 
    259327
    260328class QuerySetNode(template.Node):
     
    265333    def __init__(self, entity, query, key):
    266334        self.entity = entity
    267         self.query = query.strip("'").strip('"').__str__()
     335        self.query = query
    268336        self.key = key
    269337
    270338    def render(self, context):
    271         attr, val = self.query.split('=')
     339
     340        if (self.query[0] == self.query[-1] and self.query[0] in ('"', "'")):
     341
     342            myquery_str = str( self.query.strip("'").strip('"') )
     343        else:
     344            # RB: Not quoted: must be an variable: attempt to resolve to value
     345            try:
     346                queryvar = template.Variable( str(self.query) )
     347                myquery_str = queryvar.resolve(context)
     348            except template.VariableDoesNotExist:
     349                #raise template.TemplateSyntaxError, '%r tag argument 1: not an variable %r' %( tag, path_str )
     350                pass
     351
     352        attr, val = myquery_str.split('=')
    272353        queryset = get_model('cluster', self.entity).objects.filter(**{attr:val})
    273354        if len(queryset) == 1:
Note: See TracChangeset for help on using the changeset viewer.