Example #1
0
    def render_graph(self, request_opts, graph_opts):
        def label_fmt(x):
            print "@@@", x
            return str(x)

        ld = len(graph_opts["data"])
        palette = [Color(*x) for x in get_float_pallete(ld)]
        w = graph_opts["width"]
        h = graph_opts["height"]
        drawing = Drawing(w, h)
        # Legend
        legend = LineLegend()
        legend.colorNamePairs = [
            (palette[i], graph_opts["data"][i].name)
            for i in range(ld)
        ]
        legend.boxAnchor = "sw"
        legend.columnMaximum = 2
        legend.alignment = "right"
        drawing.add(legend)
        lh = legend._calcHeight() + self.X_PADDING / 2
        # Plot
        lp = LinePlot()
        lfs = lp.xValueAxis.labels.fontSize
        lp.x = self.X_PADDING
        lp.y = self.Y_PADDING + lh + lfs
        lp.width = w - 2 * self.X_PADDING
        lp.height = h - self.Y_PADDING - lp.y
        lp.data = [
            [(t, v) for v, t in ts] for ts in graph_opts["data"]
        ]
        for i in range(ld):
            lp.lines[i].strokeColor = palette[i]
        drawing.add(lp)
        # Render
        cdata = drawing.asString(format="png")
        response = self.render_plain_text(
            cdata,
            mimetype="image/png"
        )
        if not request_opts["noCache"]:
            cache.set(request_opts["requestKey"], response,
                      request_opts["cacheTimeout"])
        return response