mirror of https://github.com/Kozea/pygal.git
Python to generate nice looking SVG graph
http://pygal.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
3.5 KiB
109 lines
3.5 KiB
# -*- coding: utf-8 -*- |
|
# This file is part of pygal |
|
# |
|
# A python svg graph plotting library |
|
# Copyright © 2012-2015 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 <http://www.gnu.org/licenses/>. |
|
""" |
|
Main pygal package. |
|
|
|
This package holds all available charts in pygal, the Config class |
|
and the maps extensions namespace module. |
|
|
|
""" |
|
|
|
__version__ = '2.2.1' |
|
|
|
import pkg_resources |
|
import sys |
|
import traceback |
|
import warnings |
|
|
|
from pygal.graph.bar import Bar |
|
from pygal.graph.box import Box |
|
from pygal.graph.dot import Dot |
|
from pygal.graph.funnel import Funnel |
|
from pygal.graph.gauge import Gauge |
|
from pygal.graph.solidgauge import SolidGauge |
|
from pygal.graph.histogram import Histogram |
|
from pygal.graph.horizontalbar import HorizontalBar |
|
from pygal.graph.horizontalstackedbar import HorizontalStackedBar |
|
from pygal.graph.line import Line |
|
from pygal.graph.horizontalline import HorizontalLine |
|
from pygal.graph.horizontalstackedline import HorizontalStackedLine |
|
from pygal.graph.pie import Pie |
|
from pygal.graph.pyramid import Pyramid, VerticalPyramid |
|
from pygal.graph.radar import Radar |
|
from pygal.graph.stackedbar import StackedBar |
|
from pygal.graph.stackedline import StackedLine |
|
from pygal.graph.time import DateLine, DateTimeLine, TimeLine, TimeDeltaLine |
|
from pygal.graph.treemap import Treemap |
|
from pygal.graph.xy import XY |
|
from pygal.graph.graph import Graph |
|
from pygal.config import Config |
|
from pygal import maps |
|
|
|
|
|
CHARTS_BY_NAME = dict( |
|
[(k, v) for k, v in locals().items() |
|
if isinstance(v, type) and issubclass(v, Graph) and v != Graph]) |
|
|
|
|
|
from pygal.graph.map import BaseMap |
|
for entry in pkg_resources.iter_entry_points('pygal.maps'): |
|
try: |
|
module = entry.load() |
|
except Exception: |
|
warnings.warn('Unable to load %s pygal plugin \n\n%s' % ( |
|
entry, traceback.format_exc()), Warning) |
|
continue |
|
setattr(maps, entry.name, module) |
|
for k, v in module.__dict__.items(): |
|
if isinstance(v, type) and issubclass(v, BaseMap) and v != BaseMap: |
|
CHARTS_BY_NAME[entry.name.capitalize() + k + 'Map'] = v |
|
|
|
CHARTS_NAMES = list(CHARTS_BY_NAME.keys()) |
|
CHARTS = list(CHARTS_BY_NAME.values()) |
|
|
|
|
|
class PluginImportFixer(object): |
|
|
|
""" |
|
Allow external map plugins to be imported from pygal.maps package. |
|
|
|
It is a ``sys.meta_path`` loader. |
|
""" |
|
|
|
def find_module(self, fullname, path=None): |
|
""" |
|
Tell if the module to load can be loaded by |
|
the load_module function, ie: if it is a ``pygal.maps.*`` |
|
module. |
|
""" |
|
if fullname.startswith('pygal.maps.') and hasattr( |
|
maps, fullname.split('.')[2]): |
|
return self |
|
return None |
|
|
|
def load_module(self, name): |
|
""" |
|
Load the ``pygal.maps.name`` module from the previously |
|
loaded plugin |
|
""" |
|
if name not in sys.modules: |
|
sys.modules[name] = getattr(maps, name.split('.')[2]) |
|
return sys.modules[name] |
|
|
|
sys.meta_path += [PluginImportFixer()]
|
|
|