用于系统地组织从数据库、环境变量、参数文件或用户选择中获取的用户首选项的模块。

propargs的Python项目详细描述


丙烷

用于系统地组织从数据存储、环境变量、参数文件、命令行和/或用户选择中获取的用户首选项的模块。

工作原理

概述

propargs通过依次加载以下五个输入阶段来初始化:

  1. 数据存储
  2. 属性字典
  3. 环境
  4. 命令行
  5. 用户

以上是默认顺序。用户可以更改该顺序。

可以在除用户以外的任何阶段添加属性。在一个阶段中定义的属性可能在以后的阶段中被覆盖。

每个属性都有一个键和一个值,可以像字典一样访问:

>>> pa = PropArgs.create_props()
>>> pa["prop_nm"] = 1  # assigns the value 1 to the property "prop_nm"
>>> pa["prop_name"]
1

除此之外,每个属性可能都有关联的元数据。这些是目前的问题 用户输入提示、数据类型、上限和下限。如果在装载过程中的任何时候 元数据规则被破坏(例如,val超过上限)将引发错误。

该系统与为IPython和Jupyter开发的TraceTeT配置模块有一些相似之处,但是更灵活,从更多的来源寻找配置信息,并且不与Python类相关联。(属性结构本身保留配置信息,但这些值可以加载到类中,也可以不根据应用程序的需要加载。)

详细信息

数据存储

数据存储将是json文件或数据库。

数据存储文件将在初始化时指定

PropArgs.create_props(ds_file=file_name)

json格式如下:

{
    "prop_name_1": {
        "val": 1,
        "question": "What value should this property have?",
        "atype": "INT",
        "hival": 10,
        "lowval": 0
    },
    "prop_name_2": {
        "val": "Hello World."
    },
    "prop_name_3": {
    }
}

请注意,属性不需要定义所有(或任何)字段。如果未指定“val”,则默认为None

数据库数据存储的详细信息…

属性字典

可以通过在初始化时传递字典来加载属性:

>>> pa = PropArgs.create_props(prop_dict=prop_dict)

字典格式如下:

{
    "prop_name_1": {
        "val": 1,
        "question": "What value should this property have?",
        "atype": "INT",
        "hival": 10,
        "lowval": 0
    },
    "prop_name_2": {
        "val": "Hello World."
    }
}

环境

propargs将读取并添加初始化propargs的程序的所有环境变量。 (即python的os.environ中的所有内容)

命令行

将从命令行读取属性,如下所示

$ python program_reading_props.py --props prop_1=val_1,prop_2=val_2,prop_3=val_3  #etc...

用户

最后一步是请求用户输入。只会提示用户有关有问题的属性。

默认行为是在客户端的命令行上提示问题:

>>> pa = PropArgs.create_props()
What is the value of prop_1? ("I'm the default prop value") <enter_value>
What is the value of prop_2? [0.0-100.0] (20) <enter_value>

然而,客户端程序可能以自己的方式接管和提问。在这种情况下,我们将提供一个标志 这将跳过用户阶段,而客户端将调用pa.get_questions()来获取属性的json 问题。

>>> pa = PropArgs(skip_user_questions=True)
>>> pa.get_questions()
{
    "prop_name_1": {
        "val": 2.0,
        "question": "",
        "atype": "DBL",
        "hival": 10.0,
        "lowval": -0.5
    },
    "prop_name_2": {
        "val": "default",
        "question": "What should prop_name_2 be?"
    }
}

可以通过其他方式添加或修改道具

除了访问propargs对象(如字典)外,还可以通过 get(key, default=None)方法。或者如果密钥尚未与属性关联, 新属性将绑定到default(如果未指定default,则绑定到None)。

>>> pa = PropArgs.create_props()
>>> pa.get('new_prop', default=2)
2
>>> pa.get('newer_prop')
None

学分

想法-罗伯特·多德森

发展-吉恩·卡拉汉和内森·康罗伊

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java提供了大量的Quartz工作线程   来自SOAPException的java抛出超时异常   java通过REST web服务同步PostgreSQL过程调用   java Hibernate:在关联表中设置值   javaimapidlechanneladapterjavax。邮政AuthenticationFailedException:[警报]同时连接太多   JavaApacheStorm:stormkafkamonitor脚本引发异常   java将jar链接到战争   Matlab与Java的集成方法   安卓公司。谷歌。ads.AdView未能实例化java。lang.ClassNotFoundException:org。json。JSONException   “String forecastStr=mForecastAdapter.getItem(position);”行中出现java错误阳光工程   java如何将Mono中的列表属性作为流量进行操作?   java DecimalFormat类不必要地给出整数   java@IfProfileValue两个spring配置文件   java如何使用SwingWorker创建多线程?   java从扩展SwingWorker的内部类触发事件   java二叉树高度实现