自动加载配置文件(.ini)

autoconfiguration的Python项目详细描述


python自动配置

自动加载配置文件(.ini)。在

使用

必须首先调用autoconfiguration包的init函数来初始化配置。向此函数传递任意数量的配置文件。将加载所有传递的文件。另外,默认情况下,全局配置文件(config.ini)将始终被加载。全局配置文件的名称必须是config.ini。所有其他文件必须以config-开头,以.ini结尾。您不必为init函数使用完整的文件名。您可以使用config-.ini之间的名称。在

init函数需要第二个参数config_class。这应该是一个包含配置文件所有部分的dataclass。字段的类型也应该是dataclasses。这些数据类应该包含相应部分的键。在

数据类中键的支持数据类型:

  • 结构
  • 内景
  • 浮动
  • 复杂
  • 布尔
  • 列表
  • 元组
  • 迪克特
  • 可选(如果在配置中找不到密钥,值将设置为None

也支持默认值,如果在配置中找不到相应的键,将设置这些值。在

第三个参数是可选的。这应该是包含配置文件的目录的路径。支持绝对路径。默认值是config。如果目录的名称是config,并且它存在于执行应用程序的目录中,则此操作有效。在

示例

配置文件:

config.ini

[section]
key=test

config-dev.ini

^{pr2}$

数据类:

fromdataclassesimportdataclass,fieldfromtypingimportList,Tuple,Dict,Any,Optional@dataclassclassSection:key:str@dataclassclassTest:test_int:inttest_bool:booltest_float:floattest_complex:complextest_list:List[Any]test_tuple:Tuple[int,str]test_dict:Dictoptional:Optional[str]default_int:int=987default_list:List[str]=field(default_factory=lambda:[1,2,3])@dataclassclassConfig:section:Sectiontest:Test

初始化自动配置:

fromautoconfigurationimportautoconfigurationconfig:Config=autoconfiguration.init("dev",config_class=Config)

通过指定变量的类型(config: Config),可以在ide中启用自动完成。在

初始化自动配置后,您可以通过调用get函数从代码中的任何位置获取配置:

fromautoconfigurationimportautoconfigurationconfig:Config=autoconfiguration.get()

init创建的实例将被缓存。这意味着initget函数始终为特定配置类返回相同的实例。在

上面的config类的实例如下所示:

Config(section=Section(key="test"),types=Types(test_int=123,test_bool=False,test_float=0.987,test_complex=1j,test_list=["abc",123],test_tuple=(123,"abc"),test_dict={"test":123,2:"abc"},optional=None,default_int=987,default_list=[1,2,3],),)

多个实例

如果使用另一个配置类调用init,则自动配置将创建并返回一个新实例并缓存该实例。在

如果在没有config class参数的情况下调用get,它总是返回第一个缓存实例。将config类传递给get以获取另一个实例:

fromautoconfigurationimportautoconfigurationconfig:SecondConfig=autoconfiguration.get(SecondConfig)

请参见example/main.py以获取完整的示例。在

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

推荐PyPI第三方库


热门话题
@RequestMapping中的java Spring通配符作为@PathVariable   java Sonar违反if语句中未使用的方法   java如何重置Progressbar?   java需要澄清Dockerfile中的命令吗?   java Graphics2D对象以不同方式渲染同一对象的透明度   Java中泛型集合的循环迭代   java如何替换Plus。新playservicesauth:8.3.0和googleservices:1.5.0beta2中的PeopleApi?   java从绑定到数据库表的组合框中检索文本   awt Java交叉错误   java使用Paint object在安卓中创建字体和文本样式   找不到java TokenRegex文件错误   java JDBC Oracle数据库,准备好的语句中的编号参数意味着什么?   java访问switch语句中的对象   sql JAVA:如何减去当前时间和存储在数据库中的数据时间。?