Parameter manager system
Project description
PChcker
灵活的参数管理系统
架构特性
同源
- 保持参数架构内数据的唯一性
class P1(Param):
name = Field()
@Field(origin="name")
def user_name(self, default_value):
return default_value
p1 = P1()
p1.name = "Acca"
p1.user_name # Acca
继承
- 提供参数的业务层面的灵活性
class P1(Param):
name = Field()
class P2(P1):
@Field(origin="name")
def user_name(self, default_value):
return default_value
p2 = P2()
p2.name = "Acca"
p2.user_name # Acca
集成
- 为大型的参数模型,提供简单性的实现模式
class P1(Param):
name = Field()
class P2(Param):
last_update = Field()
class P3(P1, P2):
@Field()
def state(self, default_value):
name = self.name
last_update = self.last_update.isoformat
return f"{name}'s docs update at {last_update}"
p1 = P3()
p1.name = "Alice"
p1.last_update = datetime.now()
p1.state # Alice's docs update at 2020-10-13T11:34:06.370998
数据分层
这里有点参考了redux的设计思维,让所有的状态更新,都保留在state层,而stroe层只提供基础的入参条件。
Store层
class FlaskStore(Store, Param):
@Field()
def form(self, default_value=None):
return request.form
@Field()
def cookies(self, default_value=None):
return request.cookies
因为field的机制,store层可以轻松的将任何的数据结构进行解构,并组成你想要的形式,这样对于开发人员来说,是十分友好的,因为我们可以定义自己需要的空间,而不是每次都要重新去定义一遍。另外,定义好store层,能够让参数解析的架构层和业务层有较好的分割,毕竟,store管理不算是参数管理的主要功能。
State层
flask_store = FlaskStore()
class P1(Param):
user_name = Field(origin="form.uname", store=[flask_store])
p1 = P1()
p1.user_name # will load data from request.form
state层默认嵌入在param对象中,可以说,每一个param,就是一个state层的数据实体,因为Field机制,我们可以轻松的变更param层的数据。
降级策略
参数的降级主要发生在两个主要流程中
- 参数加载流程
- 参数解析流程(特性条件下)
为了较好的支撑降级策略,特地采用了多源点 + 多store的策略集合,可以实现,按照源点序列或者store序列,不断的降级取值的模式。在选择优先级上,origin > store,因为origin往往体现的是用户使用时候的直接体验,应该是接近用户想法的取值续流。
class TestStore(Store, Param):
@Field
def sheet(self, default_value):
return {
"a": "123"
}
class T2Store(Store, Param):
@Field
def sheet(self, default_value):
return {
"b": "221"
}
test_store = TestStore()
test_store2 = T2Store()
class P1(Param):
a = Field(origin=["sheet.b", "c", "sheet.a"], store=[test_store, test_store2])
class P2(Param):
a = Field(origin="sheet.a", store=[test_store, test_store2])
class P3(Param):
a = Field(origin=["sheet.a", "sheet.b"], store=[test_store2])
p1 = P1()
p2 = P2()
p3 = P3()
print(p1.a, p2.a, p3.a) # 221 123 221
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ParameterChecker-0.0.2.tar.gz.
File metadata
- Download URL: ParameterChecker-0.0.2.tar.gz
- Upload date:
- Size: 5.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3b6ca6069b2ef8636ed2c53fdcd2aafc921f010aacd455a7297c615b19e61962
|
|
| MD5 |
e7b79c8c95f0dddd5627a6b88d532b77
|
|
| BLAKE2b-256 |
534b4655e2284a401af5edbe68f40e27ceaddd3ccce33c239c5ba7d82a6629bd
|
File details
Details for the file ParameterChecker-0.0.2-py3-none-any.whl.
File metadata
- Download URL: ParameterChecker-0.0.2-py3-none-any.whl
- Upload date:
- Size: 7.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d2c6ca272b53e91cd637ce5567db9a41feb45b128ad575a3c3a41e14a1c39aac
|
|
| MD5 |
1ac77f0c61893393d0c6144c70996410
|
|
| BLAKE2b-256 |
c41e0b02175833afd3ce55354ff18c21dd14bae96eb69c4bfb249b2b361818b1
|