{ "info": { "author": "Daniel Daniels", "author_email": "danields761@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3 :: Only", "Topic :: Internet", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "# Pydantic settings\n> Hipster-orgazmic tool to mange application settings\n\n[![Build Status](https://travis-ci.com/danields761/pydantic-settings.svg?branch=master)](https://travis-ci.com/danields761/pydantic-settings)\n[![PyPI version](https://badge.fury.io/py/pydantic-settings.svg)](https://badge.fury.io/py/pydantic-settings)\n[![Documentation Status](https://readthedocs.org/projects/pydantic-settings/badge/?version=latest)](https://pydantic-settings.readthedocs.io/en/latest/?badge=latest)\n\nLibrary which extends [__pydantic__](https://github.com/samuelcolvin/pydantic) functionality in scope of application settings. *Pydantic* already have settings\nimplementation, e.g. `pydantic.BaseSettings`, but from my point it's missing some useful features:\n\n1. Overriding settings values by environment variables even for nested fields\n2. Providing detailed information about value location inside a loaded file or environment variable, which helps to point user mistake\n3. Documenting model fields isn't feels comfortable, but it's really essential to write comprehensive documentation for application settings\n\n> __NOTE:__ Alpha quality\n\n## Installation\n\nUsing pip:\n\n```sh\npip install pydantic-settings\n```\n\n## Usage example\n\n### Override values by env variables\n\nAllows to override values for nested fields if they are represented as *pydantic* model.\n\nHere is example:\n\n```python\nfrom pydantic import BaseModel, ValidationError\nfrom pydantic_settings import BaseSettingsModel\n\nclass Nested(BaseModel):\n foo: int\n\nclass Settings(BaseSettingsModel):\n nested: Nested\n\n\ntry:\n Settings.from_env({'APP_nested_FOO': 'NOT AN INT'})\nexcept ValidationError as e:\n assert e.raw_errors[0].env_loc == 'APP_nested_FOO' # shows exact env variable name\n```\n\n### Point exact error location inside file\n\n```python\nfrom pydantic import BaseModel, IntegerError\nfrom pydantic_settings import BaseSettingsModel, LoadingValidationError, load_settings, FileLocation\n\nclass Nested(BaseModel):\n foo: int\n\nclass Settings(BaseSettingsModel):\n nested: Nested\n\nconf_text = \"\"\"\nnested:\n foo: 'NOT AN INT'\n\"\"\"\n\ntry:\n load_settings(Settings, conf_text, type_hint='yaml')\nexcept LoadingValidationError as e:\n assert e.raw_errors[0].loc == ('nested', 'foo')\n assert e.raw_errors[0].text_loc == FileLocation(line=3, col=10, end_line=3, end_col=22)\n assert isinstance(e.raw_errors[0].exc, IntegerError)\n\n```\n\n\n### Extracts fields documentation\n\nAllows to extract *Sphinx* style attributes documentation by processing AST tree of class definition\n\n```python\nfrom pydantic_settings import BaseSettingsModel\n\nclass Foo(BaseSettingsModel):\n class Config:\n build_attr_docs = True\n\n bar: str\n \"\"\"here is docs\"\"\"\n\n #: this style is't supported, but probably will be added in future\n baz: int\n\nassert Foo.__fields__['bar'].schema.description == 'here is docs'\nassert Foo.__fields__['baz'].schema.description is None # :(\n```\n\n### Online docs\n\nRead more detailed documentation on the project\n[Read The Docs](https://pydantic-settings.readthedocs.io/en/latest/) page.\n\n## Development setup\n\nProject requires [__poetry__](https://github.com/sdispater/poetry) for development setup.\n\n* If you aren't have it already\n\n```sh\npip install poetry\n``` \n\n* Install project dependencies\n\n```sh\npoetry install\n```\n\n* Run tests\n\n```sh\npoetry run pytest .\n```\n\n* Great, all works! Expect one optional step:\n\n* Install [__pre-commit__](https://github.com/pre-commit/pre-commit) for pre-commit hooks\n\n```sh\npip install pre-commit\npre-commit install\n```\n\nThat will install pre-commit hooks, which will check code with *flake8* and *black*.\n\n> *NOTE* project uses __black__ as code formatter, but i'am personally really dislike their\n> *\"double quoted strings everywhere\"* style, that's why `black -S` should be used\n> (anyway it's configured in *pyproject.toml* file)", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/danields761/pydantic-settings", "keywords": "", "license": "MIT", "maintainer": "Daniel Daniels", "maintainer_email": "danields761@gmail.com", "name": "pydantic-settings", "package_url": "https://pypi.org/project/pydantic-settings/", "platform": "", "project_url": "https://pypi.org/project/pydantic-settings/", "project_urls": { "Homepage": "https://github.com/danields761/pydantic-settings", "Repository": "https://github.com/danields761/pydantic-settings" }, "release_url": "https://pypi.org/project/pydantic-settings/0.1.2b0/", "requires_dist": [ "pydantic", "pyyaml (>=5.1.2,<6.0.0)", "tomlkit (>=0.5.5,<0.6.0)", "typing-extensions (>=3.7.4,<4.0.0)", "attrs (>=19.1,<20.0)" ], "requires_python": ">=3.6,<4.0", "summary": "Hipster-orgazmic tool to mange application settings", "version": "0.1.2b0" }, "last_serial": 5804278, "releases": { "0.1.0a1": [ { "comment_text": "", "digests": { "md5": "c6f34ed975b43fb111da1594237620ef", "sha256": "043b9c57db5d030765e914fd9eec1d80266359c88f37975d374dfd0bf4335998" }, "downloads": -1, "filename": "pydantic_settings-0.1.0a1-py3-none-any.whl", "has_sig": false, "md5_digest": "c6f34ed975b43fb111da1594237620ef", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 18722, "upload_time": "2019-08-19T16:44:43", "url": "https://files.pythonhosted.org/packages/24/e3/61c2076f0868c6e46e48e3cc54127b207a2c18fcaaddacea5b017d17e3dd/pydantic_settings-0.1.0a1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "032117be71904e5283aa1acf69748a4c", "sha256": "1a8a87d596732d21ad591e698e60a5ba0f0b292b1e80f33964b8271514b70fd4" }, "downloads": -1, "filename": "pydantic-settings-0.1.0a1.tar.gz", "has_sig": false, "md5_digest": "032117be71904e5283aa1acf69748a4c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 16033, "upload_time": "2019-08-19T16:44:41", "url": "https://files.pythonhosted.org/packages/cc/60/0862fc0e3be14c46a1b39a1be9046ae5484ea7cdfa89897fabcb93e308f8/pydantic-settings-0.1.0a1.tar.gz" } ], "0.1.0a2": [ { "comment_text": "", "digests": { "md5": "9b679b6736834cce87ad4f0560d1a049", "sha256": "aca0c7434b147a0830cb3511cb6f126bbf2937a2344524d50bacc8840b239c09" }, "downloads": -1, "filename": "pydantic_settings-0.1.0a2-py3-none-any.whl", "has_sig": false, "md5_digest": "9b679b6736834cce87ad4f0560d1a049", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 19191, "upload_time": "2019-08-19T17:53:27", "url": "https://files.pythonhosted.org/packages/fb/7e/65300cb8b8ce6d3ace8051ad8bf6c8dc8a794f53fc92155c0b23627b4b3a/pydantic_settings-0.1.0a2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "01715fd11d5c1106c0f27f5cf62ec051", "sha256": "be25d35b2b7a186aa602e89981b48e757fc3533873b758d9bab6fbd4822906cb" }, "downloads": -1, "filename": "pydantic-settings-0.1.0a2.tar.gz", "has_sig": false, "md5_digest": "01715fd11d5c1106c0f27f5cf62ec051", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 17057, "upload_time": "2019-08-19T17:53:26", "url": "https://files.pythonhosted.org/packages/08/55/df77633388bbf4843303b0e1f2990262d1d58ddd7cc75ba85458455a57e7/pydantic-settings-0.1.0a2.tar.gz" } ], "0.1.1b0": [ { "comment_text": "", "digests": { "md5": "a6fc6ee2786c4a7d1137a803974dac2e", "sha256": "ed26a09d297f0e7d8c6aae0b0c94a446157fe43cdbfe17ca722ee1cae1f09a3d" }, "downloads": -1, "filename": "pydantic_settings-0.1.1b0-py3-none-any.whl", "has_sig": false, "md5_digest": "a6fc6ee2786c4a7d1137a803974dac2e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 21121, "upload_time": "2019-08-22T21:45:10", "url": "https://files.pythonhosted.org/packages/3a/d1/cb3b20c505591d014e59db313ad99460b52ffeace5daf4a066451146e8ec/pydantic_settings-0.1.1b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "77c81de439d9617440a44a47b78d8844", "sha256": "6fa0133bb988d73d5eaae426b53e15ed116960ebb5a50c99bd7e4e2b188b75ea" }, "downloads": -1, "filename": "pydantic-settings-0.1.1b0.tar.gz", "has_sig": false, "md5_digest": "77c81de439d9617440a44a47b78d8844", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 18804, "upload_time": "2019-08-22T21:45:08", "url": "https://files.pythonhosted.org/packages/f5/83/482563502c75acf7e7b2cb9662c400e6d8e5c691f8e9596c3b6136cd7917/pydantic-settings-0.1.1b0.tar.gz" } ], "0.1.2b0": [ { "comment_text": "", "digests": { "md5": "9b6ac24b360296e18ebaa8885bee1a08", "sha256": "e35385e738fa25b51a06180959344de5633d8d0d39053d8df5f9c39f3a93bef8" }, "downloads": -1, "filename": "pydantic_settings-0.1.2b0-py3-none-any.whl", "has_sig": false, "md5_digest": "9b6ac24b360296e18ebaa8885bee1a08", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 21114, "upload_time": "2019-09-09T15:53:56", "url": "https://files.pythonhosted.org/packages/89/3e/8db372db1bead0edb07759948e1b28473f26ee13832f260e873a60b9beb2/pydantic_settings-0.1.2b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bd6a31a4d53a0a4aaefa8be2aee8ea1f", "sha256": "a9166293fcef9baaf2859e2e83b3dfa36c91b7529868cc377b35f15091033f4c" }, "downloads": -1, "filename": "pydantic-settings-0.1.2b0.tar.gz", "has_sig": false, "md5_digest": "bd6a31a4d53a0a4aaefa8be2aee8ea1f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 18646, "upload_time": "2019-09-09T15:53:54", "url": "https://files.pythonhosted.org/packages/d7/fa/d09dec80c00724cc995f442b8e2f222f570bdec731a84633a7d1f7122a41/pydantic-settings-0.1.2b0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9b6ac24b360296e18ebaa8885bee1a08", "sha256": "e35385e738fa25b51a06180959344de5633d8d0d39053d8df5f9c39f3a93bef8" }, "downloads": -1, "filename": "pydantic_settings-0.1.2b0-py3-none-any.whl", "has_sig": false, "md5_digest": "9b6ac24b360296e18ebaa8885bee1a08", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4.0", "size": 21114, "upload_time": "2019-09-09T15:53:56", "url": "https://files.pythonhosted.org/packages/89/3e/8db372db1bead0edb07759948e1b28473f26ee13832f260e873a60b9beb2/pydantic_settings-0.1.2b0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bd6a31a4d53a0a4aaefa8be2aee8ea1f", "sha256": "a9166293fcef9baaf2859e2e83b3dfa36c91b7529868cc377b35f15091033f4c" }, "downloads": -1, "filename": "pydantic-settings-0.1.2b0.tar.gz", "has_sig": false, "md5_digest": "bd6a31a4d53a0a4aaefa8be2aee8ea1f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4.0", "size": 18646, "upload_time": "2019-09-09T15:53:54", "url": "https://files.pythonhosted.org/packages/d7/fa/d09dec80c00724cc995f442b8e2f222f570bdec731a84633a7d1f7122a41/pydantic-settings-0.1.2b0.tar.gz" } ] }