web/views/plots.py
changeset 1956 9865daa96cd7
parent 1911 16af47588d41
child 1977 606923dff11b
equal deleted inserted replaced
1938:bf27b4190739 1956:9865daa96cd7
   175         id = 'piechart'
   175         id = 'piechart'
   176         pieclass = Pie
   176         pieclass = Pie
   177 
   177 
   178         __select__ = at_least_two_columns() & second_column_is_number()
   178         __select__ = at_least_two_columns() & second_column_is_number()
   179 
   179 
       
   180         def _guess_vid(self, row):
       
   181             etype = self.rset.description[row][0]
       
   182             if self.schema.eschema(etype).is_final():
       
   183                 return 'final'
       
   184             return 'textincontext'
       
   185 
   180         def call(self, title=None, width=None, height=None):
   186         def call(self, title=None, width=None, height=None):
   181             labels = ['%s: %s' % (row[0].encode(self.req.encoding), row[1])
   187             labels = []
   182                       for row in self.rset]
   188             values = []
   183             values = [(row[1] or 0) for row in self.rset]
   189             for rowidx, (_, value) in enumerate(self.rset):
       
   190                 if value is not None:
       
   191                     vid = self._guess_vid(rowidx)
       
   192                     label = '%s: %s' % (self.view(vid, self.rset, row=rowidx, col=0),
       
   193                                         value)
       
   194                     labels.append(label.encode(self.req.encoding))
       
   195                     values.append(value)
   184             pie = PieChartWidget(labels, values, pieclass=self.pieclass,
   196             pie = PieChartWidget(labels, values, pieclass=self.pieclass,
   185                                  title=title)
   197                                  title=title)
   186             if width is not None:
   198             if width is not None:
   187                 height = height or width
   199                 height = height or width
   188             pie.render(width, height, w=self.w)
   200             pie.render(width, height, w=self.w)