No-config

Latest version: v0.1.4

Safety actively analyzes 622295 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 1 of 2

0.1.3

修改

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

python
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.init`的`file_path`参数设计时没有考虑到远程配置,此版本改变了一些参数细节,使其能支持更多种初始化方式,详细信息见[初始化](https://ncdhz.github.io/no_config/#/./config_api?id=初始化)。

3. 配置文件嵌套可以很清晰的区分开发与生产环境,因此在`Config.init`中增加了`config_path`参数,用于指定嵌套配置文件的路径,详细信息见[文件嵌套](https://ncdhz.github.io/no_config/#/./function_tutorial?id=文件嵌套)。

增加

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

python
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='别名')`的方式更改。[配置注入别名](https://ncdhz.github.io/no_config/#/./inject_tutorial?id=配置注入别名)。

BUG

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

0.1.0

简介

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

python
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](https://github.com/ncdhz/no_config/blob/main/examples/tutorial/inject/start.py)

python
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](https://github.com/ncdhz/no_config/blob/main/examples/tutorial/inject/advance_class.py)

python
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](https://github.com/ncdhz/no_config/blob/main/examples/tutorial/inject/advance_func.py)

python
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)

0.0.6

修改功能

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

1. 配置文件[examples/tutorial/type_inject/type_inject.yaml](https://github.com/ncdhz/no_config/blob/main/examples/tutorial/type_inject/type_inject.yaml)

python
app:
name: type-inject-name
user:
username: ncdhz-type-inject


2. 源码文件[examples/tutorial/type_inject/type_inject_attribute.py](https://github.com/ncdhz/no_config/blob/main/examples/tutorial/type_inject/type_inject_attribute.py)

python
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)

0.0.5

增加功能

> 方法注入

1. 配置文件[examples/tutorial/function_inject/function_inject.yaml](https://github.com/ncdhz/no_config/blob/main/examples/tutorial/function_inject/function_inject.yaml)

yaml
app:
name: function-inject-name


2. 源码文件[examples/tutorial/function_inject/function_inject.py](https://github.com/ncdhz/no_config/blob/main/examples/tutorial/function_inject/function_inject.py)

python
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`为属性值时报错。

0.0.4

增加功能

> 增加基础类型支持。

1. 布尔值支持。
2. `yaml`的`set`支持。

0.0.3

增加功能

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

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

Page 1 of 2

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.