{ "info": { "author": "Alexander Rulkov", "author_email": "fatemonk@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Topic :: Software Development :: Build Tools" ], "description": "**Datacast** is a Python package that validates and converts your data.\n\n--------------------------------------------\n\n|pypi| |python_version| |coverage| |license|\n\n--------------------------------------------\n\nBasic Usage\n-----------\n\nInstall with pip:\n\n.. code:: bash\n\n pip install datacast\n\n\nDefine schema (can be any class with annotations) and use ``cast`` function.\n\n.. code:: python\n\n from datacast import cast\n\n class SimpleSchema:\n one: int\n two: str\n three: (lambda x: x ** 2)\n zero: (int, bool)\n four: float = 0.4\n five: None = 'five'\n\n cast({'one': 1, 'two': 2, 'three': 3, 'zero': '0', 'five': 5}, SimpleSchema)\n # {'one': 1, 'two': '2', 'three': 9, 'zero': False, 'four': 0.4, 'five': 5}\n\nRules are simple:\n\n- Params without annotations will be ignored.\n- Annotation is a *caster*, which will be called with the provided value,\n eg. ``bool(0)``.\n- *Caster* is **any** callable. Functions, lambdas, classes etc.\n- It also can be list or tuple (or another iterable).\n Then it acts like a chain of *casters*, eg. ``int('0') -> bool(0) -> False``.\n- If there is no default value - param is required and\n will raise ``RequiredFieldError`` if not provided.\n- ``None`` in annotation means no casting.\n\n\nConfig\n------\nYou can use ``Config`` class which acts like a schema AND stores result data.\n\n.. code:: python\n\n from datacast import Config\n\n class SimpleConfig(Config):\n spam: bool\n ham: None\n rabbit: float = None\n\n config = SimpleConfig({'spam': 0, 'ham': 1})\n assert config.spam == False\n assert config.ham == 1\n assert config.rabbit == None\n assert config._asdict() == {'spam': False, 'ham': 1, 'rabbit': None}\n\nAlso there is ``EnvironConfig`` which loads input data from environment,\ncasts strings to appropriate types and ignores extra vars.\n\n.. code:: python\n\n from datacast import EnvironConfig\n\n class SimpleEnvironConfig(EnvironConfig):\n SPAM: bool\n HAM: int\n RABBIT: str\n NONE_VAL: None\n\n os.environ['SPAM'] = '0'\n os.environ['HAM'] = '1'\n os.environ['RABBIT'] = '2'\n os.environ['NONE_VAL'] = 'null'\n config = SimpleEnvironConfig()\n assert config.SPAM == False\n assert config.HAM == 1\n assert config.RABBIT == '2'\n assert config.NONE_VAL == None\n\n:Valid ``None`` strings: ``'none', 'null', 'nil'``\n:Valid ``True`` strings: ``'true', 't', 'yes', 'y', 'on', '1'``\n:Valid ``False`` strings: ``'false', 'f', 'no', 'n', 'off', '0', ''``\n\nCase doesn't matter.\n\n\nSettings\n--------\n\nYou can specify various settings and apply them in a bunch of different ways.\n\n.. code:: python\n\n from datacast import apply_settings, Settings\n\n @apply_settings(\n on_missing='store',\n missing_value=False\n )\n class SimpleSchema:\n ...\n\n # OR\n\n class SimpleSettings(Settings):\n on_missing = 'store'\n missing_value = False\n\n @apply_settings(SimpleSettings)\n class SimpleSchema:\n ...\n\n # OR pass it to the cast function or Config creation\n\n cast(input_data, SimpleSchema, settings=SimpleSettings)\n cast(input_data, SimpleSchema, on_missing='store', missing_value=False)\n Config(input_data, settings=SimpleSettings)\n Config(input_data, on_missing='store', missing_value=False)\n\n # OR use class attribute\n\n class SimpleSchema:\n __settings__ = SimpleSettings\n # OR\n __settings__ = {'on_missing': 'store', 'missing_value': False}\n ...\n\n\n**List of settings**\n\n=============== ============ ===============================================\nName Default Description\n=============== ============ ===============================================\non_extra ``'ignore'`` What to do with values that absent from schema.\non_invalid ``'raise'`` What to do when casting has failed.\non_missing ``'raise'`` What to do when value is missing but required.\nmissing_value ``None`` What to store when value is missing.\nstore_callables ``False`` If ``False`` - execute callable value on store.\nresult_class ``dict`` Class which stores result data.\nprecasters ``()`` Prepend additional casters.\npostcasters ``()`` Append additional casters.\ncast_defaults ``False`` Cast default values with full casters chain.\nraise_original ``False`` Raise original exception instead of CastError.\n=============== ============ ===============================================\n\n**Options for 'on_extra', 'on_invalid' and 'on_missing'**\n\n:ignore: Value will be ignored and not be stored in the result.\n:store: Value will be stored in the result as is. In case of ``on_missing`` it\n will store ``missing_value``.\n:raise: Corresponding exception will be raised.\n:cast: Value will be casted with precasters, postcasters and then stored.\n Works only with ``on_extra``!\n\nWith ``precasters`` and ``postcasters`` you will transform every caster in\nschema into a chain, which starts and/or ends with those casters.\n\n\n.. |pypi| image:: https://img.shields.io/pypi/v/datacast.svg?style=flat-square&label=version\n :target: https://pypi.org/project/datacast\n :alt: Latest version released on PyPI\n\n.. |python_version| image:: https://img.shields.io/badge/python-%3E%3D3.3-blue.svg?style=flat-square\n :alt: Minimal Python version\n\n.. |coverage| image:: https://img.shields.io/badge/coverage-86%25-yellowgreen.svg?style=flat-square\n :alt: Test coverage\n\n.. |license| image:: https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square\n :target: https://raw.githubusercontent.com/fatemonk/datacast/master/LICENSE\n :alt: Package license\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/fatemonk/datacast", "keywords": "config,env,data,cast", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "datacast", "package_url": "https://pypi.org/project/datacast/", "platform": "", "project_url": "https://pypi.org/project/datacast/", "project_urls": { "Homepage": "https://github.com/fatemonk/datacast" }, "release_url": "https://pypi.org/project/datacast/0.3.5/", "requires_dist": null, "requires_python": ">=3.3", "summary": "Simple way to cast your data.", "version": "0.3.5" }, "last_serial": 5386170, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "ec496ca4852743eadc73cb8ff4a30672", "sha256": "f8bf8551bd0484f18199db15c1e936729bb140f42b63b9a1eb131c73378cdaae" }, "downloads": -1, "filename": "datacast-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ec496ca4852743eadc73cb8ff4a30672", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 7251, "upload_time": "2018-10-16T13:13:03", "url": "https://files.pythonhosted.org/packages/c1/d3/828154b69ba98a2acc196de4ef07a1069876ddc05ec5247f5f537c1849b4/datacast-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f439757364f66541d9e3e1afda6c2121", "sha256": "dee8afb11e52936c27ab5321f697711af35cf8b40106738671eceb1383e46ab1" }, "downloads": -1, "filename": "datacast-0.1.0.tar.gz", "has_sig": false, "md5_digest": "f439757364f66541d9e3e1afda6c2121", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 5490, "upload_time": "2018-10-16T13:13:04", "url": "https://files.pythonhosted.org/packages/28/ef/491864d542daba09cf79cede88c3543233f3673584abf70615f5d7dbf236/datacast-0.1.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "d07d0d5cef73c1f8335063aad1c09988", "sha256": "7a7d5b7b401d9572fb910712136fd56c53ea815ae4319eab4dc341b50df2d4eb" }, "downloads": -1, "filename": "datacast-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "d07d0d5cef73c1f8335063aad1c09988", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 7178, "upload_time": "2018-10-16T16:39:57", "url": "https://files.pythonhosted.org/packages/88/10/63ed05a97807b3f53d0c860846d88d64b2878034d9f50c42da36bfdb2275/datacast-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b719ad2b14385457662da06f516bd622", "sha256": "37b5496379270df45a463f8144d644bde07fb0531722991fc5548acf843512f8" }, "downloads": -1, "filename": "datacast-0.2.1.tar.gz", "has_sig": false, "md5_digest": "b719ad2b14385457662da06f516bd622", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 5450, "upload_time": "2018-10-16T16:39:58", "url": "https://files.pythonhosted.org/packages/57/40/5602e182918fc31d479ac1836d8b02c9e92afdd2560619e5a8118bf65b77/datacast-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "0ef93cb908dd4de74e6a9f491c2fcc8d", "sha256": "393fc4c025209d85f7542a1492becfe6bf5361c8762e8e2b681879e98bdcbfdd" }, "downloads": -1, "filename": "datacast-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0ef93cb908dd4de74e6a9f491c2fcc8d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 7720, "upload_time": "2018-10-17T08:49:26", "url": "https://files.pythonhosted.org/packages/17/db/9a14335e9389c090d1383635cb0fea79c1a02db19902c42fb6ff7efaa69b/datacast-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0e07f267dc8c6bd2349c07b37a9f3b0d", "sha256": "109a3ba170cdf20f04e38283a77f70601aef15cf7dbcf6e7e5f871d75c0acdc9" }, "downloads": -1, "filename": "datacast-0.3.0.tar.gz", "has_sig": false, "md5_digest": "0e07f267dc8c6bd2349c07b37a9f3b0d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 5446, "upload_time": "2018-10-17T08:49:27", "url": "https://files.pythonhosted.org/packages/2d/bc/6f5d95b2c008cff2d33b0b4f1dee69af7410657282f49c9703caa6be171f/datacast-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "c3115b4ff262722c07fa2aacd113e127", "sha256": "0575540738c552bf927eb76fc9adf76e06a2b32f717f8344a87626606dd3d47b" }, "downloads": -1, "filename": "datacast-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c3115b4ff262722c07fa2aacd113e127", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 9149, "upload_time": "2018-10-18T13:41:33", "url": "https://files.pythonhosted.org/packages/c9/ee/1fb1a5e67a4ebd00c957bb42109054178ec59b1081dbcaf92602d3329f3b/datacast-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "45402a146c161ba6664943d137cb1ce4", "sha256": "8a63ca6c7854f98b229e66e5f3bfede679e4ccef1654fd8cb9f7fb2bb883ec33" }, "downloads": -1, "filename": "datacast-0.3.1.tar.gz", "has_sig": false, "md5_digest": "45402a146c161ba6664943d137cb1ce4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 7052, "upload_time": "2018-10-18T13:41:35", "url": "https://files.pythonhosted.org/packages/19/43/d6fd8ca9ba16832cfc07358ab83f21f45199617446a49ed3244a67ee95b3/datacast-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "d96efddda99f8c4d558b1fa397e865a4", "sha256": "0f70a85eec4a4a77170a359b904e3baa593f68313119a7193f1d80162bf92ee0" }, "downloads": -1, "filename": "datacast-0.3.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d96efddda99f8c4d558b1fa397e865a4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 9153, "upload_time": "2018-10-18T13:57:37", "url": "https://files.pythonhosted.org/packages/42/ec/ee6828e068895d7109c2e36b484adaa536e1afd697807fcfc83db0e13521/datacast-0.3.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "86e6aa1eeb47c1894a4920de8cc4f970", "sha256": "e6b484491417c8e95858fc690af76ef5275e7220922076807aba55ab989d0555" }, "downloads": -1, "filename": "datacast-0.3.2.tar.gz", "has_sig": false, "md5_digest": "86e6aa1eeb47c1894a4920de8cc4f970", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 7060, "upload_time": "2018-10-18T13:57:38", "url": "https://files.pythonhosted.org/packages/23/65/4ab0aa71b5a5143b58271105932b1cc2029891ddee3d68016c4e181b29dc/datacast-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "f64e98b1dc0f83558f658453ffcf7028", "sha256": "ed4f2c2beb4a730e17a6434e906de21478425a82e79f8fd17fca823d54d32803" }, "downloads": -1, "filename": "datacast-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "f64e98b1dc0f83558f658453ffcf7028", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 13115, "upload_time": "2018-11-20T13:39:27", "url": "https://files.pythonhosted.org/packages/a7/01/918406fd18a4265e3baf3d7965ce4c8428a1dd5afdd043aa3539f046aade/datacast-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c5fe64ee5e0dcae1ae859ab72adfb303", "sha256": "489a1de8558dc703a3143455e29542cafb0a162b1ef077567c8514725c8a330c" }, "downloads": -1, "filename": "datacast-0.3.3.tar.gz", "has_sig": false, "md5_digest": "c5fe64ee5e0dcae1ae859ab72adfb303", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 8085, "upload_time": "2018-11-20T13:39:28", "url": "https://files.pythonhosted.org/packages/3f/9b/3b86dca028851dea11dbe46b4ec9a0091bf6ec20603a4bbee2d46e18e377/datacast-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "257dee6426a0689b0fd404525a437864", "sha256": "577d3bf772453692907741711e2c53ed04faeb551a9b41733f39ada817705aaf" }, "downloads": -1, "filename": "datacast-0.3.4-py3-none-any.whl", "has_sig": false, "md5_digest": "257dee6426a0689b0fd404525a437864", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 13124, "upload_time": "2018-12-12T12:57:56", "url": "https://files.pythonhosted.org/packages/55/b0/2074043895cefce215ff739e92da10a47ec7859df55f0f640a0208a3d5fb/datacast-0.3.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "51c21b493bff2e3740695f555d6fe159", "sha256": "7ead06d483859b550a2122be5393de8abfa5ee67d3db032eb7d109ebe8e98d97" }, "downloads": -1, "filename": "datacast-0.3.4.tar.gz", "has_sig": false, "md5_digest": "51c21b493bff2e3740695f555d6fe159", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 7258, "upload_time": "2018-12-12T12:57:57", "url": "https://files.pythonhosted.org/packages/c1/6b/1dabde111832efd6051dd526f31f4aea0137f98e39c81481219fbffb8935/datacast-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "19603f64480ea9591b51fb684bd51141", "sha256": "34a4d28136857375e045a2dc8161affe7cd4e3f2260128aa7df8ce439420f475" }, "downloads": -1, "filename": "datacast-0.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "19603f64480ea9591b51fb684bd51141", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 13280, "upload_time": "2019-06-11T11:44:11", "url": "https://files.pythonhosted.org/packages/09/ee/70dc7c2ea54878bc7798e9cc43553bd7c33a4ffaf3c7845e242702acc66c/datacast-0.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74896dea629beab30a86a59686b37b22", "sha256": "dc2ef6322e495bfebd8b1042e69fabf629154c816344ba0dc2495a6ec77b7f70" }, "downloads": -1, "filename": "datacast-0.3.5.tar.gz", "has_sig": false, "md5_digest": "74896dea629beab30a86a59686b37b22", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 8191, "upload_time": "2019-06-11T11:44:13", "url": "https://files.pythonhosted.org/packages/c0/ec/c337e1c6473781cc128392094b45cad77257a6f1c072ea0c073250a7f2f0/datacast-0.3.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "19603f64480ea9591b51fb684bd51141", "sha256": "34a4d28136857375e045a2dc8161affe7cd4e3f2260128aa7df8ce439420f475" }, "downloads": -1, "filename": "datacast-0.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "19603f64480ea9591b51fb684bd51141", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.3", "size": 13280, "upload_time": "2019-06-11T11:44:11", "url": "https://files.pythonhosted.org/packages/09/ee/70dc7c2ea54878bc7798e9cc43553bd7c33a4ffaf3c7845e242702acc66c/datacast-0.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "74896dea629beab30a86a59686b37b22", "sha256": "dc2ef6322e495bfebd8b1042e69fabf629154c816344ba0dc2495a6ec77b7f70" }, "downloads": -1, "filename": "datacast-0.3.5.tar.gz", "has_sig": false, "md5_digest": "74896dea629beab30a86a59686b37b22", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.3", "size": 8191, "upload_time": "2019-06-11T11:44:13", "url": "https://files.pythonhosted.org/packages/c0/ec/c337e1c6473781cc128392094b45cad77257a6f1c072ea0c073250a7f2f0/datacast-0.3.5.tar.gz" } ] }