晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/cloudlinux/venv/lib/python3.11/site-packages/clselect/baseclselect/ |
| Current File : //opt/cloudlinux/venv/lib/python3.11/site-packages/clselect/baseclselect/selector_manager.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
from __future__ import print_function
from __future__ import division
import os
from abc import ABCMeta
from future.utils import iteritems
from clselect.baseclselect import (
ENABLED_STATUS,
NOT_INSTALLED_STATUS
)
from .config import BaseSelectorConfig # NOQA
from .pkgmanager import BasePkgManager # NOQA
from future.utils import with_metaclass
class BaseSelectorManager(with_metaclass(ABCMeta, object)):
"""Responsible for actual interpreter selector high-level API"""
def __init__(self, cfg, pkg):
"""
:type cfg: config.BaseSelectorConfig
:type pkg: pkgmanager.BasePkgManager
"""
self.pkg = pkg # type: BasePkgManager
self.cfg = cfg # type: BaseSelectorConfig
self.is_root_user = os.geteuid() == 0
@property
def selector_enabled(self):
return self.cfg.selector_enabled
@selector_enabled.setter
def selector_enabled(self, val):
self.cfg.selector_enabled = val
self.cfg.save()
@property
def default_version(self):
return self.cfg.get_default_version()
def switch_default_version(self, version):
self.cfg.set_default_version(version)
self.cfg.save()
def set_version_status(self, version, status):
"""Disable/Enable particular interpreter version globally"""
self.cfg.set_version_status(version, status)
self.cfg.save()
def is_version_enabled(self, version):
"""Check whether particular (installed) version is enabled"""
enabled = [k for k, v in iteritems(self.cfg.available_versions)
if v['status'] == ENABLED_STATUS]
return version in enabled
def install_version(self, version):
return self.pkg.install_version(version)
def uninstall_version(self, version):
if version == self.cfg.get_default_version():
return "It's not allowed to uninstall default version"
return self.pkg.remove_version(version)
def get_summary(self, installed_interpreters_only=False):
all_versions = self.cfg.available_versions
available_to_install = []
if not installed_interpreters_only and self.is_root_user:
# Only root can see "in progress" and "not installed yet" versions
# We may change this in future if we have such requirement
processed_now = self.pkg.in_progress()
if processed_now:
all_versions.update(processed_now)
available_to_install = self.pkg.checkout_available()
if available_to_install:
available_to_install = set(available_to_install)
installed_and_in_progress = set(all_versions.keys())
diff = {
ver: {'base_dir': '', 'status': NOT_INSTALLED_STATUS}
for ver in (available_to_install - installed_and_in_progress)
}
all_versions.update(diff)
# Prettify output by converting Major version to Full versions
# if possible
all_versions = {self.pkg.get_full_version(k): v
for k, v in iteritems(all_versions)}
if "" in all_versions:
all_versions.pop("")
return {
'default_version': self.cfg.get_default_version(),
'available_versions': all_versions,
# `Updating` means pkg info is not available right now and we
# already started background process to rebuild that cache.
# Once it finished status becomes `ready` again.
# If we run as user it's always `ready`
'cache_status': ('updating' if available_to_install is None
else 'ready'),
'selector_enabled': self.selector_enabled,
}
|