{ "info": { "author": "Damla Altun", "author_email": "initalize.damla@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "***********\nValidate It\n***********\n\nDataclass Validators.\n\ntypeforced decorator\n--------------------\nDataclasses module does not control types in runtime. With `validateit` you can force user to give propert date with propert type.\n`validateit` provides a class decorator for runtime typecheck. You have to decorate your dataclass with `@typeforced`.\n\n.. code-block:: python\n\n >>> @typeforced\n ... @dataclass\n ... class Item:\n ... name: str\n ... idx : int\n ... owners : List[str]\n ...\n >>>\n\nLets try to create a valid Item\n\n.. code-block:: python\n\n >>> Item(\"Sword\", 1, [\"damla\"])\n Item(name='Sword', idx=1, owners=['damla'])\n\nFunny part :) Lets give int value to name field. \n\n.. code-block:: python\n\n >>> Item(1515, 1, [\"damla\"])\n TypeError: Unexpected type for 'name' (expected but found )\n\nAs you can see `typeguard` raised a TypeError because it expects a string but we give it an integer. \n\nLets make another example. Give a set object instead of List[str].\n\n.. code-block:: python\n\n >>> Item(\"Sword\", 1, {\"damla\"})\n TypeError: Unexpected type for 'owners' (expected typing.List[str] but found )\n\nTypeValidator\n-------------\nValidates types for specific fields instead of all fields (if you want to check types of all fields in runtime use `typeforced`).\n\nLets make an pet. We must force user to give name as string but we dont care type of `idx`.\n\n.. code-block:: python\n \n >>> @dataclass\n ... class Pet:\n ... idx: int\n ... name: str = field(default=TypeValidator())\n ... \n >>> Pet(15, \"Minnos\")\n Pet(idx=15, name='Minnos')\n >>> Pet(15, 1313)\n TypeError: Unexpected type for 'name' (expected but found )\n >>> Pet(\"fifteen\", \"Minnos\") # No error cuz it is not runtime typevalidated.\n Pet(idx='fifteen', name='Minnos')\n\nIntegerValidator\n----------------\nSome integer specific validations. Can take `max` , `min` , `max_digits`, `min_digits`\n\n.. code-block:: python\n \n >>> @dataclass\n ... class Integer:\n ... number : int = field(default=IntegerValidator(min=15, max=150))\n ... point : int = field(default=IntegerValidator(min_digits=1, max_digits=10))\n ... def __str__(self):\n ... return f\"{self.number}.{self.point}\"\n ... \n >>> str(Integer(20, 3333))\n '20.3333'\n >>> Integer(14, 3333)\n ValueError: Integer is not bigger than 15 (minimum limit)\n >>> Integer(160, 3333)\n ValueError: Integer is bigger than 150 (maximum limit)\n >>> Integer(20, 339933993399339)\n ValueError: Integer doesn't capable of having maximum 10 digits.\n \nStringValidator\n---------------\nSome string specific validations. Can take `max_chars` , `max_chars` , `startswith`, `endswith`\n\n.. code-block:: python\n\n >>> @dataclass\n ... class Person:\n ... name: str = field(default=StringValidator(min_chars=5, max_chars=10))\n ... surname: str = field(default=StringValidator(startswith='a', endswith='n'))\n ... \n >>> Person(\"damla\", \"altun\")\n Person(name='damla', surname='altun')\n >>> Person(\"daml\", \"altun\")\n ValueError: String doesn't capable of having minimum 5 chars.\n >>> Person(\"damlaaaaaaaaa\", \"altun\")\n ValueError: String doesn't capable of having maximum 10 chars.\n >>> Person(\"damla\", \"xaltun\")\n ValueError: String isn't starts with a\n >>> Person(\"damla\", \"altunx\")\n ValueError: String isn't ends with n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/DamlaAltun/ValidateIt", "keywords": "", "license": "MIT", "maintainer": "Damla Altun", "maintainer_email": "initalize.damla@gmail.com", "name": "validateit", "package_url": "https://pypi.org/project/validateit/", "platform": "", "project_url": "https://pypi.org/project/validateit/", "project_urls": { "Homepage": "https://github.com/DamlaAltun/ValidateIt" }, "release_url": "https://pypi.org/project/validateit/1.0.2/", "requires_dist": null, "requires_python": ">=3.6", "summary": "Dataclasses Validators", "version": "1.0.2" }, "last_serial": 4369936, "releases": { "1.0.1": [ { "comment_text": "", "digests": { "md5": "e817a0795930264c6468d79a5c5500f0", "sha256": "9892b4a5326ec26e711bfee2023dab6e862452a9fc0022e1789ff76235796967" }, "downloads": -1, "filename": "validateit-1.0.1.tar.gz", "has_sig": false, "md5_digest": "e817a0795930264c6468d79a5c5500f0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 3489, "upload_time": "2018-10-12T19:25:32", "url": "https://files.pythonhosted.org/packages/bd/a7/742e3eb395a77fa14c02e14a6b4e3b7621f02199b377ad0d1ea41a46e352/validateit-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "51f5f8558db7b070721dc77659cc713c", "sha256": "2cbb53194be074ea8307b192acd176f0a982401b07c98c4c6f6643b7c454bcc8" }, "downloads": -1, "filename": "validateit-1.0.2.tar.gz", "has_sig": false, "md5_digest": "51f5f8558db7b070721dc77659cc713c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4155, "upload_time": "2018-10-12T19:39:08", "url": "https://files.pythonhosted.org/packages/a1/e2/7007bab64da65fee2181a675e8c2fb04ea7f58e93e9d49ee9065440e0e64/validateit-1.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "51f5f8558db7b070721dc77659cc713c", "sha256": "2cbb53194be074ea8307b192acd176f0a982401b07c98c4c6f6643b7c454bcc8" }, "downloads": -1, "filename": "validateit-1.0.2.tar.gz", "has_sig": false, "md5_digest": "51f5f8558db7b070721dc77659cc713c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4155, "upload_time": "2018-10-12T19:39:08", "url": "https://files.pythonhosted.org/packages/a1/e2/7007bab64da65fee2181a675e8c2fb04ea7f58e93e9d49ee9065440e0e64/validateit-1.0.2.tar.gz" } ] }