Skip to content

Releases: ncdhz/no_config

v0.1.4

04 Nov 16:35
Compare
Choose a tag to compare

修复BUG

  1. 多配置文件输入中字典解析错误。
  2. 配置覆盖中cover参数在递归中漏写导致不能成功覆盖。

v0.1.3

09 Oct 14:58
Compare
Choose a tag to compare

修改

  1. 版本0.1.0@Inject 的参数可以直接指代类的初始化参数,这种做法限制了版本的迭代,对后期其它参数的引入造成很大的影响。所以在以后的版本中将取消这种做法,改成通过type参数指代。

    from no_config import Inject
    
    @Inject
    class User:
        def __init__(self, username, password):
            pass
    
    @Inject(type=dict(user=User))
    class App:
        def __init__(self, id, user):
            pass
    
    if __name__ == '__main__':
        app = App('app-id', dict(username='username', password='password'))
        print(app.id)
        print(app.user.username)
        print(app.user.password)
  2. Config.initfile_path参数设计时没有考虑到远程配置,此版本改变了一些参数细节,使其能支持更多种初始化方式,详细信息见初始化

  3. 配置文件嵌套可以很清晰的区分开发与生产环境,因此在Config.init中增加了config_path参数,用于指定嵌套配置文件的路径,详细信息见文件嵌套

增加

实际开发中请求接口通常会得到一个字典,此版本引入了参数config_inject可以直接初始化对象,这样能极大程度的减少了字典映射成类的繁琐过程。

from no_config import Inject

@Inject
class User:
    def __init__(self, username, password):
        pass

@Inject(type=dict(user=User))
class App:
    def __init__(self, id, user):
        pass

if __name__ == '__main__':

    config_inject = App(config_inject=dict(
        id='config-inject-app-id',
        user=dict(
            username='config-inject-username',
            password='config-inject-password'
        )
    ))
    print(config_inject.id)
    print(config_inject.user.username)
    print(config_inject.user.password)

为了防止config_inject与类原本参数重复,可以通过@Inject(config_inject='别名')的方式更改。配置注入别名

BUG

no_config 0.1.2@Configtype参数的优先等级较低,从而导致了配置初始化时,没有新建类,只是直接修改了原类中的属性,这与实际情况不符。这一情况在最新版本中已经进行修改。

v0.1.0

17 Sep 16:26
Compare
Choose a tag to compare

简介

no_config库保存配置时采用的是属性探测,通过递归拿到获取属性。如下面例子,如果没有添加self.username=usernameself.password=password代码,在保存配置时将不会保存usernamepassword的配置。显然在初始化构建配置类时,会增加很多无用的代码,这是一种吃力不讨好的工作。

class User:
    def __init__(self, username, password):
        self.username = username
        self.password = password
        
@Config()
class App:
    user = User('ncdhz', 'ncdhz')

@Inject使用

@Inject添加在方法上可以轻松的完成参数到属性的注入。

  1. 源码文件examples/tutorial/inject/start.py

    from no_config import Inject, Config
    
    @Inject
    class User:
        def __init__(self, username, password):
            # 这里可以添加其它代码对username和password处理
            pass
    
    @Config
    class App:
        user = User('ncdhz', 'ncdhz')
    
    if __name__ == '__main__':
        print(Config.get_all_config())
        print(App.user.username)
        print(App.user.password)

类注入

实际开发中,类的初始化参数可能是某个类,可以通过@Inject(user=User)的方式进行指定。

  1. 源码文件examples/tutorial/inject/advance_class.py

    from no_config import Inject
    
    @Inject
    class User:
        def __init__(self, username, password):
            pass
    
    @Inject(user=User)
    class App:
        def __init__(self, id, user):
            pass
    
    if __name__ == '__main__':
        app = App('app_id', dict(username='username', password='password'))
        print(app.id)
        print(app.user.username)
        print(app.user.password)

方法注入

如果需要对参数进行一些处理,可以使用如下方式。

  1. 源码文件examples/tutorial/inject/advance_func.py

    from no_config import Inject
    
    def split_name(name):
        return name.split('-')
    
    @Inject(name=split_name)
    class App:
        def __init__(self, id, name):
            pass
    
    if __name__ == '__main__':
        app = App('app_id', 'ncdhz-inject-func')
        print(app.id)
        print(app.name)

v0.0.6

16 Sep 17:51
Compare
Choose a tag to compare

修改功能

在类型注入中,类的初始化是通过初始化函数参数映射。原来属性注入指把配置多余的属性添加到self字典中,现属性注入指把所有属性都添加到self字典中(不包含self中已存在属性)。

  1. 配置文件examples/tutorial/type_inject/type_inject.yaml

    app:
        name: type-inject-name
        user:
            username: ncdhz-type-inject
  2. 源码文件examples/tutorial/type_inject/type_inject_attribute.py

    from no_config import Config
    from os import path
    
    class User:
        pass
    
    @Config(type=dict(user=User))
    class App:
        name = None
        user = None
    
    if __name__ == '__main__':
        Config.init(path.join(path.dirname(__file__), 'type_inject.yaml'))
        print(App.name)
        # 这里username任然会注入成功
        print(App.user.username)

v0.0.5

13 Sep 16:22
Compare
Choose a tag to compare

增加功能

方法注入

  1. 配置文件examples/tutorial/function_inject/function_inject.yaml

    app:
        name: function-inject-name
  2. 源码文件examples/tutorial/function_inject/function_inject.py

    from no_config import Config
    from os import path
    
    def analysis(name):
        return name.split('-')
    
    @Config()
    class App:
        name = analysis
    
    if __name__ == '__main__':
        Config.init(path.join(path.dirname(__file__), 'function_inject.yaml'))
        print(App.name)

修复bug

  1. 基础类型bytes为属性值时报错。

v0.0.4

11 Sep 14:17
Compare
Choose a tag to compare

增加功能

增加基础类型支持。

  1. 布尔值支持。
  2. yamlset支持。

v0.0.3

10 Sep 16:12
Compare
Choose a tag to compare

增加功能

增加获取和保存配置功能。

  1. get_config 获取initrefresh方法映射的配置。
  2. get_all_config 获取所有配置。
  3. save 保存get_all_config的配置。

v0.0.2

07 Sep 13:41
Compare
Choose a tag to compare

增加功能

在类型注入时可以注入函数,对配置数据进行处理。

  1. 配置文件

    app:
        name: type-inject-name
  2. 源码文件

    from no_config import Config
    from os import path
    
    def split_name(name):
        return name.split('-')
    
    @Config(type=dict(name=split_name))
    class App:
        name = None
    
    if __name__ == '__main__':
        Config.init(path.join(path.dirname(__file__), 'type_inject_func.yaml'))
        print(App.name)

v0.0.1

06 Sep 14:28
Compare
Choose a tag to compare

no_config

致力于更简单的配置。

快速开始

  1. 配置文件

    # 创建配置文件start.yaml
    user:
        username: ncdhz
        password: ncdhz
  2. 源码文件

    from os import path
    from no_config import Config
    
    # 配置注入
    @Config
    class User:
        password = None
        username = None
    
    if __name__ == '__main__':
        # 配置初始化
        # 全局只需一次初始化
        # 在更改配置之后可以通过此函数刷新配置
        Config.init(path.join(path.dirname(__file__), 'start.yaml'))
        print(User.password)
        print(User.username)

官方文档

https://ncdhz.github.io/no_config