Browse Source

Clean code + fix test

pull/78/head
Florian Mounier 11 years ago
parent
commit
66041bdb54
  1. 1
      pygal/config.py
  2. 38
      pygal/graph/graph.py
  3. 3
      pygal/graph/horizontalbar.py
  4. 5
      pygal/test/test_donut.py
  5. 52
      pygal/test/test_graph.py

1
pygal/config.py

@ -176,7 +176,6 @@ class Config(object):
inner_radius = Key(
0, float, "Look", "Piechart inner radius (donut), must be <.9")
############ Label ############
x_labels = Key(
None, list, "Label",

38
pygal/graph/graph.py

@ -179,14 +179,12 @@ class Graph(BaseGraph):
y=y,
class_='major' if major else ''
)
if isinstance(label, dict):
text.text = truncate(label['title'], truncation)
else:
label = label['title']
text.text = truncate(label, truncation)
if text.text != label:
if isinstance(label, dict):
self.svg.node(guides, 'title').text = label['title']
else:
self.svg.node(guides, 'title').text = label
if self.x_label_rotation:
text.attrib['transform'] = "rotate(%d %f %f)" % (
@ -252,10 +250,11 @@ class Graph(BaseGraph):
y=y + .35 * self.label_font_size,
class_='major' if major else ''
)
if isinstance(label, dict):
text.text = label['title']
else:
label = label['title']
text.text = label
if self.y_label_rotation:
text.attrib['transform'] = "rotate(%d %f %f)" % (
self.y_label_rotation, x, y)
@ -359,29 +358,20 @@ class Graph(BaseGraph):
height=self.legend_box_size,
class_="color-%d reactive" % (global_serie_number % 16)
)
if isinstance(title, dict):
truncated = truncate(title['title'], truncation)
a = decorate(self.svg, legend, title)
self.svg.node(
a, 'text',
x=col * x_step + self.legend_box_size + 5,
y=1.5 * row * h
+ .5 * h
+ .3 * self.legend_font_size
).text = truncated
#as <a> is decorated with title I do not think we need title here
if truncated != title['title']:
self.svg.node(legend, 'title').text = title['title']
node = decorate(self.svg, legend, title)
title = title['title']
else:
node = legend
truncated = truncate(title, truncation)
# Serious magical numbers here
self.svg.node(
legend, 'text',
node, 'text',
x=col * x_step + self.legend_box_size + 5,
y=1.5 * row * h
+ .5 * h
+ .3 * self.legend_font_size
y=1.5 * row * h + .5 * h + .3 * self.legend_font_size
).text = truncated
if truncated != title:
self.svg.node(legend, 'title').text = title

3
pygal/graph/horizontalbar.py

@ -23,6 +23,7 @@ Horizontal bar graph
from pygal.graph.horizontal import HorizontalGraph
from pygal.graph.bar import Bar
class HorizontalBar(HorizontalGraph, Bar):
"""Horizontal Bar graph"""
@ -31,5 +32,5 @@ class HorizontalBar(HorizontalGraph, Bar):
num = len(self.series) - index - 1
self.bar(self._serie(num), serie, index)
for index, serie in enumerate(self.secondary_series[::-1]):
num = len(self.secondary_series) + len(self.series) - index -1
num = len(self.secondary_series) + len(self.series) - index - 1
self.bar(self._serie(num), serie, index + len(self.series), True)

5
pygal/test/test_donut.py

@ -20,6 +20,7 @@ import os
import uuid
from pygal import Pie
def test_donut():
file_name = '/tmp/test_graph-%s.svg' % uuid.uuid4()
if os.path.exists(file_name):
@ -36,6 +37,7 @@ def test_donut():
assert 'pygal' in f.read()
os.remove(file_name)
def test_multiseries_donut():
#this just demos that the multiseries pie does not respect the inner_radius
file_name = '/tmp/test_graph-%s.svg' % uuid.uuid4()
@ -52,6 +54,3 @@ def test_multiseries_donut():
with open(file_name) as f:
assert 'pygal' in f.read()
os.remove(file_name)

52
pygal/test/test_graph.py

@ -150,7 +150,7 @@ def test_values_by_dict(Chart):
chart1 = Chart(no_prefix=True)
chart2 = Chart(no_prefix=True)
if Chart != pygal.Worldmap:
if not issubclass(Chart, pygal.Worldmap):
chart1.add('A', {'red': 10, 'green': 12, 'blue': 14})
chart1.add('B', {'green': 11, 'red': 7})
chart1.add('C', {'blue': 7})
@ -242,7 +242,7 @@ def test_unicode_labels_decode(Chart):
'label': 'unicode <3'
}])
chart.x_labels = [u(''), u('¿?'), u('††††††††'), 'unicode <3']
q = chart.render_pyquery()
chart.render_pyquery()
def test_unicode_labels_python2(Chart):
@ -264,7 +264,7 @@ def test_unicode_labels_python2(Chart):
'label': eval("'unicode <3'")
}])
chart.x_labels = eval("[u'', u'¿?', u'††††††††', 'unicode <3']")
q = chart.render_pyquery()
chart.render_pyquery()
def test_unicode_labels_python3(Chart):
@ -286,47 +286,55 @@ def test_unicode_labels_python3(Chart):
'label': eval("b'unicode <3'")
}])
chart.x_labels = eval("['', '¿?', '††††††††', 'unicode <3']")
q = chart.render_pyquery()
chart.render_pyquery()
def test_labels_with_links(Chart):
chart = Chart()
#link on chart and label
chart.add({'title':'Red','xlink':
{'href': 'http://en.wikipedia.org/wiki/Red'}},
[{
# link on chart and label
chart.add({
'title': 'Red', 'xlink': {'href': 'http://en.wikipedia.org/wiki/Red'}
}, [{
'value': 2,
'label': 'This is red',
'xlink': {'href': 'http://en.wikipedia.org/wiki/Red'}}])
#link on chart only
# link on chart only
chart.add('Green', [{
'value': 4,
'label': 'This is green',
'xlink': {
'href': 'http://en.wikipedia.org/wiki/Green',
'target': '_top'}
}])
#link on label only opens in new tab
'target': '_top'}}])
# link on label only opens in new tab
chart.add({'title': 'Yellow', 'xlink': {
'href': 'http://en.wikipedia.org/wiki/Yellow',
'target': '_blank'}}, 7)
#link on chart only
# link on chart only
chart.add('Blue', [{
'value': 5,
'xlink': {
'href': 'http://en.wikipedia.org/wiki/Blue',
'target': '_blank'}
}])
#link on label and chart with diffrent behaviours
chart.add({'title': 'Violet',
'xlink': 'http://en.wikipedia.org/wiki/Violet_(color)'},
[{
'target': '_blank'}}])
# link on label and chart with diffrent behaviours
chart.add({
'title': 'Violet',
'xlink': 'http://en.wikipedia.org/wiki/Violet_(color)'
}, [{
'value': 3,
'label': 'This is violet',
'xlink': {
'href': 'http://en.wikipedia.org/wiki/Violet_(color)',
'target': '_self'}
}])
'target': '_self'}}])
q = chart.render_pyquery()
links = q('a')
assert(len(links) == 8) # 7 links and 1 tooltip
if issubclass(chart.cls, pygal.graph.worldmap.Worldmap):
# No country is found in this case so:
assert len(links) == 4 # 3 links and 1 tooltip
else:
assert len(links) == 8 # 7 links and 1 tooltip

Loading…
Cancel
Save