Sindbad~EG File Manager
# 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
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists