{ "info": { "author": "Younger Shen", "author_email": "younger.shen@hotmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Django :: 1.6", "Framework :: Django :: 1.7", "Framework :: Django :: 1.8", "Framework :: Django :: 1.9", "Framework :: Django :: 2.0", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# Django Easy Validator\nthis piece of software is inspired by the validation system of [laravel](https://laravel.com/docs/5.5/validation), \nyou can use this software to validate your POST/GET data easily and softly.\n\n![Travis](https://img.shields.io/travis/youngershen/django-easy-validator.svg)\n![codecov](https://codecov.io/gh/youngershen/django-easy-validator/branch/master/graph/badge.svg)\n![PyPI - License](https://img.shields.io/pypi/l/django-easy-validator.svg)\n![PyPI](https://img.shields.io/pypi/v/django-easy-validator.svg)\n![PyPI - Wheel](https://img.shields.io/pypi/wheel/django-easy-validator.svg)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/django-easy-validator.svg)\n![GitHub last commit](https://img.shields.io/github/last-commit/youngershen/django-easy-validator.svg)\n\n\n## Requirementse\n\n- Python 3.4\n- Python 3.5\n- Python 3.6\n- Python 3.7\n- Django 1.6 +\n\n## Installation\n\ninstall from pypi :\n\n`pip install django-easy-validator`\n\ninstall from source code:\n\n`python setup.py install`\n\n## Usage\n\n1. create your own validator with Validator class.\n\n```python\n from validator import Validator\n\n class LoginValidator(Validator):\n username = 'required|email'\n password = 'required'\n\n message = {\n 'username': {\n 'required': _('username is required'),\n 'email': _('username is not an email address')\n },\n 'password': {\n 'required': _('password is required')\n }\n }\n\n```\n\n2. spawn your validation class then call validate method to check it out.\n\n```python\n\n validator = LoginValidator({'username': 'michael', 'password': '12345678'})\n status = validator.validate()\n if status:\n print(\"login succeed\")\n else:\n errors = validator.get_message()\n print(errors)\n```\n\n## Supported Rules\n\n- [required](#required)\n- [accepted](#accepted)\n- [date](#data)\n- [date_before](#date_before)\n- [date_after](#date_after)\n- [date_range](#date_range)\n- [datetime](#datetime)\n- [datetime_before](#datetime_before)\n- [datetime_after](#datetime_after)\n- [datetime_range](#datetime_range)\n- [active_url](#active_url)\n- [numberic](#numberic)\n- [digits](#digits)\n- [regex](#regex)\n- [email](#email)\n- [min_length](#min_length)\n- [max_length](#max_length)\n- [ids](#ids)\n- [cellphone](#cellphone)\n- [alphabet](#alphabet)\n- [switch](#switch)\n- [unique](#unique)\n- [size](#size)\n- [min](#min)\n- [max](#max)\n- [file](#file)\n- [image](#image)\n- [video](#video)\n- [audio](#audio)\n- [attachement](#attachement)\n- [alpha_dash](#alpha_dash)\n- [alpha_number](#alpha_number)\n- [array](#array)\n- [date_before_equal](#date_before_equal)\n- [date_after_equal](#date_after_equal)\n- [datetime_before_equal](#datetime_before_equal)\n- [datetime_after_equal](#datetime_after_equal)\n- [between](#between)\n- [boolean](#boolean)\n- [username](#username)\n- [password](#password)\n- [ASCII](#ASCII)\n\n--------------------------------------------------------------\n\n### required\n\n```python\n\n class LoginValidator(Validator):\n username = 'required'\n```\n\nthe field with required rule cant be null or empty.\n\n### accepted\n\n```python\n class LoginValidator(Validator):\n username = 'required'\n remember_me = 'accepted'\n```\n\nthe field with accepted must be one of the following strings, and the\nstring case is insensitive.\n\n```python\n ['yes', 'no', 'true', 'false', '0', '1']\n``` \n\n### date\n\n```python\n class RegisterValidator(Validator):\n birthday = 'required|date:%Y-%m-%d'\n```\n\nthe field with date must be a python date format string, the parameter \nshould be a format suit the datetime.datetime.strptime function.\n\n### date_before\n\n```python\n class SubmitValidator(Validator):\n due = 'required|date_before:2017-12-31'\n```\n\nthe field with date_before must be a date format string suit xxxx-mm-dd.\n\n### date_after\n\n```python\n class SubmitValidator(Validator):\n date = 'required|date_after:2017-11-12'\n```\nthe field with date_after must be a date format string suit xxxx-mm-dd.\n\n### date_range\n\n```python\n class SubmitValidator(Validator):\n date_range = 'required|date_range:2017-01-01,2017-12-31'\n```\n\nthe field with date_range must be 2 date format strings and it should suit xxxx-mm-dd.\n\n\n### datetime\n\n```python\n class RegisterValidator(Validator):\n login_time = 'required|datetime:%Y-%m-%d %H:%M:%S'\n```\n\nthe field with datetime and the parameter must be a datetime string suit the datetime.datetime.strptime function.\n\n### datetime_before\n```python\n class LoginValidator(Validator):\n time = 'required|datetime_before:2017-12-12 13:14:00'\n```\n\nthe field with datetime_before must be a datetime string can strap to a datetime object and so as the parameter.\n\n\n### datetime_after\n\n```python\n class LoginValidator(Validator):\n time = 'required|datetime_after:2017-12-12 13:14:00'\n```\n\nthe field with datetime_after must be a datetime string can strap to a datetime object and so as the parameter.\n\n\n### datetime_range\n\n```python\n class LoginValidator(Validator):\n period = 'datetime_range:2017-12-12 13:14:00, 2017-12-15 13:14:00'\n\n```\n\n### active_url\n\n```python\n class ActiveURLValidator(Validator):\n url = 'active_url'\n```\n\nthe field with active_url must be a active url you could connect to and get reply.\n\n### numberic\n\n```python\n class RegisterValidator(Validator):\n id_number = 'required|numberic'\n```\n\nthe field with numberic must be a number, it should be a integer not a float or something.\n\n### digits\n\n```python\n class RegisterValidator(Validator):\n product_series = 'required|digits'\n```\n\nthe field with digits must only contains digits token.\n\n### regex\n\n```python\n class RegisterValidator(Validator):\n id_number = 'required|regex:^0[0-9]{5,10}$'\n```\n\nthe field with regex must be a string, the parameter could be any regex pattern string, this\nrule will match the field value with the paramter pattern out.\n\n### email\n\n```python\n class RegisterValidator(Validator):\n username = 'required|email'\n\n```\n\nthe field with email must be a valid email address string.\n\n\n### min_length\n\n```python\n\nclass Register(Validator):\n password = 'min_length:8'\n\n```\n\nthe field with **min_length** must has the minimal length of string or value of number.\n\n### max_length\n\n```python\n\nclass RegisterValidator(Validator):\n username = 'max_length:20'\n\n```\n\nthe field with **min_length** must has the minimal length of string or value of number.\n\n\n### ids\n\n```python\n\nclass DeleteValidator(Validator):\n ids = 'ids'\n```\n\nthe field with ids must be a integer string splited by the comma, such as '1,2,3,4,5'\n\n\n### cellphone\n\n```python\n\nclass RegisterValidator(Validator):\n phone = 'cellphone'\n\n```\n\nthe field with cellphone rule must be a real cellphone number , it could be '+8613811754531' or just '13811754531'\n\n\n### alphabet\n\n```python\n\nclass RegisterValidator(Validator):\n name = 'alphabet'\n\n```\n\nthe field with alphabet must be a standard alphabet string.\n\n\n### switch\n\n```python\n\nclass LoginValidator(Validator):\n rememberme ='switch:yes,no'\n\n```\n\nthe field with switch must be in the params array, it this case , rememberme must be yes or no.\n\n\n### unique\n\n```python\n\nclass RegisterValidator(Validator):\n username = 'unique:AUTH_USER_MODEL,username'\n email = 'unique:account.User,email'\n\n```\n\nthe field with unique must has 2 parameters , the first is appname.modelname, the second is the field to check,\nactually it is also the column to check if is already exists in this table, if you want to validate the django auth\nuser, the first paramater must be AUTH_USER_MODEL.\n\n\n### size\n```python\n\nclass UpdateProfileValidator(Validator)\n avatar = 'image|size:2048'\n\n```\n\nthe field with size has 4 kind of types , if the given field is an file, the parameter means the size of the file with KB,\nif the field is a string , the parameter means the size is the string length, if the field is an integer , the size means\nthe integer value, if the field is an array, the size means the array size.\n\n\n### min\n\n```python\n\nclass UpdateProfileValidator(Validator):\n profile = 'image|min:2048'\n\n```\n\nthe field with min has the same meaning of size, it's just check the minimal of the field , the size is check the equal of the field.\n\n### max\n\n```python\n\nclass UpdateProfileValidator(Validator):\n profile = 'image|min:2048'\n\n```\n\nthe field with min has the same meaning of size, it's just check the maximal of the field , the size is check the equal of the field.\n\n\n### file\n\n```python\n\nclass UploadValidator(Validator):\n file = 'file:png,jpeg,zip,rar'\n\n```\n\nthe field with file rule is to check the file type. parameters needed to be a string array.\n\n\n### image\n\n```python\n\nclass UploadValidator(Validator):\n file = 'image'\n\n```\n\nthe field with file image rule just do the same thing like file , it is a convenient way to check the common image type , in this way you do not need to add image ext parameter.\nthe check type is ['png', 'jpeg', 'gif', 'jpg', 'svg'] .\n\n\n### video\n\n```python\n\nclass UploadValidator(Validator):\n file = 'video'\n\n```\n\nthe field with video rule just do the same thing like file , it is a convenient way to check the common video type , in this way you do not need to add video ext parameter.\nthe check type is ['mp4', 'avi', 'mkv', 'flv', 'rmvb'].\n\n\n### audio\n\n```python\n\nclass UploadValidator(Validator):\n file = 'audio'\n\n```\n\nthe field with audio rule just do the same thing like file , it is a convenient way to check the common audio type , in this way you do not need to add video ext parameter.\nthe check type is ['mp3', 'wma', 'flac', 'ape', 'ogg'].\n\n\n### attachement\n\n```python\n\nclass UploadValidator(Validator):\n file = 'attachement'\n```\n\nthe field with attachement rule just do the same thing like file , it is a convenient way to check the common attachement type , in this way you do not need to add video ext parameter.\nthe check type is ['doc', 'zip', 'ppt', 'docx', 'excel', 'rar'].\n\n### alpha_dash\n\n```python\nclass RegisterValidator(Validator):\n username = 'alpha_dash'\n\n```\n\nthe field with alpha_dash rule is just check out if the string only includes alphabet characters and dash character.\n\n\n### alpha_number\n\n```python\nclass RegisterValidator(Validator):\n username = 'alpha_number'\n\n```\nthe field with alpha_number the given value must conbines with only alphabets and numbers.\n\n\n### array\n\n```python\nclass RegisterValidator(Validator):\n hobbies = 'array'\n\n```\n\nthe field with array must be a array string ,such as 'guitar, computer, music, food'.\n\n### date_before_equal\n\n```python\nclass RegisterValidator(Validator):\n due_at = 'date_before_equal:2018-01-08'\n```\n\nthe field with date_before_equal just check the given value must be a date string and before or equal the given parameter.\n\n### date_after_equal\n\n```python\nclass RegisterValidator(Validator):\n due_at = 'date_after_equal:2018-01-08'\n```\n\nthe field with date_after_equal just check the given value must be a date string and afer or equal the given parameter.\n\n### datetime_before_equal\n\n```python\nclass RegisterValidator(Validator):\n due_at='datetime_before_equal:1990-12-12 06:08:26'\n```\n\nthe field with datetime_before_equal just check the given value must be a datetime string and befor the given parameter.\n\n### datetime_after_equal\n\n```python\nclass RegisterValidator(Validator):\n due_at='datetime_after_equal:1990-12-12 06:08:26'\n```\n\nthe field with datetime_after_equal just check the given value must be a datetime string and after the given parameter.\n\n\n### between\n\n```python\nclass RegisterValidator(Validator):\n age = 'between:10, 15'\n```\n\nthe field with between requires the given field value must be a integer number and it's value must between the parameters.\n\n\n### boolean\n\n```python\nclass RegisterValidator(Valiadtor):\n remember = 'boolean'\n\n```\n\nthe field with boolean requires the given value should be one of this '['0', '1', 'true', 'false']'\n\n### username\n\n```python\nclass RegisterValidator(Validator):\n username = 'username'\n```\n\nthe field with username requires the given value starts with an alphabet character and it could includes with numbers , dash, underscore.\n\n### password\n```python\nclass RegisterValidator(Validator): \n password = 'password:low'\n\n```\n\nthe field with password ruls requires an parameter , it could be : low, middle , high. \nthe 3 different check methods has different check level.\n\nthe low method means the password length must longer than 7\n\nthe middle method means the password length must longer than 7 and it sould contains lower , upper latin characters and digits\n\nthe high method means the password lenght must longer than 7 and it sould contains lower , upper latin characters and digits, and special\n\ncharacters.\n\n### ASCII\n```python\nclass ASCIIValidator(Validator):\n ascii = 'ascii'\n\n```\n\nthe ascii requires the given value only includes ascii characters.\n\n\n### same\n\n```python\nclass SameValidator(Validator):\n password = 'required|min_lengh:8'\n password_confirm = 'same:password'\n\n```\n\nthe same rule just validate the give field vale checks the value if is same as the other value.\n\n## Advanced Topic\n\n### Custom Validation Rules\n\n```python\n# define the rule\nfrom validator import BaseRule\nclass TestRule(BaseRule):\n name = 'test_rule'\n message = 'test custom rule failed'\n description = 'just for custom rule test'\n\n def check_value(self):\n self.status = True if self.field_value == 'test' else False\n\n def check_null(self):\n pass\n\n\n# define a validator to use the rule\nclass TestRuleValidator(Validator):\n name = 'test_rule'\n\n# to run the validation\nextra_rules = { TestRule.get_name(): TestRule }\nvalidator = TestRuleValidator(extra_rules=extra_rules, data={'name': 'test'})\nassert validator.validate()\n\n```\n\ncustom a validation rule is very easy, you just import the BaseRule and implements the method ,\nthe most important thing is before you use your rule , you should pass it to your validator \nclass when it init through the extra_rules parameter.\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/youngershen/django-easy-validator", "keywords": "a django request POST/GET data validator", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-easy-validator", "package_url": "https://pypi.org/project/django-easy-validator/", "platform": "", "project_url": "https://pypi.org/project/django-easy-validator/", "project_urls": { "Homepage": "https://github.com/youngershen/django-easy-validator" }, "release_url": "https://pypi.org/project/django-easy-validator/1.2.1/", "requires_dist": [ "Django" ], "requires_python": ">=3.6", "summary": "a very easy use django request POST/GET data validator", "version": "1.2.1" }, "last_serial": 4805188, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "08450bacf9c2b6287c86e3463c8d1f23", "sha256": "42749c63aa2e906ece5f145f968e944963ed1d3efe391f7aa154e115d27a5abd" }, "downloads": -1, "filename": "django_easy_validator-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "08450bacf9c2b6287c86e3463c8d1f23", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8239, "upload_time": "2018-04-21T06:46:59", "url": "https://files.pythonhosted.org/packages/81/66/d95d1941370f82ab70b0a8017b79edb382012f3956474893b92c21149eb4/django_easy_validator-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ba90d05ce1768265ec7d400d55e84024", "sha256": "15ec0f93ba7d2a96f7fc14f3a29c8505db928ea57c44429250ab674c9c45a857" }, "downloads": -1, "filename": "django_easy_validator-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "ba90d05ce1768265ec7d400d55e84024", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8239, "upload_time": "2018-04-21T06:47:01", "url": "https://files.pythonhosted.org/packages/dd/10/aabb93745bdbc4ab1546f4b194a691661175f0be6ec70afd1013e331d788/django_easy_validator-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5e8e25f965a00cd3b66b78518e0b82ae", "sha256": "2afe5af7faa75d461d3a0b2c62610f770921cbfa40599c48a76dcc7eb1ebe03c" }, "downloads": -1, "filename": "django-easy-validator-1.0.0.tar.gz", "has_sig": false, "md5_digest": "5e8e25f965a00cd3b66b78518e0b82ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9546, "upload_time": "2018-04-21T06:47:03", "url": "https://files.pythonhosted.org/packages/2a/2b/130558cb8362ce22d5d5a11bb10683e813c58c14dbc3d52f51edec1c721c/django-easy-validator-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "7fcef8ec2e44218e961dce3ac14ec788", "sha256": "ce9b990265e2369d1e05e556a82481dc8736628d30eda4c65812633a6d875252" }, "downloads": -1, "filename": "django_easy_validator-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7fcef8ec2e44218e961dce3ac14ec788", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8278, "upload_time": "2018-04-26T02:55:16", "url": "https://files.pythonhosted.org/packages/4e/1d/3455251fdb9db3bc1a9783ace9e5ed375d2cb5ae4d07599f5ca807fe078c/django_easy_validator-1.0.1-py3-none-any.whl" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "8b6d1d5fc77115af5a7f3a3ee7fbed7e", "sha256": "cea19f1258fa76abe2c7627983f339f5363e147019b1ad939f80b62c390f1ac8" }, "downloads": -1, "filename": "django_easy_validator-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "8b6d1d5fc77115af5a7f3a3ee7fbed7e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8607, "upload_time": "2018-04-26T08:15:03", "url": "https://files.pythonhosted.org/packages/32/46/9b606c9e9b1788babb95fdb1212e0a33a29a74540573f40bf90c7352ad34/django_easy_validator-1.0.2-py3-none-any.whl" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "dca7fcfc2c75b5494f56fa7bab83b38e", "sha256": "dd36edb40395b229483974645d9e83e3775441829f0a9757a1ed7998c2387c62" }, "downloads": -1, "filename": "django_easy_validator-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "dca7fcfc2c75b5494f56fa7bab83b38e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8630, "upload_time": "2018-04-27T08:59:22", "url": "https://files.pythonhosted.org/packages/39/1e/ca955b9b99e5ea471463a5d6d5f6d1c079af9d895b7f0ca161ebc82f42b6/django_easy_validator-1.0.3-py3-none-any.whl" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "e395e9c72770c2bd95f07692018b8417", "sha256": "38367348cf3fee1523714e17da9ed4c308610e50e639f84519b16e812cf52f8c" }, "downloads": -1, "filename": "django_easy_validator-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "e395e9c72770c2bd95f07692018b8417", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 12674, "upload_time": "2018-07-02T03:35:37", "url": "https://files.pythonhosted.org/packages/1e/85/71d1bcf4b0f4e8db9d96e52f3fb33e871811c64e7b97a7d14ce71e4dc8da/django_easy_validator-1.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "10d28a08cb91059b8098042a07a1b069", "sha256": "70dabad816b947fd85c6150ca9f41f61afd8a02ec1b76d7d983813cc2348c8df" }, "downloads": -1, "filename": "django-easy-validator-1.0.4.tar.gz", "has_sig": false, "md5_digest": "10d28a08cb91059b8098042a07a1b069", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 9622, "upload_time": "2018-07-02T03:35:39", "url": "https://files.pythonhosted.org/packages/03/22/ad71a5a2ab4cb5c390d8d43112544b14ad4645f16d62823044fe9a75dd6c/django-easy-validator-1.0.4.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "56988cfc256b70580cd1fa2d1b5497ff", "sha256": "75af589f9a7adb0e3f61ae94f34296d838ae6d00a1d694c05ba0ac9a34524872" }, "downloads": -1, "filename": "django_easy_validator-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "56988cfc256b70580cd1fa2d1b5497ff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 13718, "upload_time": "2018-08-10T01:42:56", "url": "https://files.pythonhosted.org/packages/32/d8/ff959d88382d741ca72fe4bd5bfdf7f646b76dd957ef281ac3f295d6f9d9/django_easy_validator-1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "548698d8750195c9a28d1b358cabf078", "sha256": "3cdd4eb170bee9f5db698d2ff777f8093220da5363b710508f77275d63e3cc3c" }, "downloads": -1, "filename": "django-easy-validator-1.1.tar.gz", "has_sig": false, "md5_digest": "548698d8750195c9a28d1b358cabf078", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 16636, "upload_time": "2018-08-10T01:42:58", "url": "https://files.pythonhosted.org/packages/74/be/d3a5a019c30783ae915b7400c6e84709fa49dd3aa2dd8feeb57b0868ebb4/django-easy-validator-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "adadf6821f02729ce2b74521ad3111fa", "sha256": "7cd189fe87bf7fcc536c3646f91074749b25d0aa1a1e90b123879a98dec11474" }, "downloads": -1, "filename": "django_easy_validator-1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "adadf6821f02729ce2b74521ad3111fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14676, "upload_time": "2019-02-11T09:56:41", "url": "https://files.pythonhosted.org/packages/5a/72/a018ff256dfdb6100644219ad18af525bcbf570edb6dd1c3e5d0c52eb8ce/django_easy_validator-1.2-py3-none-any.whl" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "7e2793fa7f6c8ed4316367f7bc9a23b6", "sha256": "9c6d9295cd27dddbcf4d2d8a846e01c4c481c446646b92667de8c71fbb77fe08" }, "downloads": -1, "filename": "django_easy_validator-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7e2793fa7f6c8ed4316367f7bc9a23b6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 18308, "upload_time": "2019-02-11T10:04:50", "url": "https://files.pythonhosted.org/packages/ab/79/cdcb75c563d4eae4f0162f75c2f1dd7c6c6b0e36b199a5d3f386137caff0/django_easy_validator-1.2.1-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "7e2793fa7f6c8ed4316367f7bc9a23b6", "sha256": "9c6d9295cd27dddbcf4d2d8a846e01c4c481c446646b92667de8c71fbb77fe08" }, "downloads": -1, "filename": "django_easy_validator-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "7e2793fa7f6c8ed4316367f7bc9a23b6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 18308, "upload_time": "2019-02-11T10:04:50", "url": "https://files.pythonhosted.org/packages/ab/79/cdcb75c563d4eae4f0162f75c2f1dd7c6c6b0e36b199a5d3f386137caff0/django_easy_validator-1.2.1-py3-none-any.whl" } ] }