web/views/dotgraphview.py
branchstable
changeset 6405 6989f0e02542
parent 6095 09a404123f0f
child 8212 a045d3821990
equal deleted inserted replaced
6403:b7e24d49639b 6405:6989f0e02542
    29 from cubicweb.view import EntityView
    29 from cubicweb.view import EntityView
    30 from cubicweb.utils import make_uid
    30 from cubicweb.utils import make_uid
    31 
    31 
    32 class DotGraphView(EntityView):
    32 class DotGraphView(EntityView):
    33     __abstract__ = True
    33     __abstract__ = True
    34 
    34     backend_class = DotBackend
       
    35     backend_kwargs = {'ratio': 'compress', 'size': '30,10'}
    35     def cell_call(self, row, col):
    36     def cell_call(self, row, col):
    36         entity = self.cw_rset.get_entity(row, col)
    37         entity = self.cw_rset.get_entity(row, col)
    37         visitor = self.build_visitor(entity)
    38         visitor = self.build_visitor(entity)
    38         prophdlr = self.build_dotpropshandler()
    39         prophdlr = self.build_dotpropshandler()
    39         graphname = 'dotgraph%s' % str(entity.eid)
    40         graphname = 'dotgraph%s' % str(entity.eid)
    40         generator = GraphGenerator(DotBackend(graphname, None,
    41         generator = GraphGenerator(self.backend_class(graphname, None,
    41                                               ratio='compress', size='30,10'))
    42                                                       **self.backend_kwargs))
    42         # map file
    43         # map file
    43         pmap, mapfile = tempfile.mkstemp(".map", graphname)
    44         pmap, mapfile = tempfile.mkstemp(".map", graphname)
    44         os.close(pmap)
    45         os.close(pmap)
    45         # image file
    46         # image file
    46         fd, tmpfile = tempfile.mkstemp('.png')
    47         fd, tmpfile = tempfile.mkstemp('.png')
    48         generator.generate(visitor, prophdlr, tmpfile, mapfile)
    49         generator.generate(visitor, prophdlr, tmpfile, mapfile)
    49         filekeyid = make_uid()
    50         filekeyid = make_uid()
    50         self._cw.session.data[filekeyid] = tmpfile
    51         self._cw.session.data[filekeyid] = tmpfile
    51         self.w(u'<img src="%s" alt="%s" usemap="#%s" />' % (
    52         self.w(u'<img src="%s" alt="%s" usemap="#%s" />' % (
    52             xml_escape(entity.absolute_url(vid='tmppng', tmpfile=filekeyid)),
    53             xml_escape(entity.absolute_url(vid='tmppng', tmpfile=filekeyid)),
    53             xml_escape(self._cw._('Data connection graph for %s') % entity.name),
    54             xml_escape(self._cw._('Data connection graph for %s') % entity.dc_title()),
    54             graphname))
    55             graphname))
    55         stream = open(mapfile, 'r').read()
    56         stream = open(mapfile, 'r').read()
    56         stream = stream.decode(self._cw.encoding)
    57         stream = stream.decode(self._cw.encoding)
    57         self.w(stream)
    58         self.w(stream)
    58         os.unlink(mapfile)
    59         os.unlink(mapfile)
    59 
    60 
    60     def build_visitor(self, entity):
    61     def build_visitor(self, entity):
    61         raise NotImplementedError
    62         raise NotImplementedError
    62 
    63 
    63     def build_dotpropshandler(self):
    64     def build_dotpropshandler(self):
    64         return DotGraphPropsHandler(self._cw)
    65         return DotPropsHandler(self._cw)
    65 
    66 
    66 
    67 
    67 class DotPropsHandler(object):
    68 class DotPropsHandler(object):
    68     def __init__(self, req):
    69     def __init__(self, req):
    69         self._ = req._
    70         self._ = req._