{ "info": { "author": "Surya Sankar", "author_email": "suryashankar.m@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7" ], "description": "==========\nSchemalite\n==========\n\n\n.. image:: https://img.shields.io/pypi/v/schemalite.svg\n :target: https://pypi.python.org/pypi/schemalite\n\n.. image:: https://img.shields.io/travis/SuryaSankar/schemalite.svg\n :target: https://travis-ci.org/SuryaSankar/schemalite\n\n.. image:: https://readthedocs.org/projects/schemalite/badge/?version=latest\n :target: https://schemalite.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n\n\n\n\nA minimal, yet powerful schema validation library for python\n\n\n* Free software: MIT license\n* Documentation: https://schemalite.readthedocs.io.\n\n\nFeatures\n--------\n\nBecause I started writing it before I came across Cerberus, Marshmallow and\nSchema.\n\nWhile the other schema validation libraries have powerful DSLs, they also have\ntoo big an API for simple needs. This library has only one concept I need to\nkeep in mind - A validator is a function that will return a tuple like (False,\n\"Some error message\") or (True, None). Thats all.\n\nA schema is a `dict` with 2 keys - \"fields\" and \"validators\"\n\n`validators` is a list of validator functions to apply on the input data as a\nwhole instead of at field level. It should again be a function which returns a\ntuple as output, while accepting a single dictionary as input ( corresponding to\nthe whole input data )\n\n`fields` - is a dict with keys corresponding to the names of the keys of the\ndictionary which is being validated. Each field is in turn a dict, which has one\nor more of the following optional keys\n\n1. `required` - True/False. Alternatively it can also be a function which\n accepts the input dictionary and outputs True/False as output. If not\n specified, field is assumed to be not required.\n\n2. `type` - The type of the data the field is expecting. It can be any valid\n pythonic type - int / str / unicode / date / datetime / Decimal / list / dict\n ( or anything else which is a python `type`). It can also be a list of types\n in which case the data should be of any one of those types.\n\n3. `validators` - A list of validator functions. The function should accept 2\n arguments - The value of the particular key being processed and the whole\n dictionary itself (in case the validator needs access to the whole data\n instead of that field alone to decide whether the value is valid). It has to\n return a tuple. Either (True, None) or (False, \"some error message\") ( The\n error need not be a string. It can be any valid json serializable data\n structure - a list or dict also)\n\n4. `permitted_values` - A list of permitted values for the field.\n\n5. If `type` is list, you can send the following fields also\n\n i. `list_item_type` - Tells the type of each item in the list. It can also\n be any Python type or a list of types. ii. `list_item_schema` - If\n `list_item_type` is dict, then you can optionally provide `list_item_schema`\n also - to validate each dict in the list against another schema\n\n6. If `type` is dict, then you can send the following field `dict_schema` - The\n schema to validate the dict against.\n\nAt both field and schema level, all validators will be applied one after another\nand their errors will be collected together in the output.\n\nTo apply the validator, you can call `validate_dict(dictionary, schema)` ( or\n`validate_list_of_dicts(list_of_dicts, dict_schema)`)\n\nThe output itself will be tuple of the same format as what we defined above for\nvalidators.\n\nExample:\n\nLets define 2 schemas\n\n.. code-block:: python\n \n person_schema = {\n \"fields\": {\n \"name\": {\n \"required\": True,\n \"type\": (str, unicode)\n },\n \"gender\": {\n \"required\": True,\n \"type\": (str, unicode),\n \"permitted_values\": (\"Male\", \"Female\")\n },\n \"age\": {\n \"required\": func_and_desc(\n lambda person: person['gender']=='Female',\n \"Required if gender is female\"),\n \"type\": int,\n \"validators\": [\n func_and_desc(\n lambda age, person: (False, \"Too old\")\n if age > 40 else (True, None),\n \"Has to be less than 40\")\n ]\n },\n \"access_levels\": {\n \"type\": list,\n \"list_item_type\": int,\n \"permitted_values_for_list_items\": range(1, 10)\n }\n },\n }\n\n org_schema = {\n \"fields\": {\n \"name\": {\n \"required\": True,\n \"type\": (str, unicode)\n\n },\n \"ceo\": {\n \"required\": True,\n \"type\": dict,\n \"dict_schema\": person_schema\n },\n \"members\": {\n \"required\": True,\n \"type\": list,\n \"list_item_type\": dict,\n \"list_item_schema\": person_schema\n }\n },\n \"validators\": [\n func_and_desc(\n lambda org: (False, \"Non member cannot be CEO\")\n if org[\"ceo\"] not in org[\"members\"] else (True, None),\n \"Non member cannot be CEO\")\n ],\n \"allow_unknown_fields\": True\n }\n\n\nAnd some data to validate against the schema\n\n.. code-block:: python\n \n isaac = {\"gender\": \"Male\", \"name\": \"Isaac\", \"age\": \"new\", \"access_levels\": [1,4,60]}\n surya = {\"gender\": \"Male\", \"name\": \"Surya\", \"age\": \"h\", \"city\": \"Chennai\"}\n senthil = {\"gender\": \"Male\", \"name\": \"Senthil\"}\n mrx = {\"gender\": \"m\", \"name\": \"x\"}\n sharanya = {\n \"gender\": \"Female\", \"name\": \"Sharanya\",\n \"access_levels\": [4, 5, 60]}\n\n\nLets first validate some persons\n\n.. code-block:: python\n \n validate_dict(mrx, person_schema)\n\n\nOutput is\n\n.. code-block:: python\n \n (False,\n {\n 'FIELD_LEVEL_ERRORS': {\n 'gender': {\n 'PERMITTED_VALUES_ERROR': 'Field data can be one of the following only: Male/Female'\n }\n }\n })\n\n\nAnother person\n\n.. code-block:: python\n \n validate_dict(surya, person_schema)\n\n\nOutput\n\n.. code-block:: python\n \n (False,\n {\n 'FIELD_LEVEL_ERRORS': {\n 'age': {\n 'HAS_TO_BE_LESS_THAN_40': 'Too old',\n 'TYPE_ERROR': 'Field data should be of type int'\n }\n },\n 'UNKNOWN_FIELDS': ['city']\n })\n\n\nNow validating the same person, but allowing unknown fields\n\n.. code-block:: python\n \n validate_dict(surya, person_schema, allow_unknown_fields=True)\n\n\nOutput\n\n.. code-block:: python\n \n (False,\n {\n 'FIELD_LEVEL_ERRORS': {\n 'age': {\n 'HAS_TO_BE_LESS_THAN_40': 'Too old',\n 'TYPE_ERROR': 'Field data should be of type int'\n }\n }\n })\n\n\nFinally lets create an organization and validate it\n\n.. code-block:: python\n \n inkmonk = {\n \"name\": \"Inkmonk\",\n \"ceo\": isaac,\n \"members\": [surya, senthil, sharanya],\n \"city\": \"Chennai\"\n }\n validate_dict(inkmonk, org_schema)\n\n\nOutput\n\n.. code-block:: json\n \n (False,\n {\n 'FIELD_LEVEL_ERRORS': {\n 'ceo': {\n 'VALIDATION_ERRORS_FOR_OBJECT': {\n 'FIELD_LEVEL_ERRORS': {\n 'access_levels': {\n 'VALIDATION_ERRORS_FOR_OBJECTS_IN_LIST': [\n None,\n None,\n {\n 'PERMITTED_VALUES_ERROR': 'Field data can be one of the following only: 1/2/3/4/5/6/7/8/9'\n }\n ]\n },\n 'age': {\n 'HAS_TO_BE_LESS_THAN_40': 'Too old',\n 'TYPE_ERROR': 'Field data should be of type int'\n }\n }\n }\n },\n 'members': {\n 'VALIDATION_ERRORS_FOR_OBJECTS_IN_LIST': [\n {\n 'FIELD_LEVEL_ERRORS': {\n 'age': {\n 'HAS_TO_BE_LESS_THAN_40': 'Too old',\n 'TYPE_ERROR': 'Field data should be of type int'\n }\n },\n 'UNKNOWN_FIELDS': ['city']\n },\n None,\n {\n 'FIELD_LEVEL_ERRORS': {\n 'access_levels': {\n 'VALIDATION_ERRORS_FOR_OBJECTS_IN_LIST': [\n None,\n None,\n {\n 'PERMITTED_VALUES_ERROR': 'Field data can be one of the following only: 1/2/3/4/5/6/7/8/9'\n }\n ]\n },\n 'age': {\n 'MISSING_FIELD_ERROR': 'Required if gender is female'\n }\n },\n 'MISSING_FIELDS': ['age']\n }\n ]\n }\n },\n 'SCHEMA_LEVEL_ERRORS': ['Non member cannot be CEO'],\n 'UNKNOWN_FIELDS': ['city']\n })\n\n\n###Understanding the errors output\n\nThe library is structured to provide an error output to any nested level of\ngranularity.\n\nAt the outer most level, there are the following keys\n\n\"FIELD_LEVEL_ERRORS\" - Contains the errors mapped to each field\n\n\"SCHEMA_LEVEL_ERRORS\" - A list of errors found for the schema as a whole\n\n\"UNKNOWN_FIELDS\" - If the validation is configured to not allow unknown fields\nand if the data had any, they will be listed here\n\n\"MISSING_FIELDS\" - List of all missing required fields.\n\nInside 'FIELD_LEVEL_ERRORS', each field will have a dict of errors mapped to it.\nThe keys of the dict are the names of the errors and values are the error\nstrings. Example for an error dict for a field would be\n`{'TYPE_ERROR': \"This field should have type int only\"}` or\n`{\"PERMITTED_VALUES_ERROR\": \"The object should have value high/low only\"}`\n\nIf a particular field is of type `dict`, and if `dict_schema` is defined, then\nyou can also expect to see a key named `VALIDATION_ERRORS_FOR_OBJECT` inside\n`errors['FIELD_LEVEL_ERRORS']['particular_field_name']`. In that case\n`errors['FIELD_LEVEL_ERRORS']['particular_field_name']['VALIDATION_ERRORS_FOR_OBJECT']`\nwill contain another errors object obtained by matching the data in this field\nalone against another schema ( So that errors object will in turn have\nFIELD_LEVEL_ERRORS, SCHEMA_LEVEL_ERRORS etc)\n\nIf a particular field is of type `list` and if `list_type` is defined, then if\nthere are validation errors for the objects in the list, you can expect to see\n`errors['FIELD_LEVEL_ERRORS']['particular_field_name']['VALIDATION_ERRORS_FOR_OBJECTS_IN_LIST']`.\nThis will be a list of error objects. If the field is a list of primitive types,\nthen you can expect each error object to have fields like `TYPE_ERROR` or\n`PERMITTED_VALUES_ERROR`. If it is a list of objects of another schema ( defined\nby `list_item_schema`), then each item in the errors list would be an error\nobject got by validating against that schema - so it will have\n`FIELD_LEVEL_ERRORS`, `SCHEMA_LEVEL_ERRORS` etc. ( While iterating, if one item\nhas no error, then instead of error object, it will have a null in the errors\nlist at that index.)\n\nCredits\n-------\n\nThis package was created with Cookiecutter_ and the `audreyr/cookiecutter-pypackage`_ project template.\n\n.. _Cookiecutter: https://github.com/audreyr/cookiecutter\n.. _`audreyr/cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/SuryaSankar/schemalite", "keywords": "schemalite", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "schemalite", "package_url": "https://pypi.org/project/schemalite/", "platform": "", "project_url": "https://pypi.org/project/schemalite/", "project_urls": { "Homepage": "https://github.com/SuryaSankar/schemalite" }, "release_url": "https://pypi.org/project/schemalite/0.2.1/", "requires_dist": null, "requires_python": "", "summary": "A minimal, yet powerful schema validation library for python", "version": "0.2.1" }, "last_serial": 5418857, "releases": { "0.1.0": [], "0.1.1": [ { "comment_text": "", "digests": { "md5": "3d12f8f3bd65686f0125260960473f4f", "sha256": "0c5211e5002eb3e95bab0128a4f9e0ca5b1c6b13dafbb3d94fffcccb93313d9b" }, "downloads": -1, "filename": "schemalite-0.1.1.tar.gz", "has_sig": false, "md5_digest": "3d12f8f3bd65686f0125260960473f4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1289, "upload_time": "2015-05-02T20:39:47", "url": "https://files.pythonhosted.org/packages/e2/69/d4985d8277fe1f5c0dd8478067ebfb90427df9e0785484db2e49db617bff/schemalite-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "964788e042dba3325e1d49625837e7af", "sha256": "432c7738e448b4f853e1f891a4cc8434d7469b83ebac43b8cc964267a90c3b0a" }, "downloads": -1, "filename": "schemalite-0.1.10.tar.gz", "has_sig": false, "md5_digest": "964788e042dba3325e1d49625837e7af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3563, "upload_time": "2016-09-16T09:38:16", "url": "https://files.pythonhosted.org/packages/db/03/04459984a8fd5c3082509b2a7f3c97d90455a448486ddd5a511f7ec93187/schemalite-0.1.10.tar.gz" } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "5c45f3825e9fb98044d1a24cba86267a", "sha256": "94de376619bac40f63510321bbb0a6b3fa21826bf4d7cadcfc400bb307b8221a" }, "downloads": -1, "filename": "schemalite-0.1.11.tar.gz", "has_sig": false, "md5_digest": "5c45f3825e9fb98044d1a24cba86267a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3581, "upload_time": "2016-09-17T10:12:01", "url": "https://files.pythonhosted.org/packages/0d/50/8740652e52f22e04ae8a5e6a0353227701b9203b12ed11127761e5bc841c/schemalite-0.1.11.tar.gz" } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "c3e2701ca2954dece0deb1b30a0a416a", "sha256": "82126467f116258f1c6a6e3db95505f65dc43332968656ad79b930d11f78c9a3" }, "downloads": -1, "filename": "schemalite-0.1.12.tar.gz", "has_sig": false, "md5_digest": "c3e2701ca2954dece0deb1b30a0a416a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4464, "upload_time": "2016-09-19T05:46:12", "url": "https://files.pythonhosted.org/packages/e5/77/fdad8a677177d98ce6084c234dd1768c4246093cea957cdf5ec56d6ed690/schemalite-0.1.12.tar.gz" } ], "0.1.13": [ { "comment_text": "", "digests": { "md5": "5d7e14672f84954a0cfcee690eb73a86", "sha256": "c2c7fb2e430979e8d71eba0501700869dd9abc13fee86a226e489245f6a8ab67" }, "downloads": -1, "filename": "schemalite-0.1.13.tar.gz", "has_sig": false, "md5_digest": "5d7e14672f84954a0cfcee690eb73a86", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4474, "upload_time": "2016-09-19T07:12:28", "url": "https://files.pythonhosted.org/packages/36/b1/947bc71efbefe4b120a09455fe45af90f3ef2a71bf18b8ad4611427bcba5/schemalite-0.1.13.tar.gz" } ], "0.1.14": [ { "comment_text": "", "digests": { "md5": "a579059b80c2b5b341cdd7981926e66a", "sha256": "bd0b49dcc43977bfb17225e0441f1a2d08777bb25e1f349ddf19bcca01787e7a" }, "downloads": -1, "filename": "schemalite-0.1.14.tar.gz", "has_sig": false, "md5_digest": "a579059b80c2b5b341cdd7981926e66a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4538, "upload_time": "2016-09-21T11:07:15", "url": "https://files.pythonhosted.org/packages/b8/c0/0b9387036c4aa39c582677ff9ef0e32ba256099c8fca3c46b2d8105c2b1b/schemalite-0.1.14.tar.gz" } ], "0.1.15": [ { "comment_text": "", "digests": { "md5": "ed88f59eeec343b33d90e37350c7dda2", "sha256": "9e64ebde0cd4e8bd3cd70e5b49ac77329b3ae24dbef8f249ddbf7836173127d7" }, "downloads": -1, "filename": "schemalite-0.1.15.tar.gz", "has_sig": false, "md5_digest": "ed88f59eeec343b33d90e37350c7dda2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4580, "upload_time": "2016-09-26T06:54:41", "url": "https://files.pythonhosted.org/packages/70/30/fdbda6bd60d0f7c06369921467d001fedc2e30e8eedcc79ff94572b9bf76/schemalite-0.1.15.tar.gz" } ], "0.1.16": [ { "comment_text": "", "digests": { "md5": "7d59569365bbf788fe6c813cd8fc9bad", "sha256": "5f0c3aebe917fe5bd385a6fa2b062065f3770681eeb28a4b92147ed98cfaa0b0" }, "downloads": -1, "filename": "schemalite-0.1.16.tar.gz", "has_sig": false, "md5_digest": "7d59569365bbf788fe6c813cd8fc9bad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4675, "upload_time": "2016-09-29T08:59:04", "url": "https://files.pythonhosted.org/packages/f8/ca/636e75d57c720af84b693cceee10fc56af63bbfba735a4bff1253e8bfa6a/schemalite-0.1.16.tar.gz" } ], "0.1.17": [ { "comment_text": "", "digests": { "md5": "d6c8d0b8fc64066d93ad2b1f44956186", "sha256": "e9bc3cd80853f020708b292e2a62cf0b7b8ca924d8471eb149554580aa9a2bbc" }, "downloads": -1, "filename": "schemalite-0.1.17.tar.gz", "has_sig": false, "md5_digest": "d6c8d0b8fc64066d93ad2b1f44956186", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4862, "upload_time": "2016-10-01T07:53:42", "url": "https://files.pythonhosted.org/packages/74/db/e907dcff1acdc697ecb0c67d3dfcd32928db8bbcb27a36919d8835d87875/schemalite-0.1.17.tar.gz" } ], "0.1.18": [ { "comment_text": "", "digests": { "md5": "5d84b90e1ff402718da41f742ec68409", "sha256": "93063ccc46affdeef52e22be8b0a385a7ae12d49ffcd8b3e92c614d390bc018a" }, "downloads": -1, "filename": "schemalite-0.1.18.tar.gz", "has_sig": false, "md5_digest": "5d84b90e1ff402718da41f742ec68409", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4819, "upload_time": "2016-10-14T11:42:27", "url": "https://files.pythonhosted.org/packages/73/68/aabc1c602e8b67861d9dea93d058461b7d56c549b31231a20d632dab7aeb/schemalite-0.1.18.tar.gz" } ], "0.1.19": [ { "comment_text": "", "digests": { "md5": "e578124c37e9b98d7720163a65881e97", "sha256": "918287c25dbdd6c29f03a8954e452e926c6facb3bf33d8dc267b6b245f4eef4d" }, "downloads": -1, "filename": "schemalite-0.1.19.tar.gz", "has_sig": false, "md5_digest": "e578124c37e9b98d7720163a65881e97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5125, "upload_time": "2016-10-21T16:04:05", "url": "https://files.pythonhosted.org/packages/45/01/603c13c8245d5b984b83c6ecdf0f89e795f7ec52818058b3c83596696f2a/schemalite-0.1.19.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "51a8091e99578f2396718e47228a611a", "sha256": "ddccfe09ac8188ed97eb037e6bc1717039f66cda1de0d8c8a90baee59cf1d850" }, "downloads": -1, "filename": "schemalite-0.1.2.tar.gz", "has_sig": false, "md5_digest": "51a8091e99578f2396718e47228a611a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1549, "upload_time": "2015-05-05T12:09:28", "url": "https://files.pythonhosted.org/packages/9e/9d/2c2f56077c6855adf274a48839abbb0fa6b648414c5edc43a38638882190/schemalite-0.1.2.tar.gz" } ], "0.1.20": [ { "comment_text": "", "digests": { "md5": "58919c49459c774b1dfdfc26f83aac82", "sha256": "6bab95a7316530ced9f1c4a3b3bbd939b3c4fafcf8b145b5bea3dad324358b57" }, "downloads": -1, "filename": "schemalite-0.1.20.tar.gz", "has_sig": false, "md5_digest": "58919c49459c774b1dfdfc26f83aac82", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5173, "upload_time": "2017-01-06T11:36:34", "url": "https://files.pythonhosted.org/packages/4f/f7/c6643f68d626c8e88c3c977be1395877aa1dd4e6c34016b7140df6267175/schemalite-0.1.20.tar.gz" } ], "0.1.21": [ { "comment_text": "", "digests": { "md5": "ed69eb5ea141e5d181e6d5e98add6cc1", "sha256": "405509e99bb53389556b000e61aeaa8022814c9ce7eea2b253ccd7477b15dd2c" }, "downloads": -1, "filename": "schemalite-0.1.21.tar.gz", "has_sig": false, "md5_digest": "ed69eb5ea141e5d181e6d5e98add6cc1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5181, "upload_time": "2017-03-28T06:37:20", "url": "https://files.pythonhosted.org/packages/63/6b/5b697c884be192d9a153047efa885cee96635a453b19f7b92bc09b115f55/schemalite-0.1.21.tar.gz" } ], "0.1.22": [ { "comment_text": "", "digests": { "md5": "ecf38010766a542613e064ffc9dcc48c", "sha256": "27b06b4565cc4e5302c26229c1f4cf1bcfc4b5f23a0de97145fdc56e67eb02a8" }, "downloads": -1, "filename": "schemalite-0.1.22.tar.gz", "has_sig": false, "md5_digest": "ecf38010766a542613e064ffc9dcc48c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8372, "upload_time": "2018-05-20T19:00:29", "url": "https://files.pythonhosted.org/packages/53/75/31b83e800dd65d2a601904405311b0e54a6ad545ae9dfd53868bcce3c673/schemalite-0.1.22.tar.gz" } ], "0.1.23": [ { "comment_text": "", "digests": { "md5": "361fa9a9e85be8a47d22fbcad38ae825", "sha256": "a121adeb3dfb59d1b018ea447fe009004f6c68055374a00fe6b52944024b7bbc" }, "downloads": -1, "filename": "schemalite-0.1.23.tar.gz", "has_sig": false, "md5_digest": "361fa9a9e85be8a47d22fbcad38ae825", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8439, "upload_time": "2018-05-22T05:20:28", "url": "https://files.pythonhosted.org/packages/59/7b/28b2c771757ed1fb403cfddb8d77a6b0424b056a723d3b13076d6607b87a/schemalite-0.1.23.tar.gz" } ], "0.1.24": [ { "comment_text": "", "digests": { "md5": "6647acab40fdbc1dbc7cc7586eb26ac2", "sha256": "af746af8394f84e775c604e29c2203ec5e86a404a8f84e1cdd5ae504618a336f" }, "downloads": -1, "filename": "schemalite-0.1.24.tar.gz", "has_sig": false, "md5_digest": "6647acab40fdbc1dbc7cc7586eb26ac2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8447, "upload_time": "2019-01-18T11:10:01", "url": "https://files.pythonhosted.org/packages/65/4c/01766d25a845f2b5069c0b80a733b73090cb102d39693f157e553eb242da/schemalite-0.1.24.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "4b0574e7b3c71b2815829df41a7fa424", "sha256": "b6f8b37ccf7e2fbd59f0d148c06d9457b4c633529b221caf29f2a18554013f22" }, "downloads": -1, "filename": "schemalite-0.1.3.tar.gz", "has_sig": false, "md5_digest": "4b0574e7b3c71b2815829df41a7fa424", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1737, "upload_time": "2015-05-07T11:59:05", "url": "https://files.pythonhosted.org/packages/bd/f8/5c369e7120b752f81bacaeab06c6ce987b709900c2a4da705af7c28bbac2/schemalite-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "31126613922baf677ff9d36570ddbc50", "sha256": "5f77bb0963c1f4ab21ec4f89802d87ad2c27a637b443fd2e2e3ccb654c0ba572" }, "downloads": -1, "filename": "schemalite-0.1.4.tar.gz", "has_sig": false, "md5_digest": "31126613922baf677ff9d36570ddbc50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1734, "upload_time": "2015-05-08T18:49:58", "url": "https://files.pythonhosted.org/packages/dd/9e/40bc3fbd4d860f526c2e6d045d7c95538b445cafe9a4225595607070ee27/schemalite-0.1.4.tar.gz" } ], "0.1.5": [], "0.1.6": [ { "comment_text": "", "digests": { "md5": "9ef14e83c2a15326e12a4afa09514e10", "sha256": "7ca2f73f623b9c1c23ddd3a416fc5ebae93290016d15b4564a15baa762a065dd" }, "downloads": -1, "filename": "schemalite-0.1.6.tar.gz", "has_sig": false, "md5_digest": "9ef14e83c2a15326e12a4afa09514e10", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2203, "upload_time": "2015-08-05T08:02:34", "url": "https://files.pythonhosted.org/packages/56/2e/e3f0bece3f42a07494d4889c9db5ac097b35c9cd432126ac0655185ac8d2/schemalite-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "e97216f201ecafb27319a57aeca28f2e", "sha256": "0a6d58ed464e2eaf4aabaa60a7ad971dc1528a77c6ba0f5f9e83cd84ac489f38" }, "downloads": -1, "filename": "schemalite-0.1.7.tar.gz", "has_sig": false, "md5_digest": "e97216f201ecafb27319a57aeca28f2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2208, "upload_time": "2015-08-05T08:04:38", "url": "https://files.pythonhosted.org/packages/86/b6/f20742753a0a8f09fb3f0a630294cf41dc26d0dceaf68b0dacc4998272c8/schemalite-0.1.7.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "5592994e378f4c7a2c387eac20bd6e86", "sha256": "04fe36bf32979838d7641055d6bd05b911965c3ce6ea4483413d1f269a4f8e0a" }, "downloads": -1, "filename": "schemalite-0.1.9.tar.gz", "has_sig": false, "md5_digest": "5592994e378f4c7a2c387eac20bd6e86", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2854, "upload_time": "2016-09-12T09:48:56", "url": "https://files.pythonhosted.org/packages/e9/9c/f0bb2586e71d177e6583e6904916b7a0f9614144bd1a15a2bbdc19b4829b/schemalite-0.1.9.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "2e0e823de3f24b75c1cad31d969544ce", "sha256": "462229f8d6560398a82924f62b0436a0fa4827494d15913173d80c7f0c98438a" }, "downloads": -1, "filename": "schemalite-0.2.1.tar.gz", "has_sig": false, "md5_digest": "2e0e823de3f24b75c1cad31d969544ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19086, "upload_time": "2019-06-19T06:33:09", "url": "https://files.pythonhosted.org/packages/0b/c0/0a0dd40aef3bddd5a0c29482bdf83356521bf60d21bee02d031491f77776/schemalite-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2e0e823de3f24b75c1cad31d969544ce", "sha256": "462229f8d6560398a82924f62b0436a0fa4827494d15913173d80c7f0c98438a" }, "downloads": -1, "filename": "schemalite-0.2.1.tar.gz", "has_sig": false, "md5_digest": "2e0e823de3f24b75c1cad31d969544ce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19086, "upload_time": "2019-06-19T06:33:09", "url": "https://files.pythonhosted.org/packages/0b/c0/0a0dd40aef3bddd5a0c29482bdf83356521bf60d21bee02d031491f77776/schemalite-0.2.1.tar.gz" } ] }