def format(self, formatter, **kw): _ = self.request.getText if not have_gv(): self.request.write(formatter.text(_(\ "ERROR: Graphviz Python extensions not installed. " +\ "Not performing layout."))) return try: graphviz = Graphviz(engine=self.graphengine, string=self.raw) except ValueError, e: self.request.write(formatter.text(_(\ "ERROR: Malformed graph (%s).") % (e))) return
def execute(self): request = self.request _ = request.getText pagename = request.page.page_name if not request.user.may.read(pagename): fault = _(u'Can not read page') + u'\n' if self.inline: request.write(request.formatter.text(fault)) return request.content_type = 'text/plain' request.write(fault) return form = values_to_form(request.values) self.formargs(form) if self.help or not self.attachment: enter_page(request, pagename, 'View .gv attachment') self.sendForm() if self.help: # This is the URL addition to the nodes that have graph data self.urladd = url_parameters(form) self.urladd = self.urladd.replace('&help=Inline', '') request.write('<<ViewDot(' + self.urladd + ')>>') exit_page(request, pagename) return if not self.attachment[:10].lower() == 'attachment': fault = _(u'No attachment defined') + u'\n' if self.inline: request.write(request.formatter.text(fault)) return request.content_type = 'text/plain' request.write(fault) return self.attachment = self.attachment[11:] pagename, filename = AttachFile.absoluteName(self.attachment, self.pagename) if not request.user.may.read(pagename): fault = _(u'Can not read attachment page') + u'\n' if self.inline: request.write(request.formatter.text(fault)) return request.content_type = 'text/plain' request.write(fault) return fname = wikiutil.taintfilename(filename) fpath = AttachFile.getFilename(request, pagename, fname) try: data = file(fpath, 'r').read() except IOError: fault = _(u'Can not read attachment') + u'\n' if self.inline: request.write(request.formatter.text(fault)) return request.content_type = 'text/plain' request.write(fault) return if not have_gv(): fault = _(u"ERROR: Graphviz Python extensions not installed. " +\ u"Not performing layout.") if self.inline: request.write(request.formatter.text(fault)) return request.content_type = 'text/plain' request.write(fault) return self.cache_key = cache_key(self.request, [data, self.graphengine, self.format]) key = "%s-%s" % (self.cache_key, self.format) if self.format in ['zgr', 'svg']: formatcontent = 'svg+xml' else: formatcontent = self.format if not cache_exists(request, key): graphviz = Graphviz(engine=self.graphengine, string=data) data = self.getLayoutInFormat(graphviz, self.format) cache.put(self.request, key, data, content_type=formatcontent) if self.format in ['zgr', 'svg']: # Display zgr graphs as applets if self.format == 'zgr': image_p = lambda url, text: \ '<applet code="net.claribole.zgrviewer.ZGRApplet.class"'+ \ ' archive="%s/gwikicommon/zgrviewer/zvtm.jar,' % \ (self.request.cfg.url_prefix_static) + \ '%s/gwikicommon/zgrviewer/zgrviewer.jar" ' % \ (self.request.cfg.url_prefix_static) + \ 'width="%s" height="%s">' % (form_escape(self.width), form_escape(self.height))+\ '<param name="type" ' + \ 'value="application/x-java-applet;version=1.4" />' + \ '<param name="scriptable" value="false" />' + \ '<param name="svgURL" value="%s" />' % (url) + \ '<param name="title" value="ZGRViewer - Applet" />'+ \ '<param name="appletBackgroundColor" value="#DDD" />' + \ '<param name="graphBackgroundColor" value="#DDD" />' + \ '<param name="highlightColor" value="red" />' + \ ' </applet><br>\n' else: image_p = lambda url, text: \ '<object data="%s" alt="%s" ' % (url, text) + \ 'type="image/svg+xml">\n' + \ '<embed src="%s" alt="%s" ' % (url, text) + \ 'type="image/svg+xml"/>\n</object>' else: image_p = lambda url, text: \ '<img src="%s" alt="%s">\n' % (url, text) image_uri = cache.url(self.request, key) if not self.inline: if self.format == 'zgr': request.write('<html><body>') request.write(image_p(image_uri, _('visualisation'))) if not self.inline and self.format == 'zgr': request.write('</html></body>') else: pass # No footer