晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/proc/thread-self/root/opt/cloudlinux/venv/lib/python3.11/site-packages/clconfig/ |
| Current File : //proc/thread-self/root/opt/cloudlinux/venv/lib/python3.11/site-packages/clconfig/ui_config_lib.py |
# -*- coding: utf-8 -*-
# ui_config_lib.py - Library for panel config files manipulating for cloudlinux-config utility
# 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 subprocess
import cldetectlib as detect
from clcommon.clexception import FormattedException
from clcommon.clquota import check_quota_enabled
from clcommon.const import Feature
from clcommon.cpapi import is_panel_feature_supported
from clcommon.ui_config import UIConfig
from cllimits.lib import exec_utility
from .clconfig_utils import boolean_to_0_1
class UIConfigException(FormattedException):
pass
DYNAMIC_UI_CTL_CMD = '/usr/share/l.v.e-manager/utils/dynamicui.py'
def get_ui_config():
"""
Retrives UI settings from config file
:return: dict. For example:
{'inodeLimits': {'showUserInodesUsage': False},
'uiSettings': {'hideRubyApp': False, 'hideLVEUserStat': False, 'hidePythonApp': False,
'hidePHPextensions': True}
}
"""
return filter_flags(UIConfig().get_config())
def refresh_panel():
try:
retcode, out, err = exec_utility(DYNAMIC_UI_CTL_CMD, ['--sync-conf=all'], stderr=True)
except OSError as e:
raise UIConfigException({'message': "Can't execute file %(ctl_cmd)s: " + str(e),
'context': {'ctl_cmd': DYNAMIC_UI_CTL_CMD}}) from e
if retcode != 0:
raise UIConfigException({'message': "Error while executing %(ctl_cmd)s: " + out + " " + err,
'context': {'ctl_cmd': DYNAMIC_UI_CTL_CMD}})
def set_ui_config(parameters_dict):
"""
Sets UI settings to UI config file
Using subfunction _set_ui_config
:param parameters_dict: Parameters to set dictionary. For example:
{'inodeLimits': {'showUserInodesUsage': False},
'uiSettings': {'hideRubyApp': False, 'hideLVEUserStat': False, 'hidePythonApp': False,
'hidePHPextensions': True}
}
:return: None
"""
# Backward compatibility cl-config -> cloudlinux-selector on hidePythonApp
try:
# Try to read hidePythonApp key
enablepythonapp = boolean_to_0_1(not parameters_dict['uiSettings']['hidePythonApp'])
# Translate enablepythonapp binary key to disabled/enabled format for cl-selector
lve_to_select = {'0':'disabled', '1': 'enabled'}
# Call cloudlinux selector with translated param
# CL-selector doesn't write changes to ui config file
py_command = ("cloudlinux-selector set --json --interpreter python --selector-status "
+ lve_to_select[enablepythonapp])
subprocess.check_call(py_command, shell=True, executable='/bin/bash',
stdout=subprocess.DEVNULL, stderr=subprocess.STDOUT)
except (subprocess.CalledProcessError, KeyError):
pass
# Call _set_ui_config with all params
# (duplicate cl-selector call to write changes to config file)
_set_ui_config(parameters_dict)
def _set_ui_config(parameters_dict):
"""
Sets UI settings to config file
:param parameters_dict: Parameters to set dictionary. For example:
{'inodeLimits': {'showUserInodesUsage': False},
'uiSettings': {'hideRubyApp': False, 'hideLVEUserStat': False, 'hidePythonApp': False,
'hidePHPextensions': True}
}
:return: None
"""
UIConfig().set_config(parameters_dict)
# Synchronize params with according panel config file
refresh_panel()
def filter_flags(mapped_flags):
panel_filter(mapped_flags.get('uiSettings'))
try:
if check_quota_enabled() is not None:
mapped_flags.pop('inodeLimits')
except KeyError:
pass
try:
if not is_panel_feature_supported(Feature.LVE):
mapped_flags.get('uiSettings', {}).pop('hideLVEUserStat')
except KeyError:
pass
return mapped_flags
def panel_filter(ui_settings):
"""
Function that filters UI Settings dictionary
depending on panel type
:param ui_settings: UI Settings that is filtered
"""
if not detect.is_cpanel() or \
not is_panel_feature_supported(Feature.RUBY_SELECTOR):
ui_settings.pop('hideRubyApp')
if detect.is_plesk() or not is_panel_feature_supported(Feature.PYTHON_SELECTOR):
ui_settings.pop('hidePythonApp')
if not is_panel_feature_supported(Feature.NODEJS_SELECTOR):
ui_settings.pop('hideNodeJsApp')
if not is_panel_feature_supported(Feature.XRAY):
ui_settings.pop('hideXrayApp')
if not is_panel_feature_supported(Feature.PHP_SELECTOR):
ui_settings.pop('hidePhpApp')
ui_settings.pop('hidePHPextensions')
|