{ "info": { "author": "Outernet Inc", "author_email": "apps@outernet.is", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Topic :: Utilities" ], "description": "====================\nChainable Validators\n====================\n\nThis package contains a set of simple functions to facilitate creation of\nchainable validator methods for developing data validation schemata.\n\nAlthough it provides a few validation function, it's main purpose is\nextensibility.\n\nInstalling\n==========\n\nThe PyPI package name is ``chainable-validators``. You can install the package\nusing ``pip`` or ``easy_install``::\n\n pip install chainable-validators\n\n easy_install chainable-validators\n\nBasic concepts\n==============\n\nThe basis of all validation are chainable validators (validation functions) and\nthe validation chains which are created using ``make_chain()`` calls.\n\nThe chainable validators are found in the ``validators.validators`` module. For\nconvenience, they can be imported directly from the ``validators`` package::\n\n >>> from validators import required, istype, gte\n\nThe chainable validators can be used stand-alone or as part of a chain. For\nstandalone usage, pass the value to the validator. ::\n\n >>> required(None)\n Traceback (most recent call last):\n ...\n ValueError: required value missing\n\nSome validators are parametric. They are first invoked with a parameter, and\nthe return value is then used as a chainable validator. ::\n\n >>> isint = istype(int)\n >>> isint('foo')\n Traceback (most recent call last):\n ...\n ValueError: not int\n\nTo build a chain of desired validators, we first compile a list of chainable\nvalidators::\n\n >>> from validators import make_chain\n >>> fns = [required, istype(int), gte(2)]\n >>> chain = make_chain(fns)\n >>> chain(None)\n Traceback (most recent call last):\n ...\n ValueError: required value missing\n >>> chain('1')\n Traceback (most recent call last):\n ...\n ValueError: not int\n >>> chain(1)\n Traceback (most recent call last):\n ...\n ValueError: value too small\n >>> chain(3)\n 3\n\nThe validators in the chain are invoked in order until the last one is called,\nor ``ValueError`` or ``validators.ReturnEarly`` is raised. When no exceptions\nare raised, the return value of the last chainable validator is returned. In\ncase ``ReturnEarly`` is raised, it is not propagated to the chain's caller, but\ninstead the original value is returned.\n\nList of built-in validators\n===========================\n\nThe following is a list of built-in vaidators.\n\nValidators can be parametric or simple. Simple validators can be used directly.\nParametric validators take an argument and return a chainable validator\nfunctions.\n\nIn the list below, if you encounter a validator that looks like ``foo(bar)``,\nit's a parametric validator.\n\n- ``optional(default=None)`` - interrupts validation chain if value is None or\n a user-supplied default value\n- ``required`` - rejects None\n- ``nonemtpy`` - rejects empty sequences (string, list, dict)\n- ``boolean`` - reject non-boolean values (other than True, False, 1, and 0)\n- ``istype(t)`` - rejects values that are not of type ``t``\n- ``isin(collection)`` - rejects values that are not in ``collection``\n (collection is a sequence such as string, list, or dict)\n- ``gte(num)`` - rejects values that are not greater than or equal to ``num``\n- ``lte(num)`` - rejects values that are not less than or equal to ``num``\n- ``match(regex)`` - rejects values that do not match the ``regex`` object\n (``regex`` object is a valid ``re.RegExp`` instance or object with a\n ``match()`` method)\n- ``url`` - rejects values that are not URLs\n- ``timestamp(fmt)`` - rejects values that cannot be converted to ``datetime``\n using ``datetime.strptime()`` and given format string\n\nHelper functions\n================\n\nThere are a few helper functions that help you modify the behavior or one or\nmore functions in the chain.\n\n- ``OR(*fns)`` - rejects value if and only if all of the functions passed to it\n fail to validate, otherwise passes\n- ``NOT(fn)`` - reverses the behavior of ``fn``\n\nFor example::\n\n >>> my_chain = [foo, OR(bar, baz), NOT(fam)]\n\nThis chain will validate using ``foo`` first, then either ``bar`` or ``baz``\n(whichever passes), then ``fam``, reversing the results of ``fam`` (if it\nraises, then the validation will succeed and vice versa).\n\nSpec validator\n==============\n\nAnother helper function, that is not mentioned in the previous section, is\n``spec_validator()`` factory function. It takes a spec, which is a dict mapping\nkey/attribute names to chains and returns a validator function that validates\nobjects.\n\nLet's take a look at an example, and then explain things as we go::\n\n >>> import re\n >>> from validator import *\n >>> spec = {\n ... 'foo': [required, istype(int)],\n ... 'bar': [optional, match(re.compile(r'te.*')],\n ... 'baz': [optional, boolean]\n ... }\n\nEach key in spec represents the key we expect to find in the object. The key\ncould be a dictionary key, list/tuple index, or an object attribute. It could\nalso be an arbitrary value based on which the value will be extracted.\n\nThe way keys map to values is defined by a key function which can be passed\nusing the ``key`` argument. This function must accept a spec key name and\nreturn a function that returns the value given an object. The default key\nfunction is ``operator.itemgetter``. For example, if we have an object that as\nattributes we want to validate, we could create the validator like so::\n\n >>> import operator\n >>> attr_validator = spec_validator(spec, key=operator.attrgetter)\n\nEach key maps to an iterable which represents the validator chain. Chains are\napplied to values matching the key.\n\nThe ``spec_validator()`` function returns a validator function. ::\n\n >>> validator = spec_validator(spec)\n\nWhen passed the object to be validated, the validator function returns a dict\nwhich maps keys to any ``ValueError`` exceptions raised by the individual\nchains. If data is valid, the dict is empty. ::\n\n >>> data = {'foo': 1, 'bar': 'test', 'baz': None}\n >>> validator(data)\n {}\n >>> data['foo'] = None\n >>> validator(data)\n {'foo': ValueError('required value is missing')}\n\nThanks to this behavior, you can test whether object is valid, by testing if\nthe returned dict is empty.\n\nWriting your own validators\n===========================\n\nIt is possible to write your own validators. To write a simple chainable\nvalidator, use the ``validators.chain.chainable`` decorator. ::\n\n >>> from validators import chainable\n >>> @chainable\n ... def my_validator(s):\n ... if not s.startswith('foo'):\n ... raise ValueError('does not start with foo')\n ... return s\n ... \n >>> my_validator('foobar')\n 'foobar'\n >>> my_validator('barfoo')\n Traceback (most recent call last):\n ...\n ValueError: does not start with foo\n\nTo write a parametric validator, define the chainable validator in a closure::\n\n >>> def my_parametric(start):\n ... @chainable\n ... def validator(s):\n ... if not s.startswith(start):\n ... raise ValueError('does not sart with {}'.format(start))\n ... return s\n ... return validator\n ... \n >>> validator = my_parametric('baz')\n >>> validator('bazfoo')\n 'bazfoo'\n >>> validator('foo')\n Traceback (most recent call last):\n ...\n ValueError: does not sart with baz\n\nNow you can use these validators in chains like other validators.\n\nReporting bugs\n==============\n\nPlease report any bugs or feature requests to the `issue tracker`_.\n\n.. _issue tracker: https://github.com/Outernet-Project/chainable-validators/issues", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Outernet-Project/chainable-validators", "keywords": "validation,framework,method chaining", "license": "GPLv3", "maintainer": null, "maintainer_email": null, "name": "chainable-validators", "package_url": "https://pypi.org/project/chainable-validators/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/chainable-validators/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/Outernet-Project/chainable-validators" }, "release_url": "https://pypi.org/project/chainable-validators/0.8.2/", "requires_dist": null, "requires_python": null, "summary": "Python data validation framework that uses chainable validator", "version": "0.8.2" }, "last_serial": 1771648, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "046f62154f1d235d64e513b5fd29accb", "sha256": "99403e1d59215089162c548e4301cb66b3152fc9d03a86497a6d4ff277eb8036" }, "downloads": -1, "filename": "chainable-validators-0.1.tar.gz", "has_sig": false, "md5_digest": "046f62154f1d235d64e513b5fd29accb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18505, "upload_time": "2015-04-28T15:13:37", "url": "https://files.pythonhosted.org/packages/9b/e9/4ecba88ecb8eb041d7a354fdf19d4d972df964d820445cafc52a7a69974d/chainable-validators-0.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "f11c4318054dbf720a4bd2e102f1ff2c", "sha256": "af512129adc298f5b95636925add43136c7f5c9121086a9dc75d2837876ec8a8" }, "downloads": -1, "filename": "chainable-validators-0.1.zip", "has_sig": false, "md5_digest": "f11c4318054dbf720a4bd2e102f1ff2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24017, "upload_time": "2015-04-28T15:13:40", "url": "https://files.pythonhosted.org/packages/63/76/2367e0059bb2c080cba502c32848613cf5d4f32e34d04b07d9345ad47d0e/chainable-validators-0.1.zip" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "064d8569ec9d43856f4bb7f50a3be303", "sha256": "4211f42a14fe6ffa2f875cfa14b35096e889c2c4f5f3e61b09ef8f1d2186d7b9" }, "downloads": -1, "filename": "chainable-validators-0.2.tar.gz", "has_sig": false, "md5_digest": "064d8569ec9d43856f4bb7f50a3be303", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20162, "upload_time": "2015-04-28T20:29:26", "url": "https://files.pythonhosted.org/packages/19/d3/4320ad40e3c4d1497df2b41607cc7d5e01f8bac6e5b5288f3ebbde01a619/chainable-validators-0.2.tar.gz" }, { "comment_text": "", "digests": { "md5": "f5e5b8ea435cfb6e3640047b51a917f0", "sha256": "e1cb19f872f3d578dd2545c4eeb26e0d3d9f655bd2540ade0934911aa915d3ef" }, "downloads": -1, "filename": "chainable-validators-0.2.zip", "has_sig": false, "md5_digest": "f5e5b8ea435cfb6e3640047b51a917f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26550, "upload_time": "2015-04-28T20:29:29", "url": "https://files.pythonhosted.org/packages/13/8a/b2dd21f6084adce123840d78176db66f5733ed3dd26c184154b69ef5ee83/chainable-validators-0.2.zip" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "15dbcbc2a9848a1249d17c8f6bb78298", "sha256": "9584cf183935cf7acefcfe807ce0b1284180cf911e19b5dc0c724780c6dbec38" }, "downloads": -1, "filename": "chainable-validators-0.3.tar.gz", "has_sig": false, "md5_digest": "15dbcbc2a9848a1249d17c8f6bb78298", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20765, "upload_time": "2015-04-29T15:38:50", "url": "https://files.pythonhosted.org/packages/f4/05/49266b7d6510260cdd686cc9a6ebbc05dc96bc026766d364e2c94e7c7ae1/chainable-validators-0.3.tar.gz" }, { "comment_text": "", "digests": { "md5": "df45b6bad71ff2da4a562cd23b186a08", "sha256": "4af108a8b66c453450c229089bd15035be7acffe7cf1425fa059772ac31890cd" }, "downloads": -1, "filename": "chainable-validators-0.3.zip", "has_sig": false, "md5_digest": "df45b6bad71ff2da4a562cd23b186a08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27551, "upload_time": "2015-04-29T15:38:53", "url": "https://files.pythonhosted.org/packages/51/7e/91eaec119366d935eabde2175bf629dafc35eb12006f539c637cb75fe1c2/chainable-validators-0.3.zip" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "3e62807d838c68f26df0a3d0e4d30e69", "sha256": "8df90f3eac52926d181d877f1cf47a843e9f3fdf3ffcee779860bf37f6fc5bcb" }, "downloads": -1, "filename": "chainable-validators-0.4.tar.gz", "has_sig": false, "md5_digest": "3e62807d838c68f26df0a3d0e4d30e69", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20904, "upload_time": "2015-05-05T12:39:52", "url": "https://files.pythonhosted.org/packages/20/a9/08a561ba3ff78d4349a9d16dc48bced19454833f54c269c1686b8b08037e/chainable-validators-0.4.tar.gz" }, { "comment_text": "", "digests": { "md5": "062c4b41c41915f8e44cd9a2977dcba6", "sha256": "5335a786975f35ab311bc26e686a04cb1b6950cbe17f0780cf28c52210c108fb" }, "downloads": -1, "filename": "chainable-validators-0.4.zip", "has_sig": false, "md5_digest": "062c4b41c41915f8e44cd9a2977dcba6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27702, "upload_time": "2015-05-05T12:39:55", "url": "https://files.pythonhosted.org/packages/00/a2/91436c5f476a59aa9e2cabb57509b388f8757021bd74912236f99dbe5f3a/chainable-validators-0.4.zip" } ], "0.4.post1": [ { "comment_text": "", "digests": { "md5": "29cd89398befef9b934127a5cf0a3528", "sha256": "21809769dc718585cb7d125a52cdd530f5ce3df298a86e066fb20ff1037b1762" }, "downloads": -1, "filename": "chainable-validators-0.4.post1.tar.gz", "has_sig": false, "md5_digest": "29cd89398befef9b934127a5cf0a3528", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20911, "upload_time": "2015-05-05T12:41:05", "url": "https://files.pythonhosted.org/packages/82/bd/64459d320a3568f9ca131e4c44381e22db6677a8b1fae506b044e2a9e980/chainable-validators-0.4.post1.tar.gz" }, { "comment_text": "", "digests": { "md5": "6323ea56a42f3b0ddac4c80c7fcac42b", "sha256": "0d127dd1ba838ccaf96e97e03473faa9671dc09edcaf34e12aa1e099c8d21a42" }, "downloads": -1, "filename": "chainable-validators-0.4.post1.zip", "has_sig": false, "md5_digest": "6323ea56a42f3b0ddac4c80c7fcac42b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27904, "upload_time": "2015-05-05T12:41:08", "url": "https://files.pythonhosted.org/packages/31/94/51baddc3c9247a43b48b97312d507644cb3d0a494f64434aafe37c920bde/chainable-validators-0.4.post1.zip" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "5c1c958aa6ccbed78f53b34cdc919e4d", "sha256": "6ed3e6a5d876191c1d90d52a0784c42db479f02c0e2371cecd92e986b9b32d6f" }, "downloads": -1, "filename": "chainable-validators-0.5.tar.gz", "has_sig": false, "md5_digest": "5c1c958aa6ccbed78f53b34cdc919e4d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20942, "upload_time": "2015-05-12T13:12:05", "url": "https://files.pythonhosted.org/packages/50/31/bdde338b41c0f5f736960028f4364d43dae9fb1e41f440342526884a60db/chainable-validators-0.5.tar.gz" }, { "comment_text": "", "digests": { "md5": "e2fbcc6747772878140ad3ead3bbb96c", "sha256": "4e5c5c2b233e836dd385b3c609cfff62b283ac620f1f81c56de31d4de0728f69" }, "downloads": -1, "filename": "chainable-validators-0.5.zip", "has_sig": false, "md5_digest": "e2fbcc6747772878140ad3ead3bbb96c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27746, "upload_time": "2015-05-12T13:12:08", "url": "https://files.pythonhosted.org/packages/2e/c5/f0ce3e2a94f66f1a2e4c256a1bc344adb2b7937115f4488d81c126a882aa/chainable-validators-0.5.zip" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "a99bd24427e39a3a0bfe98e6a389fd4b", "sha256": "6dabad1c4950972056f8e84dc982a6d284d8fe7e3ad3a0d31b7910784df4a533" }, "downloads": -1, "filename": "chainable-validators-0.6.tar.gz", "has_sig": false, "md5_digest": "a99bd24427e39a3a0bfe98e6a389fd4b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18918, "upload_time": "2015-08-04T18:23:09", "url": "https://files.pythonhosted.org/packages/b3/93/4e15034188184abe71038631f762e679242af0caccb23d3ce39277fb4438/chainable-validators-0.6.tar.gz" }, { "comment_text": "", "digests": { "md5": "4453dd5e5e7a6836799f177ef092312f", "sha256": "72fb1815145022f600a17cbf3da4ca6a228012d616fb981c0e9b38a86c106812" }, "downloads": -1, "filename": "chainable-validators-0.6.zip", "has_sig": false, "md5_digest": "4453dd5e5e7a6836799f177ef092312f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27821, "upload_time": "2015-08-04T18:23:13", "url": "https://files.pythonhosted.org/packages/bb/5e/4e6413a33bb560f79ea0896091d4b39b8e0631c8ef81f92d1f65145cb98f/chainable-validators-0.6.zip" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "6f31ad57ed4bd0f14da7c8713d3288eb", "sha256": "82af580d064f6123b930a7c5362f7e92a0deea45043b7dacc46d3320a7a51f55" }, "downloads": -1, "filename": "chainable-validators-0.7.tar.gz", "has_sig": false, "md5_digest": "6f31ad57ed4bd0f14da7c8713d3288eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19059, "upload_time": "2015-08-14T15:13:04", "url": "https://files.pythonhosted.org/packages/98/b0/9b95dc912ab3b817228233613a0fb43ae5a114e59b105f28e0357cb5f0b5/chainable-validators-0.7.tar.gz" }, { "comment_text": "", "digests": { "md5": "9f4f6f5175475ae6dcea859d7b46ae80", "sha256": "5de76e91ffe9f06a1260eb610cc667b5419eb5f4717f4cd3f9c140526500e12d" }, "downloads": -1, "filename": "chainable-validators-0.7.zip", "has_sig": false, "md5_digest": "9f4f6f5175475ae6dcea859d7b46ae80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27975, "upload_time": "2015-08-14T15:13:07", "url": "https://files.pythonhosted.org/packages/85/99/1ee0b83b9a15f94b72ecbe439828b13aecbb852fde00fdc722f0675588de/chainable-validators-0.7.zip" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "f6ebf100008cedd781849de214e1a5c4", "sha256": "e797ad4bce9ccec89866ee6574203a82dd73c21723d2c073c0b8963ef82830bd" }, "downloads": -1, "filename": "chainable-validators-0.8.tar.gz", "has_sig": false, "md5_digest": "f6ebf100008cedd781849de214e1a5c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19185, "upload_time": "2015-10-14T09:49:39", "url": "https://files.pythonhosted.org/packages/66/b2/45783983b6c422f15b62afbf52d84ed9b8d3364c7baaeb1e6cf5d3a9f39d/chainable-validators-0.8.tar.gz" }, { "comment_text": "", "digests": { "md5": "be60acb1c178c2e7deab92b2c0ca8bea", "sha256": "8d40e6d658b470f6c3c1e82cf7877a7774a0f694fda7afec74b96e439386fdac" }, "downloads": -1, "filename": "chainable-validators-0.8.zip", "has_sig": false, "md5_digest": "be60acb1c178c2e7deab92b2c0ca8bea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28027, "upload_time": "2015-10-14T09:49:44", "url": "https://files.pythonhosted.org/packages/fd/67/4e4be18d6bef9c0dafb571852d3b2eeed7fe43bf75e88676d68a930cec60/chainable-validators-0.8.zip" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "646b038d1d894c56229583b80622e95d", "sha256": "6dd41ac630952734c3842792b5c066818fc738ce622c1d51b8ab1852ca9ea851" }, "downloads": -1, "filename": "chainable-validators-0.8.1.tar.gz", "has_sig": false, "md5_digest": "646b038d1d894c56229583b80622e95d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19265, "upload_time": "2015-10-14T11:36:05", "url": "https://files.pythonhosted.org/packages/ce/a3/3ddddb1457e065d7c7f69cc359bd0d78c0e46283999a9d5b990b877946ad/chainable-validators-0.8.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "8859589d0d26fa6fc9d5e61593aa09a3", "sha256": "1a1d3ff2c8bfdbf977e5289c2c0a7e1fbafedc52d55e89848a2f133680256f3d" }, "downloads": -1, "filename": "chainable-validators-0.8.1.zip", "has_sig": false, "md5_digest": "8859589d0d26fa6fc9d5e61593aa09a3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28179, "upload_time": "2015-10-14T11:36:12", "url": "https://files.pythonhosted.org/packages/fe/d3/b26e3d64701ec9314a2aa1f400e97f3c236292f2cfb01a8d531bcf9479a4/chainable-validators-0.8.1.zip" } ], "0.8.2": [ { "comment_text": "", "digests": { "md5": "ed7d3f40411be981375d2116b19fb870", "sha256": "6325e42fb7f295ac3b3a0adbb8a5f09793b37f4e4e5230631577b6ba604e913a" }, "downloads": -1, "filename": "chainable-validators-0.8.2.tar.gz", "has_sig": false, "md5_digest": "ed7d3f40411be981375d2116b19fb870", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19276, "upload_time": "2015-10-16T12:36:03", "url": "https://files.pythonhosted.org/packages/52/f6/1e44ef062389b224c2110c3dca6e803d212a6b0928bf05073565007a10b2/chainable-validators-0.8.2.tar.gz" }, { "comment_text": "", "digests": { "md5": "6da4272b2b0248e03cf0662fa82b3361", "sha256": "dbb544b40e02c66190beaa3362fc3e84b48c4a1052fbd93d740d75f09300d622" }, "downloads": -1, "filename": "chainable-validators-0.8.2.zip", "has_sig": false, "md5_digest": "6da4272b2b0248e03cf0662fa82b3361", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28184, "upload_time": "2015-10-16T12:36:13", "url": "https://files.pythonhosted.org/packages/73/7f/60ad9b905a93f089fe78c21f56ddbe4a76c032e066eca2b3dc77957dbea3/chainable-validators-0.8.2.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ed7d3f40411be981375d2116b19fb870", "sha256": "6325e42fb7f295ac3b3a0adbb8a5f09793b37f4e4e5230631577b6ba604e913a" }, "downloads": -1, "filename": "chainable-validators-0.8.2.tar.gz", "has_sig": false, "md5_digest": "ed7d3f40411be981375d2116b19fb870", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19276, "upload_time": "2015-10-16T12:36:03", "url": "https://files.pythonhosted.org/packages/52/f6/1e44ef062389b224c2110c3dca6e803d212a6b0928bf05073565007a10b2/chainable-validators-0.8.2.tar.gz" }, { "comment_text": "", "digests": { "md5": "6da4272b2b0248e03cf0662fa82b3361", "sha256": "dbb544b40e02c66190beaa3362fc3e84b48c4a1052fbd93d740d75f09300d622" }, "downloads": -1, "filename": "chainable-validators-0.8.2.zip", "has_sig": false, "md5_digest": "6da4272b2b0248e03cf0662fa82b3361", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28184, "upload_time": "2015-10-16T12:36:13", "url": "https://files.pythonhosted.org/packages/73/7f/60ad9b905a93f089fe78c21f56ddbe4a76c032e066eca2b3dc77957dbea3/chainable-validators-0.8.2.zip" } ] }