Source code for flakeheaven._patched._plugins
# built-in
from collections import defaultdict
# external
from flake8.plugins.manager import Checkers, PluginManager
[docs]class MultiDict:
def __init__(self):
self._data = defaultdict(list)
[docs] def get(self, name: str, default=None):
items = self._data[name]
if items:
return items[0]
return default
[docs] def getlist(self, name: str, default=None) -> list:
items = self._data[name]
if items:
return items
return default
def __getitem__(self, name):
return self._data[name]
def __setitem__(self, name, value):
self._data[name].append(value)
[docs] def items(self):
for name, values in self._data.items():
for value in values:
yield name, value
[docs] def values(self):
for values in self._data.values():
for value in values:
yield value
[docs]class FlakeHeavenPluginManager(PluginManager):
def __init__(self, namespace, local_plugins=None):
self.namespace = namespace
self.plugins = MultiDict()
self.names = []
self._load_local_plugins(local_plugins or [])
self._load_entrypoint_plugins()
[docs] def map(self, func, *args, **kwargs):
for plugin in self.plugins.values():
yield func(plugin, *args, **kwargs)
[docs] def versions(self):
plugins_seen = set()
for plugin in self.plugins.values():
plugin_name = plugin.plugin_name
if plugin.plugin_name in plugins_seen:
continue
plugins_seen.add(plugin_name)
yield (plugin_name, plugin.version)
[docs]class FlakeHeavenCheckers(Checkers):
def __init__(self, local_plugins=None):
self.manager = FlakeHeavenPluginManager(
namespace=self.namespace,
local_plugins=local_plugins,
)
self.plugins_loaded = False