{ "info": { "author": "fcracker79", "author_email": "fcracker79@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development" ], "description": "|build status|\n\nPyComb\n======\n\n`Tcomb `__ port for Python 3. It\nprovides a means to apply runtime type checking.\n\nInstallation\n------------\n\n.. code:: sh\n\n pip install pycomb\n\nBasic examples\n--------------\n\n.. code:: python\n\n\n from pycomb import combinators\n\n # A simple string\n MyStringType = combinators.String\n s1 = combinators.String('hello') # This IS a 'str' object\n s2 = combinators.String(10) # This will fail\n\n # A list that contains only strings\n ListOfStrings = combinators.list(combinators.String)\n l1 = ListOfStrings(['1', '2', '3']) # This IS a native tuple\n l1 = ListOfStrings(['1', '2', 3]) # This will fail\n\n # Structured data\n User = combinators.struct(\n {\n 'name': combinators.String, \n 'age': combinators.Int, \n 'city': combinators.maybe(combinators.String)\n }\n )\n my_user = User({'name': 'John Burns', 'age': 30}) # This IS a dict\n my_user2 = User({'name': 'John Burns', 'age': '30'}) # This will fail\n my_user3 = User({'name': 'John Burns', 'age': 30, 'city': 'New York'}) # This IS a dict\n\n # Subtypes\n SmallString = combinators.subtype(\n combinators.String, \n lambda d: len(d) <= 10) # Strings shorter than 11 characters\n SmallString('12345678901') # This will fail\n SmallString('12345') # This IS a 'str' object\n\n # Constants\n john_data = {'name': 'John'}\n John = combinators.constant(john_data, name='JohnConstant')\n John({'name': 'John'})\n John({'name': 'Jack'}) # Error on JohnConstant: expected JohnConstant but was dict\n\n\n # Regexp with groups\n import re\n def name_condition(d):\n return d in ('John', 'Jack')\n def age_condition(d):\n return int(d) > 0\n\n Name = combinators.subtype(combinators.String, name_condition, name='Name')\n Age = combinators.subtype(combinators.String, age_condition, name='Age')\n NameAndAge = combinators.regexp_group('(\\w+) +(-?[0-9]+)', Name, Age, name='NameAndAge')\n NameAndAge('John 32') # Ok\n NameAndAge('John 3x') # Error on NameAndAge: expected NameAndAge but was str\n NameAndAge('John -32') # Error on NameAndAge[1]: expected Age but was str\n NameAndAge('WRONG 32') # Error on NameAndAge[0]: expected Name but was str\n\nValidation context\n------------------\n\nThe validation procedure runs within a context that controls:\n\n1. The behavior in case of error\n2. The production mode: if active, no such error is raised during\n validation\n\n**Context Examples**\n\n.. code:: python\n\n\n from pycomb import combinators, context\n\n # Example of production mode\n ListOfNumbers = combinators.list(combinators.Number, 'ListOfNumbers')\n production_ctx = context.create(production_mode=True)\n numbers = ListOfNumbers([1, 2, 'hello'], ctx=production_ctx) # This will NOT fail\n\n\n # Example of custom behavior in case of error\n class MyObserver(context.ValidationErrorObserver):\n def on_error(self, ctx, expected_type, found_type):\n print('Expected {}, got {}'.format(expected_type, found_type))\n\n ListOfNumbers = combinators.list(combinators.Number, 'ListOfNumbers')\n notification_ctx = context.create(validation_error_observer=MyObserver())\n numbers = ListOfNumbers([1, 2, 'hello'], ctx=production_ctx) # This will NOT fail\n # Expected output:\n # > Expected Int or Float, got \n\nDecorators\n----------\n\nIt is possible to wrap functions in order to protect the input\nparameters, or ensure the type of its return value\n\n**Decorators example**\n\n.. code:: python\n\n\n from pycomb import combinators\n\n # Example of input parameters check\n @combinators.function(\n combinators.String, combinators.Int,\n c=combinators.Float, d=combinators.list(combinators.Int))\n def f(a, b, c=None, d=None):\n pass\n f('John', 1, c=1.0, d=[3, 4]) # OK\n f(1, 1, c=1.0, d=[3, 4]) # This will fail\n\n # Example of output check\n @returning(cmb.subtype(cmb.String, lambda d: len(d) < 10))\n def f(n):\n return ' ' * n\n\n f(3) # OK\n f(10) # This will fail\n\nMore types are supported, such as:\n\n- Unions\n- Intersections\n- Functions\n- Enums\n- ...\n\nAll the base types have a default example field. Please read the test\ncode to find more examples.\n\n.. |build status| image:: https://img.shields.io/travis/fcracker79/pycomb/master.svg?style=flat-square\n :target: https://travis-ci.org/fcracker79/pycomb", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/fcracker79/pycomb", "keywords": "type hinting validation combinator", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pycomb", "package_url": "https://pypi.org/project/pycomb/", "platform": "", "project_url": "https://pypi.org/project/pycomb/", "project_urls": { "Homepage": "https://github.com/fcracker79/pycomb" }, "release_url": "https://pypi.org/project/pycomb/0.1.17/", "requires_dist": null, "requires_python": "", "summary": "Python combination", "version": "0.1.17" }, "last_serial": 5375347, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "481e6a6cd164e0d5ea06d2cd4f91f060", "sha256": "dc94f64f140d8bc507569851aa2410e435d14381453ceb291a7f17f9758531cc" }, "downloads": -1, "filename": "pycomb-0.0.1.tar.gz", "has_sig": false, "md5_digest": "481e6a6cd164e0d5ea06d2cd4f91f060", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7428, "upload_time": "2016-11-07T00:07:24", "url": "https://files.pythonhosted.org/packages/a4/e8/9dfaa4cdd992a65d40ca0decc9a88d9892632dff6bcebece438aed643faf/pycomb-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "0953e5303f1f3a7675911d8585ee8039", "sha256": "87a4b9caf7f44763fd6faa5748a86f6c7708fe67af5e85d6f1d153d26cd42224" }, "downloads": -1, "filename": "pycomb-0.0.2.tar.gz", "has_sig": false, "md5_digest": "0953e5303f1f3a7675911d8585ee8039", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7386, "upload_time": "2016-11-07T08:42:52", "url": "https://files.pythonhosted.org/packages/d5/eb/5bdd9bff0d8d77198d79459526393f048f140fc75d7256dcde371f050ce3/pycomb-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "2636abcc6db1e88cf363cf389a904143", "sha256": "7e3081283e26cb178284ec8354f8ce53cd6981b3a09958c3cd4d5ce74855f032" }, "downloads": -1, "filename": "pycomb-0.0.3.tar.gz", "has_sig": false, "md5_digest": "2636abcc6db1e88cf363cf389a904143", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8488, "upload_time": "2016-11-11T19:31:59", "url": "https://files.pythonhosted.org/packages/de/8f/38e97ae336f6402f41badeb78d79099729fd05f5c8c1dbad48ef9dedadae/pycomb-0.0.3.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "9ffeef5b082dfac098c4edda5c58db8f", "sha256": "484797515b32aacb9c79998125b9ddfe8154b654149027daf89576394f696663" }, "downloads": -1, "filename": "pycomb-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9ffeef5b082dfac098c4edda5c58db8f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11797, "upload_time": "2016-11-13T22:30:55", "url": "https://files.pythonhosted.org/packages/65/83/9152d17f7e664d4c17bc56e29b97ea931d9460b90d18590250bc2c317ead/pycomb-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41f642e11d79c13d5329b08a53ed9e25", "sha256": "8d58d9205292fe30ab717e7c70f14fdaba01ee88ee915da4f5d7412a85e54b0b" }, "downloads": -1, "filename": "pycomb-0.1.0.tar.gz", "has_sig": false, "md5_digest": "41f642e11d79c13d5329b08a53ed9e25", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9587, "upload_time": "2016-11-13T22:30:57", "url": "https://files.pythonhosted.org/packages/63/ce/c3f8f651058f8c57536f9cb8e750004d13934496f998edb77904f163ad9b/pycomb-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "197bd49513e74ac2699a08f54f133078", "sha256": "684024b48d5068cb6e0e9b822b0fa142cd834d07ca57c63567f2c11437b5ef2f" }, "downloads": -1, "filename": "pycomb-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "197bd49513e74ac2699a08f54f133078", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11798, "upload_time": "2016-11-13T22:35:10", "url": "https://files.pythonhosted.org/packages/24/f6/8be2272f0a44c64d1f2368731116be8b3257e59b2e982a5b0d2317576d43/pycomb-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f4b48b1afe603e520bd0afb5c36cc460", "sha256": "c3bc453005d32867fd376c1909f309c23fd770089f88880a7ba9a32bbfbf805b" }, "downloads": -1, "filename": "pycomb-0.1.1.tar.gz", "has_sig": false, "md5_digest": "f4b48b1afe603e520bd0afb5c36cc460", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9541, "upload_time": "2016-11-13T22:35:19", "url": "https://files.pythonhosted.org/packages/38/df/a22091ede8e33da261eae301acca922a175ef0ac2b887ca7f937ef859023/pycomb-0.1.1.tar.gz" } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "3438e6a48c0797d5b93b84b82baf1cd6", "sha256": "b198d1ed104777721b251654af3c80664117bd7dd10870486fafcc49468ccc92" }, "downloads": -1, "filename": "pycomb-0.1.10.tar.gz", "has_sig": false, "md5_digest": "3438e6a48c0797d5b93b84b82baf1cd6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11506, "upload_time": "2017-02-09T22:54:35", "url": "https://files.pythonhosted.org/packages/ac/84/5a2180e09493fc637fbbc0bcdf5e46435d25bb649a704a773bf0aa08550a/pycomb-0.1.10.tar.gz" } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "1d44afb0721af2e293c50d6a9e6031ae", "sha256": "30812794f22da6ab995b429732756ee5e8af553b5aa33575450306c91161d490" }, "downloads": -1, "filename": "pycomb-0.1.11.tar.gz", "has_sig": false, "md5_digest": "1d44afb0721af2e293c50d6a9e6031ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11693, "upload_time": "2017-02-22T22:38:26", "url": "https://files.pythonhosted.org/packages/4b/d9/77c251763fa87233333086cc2d92ce2a45247d5113a3fa1dab337a68115c/pycomb-0.1.11.tar.gz" } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "20aa2e575dcab59af8285ffb7919ee20", "sha256": "67b32895b5e9a1c2216b7d5933d9a790c883078e9137a277c61417a3e9996392" }, "downloads": -1, "filename": "pycomb-0.1.12.tar.gz", "has_sig": false, "md5_digest": "20aa2e575dcab59af8285ffb7919ee20", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11887, "upload_time": "2017-03-03T18:16:30", "url": "https://files.pythonhosted.org/packages/82/ac/9c114b83296687c066ba996846a79ddfe7296c5325aee47b0905963fba89/pycomb-0.1.12.tar.gz" } ], "0.1.13": [ { "comment_text": "", "digests": { "md5": "2205c1094acbf05fcd735c4dd761174c", "sha256": "32761e3a5bd9067f59a1e52cfe6971918fd1338341bab5a3a5f33e6ee6f1c03f" }, "downloads": -1, "filename": "pycomb-0.1.13.tar.gz", "has_sig": false, "md5_digest": "2205c1094acbf05fcd735c4dd761174c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12575, "upload_time": "2017-03-17T21:35:16", "url": "https://files.pythonhosted.org/packages/98/7f/f68c877d52124852d73dcc1c06bd93f26410ff14c27dbba24c45e139069b/pycomb-0.1.13.tar.gz" } ], "0.1.14": [ { "comment_text": "", "digests": { "md5": "9f7d9fe162e459e2a1112f6822d03621", "sha256": "1b0d377200e64b416a6114efb8aad4c6b4271819783c45a417c6590af2d3f625" }, "downloads": -1, "filename": "pycomb-0.1.14.tar.gz", "has_sig": false, "md5_digest": "9f7d9fe162e459e2a1112f6822d03621", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13186, "upload_time": "2017-09-18T12:39:01", "url": "https://files.pythonhosted.org/packages/4b/cc/c40641deeb9965b142e86ed79c556022fa9d120b5515a43f9e34767ff25c/pycomb-0.1.14.tar.gz" } ], "0.1.15": [ { "comment_text": "", "digests": { "md5": "9ac2804ac0539bd54a735073cebe894d", "sha256": "7c9d30ee73493c1526b61dbdf81644c0d69ca6a2355f565a38d007941b90339f" }, "downloads": -1, "filename": "pycomb-0.1.15.tar.gz", "has_sig": false, "md5_digest": "9ac2804ac0539bd54a735073cebe894d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15015, "upload_time": "2017-09-23T12:58:44", "url": "https://files.pythonhosted.org/packages/0e/7c/d64525dcede7159ee6a37f2846e56c4b13185f45b14e7670c147b9c3997c/pycomb-0.1.15.tar.gz" } ], "0.1.16": [ { "comment_text": "", "digests": { "md5": "2e2247a2ef45e0bddad4fabe852ffe0f", "sha256": "71ede43d7619f3994111dce62bc6fd7e5202fe1b08e1bead9ea114d22e41e8d6" }, "downloads": -1, "filename": "pycomb-0.1.16.tar.gz", "has_sig": false, "md5_digest": "2e2247a2ef45e0bddad4fabe852ffe0f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14823, "upload_time": "2018-07-04T14:02:58", "url": "https://files.pythonhosted.org/packages/1a/f9/7cd7cf67b2cbfd2460223dcd10aca0c317cddd96946fa9daa03086c52ef1/pycomb-0.1.16.tar.gz" } ], "0.1.17": [ { "comment_text": "", "digests": { "md5": "b6caa71350dfdb81b1968cc4fcc0a307", "sha256": "253e6abaaaddb1c8f8e97066d945530d078d10d53ac7b3aadbfb9d8dcabb87ba" }, "downloads": -1, "filename": "pycomb-0.1.17.tar.gz", "has_sig": false, "md5_digest": "b6caa71350dfdb81b1968cc4fcc0a307", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16159, "upload_time": "2019-06-08T13:07:56", "url": "https://files.pythonhosted.org/packages/3f/1b/2f6650938ceea11c15350d6cf3343df45d0fb37c30c5d97d90fd1ae2fa99/pycomb-0.1.17.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "76cddb2b1a581c8b7c792f3086653a46", "sha256": "dfef50e0671fd3fb0d28f0cddedf0a01eae98a37244520078dc09bfac78bc3d3" }, "downloads": -1, "filename": "pycomb-0.1.6-py2-none-any.whl", "has_sig": false, "md5_digest": "76cddb2b1a581c8b7c792f3086653a46", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 11800, "upload_time": "2016-11-18T20:33:14", "url": "https://files.pythonhosted.org/packages/46/2c/f9bb9988462165e769fed3ae238a2e2986889da553b2bbf08fd12d7cbab5/pycomb-0.1.6-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49ced28f0a01e6ee098151f49f02587a", "sha256": "1fcb8450976d68a907a5f6f2d82597088e94342e2a9e6f41401771cfdeea4a1c" }, "downloads": -1, "filename": "pycomb-0.1.6.tar.gz", "has_sig": false, "md5_digest": "49ced28f0a01e6ee098151f49f02587a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9407, "upload_time": "2016-11-18T20:33:17", "url": "https://files.pythonhosted.org/packages/f2/89/858444358c3c13b49260096b8e24f50ffb858d23515ebf1cc9137a1b68b7/pycomb-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "1638324b4c7a4a76522e3ab40f5f1f97", "sha256": "8975cbd157938e6593d7b1ce58a6cfd69dabc3d3cf9291cc5aa381f44e473d98" }, "downloads": -1, "filename": "pycomb-0.1.7.tar.gz", "has_sig": false, "md5_digest": "1638324b4c7a4a76522e3ab40f5f1f97", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10608, "upload_time": "2017-02-04T22:52:06", "url": "https://files.pythonhosted.org/packages/46/df/434c251b387b80051a4d5f810f163fb141ec3644019979b52753839349bc/pycomb-0.1.7.tar.gz" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "1269cf57b6993af537da106336afb7f0", "sha256": "384ed13d3cf7a0ac0e6e3ecbb36b6552875d8a8ccbbc3b7d71b2f470645be349" }, "downloads": -1, "filename": "pycomb-0.1.8.tar.gz", "has_sig": false, "md5_digest": "1269cf57b6993af537da106336afb7f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10747, "upload_time": "2017-02-06T18:38:15", "url": "https://files.pythonhosted.org/packages/2d/62/88e8bb55562baf9896f9528b057cf4c90fb334e7a97742c47ba45905e98c/pycomb-0.1.8.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "5006a1439ceef3b6bb14081e41068160", "sha256": "325d6f398edd970e1830903e4b865fceded39a9104060c96440a3fa8ae6889da" }, "downloads": -1, "filename": "pycomb-0.1.9.tar.gz", "has_sig": false, "md5_digest": "5006a1439ceef3b6bb14081e41068160", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11034, "upload_time": "2017-02-08T21:42:13", "url": "https://files.pythonhosted.org/packages/c2/13/7a54d8e581d7947f9c95fe7df3df64a04493db1806a856541c88850ac70a/pycomb-0.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b6caa71350dfdb81b1968cc4fcc0a307", "sha256": "253e6abaaaddb1c8f8e97066d945530d078d10d53ac7b3aadbfb9d8dcabb87ba" }, "downloads": -1, "filename": "pycomb-0.1.17.tar.gz", "has_sig": false, "md5_digest": "b6caa71350dfdb81b1968cc4fcc0a307", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16159, "upload_time": "2019-06-08T13:07:56", "url": "https://files.pythonhosted.org/packages/3f/1b/2f6650938ceea11c15350d6cf3343df45d0fb37c30c5d97d90fd1ae2fa99/pycomb-0.1.17.tar.gz" } ] }