{ "info": { "author": "Serge Matveenko", "author_email": "lig@countzero.co", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3 :: Only", "Topic :: Software Development :: Libraries :: Python Modules", "Typing :: Typed" ], "description": "# Python Strict Interfaces\n\n\n## Installation\n\n```shell\npip install strict-interfaces\n```\n\n\n## Design Goals\n\n* Be as strict as possible\n* Fail on import time\n* Do not mess with `object` and/or `type` inheritance\n* Possibility to integrate in CPython Core\n* Ability to use \"out of the box\" regardless support in an interpreter\n\n\n## Features\n\n* Special keyword `implements` on the class definition\n* Multiple interface implementation\n* Implicit interface implementation\n* Interface inheritance with overloading being restricted\n* Special `isimplementation` function similar to `issubclass`\n* Partial `issubclass` support (see below)\n* It's restricted to create an interface instance\n* It's restricted to inherit from `object` and `interface` at the same time\n\n\n## Usage\n\n### Explicit implementation\n\n```python\nclass TestInterface(interfaces.interface):\n def method(self, arg: typeT1) -> typeT2:\n pass\n\nclass TestClass(interfaces.object, implements=[TestInterface]):\n def method(self, arg: typeT1) -> typeT2:\n pass\n```\n\n### Raises when is not implemented \n\n```python\nclass TestInterface(interfaces.interface):\n def method(self, arg):\n pass\n\nclass TestClass(interfaces.object, implements=[TestInterface]):\n pass\n```\n\n### Implicit implementation and run-time check\n\n```python\nclass TestInterfaceA(interfaces.interface):\n def method_a(arg: typeT1) -> typeT1:\n pass\n\nclass TestInterfaceB(interfaces.interface):\n def method_b(arg: typeT2) -> typeT2:\n pass\n\nclass TestClass:\n def method_a(arg: typeT1) -> typeT1:\n pass\n\n def method_b(arg: typeT2) -> typeT2:\n pass\n\nassert interfaces.isimplementation(TestClass, (TestInterfaceA, TestInterfaceB))\n```\n\n### `isimplementation` checks whether all interfaces are implemented \n\n```python\nclass TestInterfaceA(interfaces.interface):\n def method_a(arg: typeT1) -> typeT1:\n pass\n\nclass TestInterfaceB(interfaces.interface):\n def method_b(arg: typeT2) -> typeT2:\n pass\n\nclass TestClass:\n def method_a(arg: typeT1) -> typeT1:\n pass\n\n# NOTE: In this case `isimplementation` behaves different than `issubclass`\nassert not interfaces.isimplementation(TestClass, (TestInterfaceA, TestInterfaceB))\nassert issubclass(TestClass, (TestInterfaceA, TestInterfaceB))\n```\n\n\n## Contributing\n\nPull requests, feature requests, and bug reports are always welcome!\n\n[github.com/lig/python-interfaces](https://github.com/lig/python-interfaces)\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/lig/python-interfaces", "keywords": "python strict interfaces implemetation pep", "license": "", "maintainer": "", "maintainer_email": "", "name": "strict-interfaces", "package_url": "https://pypi.org/project/strict-interfaces/", "platform": "", "project_url": "https://pypi.org/project/strict-interfaces/", "project_urls": { "Homepage": "https://github.com/lig/python-interfaces" }, "release_url": "https://pypi.org/project/strict-interfaces/0.1.2/", "requires_dist": null, "requires_python": ">=3.7", "summary": "A new approach to interfaces in Python", "version": "0.1.2" }, "last_serial": 5227208, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "bca8ef2fc49dc5bd3cdd689640ea2843", "sha256": "7215c7b26f5a3af44f5679991d1e3719db3179546a07732b5b2add047a713636" }, "downloads": -1, "filename": "strict_interfaces-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bca8ef2fc49dc5bd3cdd689640ea2843", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 12970, "upload_time": "2019-05-05T01:41:13", "url": "https://files.pythonhosted.org/packages/0e/30/433bfca3b2e8fe1053568d03fbf9bc711ec7cf57f58f8bd0e8b1e6f9012f/strict_interfaces-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "069a26795094159ec5473ea9d9501cb8", "sha256": "d4875b2ac238432864cb3f2ed8c2941dc9eb65cce8231e63eba6709234a218e7" }, "downloads": -1, "filename": "strict-interfaces-0.1.0.tar.gz", "has_sig": false, "md5_digest": "069a26795094159ec5473ea9d9501cb8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 11812, "upload_time": "2019-05-05T01:41:15", "url": "https://files.pythonhosted.org/packages/6f/e4/9d58d059bfef0edb60848b67c66f032d809c0d846e79e39b7e84b19852a4/strict-interfaces-0.1.0.tar.gz" } ], "0.1.0.dev0": [ { "comment_text": "", "digests": { "md5": "19bfea214920a6c53c9f5145f06be17c", "sha256": "8e5f53a02ffd5c431e0687a062e848133fbf774bf73fd9b0beb61434a94b0561" }, "downloads": -1, "filename": "strict_interfaces-0.1.0.dev0-py3-none-any.whl", "has_sig": false, "md5_digest": "19bfea214920a6c53c9f5145f06be17c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 12309, "upload_time": "2019-05-05T00:05:24", "url": "https://files.pythonhosted.org/packages/6c/be/ceb1aa9a6f3ee6665f3e25b618a001f3084278c98d9bd552a653bfa0ca4f/strict_interfaces-0.1.0.dev0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a46c01a48c8963f22dd9284889a22a66", "sha256": "7a87c5a93fc8dcc5111d98c7f5f01847b72ce7a5ae2367dca93747d669e400eb" }, "downloads": -1, "filename": "strict-interfaces-0.1.0.dev0.tar.gz", "has_sig": false, "md5_digest": "a46c01a48c8963f22dd9284889a22a66", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 11147, "upload_time": "2019-05-05T00:05:27", "url": "https://files.pythonhosted.org/packages/52/35/312e44ab84d5f94e6d5e6593f6667335a445c2e77ae511bf6ec01b7ed333/strict-interfaces-0.1.0.dev0.tar.gz" } ], "0.1.0.dev1": [ { "comment_text": "", "digests": { "md5": "58fd558aa54d318c4fd007556e9937ad", "sha256": "de82d20c9afb6aa0c9861389c287c54d529be9bd37516b48705b76bea279d9f3" }, "downloads": -1, "filename": "strict_interfaces-0.1.0.dev1-py3-none-any.whl", "has_sig": false, "md5_digest": "58fd558aa54d318c4fd007556e9937ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 13025, "upload_time": "2019-05-05T00:53:37", "url": "https://files.pythonhosted.org/packages/7e/3c/36043d9674ef834f1fb4af0b8441b90ca25c33f5e06f89ef251cb522dd1b/strict_interfaces-0.1.0.dev1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b23f9bacd0d438dac813fe1c334f92f0", "sha256": "7f5211c35716181adff66e4b4edc45820cba104df5bd15c37b530417b8847fba" }, "downloads": -1, "filename": "strict-interfaces-0.1.0.dev1.tar.gz", "has_sig": false, "md5_digest": "b23f9bacd0d438dac813fe1c334f92f0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 11827, "upload_time": "2019-05-05T00:53:39", "url": "https://files.pythonhosted.org/packages/06/19/78aa76f2358cfd206437c92b75f602e1160140d12487402f2c6c9b59e79c/strict-interfaces-0.1.0.dev1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "f65a50a575f241089987d126e7e70da0", "sha256": "c9032b619b952c9184a374c92aba40fa3ea80ad0a7757e530805297ab91bcf01" }, "downloads": -1, "filename": "strict_interfaces-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f65a50a575f241089987d126e7e70da0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 12969, "upload_time": "2019-05-05T02:12:31", "url": "https://files.pythonhosted.org/packages/14/ef/a54dc4923b7feacb432658e855b556044390151bc6e1f123b477735d419a/strict_interfaces-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ce02c5927f04d780b8f13d69565c0ba1", "sha256": "75dd960f6a6ec61f788587cb52e10b42edffe85da7d06823dd0e3631cf545f47" }, "downloads": -1, "filename": "strict-interfaces-0.1.1.tar.gz", "has_sig": false, "md5_digest": "ce02c5927f04d780b8f13d69565c0ba1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 11805, "upload_time": "2019-05-05T02:12:33", "url": "https://files.pythonhosted.org/packages/06/a5/fcc63e5cb1159d64abcd819669cb244bc885f3f0e9af037d9832756019ff/strict-interfaces-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "b60931e387f54b2bae066dd74b32af34", "sha256": "407e59ee63b3a07f5c7ca91711499acca0b6a8675c037a3bdfb031cea54693e2" }, "downloads": -1, "filename": "strict_interfaces-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b60931e387f54b2bae066dd74b32af34", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 12966, "upload_time": "2019-05-05T02:14:53", "url": "https://files.pythonhosted.org/packages/1b/07/0220b533a43c6486ba5cf14d73eeec2152172a71c28cd55327a6d2458e9b/strict_interfaces-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41355565083611de51f12c2f82557e12", "sha256": "0560785c5986b103a11495c110f153d4d5774461f2f0dbd3c8cce9e7c7e5be14" }, "downloads": -1, "filename": "strict-interfaces-0.1.2.tar.gz", "has_sig": false, "md5_digest": "41355565083611de51f12c2f82557e12", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 11803, "upload_time": "2019-05-05T02:14:55", "url": "https://files.pythonhosted.org/packages/d5/2b/e908efc32da7b171d271c21a5b60224aa65bfbc61c3ee89f005b545d00db/strict-interfaces-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b60931e387f54b2bae066dd74b32af34", "sha256": "407e59ee63b3a07f5c7ca91711499acca0b6a8675c037a3bdfb031cea54693e2" }, "downloads": -1, "filename": "strict_interfaces-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b60931e387f54b2bae066dd74b32af34", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 12966, "upload_time": "2019-05-05T02:14:53", "url": "https://files.pythonhosted.org/packages/1b/07/0220b533a43c6486ba5cf14d73eeec2152172a71c28cd55327a6d2458e9b/strict_interfaces-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41355565083611de51f12c2f82557e12", "sha256": "0560785c5986b103a11495c110f153d4d5774461f2f0dbd3c8cce9e7c7e5be14" }, "downloads": -1, "filename": "strict-interfaces-0.1.2.tar.gz", "has_sig": false, "md5_digest": "41355565083611de51f12c2f82557e12", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.7", "size": 11803, "upload_time": "2019-05-05T02:14:55", "url": "https://files.pythonhosted.org/packages/d5/2b/e908efc32da7b171d271c21a5b60224aa65bfbc61c3ee89f005b545d00db/strict-interfaces-0.1.2.tar.gz" } ] }