/+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: 2007-12-15 23:21:31 UTC
  • Revision ID: git-v1:857495549bac47c6a70872d4b36dd1fe49270357
version bump and MANIFEST fixes to allow examples and COPYING in the sdist

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
# Helper variables and functions
31
31
# -----------------------------------------------------------------------------
32
32
 
 
33
__version__ = '0.1.2'
 
34
 
33
35
reo_colour = re.compile('^([A-Fa-f0-9]{2,2}){3,4}$')
34
36
 
35
37
 
160
162
    RIGHT = 'r'
161
163
    TYPES = (BOTTOM, TOP, LEFT, RIGHT)
162
164
 
163
 
    def __init__(self, axis, **kw):
164
 
        assert(axis in Axis.TYPES)
 
165
    def __init__(self, axis_index, axis_type, **kw):
 
166
        assert(axis_type in Axis.TYPES)
165
167
        self.has_style = False
166
 
        self.index = None
 
168
        self.axis_index = axis_index
 
169
        self.axis_type = axis_type
167
170
        self.positions = None
168
171
 
169
 
    def set_index(self, index):
170
 
        self.index = index
 
172
    def set_index(self, axis_index):
 
173
        self.axis_index = axis_index
171
174
 
172
175
    def set_positions(self, positions):
173
176
        self.positions = positions
181
184
 
182
185
    def style_to_url(self):
183
186
        bits = []
184
 
        bits.append(str(self.index))
 
187
        bits.append(str(self.axis_index))
185
188
        bits.append(self.colour)
186
189
        if self.font_size is not None:
187
190
            bits.append(str(self.font_size))
191
194
 
192
195
    def positions_to_url(self):
193
196
        bits = []
194
 
        bits.append(str(self.index))
 
197
        bits.append(str(self.axis_index))
195
198
        bits += [str(a) for a in self.positions]
196
199
        return ','.join(bits)
197
200
 
198
201
 
199
202
class LabelAxis(Axis):
200
203
 
201
 
    def __init__(self, axis, values, **kwargs):
202
 
        Axis.__init__(self, axis, **kwargs)
 
204
    def __init__(self, axis_index, axis_type, values, **kwargs):
 
205
        Axis.__init__(self, axis_index, axis_type, **kwargs)
203
206
        self.values = [str(a) for a in values]
204
207
 
205
208
    def __repr__(self):
206
 
        return '%i:|%s' % (self.index, '|'.join(self.values))
 
209
        return '%i:|%s' % (self.axis_index, '|'.join(self.values))
207
210
 
208
211
 
209
212
class RangeAxis(Axis):
210
213
 
211
 
    def __init__(self, axis, low, high, **kwargs):
212
 
        Axis.__init__(self, axis, **kwargs)
 
214
    def __init__(self, axis_index, axis_type, low, high, **kwargs):
 
215
        Axis.__init__(self, axis_index, axis_type, **kwargs)
213
216
        self.low = low
214
217
        self.high = high
215
218
 
216
219
    def __repr__(self):
217
 
        return '%i,%s,%s' % (self.index, self.low, self.high)
 
220
        return '%i,%s,%s' % (self.axis_index, self.low, self.high)
218
221
 
219
222
# Chart Classes
220
223
# -----------------------------------------------------------------------------
252
255
            Chart.BACKGROUND: None,
253
256
            Chart.CHART: None,
254
257
        }
255
 
        self.axis = {
256
 
            Axis.TOP: None,
257
 
            Axis.BOTTOM: None,
258
 
            Axis.LEFT: None,
259
 
            Axis.RIGHT: None,
260
 
        }
 
258
#        self.axis = {
 
259
#            Axis.TOP: None,
 
260
#            Axis.BOTTOM: None,
 
261
#            Axis.LEFT: None,
 
262
#            Axis.RIGHT: None,
 
263
#        }
 
264
        self.axis = []
261
265
        self.markers = []
262
266
 
263
267
    # URL generation
409
413
    # Axis Labels
410
414
    # -------------------------------------------------------------------------
411
415
 
412
 
    def set_axis_labels(self, axis, values):
413
 
        assert(axis in Axis.TYPES)
414
 
        self.axis[axis] = LabelAxis(axis, values)
