def __init__(self, name="",
                 type="digraph", strict="",
                 engine="dot",
                 fname="", string="", **attrs):

        # Initialise root graph. First, handle
        if fname:
            self._read(fname=fname)
        elif string:
            self._read(string=string)
        elif name:
            if strict in ["", "strict"] and type in ["graph", "digraph"]:
                self.name = encode_page(name)
                self.handle = getattr(gv, "%s%s" % (strict, type))(name)
                # print "g = gv.%s%s('%s')" % (strict, type, name)
            else:
                raise ValueError("Bad args: " + str(type) + str(name))
        else:
            raise ValueError("Bad args: No name for graph")

        # Next, attributes
        if attrs:
            self._setattrs(self.handle, **attrs)

        # Then, layout options
        self.engine = engine
        # Is relayout necessary? (Initially, yes!)
        self.changed = 1

        # Finally, group classes
        self.nodes = GraphvizNodes(self, self)
        self.edges = GraphvizEdges(self, self)
        self.subg  = GraphvizSubgraphs(self, self)
def execute(macro, args):
    formatter = macro.formatter
    macro.request.page.formatter = formatter
    request = macro.request
    _ = request.getText

    if not args:
        args = request.page.page_name

    key = cache_key(request, (macro.name, args, latest_edit(request)))

    map_text = 'usemap="#%s" ' % (key)

    if not cache_exists(request, key):
        succ, data, mappi = draw_topology(request, args, key)
        if not succ:
            return mappi

        mappi = encode_page(mappi)
        cache.put(request, key, data, content_type='image/png')
        cache.put(request, key + '-map', mappi, content_type='text/html')
    else:
        mappifile = cache._get_datafile(request, key + '-map')
        mappi = mappifile.read()
        mappifile.close()

    div = u'<div class="ClarifiedTopology">\n' + \
        u'<img %ssrc="%s" alt="%s">\n</div>\n' % \
        (map_text, cache.url(request, key), _('topology'))

    map = u'<map id="%s" name="%s">\n' % (key, key)
    map += decode_page(mappi)
    map += u'</map>\n'

    return div + map
    def __contains__(self, item):
        page = encode_page(item)

        if page in self.out:
            return self.out[page] is not self.UNDEFINED

        if page in self.cache:
            return True

        self.readlock()
        return page in self.db
Beispiel #4
0
    def __contains__(self, item):
        page = encode_page(item)

        if page in self.out:
            return self.out[page] is not self.UNDEFINED

        if page in self.cache:
            return True

        self.readlock()
        return page in self.db
    def __getattr__(self, name):
        """ Finds the named attribute, returns its value """
        handle = self.__dict__['handle']

        name = encode_page(name)

        retval = gv.getv(handle, gv.findattr(handle, name))
        # Needed mainly for dict() for work, getattribute excepts
        # and so __iter__ is called. Non-gv attrs are not returned.
        if not retval:
            object.__getattribute__(self, name)

        return decode_page(retval)        
    def __getitem__(self, item):
        page = encode_page(item)

        if page in self.out:
            if self.out[page] is self.UNDEFINED:
                raise KeyError(page)
            return self.out[page]

        if page in self.cache:
            return self.cache[page]

        self.readlock()
        self.cache[page] = self.db[page]
        return self.cache[page]
Beispiel #7
0
    def __getitem__(self, item):
        page = encode_page(item)

        if page in self.out:
            if self.out[page] is self.UNDEFINED:
                raise KeyError(page)
            return self.out[page]

        if page in self.cache:
            return self.cache[page]

        self.readlock()
        self.cache[page] = self.db[page]
        return self.cache[page]
    def formargs(self, form):
        # format
        if form.has_key('format'):
            format = form['format'][0]
            if format in self.available_formats:
                self.format = format

        if form.has_key('view'):
            if form['view'][0].strip():
                self.inline = False

        if form.has_key('help'):
            if form['help'][0].strip():
                self.help = True

        if form.has_key('graphengine'):
            graphengine = encode_page(form['graphengine'][0])
            if graphengine in self.available_graphengines:
                self.graphengine = graphengine

        if form.has_key('attachment'):
            self.attachment = form['attachment'][0]
Beispiel #9
0
    def formargs(self, form):
        # format
        if form.has_key('format'):
            format = form['format'][0]
            if format in self.available_formats:
                self.format = format

        if form.has_key('view'):
            if form['view'][0].strip():
                self.inline = False

        if form.has_key('help'):
            if form['help'][0].strip():
                self.help = True

        if form.has_key('graphengine'):
            graphengine = encode_page(form['graphengine'][0])
            if graphengine in self.available_graphengines:
                self.graphengine = graphengine

        if form.has_key('attachment'):
            self.attachment = form['attachment'][0]
    def delpage(self, pagename):
        log.debug("delpage %s" % (repr(pagename),))
        page = encode_page(pagename)

        self.out[page] = self.UNDEFINED
        self.cache.pop(page, None)
    def cacheset(self, item, value):
        page = encode_page(item)

        self.cache[page] = value
    def savepage(self, pagename, pagedict):
        log.debug("savepage %s = %s" % (repr(pagename), repr(pagedict)))
        page = encode_page(pagename)

        self.out[page] = pagedict
        self.cache.pop(page, None)
Beispiel #13
0
    def delpage(self, pagename):
        log.debug("delpage %s" % (repr(pagename), ))
        page = encode_page(pagename)

        self.out[page] = self.UNDEFINED
        self.cache.pop(page, None)
Beispiel #14
0
    def cacheset(self, item, value):
        page = encode_page(item)

        self.cache[page] = value
Beispiel #15
0
    def savepage(self, pagename, pagedict):
        log.debug("savepage %s = %s" % (repr(pagename), repr(pagedict)))
        page = encode_page(pagename)

        self.out[page] = pagedict
        self.cache.pop(page, None)