晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/cloudlinux/venv/lib/python3.11/site-packages/lvestats/core/ |
| Current File : //opt/cloudlinux/venv/lib/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
import importlib.util
import inspect
import logging
import os
import sys
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:
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
spec = importlib.util.spec_from_file_location(module_name, full_path)
if spec is None:
self.log.error('Unable to find spec for %s', file_name)
continue
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
# 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)
continue
classes_loaded.extend(classes)
sys.modules[module.__name__] = module
except Exception as ex:
self.log.exception('Unable to load %s due to exception %s', file_name, ex)
self.plugins = classes_loaded
|