Skip to main content

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层的数据。

降级策略

参数的降级主要发生在两个主要流程中

  1. 参数加载流程
  2. 参数解析流程(特性条件下)

为了较好的支撑降级策略,特地采用了多源点 + 多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

ParameterChecker-0.0.2.tar.gz (5.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ParameterChecker-0.0.2-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

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

Hashes for ParameterChecker-0.0.2.tar.gz
Algorithm Hash digest
SHA256 3b6ca6069b2ef8636ed2c53fdcd2aafc921f010aacd455a7297c615b19e61962
MD5 e7b79c8c95f0dddd5627a6b88d532b77
BLAKE2b-256 534b4655e2284a401af5edbe68f40e27ceaddd3ccce33c239c5ba7d82a6629bd

See more details on using hashes here.

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

Hashes for ParameterChecker-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d2c6ca272b53e91cd637ce5567db9a41feb45b128ad575a3c3a41e14a1c39aac
MD5 1ac77f0c61893393d0c6144c70996410
BLAKE2b-256 c41e0b02175833afd3ce55354ff18c21dd14bae96eb69c4bfb249b2b361818b1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page