Releases: ncdhz/no_config
v0.1.4
v0.1.3
修改
-
版本
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)
-
Config.init
的file_path
参数设计时没有考虑到远程配置,此版本改变了一些参数细节,使其能支持更多种初始化方式,详细信息见初始化。 -
配置文件嵌套可以很清晰的区分开发与生产环境,因此在
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
中@Config
的type
参数的优先等级较低,从而导致了配置初始化时,没有新建类,只是直接修改了原类中的属性,这与实际情况不符。这一情况在最新版本中已经进行修改。
v0.1.0
简介
no_config
库保存配置时采用的是属性探测
,通过递归拿到获取属性。如下面例子,如果没有添加self.username=username
和self.password=password
代码,在保存配置时将不会保存username
和password
的配置。显然在初始化构建配置类时,会增加很多无用的代码,这是一种吃力不讨好的工作。
class User:
def __init__(self, username, password):
self.username = username
self.password = password
@Config()
class App:
user = User('ncdhz', 'ncdhz')
@Inject使用
@Inject
添加在方法上可以轻松的完成参数到属性的注入。
-
源码文件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)
的方式进行指定。
-
源码文件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)
方法注入
如果需要对参数进行一些处理,可以使用如下方式。
-
源码文件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
修改功能
在类型注入中,类的初始化是通过初始化函数参数映射。原来
属性注入
指把配置多余的属性添加到self
字典中,现属性注入
指把所有属性都添加到self
字典中(不包含self中已存在属性)。
-
配置文件examples/tutorial/type_inject/type_inject.yaml
app: name: type-inject-name user: username: ncdhz-type-inject
-
源码文件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
增加功能
方法注入
-
配置文件examples/tutorial/function_inject/function_inject.yaml
app: name: function-inject-name
-
源码文件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
- 基础类型
bytes
为属性值时报错。
v0.0.4
v0.0.3
v0.0.2
增加功能
在类型注入时可以注入函数,对配置数据进行处理。
-
配置文件
app: name: type-inject-name
-
源码文件
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
no_config
致力于更简单的配置。
快速开始
-
配置文件
# 创建配置文件start.yaml user: username: ncdhz password: ncdhz
-
源码文件
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)