晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
| DIR:/opt/cloudlinux/venv/lib64/python3.11/site-packages/setoptconf/source/ |
| Current File : //opt/cloudlinux/venv/lib64/python3.11/site-packages/setoptconf/source/commandline.py |
import argparse
import shlex
import sys
from copy import deepcopy
from ..config import Configuration
from ..setting import BooleanSetting, ChoiceSetting, ListSetting
from .base import Source
__all__ = ("CommandLineSource",)
# pylint: disable=R0201
class CommandLineSource(Source):
# pylint: disable=R0913
def __init__(
self,
arguments=None,
options=None,
version=None,
parser_options=None,
positional=None,
):
super(CommandLineSource, self).__init__()
if arguments is None:
self.arguments = sys.argv[1:]
elif isinstance(arguments, str):
self.arguments = shlex.split(arguments)
elif isinstance(arguments, (list, tuple)):
self.arguments = arguments
else:
raise TypeError("arguments must be a string or list of strings")
self.version = version
self.options = options or {}
self.parser_options = parser_options or {}
self.positional = positional or ()
def get_flags(self, setting):
if setting.name in self.options:
if "flags" in self.options[setting.name]:
return self.options[setting.name]["flags"]
flags = []
flag = "--%s" % setting.name.lower().replace("_", "-")
flags.append(flag)
return flags
def get_action(self, setting):
if isinstance(setting, BooleanSetting):
return "store_false" if setting.default else "store_true"
elif isinstance(setting, ListSetting):
return "append"
else:
return "store"
# pylint: disable=W0613
def get_default(self, setting):
# Caveat: Returning something other than SUPPRESS probably won't
# work the way you'd think.
return argparse.SUPPRESS
def get_type(self, setting):
if isinstance(setting, (ListSetting, BooleanSetting)):
return None
elif isinstance(setting, ChoiceSetting):
return setting.subtype.sanitize
else:
return setting.sanitize
def get_dest(self, setting):
return setting.name
def get_choices(self, setting):
if isinstance(setting, ChoiceSetting):
return setting.choices
else:
return None
def get_help(self, setting):
if setting.name in self.options:
if "help" in self.options[setting.name]:
return self.options[setting.name]["help"]
return None
def get_metavar(self, setting):
if setting.name in self.options:
if "metavar" in self.options[setting.name]:
return self.options[setting.name]["metavar"]
return None
def build_argument(self, setting):
flags = self.get_flags(setting)
action = self.get_action(setting)
default = self.get_default(setting)
argtype = self.get_type(setting)
dest = self.get_dest(setting)
choices = self.get_choices(setting)
arghelp = self.get_help(setting)
metavar = self.get_metavar(setting)
argument_kwargs = {
"action": action,
"default": default,
"dest": dest,
"help": arghelp,
}
if argtype:
argument_kwargs["type"] = argtype
if choices:
argument_kwargs["choices"] = choices
if metavar:
argument_kwargs["metavar"] = metavar
return flags, argument_kwargs
def build_parser(self, settings, manager):
parser_options = deepcopy(self.parser_options)
if not parser_options.get("prog") and manager:
parser_options["prog"] = manager.name
parser = argparse.ArgumentParser(**parser_options)
add_version = self.version is not None
for setting in settings:
flags, argument_kwargs = self.build_argument(setting)
parser.add_argument(*flags, **argument_kwargs)
if add_version and setting.name == "version":
# Don't want to conflict with the desired setting
add_version = False
if add_version:
parser.add_argument(
"--version", action="version", version="%(prog)s " + self.version
)
if self.positional:
for name, options in self.positional:
parser.add_argument(name, **options)
return parser
def get_config(self, settings, manager=None, parent=None):
parser = self.build_parser(settings, manager)
parsed = parser.parse_args(self.arguments)
for setting in settings:
if hasattr(parsed, setting.name):
setting.value = getattr(parsed, setting.name)
if self.positional and manager:
arguments = {}
for name, _ in self.positional:
if hasattr(parsed, name):
arguments[name] = getattr(parsed, name)
setattr(manager, "arguments", arguments)
return Configuration(settings=settings, parent=parent)
|