From be82b9fd5467a2c646fbd666a3ae53d0f0c6614c Mon Sep 17 00:00:00 2001 From: Florian Mounier Date: Wed, 15 Feb 2012 13:18:11 +0100 Subject: [PATCH] Set license --- COPYING | 165 +++++++++++++++++++++++++++++++++++ demo/moulinrouge.py | 19 +++- demo/moulinrouge/__init__.py | 17 ++++ demo/moulinrouge/data.py | 17 ++++ out.py | 8 +- pygal/__init__.py | 18 ++++ pygal/base.py | 143 ------------------------------ pygal/config.py | 20 ++++- pygal/css/graph.css | 20 +++++ pygal/graph/__init__.py | 18 ++++ pygal/graph/bar.py | 22 ++++- pygal/graph/base.py | 12 +-- pygal/graph/horizontal.py | 18 ++++ pygal/graph/line.py | 27 +++++- pygal/graph/pie.py | 18 ++++ pygal/graph/radar.py | 21 ++++- pygal/graph/stackedbar.py | 18 ++++ pygal/graph/xy.py | 18 ++++ pygal/serie.py | 20 +++++ pygal/style.py | 20 +++++ pygal/svg.py | 17 ++++ pygal/test/__init__.py | 18 ++++ pygal/test/test_bar.py | 18 ++++ pygal/test/test_line.py | 18 ++++ pygal/test/test_style.py | 18 ++++ pygal/test/test_util.py | 17 ++++ pygal/util.py | 33 +++++++ pygal/view.py | 18 ++++ setup.py | 40 ++++++++- 29 files changed, 672 insertions(+), 164 deletions(-) create mode 100644 COPYING delete mode 100644 pygal/base.py 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 = ( - '' - '' - '') - trace = (format_exc() - .replace('&', '&') - .replace('<', '<') - .replace('>', '>')) - for i, line in enumerate(trace.split('\n')): - error_svg += '%s' % ( - (i + 1) * 25, line) - 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"])