12cf2e8247
Add IsEvadedOffense to EFPenalty Fix remote log reading in not Windows
110 lines
3.5 KiB
Python
110 lines
3.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# This file is part of pygal
|
|
#
|
|
# A python svg graph plotting library
|
|
# Copyright © 2012-2016 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.
|
|
|
|
"""
|
|
from .__about__ import * # noqa: F401,F403
|
|
|
|
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()]
|