415
 
 
416
 
    def set_axis_range(self, axis, low, high):
417
 
        assert(axis in Axis.TYPES)
418
 
        self.axis[axis] = RangeAxis(axis, low, high)
419
 
 
420
 
    def set_axis_positions(self, axis, positions):
421
 
        assert(axis in Axis.TYPES)
422
 
        if not self.axis[axis]:
423
 
            raise InvalidParametersException('Please create an axis first')
424
 
        self.axis[axis].set_positions(positions)
425
 
 
426
 
    def set_axis_style(self, axis, colour, font_size=None, alignment=None):
427
 
        assert(axis in Axis.TYPES)
428
 
        if not self.axis[axis]:
429
 
            raise InvalidParametersException('Please create an axis first')
430
 
        self.axis[axis].set_style(colour, font_size, alignment)
 
416
    def set_axis_labels(self, axis_type, values):
 
417
        assert(axis_type in Axis.TYPES)
 
418
        values = [ urllib.quote(a) for a in values ]
 
419
        axis_index = len(self.axis)
 
420
        axis = LabelAxis(axis_index, axis_type, values)
 
421
        self.axis.append(axis)
 
422
        return axis_index
 
423
 
 
424
    def set_axis_range(self, axis_type, low, high):
 
425
        assert(axis_type in Axis.TYPES)
 
426
        axis_index = len(self.axis)
 
427
        axis = RangeAxis(axis_index, axis_type, low, high)
 
428
        self.axis.append(axis)
 
429
        return axis_index
 
430
 
 
431
    def set_axis_positions(self, axis_index, positions):
 
432
        try:
 
433
            self.axis[axis_index].set_positions(positions)
 
434
        except IndexError:
 
435
            raise InvalidParametersException('Axis index %i has not been ' \
 
436
                'created' % axis)
 
437
 
 
438
    def set_axis_style(self, axis_index, colour, font_size=None, \
 
439
            alignment=None):
 
440
        try:
 
441
            self.axis[axis_index].set_style(colour, font_size, alignment)
 
442
        except IndexError:
 
443
            raise InvalidParametersException('Axis index %i has not been ' \
 
444
                'created' % axis)
431
445
 
432
446
    def axis_to_url(self):
433
447
        available_axis = []
436
450
        positions = []
437
451
        styles = []
438
452
        index = -1
439
 
        for position, axis in self.axis.items():
440
 
            if not axis:
441
 
                continue
442
 
            index += 1
443
 
            axis.set_index(index)
444
 
            available_axis.append(position)
 
453
        for axis in self.axis:
 
454
            available_axis.append(axis.axis_type)
445
455
            if isinstance(axis, RangeAxis):
446
456
                range_axis.append(repr(axis))
447
457
            if isinstance(axis, LabelAxis):
670
680
#        'aabbcc00', 0.5)
671
681
#    chart.fill_linear_stripes(Chart.CHART, 20, '204070', .2, '300040', .2,
672
682
#        'aabbcc00', 0.2)
673
 
    chart.set_axis_range(Axis.LEFT, 0, 10)
674
 
    chart.set_axis_range(Axis.RIGHT, 5, 30)
675
 
    chart.set_axis_labels(Axis.BOTTOM, [1, 25, 95])
676
 
    chart.set_axis_positions(Axis.BOTTOM, [1, 25, 95])
677
 
    chart.set_axis_style(Axis.BOTTOM, 'FFFFFF', 15)
 
683
    axis_left_index = chart.set_axis_range(Axis.LEFT, 0, 10)
 
684
    axis_left_index = chart.set_axis_range(Axis.LEFT, 0, 10)
 
685
    axis_left_index = chart.set_axis_range(Axis.LEFT, 0, 10)
 
686
    axis_right_index = chart.set_axis_range(Axis.RIGHT, 5, 30)
 
687
    axis_bottom_index = chart.set_axis_labels(Axis.BOTTOM, [1, 25, 95])
 
688
    chart.set_axis_positions(axis_bottom_index, [1, 25, 95])
 
689
    chart.set_axis_style(axis_bottom_index, '003050', 15)
678
690
 
679
691
#    chart.set_pie_labels(('apples', 'oranges', 'bananas'))
680
692