2019-10-26 16:27:16 +08:00
|
|
|
import logging
|
|
|
|
from discovery import DiscoveryConfig
|
2019-10-26 16:54:31 +08:00
|
|
|
from utils.plugins import BaseMixin
|
2019-10-26 16:27:16 +08:00
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
PLUGIN_PACKAGE_NAME = 'discovery.plugins'
|
|
|
|
|
|
|
|
|
2019-10-26 16:54:31 +08:00
|
|
|
class DiscoveryFactory(BaseMixin):
|
2019-10-26 16:27:16 +08:00
|
|
|
PLUGIN_TYPE = 'Discovery'
|
2019-10-26 17:19:57 +08:00
|
|
|
|
2019-10-26 16:27:16 +08:00
|
|
|
def __init__(self, searchpath=None):
|
2019-10-26 16:54:31 +08:00
|
|
|
super().__init__(searchpath=searchpath, package_name=PLUGIN_PACKAGE_NAME)
|
2019-10-26 16:27:16 +08:00
|
|
|
|
2019-10-26 16:54:31 +08:00
|
|
|
def _create(self, plugin_class, **kwargs):
|
2020-03-14 13:30:21 +08:00
|
|
|
readonly_topo = kwargs.pop('readonly_topo', None)
|
|
|
|
if not readonly_topo:
|
|
|
|
raise RuntimeError('Please pass readonly_topo to create discovery!')
|
2019-10-26 16:27:16 +08:00
|
|
|
|
|
|
|
plugin_config = DiscoveryConfig.Create()
|
2020-03-14 13:30:21 +08:00
|
|
|
plugin = plugin_class.Create(plugin_config=plugin_config, readonly_topo=readonly_topo, **kwargs)
|
2019-10-26 16:27:16 +08:00
|
|
|
return plugin
|