/+junk/pygooglechart-py3k

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/%2Bjunk/pygooglechart-py3k

« back to all changes in this revision

Viewing changes to pygooglechart.py

  • Committer: gak
  • Date: 2008-09-11 22:46:54 UTC
  • Revision ID: git-v1:daee2854fc2bf709f71d5c721f36c2eb8d25537e
 - All pipe "|" characters are now encoded to %7C (Tom Payne)
 - Chart title's colour and size can now be set (chts) (Tom Payne)
 - Removed unfixable test

Show diffs side-by-side

added added

removed removed

Lines of Context:
162
162
                else:
163
163
                    raise DataOutOfRangeException()
164
164
            encoded_data.append(','.join(sub_data))
165
 
        return 'chd=t:' + '|'.join(encoded_data)
 
165
        return 'chd=t:' + '%7c'.join(encoded_data)
166
166
 
167
167
    @classmethod
168
168
    def scale_value(cls, value, range):
257
257
        self.values = [str(a) for a in values]
258
258
 
259
259
    def __repr__(self):
260
 
        return '%i:|%s' % (self.axis_index, '|'.join(self.values))
 
260
        return '%i:%%7c%s' % (self.axis_index, '%7c'.join(self.values))
261
261
 
262
262
 
263
263
class RangeAxis(Axis):
301
301
        self.height = height
302
302
        self.data = []
303
303
        self.set_title(title)
 
304
        self.set_title_style(None, None)
304
305
        self.set_legend(legend)
305
306
        self.set_legend_position(None)
306
307
        self.set_colours(colours)
345
346
        # optional arguments
346
347
        if self.title:
347
348
            url_bits.append('chtt=%s' % self.title)
 
349
        if self.title_colour and self.title_font_size:
 
350
            url_bits.append('chts=%s,%s' % (self.title_colour, \
 
351
                self.title_font_size))
348
352
        if self.legend:
349
 
            url_bits.append('chdl=%s' % '|'.join(self.legend))
 
353
            url_bits.append('chdl=%s' % '%7c'.join(self.legend))
350
354
        if self.legend_position:
351
355
            url_bits.append('chdlp=%s' % (self.legend_position))
352
356
        if self.colours:
353
357
            url_bits.append('chco=%s' % ','.join(self.colours))            
354
358
        if self.colours_within_series:
355
 
            url_bits.append('chco=%s' % '|'.join(self.colours_within_series))
 
359
            url_bits.append('chco=%s' % '%7c'.join(self.colours_within_series))
356
360
        ret = self.fill_to_url()
357
361
        if ret:
358
362
            url_bits.append(ret)
369
373
                else:
370
374
                    values = ('1', )
371
375
                style.append(','.join(values))
372
 
            url_bits.append('chls=%s' % '|'.join(style))
 
376
            url_bits.append('chls=%s' % '%7c'.join(style))
373
377
        if self.grid:
374
378
            url_bits.append('chg=%s' % self.grid)
375
379
        return url_bits
395
399
        else:
396
400
            self.title = None
397
401
 
 
402
    def set_title_style(self, colour, font_size):
 
403
        if not colour is None:
 
404
            _check_colour(colour)
 
405
        self.title_colour = colour
 
406
        self.title_font_size = font_size
 
407
 
398
408
    def set_legend(self, legend):
399
409
        """legend needs to be a list, tuple or None"""
400
410
        assert(isinstance(legend, list) or isinstance(legend, tuple) or
474
484
                areas.append('%s,%s,%s' % (area, self.fill_types[area], \
475
485
                    self.fill_area[area]))
476
486
        if areas:
477
 
            return 'chf=' + '|'.join(areas)
 
487
            return 'chf=' + '%7c'.join(areas)
478
488
 
479
489
    # Data
480
490
    # -------------------------------------------------------------------------
653
663
        url_bits = []
654
664
        url_bits.append('chxt=%s' % ','.join(available_axis))
655
665
        if label_axis:
656
 
            url_bits.append('chxl=%s' % '|'.join(label_axis))
 
666
            url_bits.append('chxl=%s' % '%7c'.join(label_axis))
657
667
        if range_axis:
658
 
            url_bits.append('chxr=%s' % '|'.join(range_axis))
 
668
            url_bits.append('chxr=%s' % '%7c'.join(range_axis))
659
669
        if positions:
660
 
            url_bits.append('chxp=%s' % '|'.join(positions))
 
670
            url_bits.append('chxp=%s' % '%7c'.join(positions))
661
671
        if styles:
662
 
            url_bits.append('chxs=%s' % '|'.join(styles))
 
672
            url_bits.append('chxs=%s' % '%7c'.join(styles))
663
673
        return '&'.join(url_bits)
664
674
 
665
675
    # Markers, Ranges and Fill area (chm)
666
676
    # -------------------------------------------------------------------------
667
677
 
668
678
    def markers_to_url(self):        
669
 
        return 'chm=%s' % '|'.join([','.join(a) for a in self.markers])
 
679
        return 'chm=%s' % '%7c'.join([','.join(a) for a in self.markers])
670
680
 
671
681
    def add_marker(self, index, point, marker_type, colour, size, priority=0):
672
682
        self.markers.append((marker_type, colour, str(index), str(point), \
676
686
        self.markers.append(('r', colour, '0', str(start), str(stop)))
677
687
 
678
688
    def add_data_line(self, colour, data_set, size, priority=0):
679
 
        self.markers.append(('D', colour, str(data_set), '0', str(size), str(priority)))
 
689
        self.markers.append(('D', colour, str(data_set), '0', str(size), \
 
690
            str(priority)))
680
691
 
681
 
    def add_marker_text(self, string, colour, data_set, data_point, size, priority=0):
682
 
        self.markers.append((str(string), colour, str(data_set), str(data_point), str(size), str(priority)))        
 
692
    def add_marker_text(self, string, colour, data_set, data_point, size, \
 
693
            priority=0):
 
694
        self.markers.append((str(string), colour, str(data_set), \
 
695
            str(data_point), str(size), str(priority)))        
683
696
 
684
697
    def add_vertical_range(self, colour, start, stop):
685
698
        self.markers.append(('R', colour, '0', str(start), str(stop)))
885
898
    def get_url_bits(self, data_class=None):
886
899
        url_bits = Chart.get_url_bits(self, data_class=data_class)
887
900
        if self.pie_labels:
888
 
            url_bits.append('chl=%s' % '|'.join(self.pie_labels))
 
901
            url_bits.append('chl=%s' % '%7c'.join(self.pie_labels))
889
902
        return url_bits
890
903
 
891
904
    def annotated_data(self):
989
1002
        if self.encoding:
990
1003
            url_bits.append('choe=%s' % self.encoding)
991
1004
        if self.ec_level:
992
 
            url_bits.append('chld=%s|%s' % (self.ec_level, self.margin))
 
1005
            url_bits.append('chld=%s%%7c%s' % (self.ec_level, self.margin))
993
1006
        return url_bits
994
1007
 
995
1008
    def set_encoding(self, encoding):
1005
1018
    def __init__(self):
1006
1019
        self.grammar = None
1007
1020
        self.chart = None
 
1021
        warnings.warn('This code is incomplete!')
1008
1022
 
1009
1023
    def parse(self, grammar):
1010
1024
        self.grammar = grammar