From e5b74b05b4e688f7084d73bc7dcd9cbf9a98c45e Mon Sep 17 00:00:00 2001 From: Florian Mounier Date: Tue, 27 Mar 2012 14:01:49 +0200 Subject: [PATCH] Add executable pygal_gen --- pygal/__init__.py | 9 ++++--- pygal/config.py | 6 +++-- pygal_gen.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++ setup.py | 4 ++- 4 files changed, 78 insertions(+), 6 deletions(-) create mode 100755 pygal_gen.py diff --git a/pygal/__init__.py b/pygal/__init__.py index f557fda..00f475c 100644 --- a/pygal/__init__.py +++ b/pygal/__init__.py @@ -16,9 +16,7 @@ # # You should have received a copy of the GNU Lesser General Public License # along with pygal. If not, see . -__version__ = '0.9.17' -from collections import namedtuple - +__version__ = '0.9.18' from pygal.graph.bar import Bar from pygal.graph.horizontal import HorizontalBar from pygal.graph.stackedbar import StackedBar @@ -29,3 +27,8 @@ from pygal.graph.xy import XY from pygal.graph.pie import Pie from pygal.graph.radar import Radar from pygal.config import Config + +"""List of all chart types""" +CHARTS = [ + Bar, HorizontalBar, StackedBar, HorizontalStackedBar, + Line, StackedLine, XY, Pie, Radar] diff --git a/pygal/config.py b/pygal/config.py index 1112ee3..159f9ca 100644 --- a/pygal/config.py +++ b/pygal/config.py @@ -27,8 +27,10 @@ class Config(object): """Class holding config values""" _horizontal = False - # Graph width and height - width, height = 800, 600 + # Graph width + width = 800 + # Graph height + height = 600 # Display values in human readable format (ie: 12.4M) human_readable = False # Display values in logarithmic scale diff --git a/pygal_gen.py b/pygal_gen.py new file mode 100755 index 0000000..d96429b --- /dev/null +++ b/pygal_gen.py @@ -0,0 +1,65 @@ +#!/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 . +import argparse +import pygal + +parser = argparse.ArgumentParser( + description='Generate pygal chart in command line', + prog='pygal_gen', + version=pygal.__version__) + +parser.add_argument('-t', '--type', dest='type', default='Line', + choices=map(lambda x: x.__name__, pygal.CHARTS), + help='Kind of chart to generate') + +parser.add_argument('-o', '--output', dest='filename', default='pygal_out.svg', + help='Filename to write the svg to') + +parser.add_argument('-s', '--serie', dest='series', nargs='+', action='append', + help='Add a serie in the form (title val1 val2...)') + +for key, val in pygal.config.Config.__dict__.items(): + if not key.startswith('_') and not hasattr(val, '__call__'): + opt_name = key + opts = {'type': str} + if val != None: + opts['type'] = type(val) + elif 'labels' in key: + opts['nargs'] = '+' + if opts['type'] == bool: + del opts['type'] + opts['action'] = 'store_true' if not val else 'store_false' + if val: + opt_name = 'no-' + opt_name + if key == 'interpolate': + opts['choices'] = [ + 'linear', 'nearest', 'zero', 'slinear', 'quadratic', + 'cubic', 'krogh', 'barycentric', 'univariate'] + parser.add_argument( + '--%s' % opt_name, dest=key, default=val, **opts) + +config = parser.parse_args() + +chart = getattr(pygal, config.type)(**vars(config)) + +for serie in config.series: + chart.add(serie[0], map(float, serie[1:])) + +chart.render_to_file(config.filename) diff --git a/setup.py b/setup.py index c9ea035..9fb9059 100644 --- a/setup.py +++ b/setup.py @@ -21,14 +21,16 @@ from setuptools import setup, find_packages setup( name="pygal", - version='0.9.17', + version='0.9.18', description="A python svg graph plotting library", author="Kozea", + url="http://pygal.org/", author_email="florian.mounier@kozea.fr", license="GNU LGPL v3", platforms="Any", packages=find_packages(), provides=['pygal'], + scripts=["pygal_gen.py"], keywords=["svg", "graph", "diagram", "plot", "histogram", "kiviat"], tests_require=["pytest", "pyquery", "flask"], package_data={'pygal': ['css/*', 'js/*']},