ok
Direktori : /opt/cloudlinux/venv/lib64/python3.11/site-packages/lvestats/core/ |
Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/lvestats/core/plugin_loader.py |
# coding=utf-8 # # Copyright © Cloud Linux GmbH & Cloud Linux Software, Inc 2010-2019 All Rights Reserved # # Licensed under CLOUD LINUX LICENSE AGREEMENT # http://cloudlinux.com/docs/LICENSE.TXT from __future__ import absolute_import import imp import inspect import logging import os from lvestats.core.plugin import LveStatsPlugin class PluginLoader(object): def check_incorrect_symlink(self, path): """ Check correcting symlink. If symlink incorrect return True :param str path: path to file or symlink :return bool: """ if os.path.islink(path) and not os.path.exists(os.path.realpath(path)): self.log.warning('Incorrect symlink %s', path) return True def __init__(self, plugins_folder): self.log = logging.getLogger(__name__) classes_loaded = [] if os.path.isdir(plugins_folder): file_names = (fn for fn in os.listdir(plugins_folder) if fn.endswith('.py')) for file_name in file_names: imp.acquire_lock() try: module_name, _ = os.path.splitext(file_name) full_path = os.path.join(plugins_folder, file_name) if self.check_incorrect_symlink(full_path): continue module = imp.load_source(module_name, full_path) # Load only subclasses of LveStatsPlugin classes = [x for x in list(module.__dict__.values()) if inspect.isclass(x) and issubclass(x, LveStatsPlugin) and x is not LveStatsPlugin] if not classes: self.log.error('No classes to load found in %s', file_name) classes_loaded.extend(classes) except Exception as ex: self.log.exception('Unable to load %s due to exception %s', file_name, ex) finally: imp.release_lock() self.plugins = classes_loaded