跳转到主要内容

Python包,用于存储您的应用程序设置。验证器已内置!

此版本被撤回的原因

未维护。请考虑使用https://pypi.ac.cn/project/pydantic-settings/

项目描述

pysettings

PyPI version Linting Testing

Pysettings是一个Python包,用于存储您的应用程序设置。与一些设置管理器相比,此包受到了Django Rest Frameworks验证器的启发,您可以在事先验证用户输入。

这简化了您的代码,因为设置不需要在您的应用程序逻辑中进行验证。提供的功能包括

  • 在不使用全局对象的情况下存储应用程序设置。
  • 使用BaseSettings类扩展设置。生成的类可以使用settings.is_valid()方法进行验证。
  • 字段由接受validators作为参数的Option字段表示。如果选项未由用户设置,则可以设置一个default值。
  • 开箱即用的验证器:not_nullis_https_url
  • 可以添加自定义验证器作为函数。

需求

  • Python 3.7+

入门指南

pysettings在PyPI上可用

$ pip install pysettings-validator

创建您的设置

from pysettings.base import BaseSettings
from pysettings.options import Option
from pysettings.validators import is_https_url

# Class definition
class Settings(BaseSettings):
    url = Option(validators=[is_https_url])
    description = Option()

# Use settings in your application
settings = Settings()
settings.url = "https://example.com"
settings.description = "A shiny Website!"
settings.is_valid()  # returns (True, [])

设置API

settings实例不允许设置未定义为Option的属性。如果您尝试设置一个未定义的设置,将引发一个OptionNotAvailable异常

class Settings(BaseSettings):
    description = Option()

# Use settings in your application
settings = Settings()
settings.url = "https://example.com"  # raise `OptionNotAvailable`

is_valid()提供了一个raise_exception=True关键字参数,以便您可以在代码中不引发异常

class Settings(BaseSettings):
    url = Option(validators=[is_https_url])

# Use settings in your application
settings = Settings()
settings.url = "http://example.com"
settings.is_valid()                       # raise ConfigNotValid exception
settings.is_valid(raise_exception=False)  # return (False, [{'url': [{'is_https_url': 'The schema must be HTTPS'}]}])

创建自定义验证器

# app/validators.py
from pysettings.exceptions import ValidationError

def is_a_boolean(value):
    if isinstance(value, bool):
        return True
    else:
        raise ValidationError("The value must a Boolean")

# app/settings.py
from .validators import is_a_boolean

class Settings(BaseSettings):
    dry_run = Option(validators=[is_a_boolean])
    description = Option()

# app/main.py
settings = Settings()
settings.dry_run = "Yes"
settings.description = "Dry run mode!"
settings.is_valid()  # raises ConfigNotValid exception

测试您的设置(pytest)

如果您需要在测试期间更改某些设置,您可以使用以下代码片段在每个测试后恢复先前的设置

# tests/conftest.py
from app.config import settings as app_settings   # Import your global settings
from pysettings.test import SettingsWrapper       # Import settings wrapper


@pytest.fixture(scope="function")
def settings():
    wrapper = SettingsWrapper(app_settings)
    # (Optional) Include test overrides
    wrapper.DATABASE_URL = "sqlite://"
    yield wrapper
    # Restore original settings
    wrapper.finalize()

# tests/test_settings.py
def test_settings(settings):
    # Change settings for this test only
    settings.BATCH_SIZE = 100

    # ... Test your code ...

开发

即使项目主要是为了个人需求设计的,我们仍然接受外部贡献。如果您认为某些部分可以通过更通用的接口进行暴露,请随时在GitHub上创建一个issue并讨论您的建议。

编码规范

我们使用flake8作为风格指南的执行工具。但说也罢了,我们也使用black来重排我们的代码,即使是引号、多行块等其他部分也能保持良好的风格。在提交代码之前,请确保运行black来重排您的PR。

测试

tox用于执行以下测试矩阵:

  • lint:启动flake8black --check以确保代码遵循我们的风格规范
  • py{3.7,3.8,3.9,3.10,3.11}:启动py.test以在不同的Python版本上执行测试。

要启动完整的测试矩阵,只需

$ tox

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源代码分发

pysettings-validator-0.4.0.tar.gz (11.9 kB 查看哈希值)

上传时间 源代码

构建分发

pysettings_validator-0.4.0-py3-none-any.whl (8.9 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面