diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..02bbb60
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,165 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc.
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+
+ This version of the GNU Lesser General Public License incorporates
+the terms and conditions of version 3 of the GNU General Public
+License, supplemented by the additional permissions listed below.
+
+ 0. Additional Definitions.
+
+ As used herein, "this License" refers to version 3 of the GNU Lesser
+General Public License, and the "GNU GPL" refers to version 3 of the GNU
+General Public License.
+
+ "The Library" refers to a covered work governed by this License,
+other than an Application or a Combined Work as defined below.
+
+ An "Application" is any work that makes use of an interface provided
+by the Library, but which is not otherwise based on the Library.
+Defining a subclass of a class defined by the Library is deemed a mode
+of using an interface provided by the Library.
+
+ A "Combined Work" is a work produced by combining or linking an
+Application with the Library. The particular version of the Library
+with which the Combined Work was made is also called the "Linked
+Version".
+
+ The "Minimal Corresponding Source" for a Combined Work means the
+Corresponding Source for the Combined Work, excluding any source code
+for portions of the Combined Work that, considered in isolation, are
+based on the Application, and not on the Linked Version.
+
+ The "Corresponding Application Code" for a Combined Work means the
+object code and/or source code for the Application, including any data
+and utility programs needed for reproducing the Combined Work from the
+Application, but excluding the System Libraries of the Combined Work.
+
+ 1. Exception to Section 3 of the GNU GPL.
+
+ You may convey a covered work under sections 3 and 4 of this License
+without being bound by section 3 of the GNU GPL.
+
+ 2. Conveying Modified Versions.
+
+ If you modify a copy of the Library, and, in your modifications, a
+facility refers to a function or data to be supplied by an Application
+that uses the facility (other than as an argument passed when the
+facility is invoked), then you may convey a copy of the modified
+version:
+
+ a) under this License, provided that you make a good faith effort to
+ ensure that, in the event an Application does not supply the
+ function or data, the facility still operates, and performs
+ whatever part of its purpose remains meaningful, or
+
+ b) under the GNU GPL, with none of the additional permissions of
+ this License applicable to that copy.
+
+ 3. Object Code Incorporating Material from Library Header Files.
+
+ The object code form of an Application may incorporate material from
+a header file that is part of the Library. You may convey such object
+code under terms of your choice, provided that, if the incorporated
+material is not limited to numerical parameters, data structure
+layouts and accessors, or small macros, inline functions and templates
+(ten or fewer lines in length), you do both of the following:
+
+ a) Give prominent notice with each copy of the object code that the
+ Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the object code with a copy of the GNU GPL and this license
+ document.
+
+ 4. Combined Works.
+
+ You may convey a Combined Work under terms of your choice that,
+taken together, effectively do not restrict modification of the
+portions of the Library contained in the Combined Work and reverse
+engineering for debugging such modifications, if you also do each of
+the following:
+
+ a) Give prominent notice with each copy of the Combined Work that
+ the Library is used in it and that the Library and its use are
+ covered by this License.
+
+ b) Accompany the Combined Work with a copy of the GNU GPL and this license
+ document.
+
+ c) For a Combined Work that displays copyright notices during
+ execution, include the copyright notice for the Library among
+ these notices, as well as a reference directing the user to the
+ copies of the GNU GPL and this license document.
+
+ d) Do one of the following:
+
+ 0) Convey the Minimal Corresponding Source under the terms of this
+ License, and the Corresponding Application Code in a form
+ suitable for, and under terms that permit, the user to
+ recombine or relink the Application with a modified version of
+ the Linked Version to produce a modified Combined Work, in the
+ manner specified by section 6 of the GNU GPL for conveying
+ Corresponding Source.
+
+ 1) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (a) uses at run time
+ a copy of the Library already present on the user's computer
+ system, and (b) will operate properly with a modified version
+ of the Library that is interface-compatible with the Linked
+ Version.
+
+ e) Provide Installation Information, but only if you would otherwise
+ be required to provide such information under section 6 of the
+ GNU GPL, and only to the extent that such information is
+ necessary to install and execute a modified version of the
+ Combined Work produced by recombining or relinking the
+ Application with a modified version of the Linked Version. (If
+ you use option 4d0, the Installation Information must accompany
+ the Minimal Corresponding Source and Corresponding Application
+ Code. If you use option 4d1, you must provide the Installation
+ Information in the manner specified by section 6 of the GNU GPL
+ for conveying Corresponding Source.)
+
+ 5. Combined Libraries.
+
+ You may place library facilities that are a work based on the
+Library side by side in a single library together with other library
+facilities that are not Applications and are not covered by this
+License, and convey such a combined library under terms of your
+choice, if you do both of the following:
+
+ a) Accompany the combined library with a copy of the same work based
+ on the Library, uncombined with any other library facilities,
+ conveyed under the terms of this License.
+
+ b) Give prominent notice with the combined library that part of it
+ is a work based on the Library, and explaining where to find the
+ accompanying uncombined form of the same work.
+
+ 6. Revised Versions of the GNU Lesser General Public License.
+
+ The Free Software Foundation may publish revised and/or new versions
+of the GNU Lesser General Public License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Library as you received it specifies that a certain numbered version
+of the GNU Lesser General Public License "or any later version"
+applies to it, you have the option of following the terms and
+conditions either of that published version or of any later version
+published by the Free Software Foundation. If the Library as you
+received it does not specify a version number of the GNU Lesser
+General Public License, you may choose any version of the GNU Lesser
+General Public License ever published by the Free Software Foundation.
+
+ If the Library as you received it specifies that a proxy can decide
+whether future versions of the GNU Lesser General Public License shall
+apply, that proxy's public statement of acceptance of any version is
+permanent authorization for you to choose that version for the
+Library.
\ No newline at end of file
diff --git a/demo/moulinrouge.py b/demo/moulinrouge.py
index 253afd1..408b934 100755
--- a/demo/moulinrouge.py
+++ b/demo/moulinrouge.py
@@ -1,5 +1,22 @@
#!/usr/bin/env python
-
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from moulinrouge import create_app
app = create_app()
diff --git a/demo/moulinrouge/__init__.py b/demo/moulinrouge/__init__.py
index 3bbada2..ae03926 100644
--- a/demo/moulinrouge/__init__.py
+++ b/demo/moulinrouge/__init__.py
@@ -1,4 +1,21 @@
# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from flask import Flask, Response, render_template, url_for
from log_colorizer import make_colored_stream_handler
from moulinrouge.data import labels, series
diff --git a/demo/moulinrouge/data.py b/demo/moulinrouge/data.py
index a7e67f0..2e78233 100644
--- a/demo/moulinrouge/data.py
+++ b/demo/moulinrouge/data.py
@@ -1,4 +1,21 @@
# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
labels = ['AURSAUTRAUIA',
'dpvluiqhu enuie',
diff --git a/out.py b/out.py
index 7d7ace1..c41ba9e 100755
--- a/out.py
+++ b/out.py
@@ -54,11 +54,11 @@ hstackedbar.add('--->', rng3)
with open('out-horizontalstackedbar.svg', 'w') as f:
f.write(hstackedbar.render())
-line = Line(Config(y_scale=.0005))
+line = Line(Config(y_scale=.0005, include_x_axis=True))
rng = range(-30, 31, 5)
-line.add('test1', [cos(x / 10.) for x in rng])
-line.add('test2', [sin(x / 10.) for x in rng])
-line.add('test3', [cos(x / 10.) - sin(x / 10.) for x in rng])
+line.add('test1', [1000 + cos(x / 10.) for x in rng])
+line.add('test2', [1000 + sin(x / 10.) for x in rng])
+line.add('test3', [1000 + cos(x / 10.) - sin(x / 10.) for x in rng])
line.x_labels = map(str, rng)
line.title = "Line test"
with open('out-line.svg', 'w') as f:
diff --git a/pygal/__init__.py b/pygal/__init__.py
index 5371e49..b5dfb9e 100644
--- a/pygal/__init__.py
+++ b/pygal/__init__.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from collections import namedtuple
from pygal.graph.bar import Bar
diff --git a/pygal/base.py b/pygal/base.py
deleted file mode 100644
index 732b387..0000000
--- a/pygal/base.py
+++ /dev/null
@@ -1,143 +0,0 @@
-from pygal.serie import Serie
-from pygal.view import Margin, Box
-from pygal.util import round_to_scale, cut, rad
-from pygal.svg import Svg
-from pygal.config import Config
-from math import log10, sin, cos
-
-
-class BaseGraph(object):
- """Graphs commons"""
-
- def __init__(self, config=None):
- self.config = config or Config()
- self.svg = Svg(self)
- self.series = []
- self.margin = Margin(*([20] * 4))
- self._x_labels = self._y_labels = None
- self._box = Box()
-
- def __getattr__(self, attr):
- if attr in dir(self.config):
- return object.__getattribute__(self.config, attr)
- return object.__getattribute__(self, attr)
-
- def _pos(self, min_, max_, scale):
- order = round(log10(max(abs(min_), abs(max_)))) - 1
- while (max_ - min_) / float(10 ** order) < 4:
- order -= 1
- step = float(10 ** order)
- while (max_ - min_) / step > 20:
- step *= 2.
- positions = set()
- if self.x_start_at_zero:
- position = 0
- else:
- position = round_to_scale(min_, step)
- while position < (max_ + step):
- rounded = round_to_scale(position, scale)
- if min_ <= rounded <= max_:
- positions.add(rounded)
- position += step
- if not positions:
- return [min_]
- return positions
-
- def _text_len(self, lenght, fs):
- return lenght * 0.6 * fs
-
- def _get_text_box(self, text, fs):
- return (fs, self._text_len(len(text), fs))
-
- def _get_texts_box(self, texts, fs):
- max_len = max(map(len, texts))
- return (fs, self._text_len(max_len, fs))
-
- def _compute(self):
- """Initial computations to draw the graph"""
-
- def _compute_margin(self):
- if self.show_legend:
- h, w = self._get_texts_box(
- cut(self.series, 'title'), self.legend_font_size)
- self.margin.right += 10 + w + self.legend_box_size
-
- if self.title:
- h, w = self._get_text_box(self.title, self.title_font_size)
- self.margin.top += 10 + h
-
- if self._x_labels:
- h, w = self._get_texts_box(
- cut(self._x_labels), self.label_font_size)
- self.margin.bottom += 10 + max(
- w * sin(rad(self.x_label_rotation)), h)
- if self.x_label_rotation:
- self.margin.right = max(
- .5 * w * cos(rad(self.x_label_rotation)),
- self.margin.right)
- if self._y_labels:
- h, w = self._get_texts_box(
- cut(self._y_labels), self.label_font_size)
- self.margin.left += 10 + max(
- w * cos(rad(self.y_label_rotation)), h)
-
- @property
- def _legends(self):
- return [serie.title for serie in self.series]
-
- def _decorate(self):
- self.svg.set_view()
- self.svg.make_graph()
- self.svg.x_axis()
- self.svg.y_axis()
- self.svg.legend()
- self.svg.title()
-
- def _draw(self):
- self._compute()
- self._compute_margin()
- self._decorate()
- self._plot()
-
- def add(self, title, values):
- self.series.append(Serie(title, values, len(self.series)))
-
- def render(self):
- if len(self.series) == 0 or sum(
- map(len, map(lambda s: s.values, self.series))) == 0:
- return "No data"
- try:
- self.validate()
- self._draw()
- return self.svg.render()
- except Exception:
- from traceback import format_exc
- error_svg = (
- ''
- ''
- ''
- return error_svg
-
- def validate(self):
- if self.x_labels:
- assert len(self.series[0].values) == len(self.x_labels)
- for serie in self.series:
- assert len(self.series[0].values) == len(serie.values)
-
- def _in_browser(self):
- from lxml.html import open_in_browser
- self._draw()
- open_in_browser(self.svg.root, encoding='utf-8')
-
- def render_response(self):
- from flask import Response
- return Response(self.render(), mimetype='image/svg+xml')
diff --git a/pygal/config.py b/pygal/config.py
index 6535668..be9bbd3 100644
--- a/pygal/config.py
+++ b/pygal/config.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from pygal.style import DefaultStyle
@@ -40,7 +58,7 @@ class Config(object):
# Set this to the desired radius in px
rounded_bars = False
# Always include x axis
- x_start_at_zero = False
+ include_x_axis = False
# Fill areas
fill = False
diff --git a/pygal/css/graph.css b/pygal/css/graph.css
index e5cc2c6..f5d8117 100644
--- a/pygal/css/graph.css
+++ b/pygal/css/graph.css
@@ -1,3 +1,23 @@
+/*
+ * This file is part of pygal
+ *
+ * A python svg graph plotting library
+ * Copyright © 2012 Kozea
+
+ * This library is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU Lesser General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option) any
+ * later version.
+ *
+ * This library is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with pygal. If not, see .
+*/
+
svg {
background-color: {{ style.background }};
}
diff --git a/pygal/graph/__init__.py b/pygal/graph/__init__.py
index e69de29..98db20d 100644
--- a/pygal/graph/__init__.py
+++ b/pygal/graph/__init__.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
diff --git a/pygal/graph/bar.py b/pygal/graph/bar.py
index 088eead..e14c7be 100644
--- a/pygal/graph/bar.py
+++ b/pygal/graph/bar.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from pygal.graph.graph import Graph
from pygal.util import swap, ident
@@ -62,8 +80,8 @@ class Bar(Graph):
return stack_vals
def _compute(self):
- vals = [val for serie in self.series for val in serie.values]
- self._box.ymin, self._box.ymax = min(min(vals), 0), max(max(vals), 0)
+ self._box.ymin = min(min(self._values), 0)
+ self._box.ymax = max(max(self._values), 0)
x_step = len(self.series[0].values)
x_pos = [x / float(x_step) for x in range(x_step + 1)
] if x_step > 1 else [0, 1] # Center if only one value
diff --git a/pygal/graph/base.py b/pygal/graph/base.py
index dad7cbf..aed77ab 100644
--- a/pygal/graph/base.py
+++ b/pygal/graph/base.py
@@ -3,6 +3,7 @@ from pygal.view import Margin, Box
from pygal.util import round_to_scale, cut, rad
from pygal.svg import Svg
from pygal.config import Config
+from pygal.util import cached_property
from math import log10, sin, cos
@@ -31,10 +32,7 @@ class BaseGraph(object):
while (max_ - min_) / step > max_scale:
step *= 2.
positions = set()
- if self.x_start_at_zero:
- position = 0
- else:
- position = round_to_scale(min_, step)
+ position = round_to_scale(min_, step)
while position < (max_ + step):
rounded = round_to_scale(position, scale)
if min_ <= rounded <= max_:
@@ -82,10 +80,14 @@ class BaseGraph(object):
self.margin.left += 10 + max(
w * cos(rad(self.y_label_rotation)), h)
- @property
+ @cached_property
def _legends(self):
return [serie.title for serie in self.series]
+ @cached_property
+ def _values(self):
+ return [val for serie in self.series for val in serie.values]
+
def _draw(self):
self._compute()
self._compute_margin()
diff --git a/pygal/graph/horizontal.py b/pygal/graph/horizontal.py
index bb4b5c0..4fdf9e8 100644
--- a/pygal/graph/horizontal.py
+++ b/pygal/graph/horizontal.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from pygal.graph.graph import Graph
from pygal.graph.bar import Bar
from pygal.graph.stackedbar import StackedBar
diff --git a/pygal/graph/line.py b/pygal/graph/line.py
index 25eb916..da03c90 100644
--- a/pygal/graph/line.py
+++ b/pygal/graph/line.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from pygal.graph.graph import Graph
@@ -24,8 +42,13 @@ class Line(Graph):
serie_node, view_values, class_='line', close=self._line_close)
def _compute(self):
- vals = [val for serie in self.series for val in serie.values]
- self._box.ymin, self._box.ymax = min(vals), max(vals)
+ if self.include_x_axis:
+ self._box.ymin = min(min(self.values), 0)
+ self._box.ymax = max(max(self.values), 0)
+ else:
+ self._box.ymin = min(self.values)
+ self._box.ymax = max(self.values)
+
x_step = len(self.series[0].values)
self._x_pos = [x / float(x_step - 1) for x in range(x_step)
] if x_step != 1 else [.5] # Center if only one value
diff --git a/pygal/graph/pie.py b/pygal/graph/pie.py
index f3b0a84..90f9beb 100644
--- a/pygal/graph/pie.py
+++ b/pygal/graph/pie.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from pygal.serie import Serie
from pygal.graph.graph import Graph
from math import cos, sin, pi
diff --git a/pygal/graph/radar.py b/pygal/graph/radar.py
index 7df97be..07666bd 100644
--- a/pygal/graph/radar.py
+++ b/pygal/graph/radar.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from pygal.graph.line import Line
from pygal.view import PolarView
from pygal.util import deg
@@ -62,10 +80,9 @@ class Radar(Line):
).text = label
def _compute(self):
- vals = [val for serie in self.series for val in serie.values]
self._box._margin *= 2
self._box.xmin = self._box.ymin = 0
- self._box.xmax = self._box.ymax = self._rmax = max(vals)
+ self._box.xmax = self._box.ymax = self._rmax = max(self.values)
x_step = len(self.series[0].values)
delta = 2 * pi / float(len(self.x_labels))
diff --git a/pygal/graph/stackedbar.py b/pygal/graph/stackedbar.py
index 51bba91..8652f34 100644
--- a/pygal/graph/stackedbar.py
+++ b/pygal/graph/stackedbar.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from pygal.graph.bar import Bar
diff --git a/pygal/graph/xy.py b/pygal/graph/xy.py
index f72083c..41fa5b5 100644
--- a/pygal/graph/xy.py
+++ b/pygal/graph/xy.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from pygal.graph.line import Line
diff --git a/pygal/serie.py b/pygal/serie.py
index c02652d..6c65c15 100644
--- a/pygal/serie.py
+++ b/pygal/serie.py
@@ -1,3 +1,23 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
+
+
class Serie(object):
def __init__(self, title, values, index):
self.title = title
diff --git a/pygal/style.py b/pygal/style.py
index 1991da8..bc4d728 100644
--- a/pygal/style.py
+++ b/pygal/style.py
@@ -1,3 +1,23 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
+
+
class Style(object):
def __init__(self,
background='black',
diff --git a/pygal/svg.py b/pygal/svg.py
index 4fa58b6..d377062 100644
--- a/pygal/svg.py
+++ b/pygal/svg.py
@@ -1,4 +1,21 @@
# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
import os
from lxml import etree
from pygal.util import template
diff --git a/pygal/test/__init__.py b/pygal/test/__init__.py
index e69de29..98db20d 100644
--- a/pygal/test/__init__.py
+++ b/pygal/test/__init__.py
@@ -0,0 +1,18 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
diff --git a/pygal/test/test_bar.py b/pygal/test/test_bar.py
index 3e85540..f01066e 100644
--- a/pygal/test/test_bar.py
+++ b/pygal/test/test_bar.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from pygal import Bar
diff --git a/pygal/test/test_line.py b/pygal/test/test_line.py
index ea75fd4..524efc2 100644
--- a/pygal/test/test_line.py
+++ b/pygal/test/test_line.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from pygal import Line
from pygal.config import Config
from math import cos, sin
diff --git a/pygal/test/test_style.py b/pygal/test/test_style.py
index 2167ebd..61e38ce 100644
--- a/pygal/test/test_style.py
+++ b/pygal/test/test_style.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from pygal.style import Style
diff --git a/pygal/test/test_util.py b/pygal/test/test_util.py
index 63cb18e..f287cf4 100644
--- a/pygal/test/test_util.py
+++ b/pygal/test/test_util.py
@@ -1,4 +1,21 @@
# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from pygal.util import round_to_int, round_to_float, _swap_curly, template
from pytest import raises
diff --git a/pygal/util.py b/pygal/util.py
index 2699a44..d64aa84 100644
--- a/pygal/util.py
+++ b/pygal/util.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from decimal import Decimal
from math import floor, pi
@@ -55,3 +73,18 @@ def template(string, **kwargs):
swap = lambda tuple_: tuple(reversed(tuple_))
ident = lambda x: x
+
+
+# Stolen from brownie http://packages.python.org/Brownie/
+class cached_property(object):
+ def __init__(self, getter, doc=None):
+ self.getter = getter
+ self.__module__ = getter.__module__
+ self.__name__ = getter.__name__
+ self.__doc__ = doc or getter.__doc__
+
+ def __get__(self, obj, type=None):
+ if obj is None:
+ return self
+ value = obj.__dict__[self.__name__] = self.getter(obj)
+ return value
diff --git a/pygal/view.py b/pygal/view.py
index 5886891..c59b127 100644
--- a/pygal/view.py
+++ b/pygal/view.py
@@ -1,3 +1,21 @@
+# -*- coding: utf-8 -*-
+# This file is part of pygal
+#
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
from math import sin, cos
diff --git a/setup.py b/setup.py
index dfc7223..8e27f93 100644
--- a/setup.py
+++ b/setup.py
@@ -1,13 +1,45 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+# This file is part of pygal
#
-# Public Domain
-from setuptools import setup, find_packages
+# A python svg graph plotting library
+# Copyright © 2012 Kozea
+#
+# This library is free software: you can redistribute it and/or modify it under
+# the terms of the GNU Lesser General Public License as published by the Free
+# Software Foundation, either version 3 of the License, or (at your option) any
+# later version.
+#
+# This library is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
+# details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with pygal. If not, see .
+from setuptools import setup
setup(
name="pygal",
- packages=find_packages(),
+ version='0.9',
+ description="A python svg graph plotting library",
+ author="Kozea",
+ author_email="florian.mounier@kozea.fr",
+ license="GNU LGPL v3",
+ platforms="Any",
+ packages=['pygal'],
+ provides=['pygal'],
+ keywords=["svg", "graph", "diagram", "plot", "histogram", "kiviat"],
tests_require=["pytest"],
package_data={'pygal': ['css/*']},
- install_requires=['lxml'])
+ install_requires=['lxml'],
+ classifiers=[
+ "Development Status :: 4 - Beta",
+ "Environment :: Console",
+ "Intended Audience :: End Users/Desktop",
+ "License :: OSI Approved :: "
+ "GNU Library or Lesser General Public License (LGPL)",
+ "Operating System :: OS Independent",
+ "Programming Language :: Python :: 2",
+ "Topic :: Multimedia :: Graphics :: Presentation"])