{ "info": { "author": "Neil Girdhar", "author_email": "mistersheik@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.7" ], "description": "=========\nI Promise\n=========\n.. image:: https://badge.fury.io/py/ipromise.svg\n :target: https://badge.fury.io/py/ipromise\n\nThis repository provides a Python base class, and various decorators for specifying promises relating to inheritance.\nIt provides three inheritance patterns:\n\n* implementing,\n* overriding, and\n* augmenting.\n\nImplementing\n============\n*Implementing* is the pattern whereby an inheriting class's method implements an abstract method from a base class method.\nIt is declared using the decorators:\n\n* ``abc.abstractmethod`` from the standard library, and\n* ``implements``, which indicates that a method implements an abstract method in a base class\n\nFor example:\n\n.. code-block:: python\n\n class HasAbstractMethod(AbstractBaseClass):\n\n @abstractmethod\n def f(self):\n raise NotImplementedError\n\n\n class ImplementsAbstractMethod(HasAbstractMethod):\n\n @implements(HasAbstractMethod)\n def f(self):\n return 0\n\nOverriding\n==========\n*Overriding* is the pattern whereby an inheriting class's method replaces the implementation of a base class method.\nIt is declared using the decorator ``overrides``, which marks the overriding method.\n\nAn overriding method could call super, but does not have to:\n\n.. code-block:: python\n\n class HasRegularMethod(AbstractBaseClass):\n\n def f(self):\n return 1\n\n\n class OverridesRegularMethod(HasRegularMethod):\n\n @overrides(HasRegularMethod)\n def f(self):\n return 2\n\nAugmenting\n==========\n*Augmenting* is a special case of *overriding* whereby the inheriting class's method not only *overrides* the base class method, but *extends* its functionality.\nThis means that it must delegate to *super* in all code paths.\nThis pattern is typical in multiple inheritance.\n\nWe hope that Python linters will be able to check for the super call.\n\nAugmenting is declared using two decorators:\n\n* ``augments`` indicates that this method must call super within its definition and thus augments the behavior of the base class method, and\n* ``must_agugment`` indicates that child classes that define this method must decorate their method overriddes with ``augments``.\n\nFor example:\n\n.. code-block:: python\n\n class HasMustAugmentMethod(AbstractBaseClass):\n\n @must_augment\n def f(self):\n # must_augment prevents this behavior from being lost.\n self.times_f_called += 1\n return 0\n\n\n class AugmentsMethod(HasMustAugmentMethod):\n\n @augments(HasMustAugmentMethod)\n def f(self, extra=0, **kwargs):\n return super().f(**kwargs) + extra\n\n\n class AugmentsMethodFurther(AugmentsMethod):\n\n @augments(HasMustAugmentMethod)\n def f(self, **kwargs):\n print(\"f has been called\")\n return super().f(**kwargs)\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "https://pypi.python.org/pypi/ipromise", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "testing,logging,example", "license": "", "maintainer": "", "maintainer_email": "", "name": "ipromise", "package_url": "https://pypi.org/project/ipromise/", "platform": "", "project_url": "https://pypi.org/project/ipromise/", "project_urls": { "Bug Tracker": "https://github.com/NeilGirdhar/ipromise/issues", "Download": "https://pypi.python.org/pypi/ipromise", "Source Code": "https://github.com/NeilGirdhar/ipromise" }, "release_url": "https://pypi.org/project/ipromise/1.5/", "requires_dist": null, "requires_python": ">=3.7", "summary": "A Python base class that provides various decorators for specifying promises relating to inheritance.", "version": "1.5" }, "last_serial": 5773087, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "8e489e3807fe934c320080740e096dd0", "sha256": "b90468c069fbc4ee8529b3c531fd75894b3be1a7fbdb19cdcd033dadf5aff58f" }, "downloads": -1, "filename": "ipromise-0.1.tar.gz", "has_sig": false, "md5_digest": "8e489e3807fe934c320080740e096dd0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1662, "upload_time": "2017-10-26T05:35:34", "url": "https://files.pythonhosted.org/packages/c1/23/b09a46d5e19c7f8935ce796eaa8876d9237f851cf8396098d9908b752820/ipromise-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "dc1d1c5cebf5c4a03e6b60182caf4f03", "sha256": "2835f5cd8008f7d53a7ac4c07705b5fc6c101dee1b1671b568a3f46d57c0bb54" }, "downloads": -1, "filename": "ipromise-0.2.tar.gz", "has_sig": false, "md5_digest": "dc1d1c5cebf5c4a03e6b60182caf4f03", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1591, "upload_time": "2017-10-26T06:09:33", "url": "https://files.pythonhosted.org/packages/a0/8b/a2560d1670a877f062ca5a8edbf6ea596cc401401d82633d3d1f437b7da0/ipromise-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "841583c7f772863e4380b4ef74a62e15", "sha256": "345f4caabbce7a82fdfb135700ddd397eeb3038b51519201239683d7a293f995" }, "downloads": -1, "filename": "ipromise-0.3.tar.gz", "has_sig": false, "md5_digest": "841583c7f772863e4380b4ef74a62e15", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1862, "upload_time": "2018-03-19T11:13:51", "url": "https://files.pythonhosted.org/packages/93/72/ac70e647657706a3e794249d04a5c4888fef187692bdd9dc4abf0cd1e78b/ipromise-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "492a292ab6cc9d822d8b72a9d0ba6f45", "sha256": "a07fc4ec7b1be2eb36c976ae7bd0f5c6297f9a417cc57c7f98d58a62fbfa2c19" }, "downloads": -1, "filename": "ipromise-0.4.tar.gz", "has_sig": false, "md5_digest": "492a292ab6cc9d822d8b72a9d0ba6f45", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2449, "upload_time": "2018-03-24T04:22:12", "url": "https://files.pythonhosted.org/packages/67/ed/4200a95062b71a91b38aa9955cbd8e05bdc617154aab5e46ba51b1b01a00/ipromise-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "da3fa617fc82c4ccb9447e6413f3b041", "sha256": "76ee0d5490e5299eca8e566a20b0c20f12ed88f04edc119532c3e13f4126a514" }, "downloads": -1, "filename": "ipromise-0.5.tar.gz", "has_sig": false, "md5_digest": "da3fa617fc82c4ccb9447e6413f3b041", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2644, "upload_time": "2018-07-08T08:54:45", "url": "https://files.pythonhosted.org/packages/0b/8d/29281232ea403af6636e66dd8ce39db68fa89b9f44c9490038f92803eaaa/ipromise-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "487fbd9af88b7e98d5dfc69081e5d97d", "sha256": "a949f2bc424406fddd05270caaf47c3b9449bcb6a4c719eb2a96e40869d2f6de" }, "downloads": -1, "filename": "ipromise-0.6.tar.gz", "has_sig": false, "md5_digest": "487fbd9af88b7e98d5dfc69081e5d97d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2831, "upload_time": "2018-07-30T01:15:44", "url": "https://files.pythonhosted.org/packages/cb/66/3dcb2c78b2e6437f4ad05fd129baf1994a48ec553a85771f1c8f4202908c/ipromise-0.6.tar.gz" } ], "0.65": [ { "comment_text": "", "digests": { "md5": "ca81f338896669012c51428b94d11dbf", "sha256": "8fa2fa1549cea17db6f4613c4834b07e7edb4fcb693a38a5b80a12de3ab6c66a" }, "downloads": -1, "filename": "ipromise-0.65-py3.7.egg", "has_sig": false, "md5_digest": "ca81f338896669012c51428b94d11dbf", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 10833, "upload_time": "2019-02-17T10:44:21", "url": "https://files.pythonhosted.org/packages/34/d2/93514ed41a0de0643c8c38377d4f7e23187c203c1c668873d40cc4061069/ipromise-0.65-py3.7.egg" } ], "0.7": [ { "comment_text": "", "digests": { "md5": "a9ea701ef91316cbcc034d56ce87659e", "sha256": "92028044c4d66a60ab25adfb9f1bbd48ba86cf623500ad24e122846303506aef" }, "downloads": -1, "filename": "ipromise-0.7-py3.7.egg", "has_sig": false, "md5_digest": "a9ea701ef91316cbcc034d56ce87659e", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 12218, "upload_time": "2019-02-18T05:14:43", "url": "https://files.pythonhosted.org/packages/c0/4f/52f21717994e4d869b3009c12bdf63f847bc8dc7b5eb6ac727743d31a35c/ipromise-0.7-py3.7.egg" } ], "0.75": [ { "comment_text": "", "digests": { "md5": "ac9490df79106394dca7db2098294cd1", "sha256": "97efee3138cf9a1b76e907d1795c7eb3257137b96f6425ffa2eff9b1b141a91b" }, "downloads": -1, "filename": "ipromise-0.75-py3.7.egg", "has_sig": false, "md5_digest": "ac9490df79106394dca7db2098294cd1", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": null, "size": 12222, "upload_time": "2019-02-18T05:21:04", "url": "https://files.pythonhosted.org/packages/79/c4/458e5752952e3b99ca224c78657dbc57f019ee65af9ad95ae77537dfdcd7/ipromise-0.75-py3.7.egg" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "641aae26b538cec37bfef0a969864d60", "sha256": "f2320f7b9d736830c3c005e051f5fdf3fbda653f6367536e1a099c2e498a95ed" }, "downloads": -1, "filename": "ipromise-0.9-py3.7.egg", "has_sig": false, "md5_digest": "641aae26b538cec37bfef0a969864d60", "packagetype": "bdist_egg", "python_version": "3.7", "requires_python": ">=3.6", "size": 17216, "upload_time": "2019-08-26T00:13:21", "url": "https://files.pythonhosted.org/packages/ec/97/0f0c5dbc362c752c78964f0c0636564d904b91f96757899885c350443fa0/ipromise-0.9-py3.7.egg" }, { "comment_text": "", "digests": { "md5": "c1f1883fc593be090901a2822936c95e", "sha256": "e2abbb78c030c7564c7701d5ef6c4e2bb88d3071a74f7534f1e8a8e1cdf4550f" }, "downloads": -1, "filename": "ipromise-0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "c1f1883fc593be090901a2822936c95e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 8750, "upload_time": "2019-08-26T00:14:31", "url": "https://files.pythonhosted.org/packages/12/36/5477df81939737167b77d97a56457f9fe7bb9be079b7dbd0f4b3c95d3b49/ipromise-0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "44cd2e3515a46b6b4e51d518f9573bb8", "sha256": "fef8a40fbeff227711fa5d360b8ddc30b2ebf57ecafc7d36fedd57fb437d5ea1" }, "downloads": -1, "filename": "ipromise-0.9.tar.gz", "has_sig": false, "md5_digest": "44cd2e3515a46b6b4e51d518f9573bb8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5974, "upload_time": "2019-08-26T00:14:33", "url": "https://files.pythonhosted.org/packages/77/27/e3aa3456b0de343e78d0d2d1aae29035ced567680f511c814f423184d0fb/ipromise-0.9.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "3a90c67680e160cc3fd36a5fa4c94c95", "sha256": "8d739f53938950cc89af5c4b91e317837f0c787d2ce9beeb08ea905f8a506c03" }, "downloads": -1, "filename": "ipromise-1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3a90c67680e160cc3fd36a5fa4c94c95", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 8750, "upload_time": "2019-08-26T00:21:37", "url": "https://files.pythonhosted.org/packages/c1/4b/0fa79e945c7a6d350385d5d04f9a5bc089e91377216fb226aa56d21c7e8e/ipromise-1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "54df5962be5c394a43c9fbad9c85fd5c", "sha256": "336d475cca29d7c4012c6c7ef36fe6b88d2e3cc730806f3333540a05ab8c6639" }, "downloads": -1, "filename": "ipromise-1.0.tar.gz", "has_sig": false, "md5_digest": "54df5962be5c394a43c9fbad9c85fd5c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5971, "upload_time": "2019-08-26T00:21:39", "url": "https://files.pythonhosted.org/packages/4b/28/009a388aba772809e1bbde9f992f5b28506982b93c2fcf4729aa780d7365/ipromise-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "0e3eda94cb18a640942392aa0d9d3769", "sha256": "8f066e978dbc6f35ab6845f2829cb660b7b66b30ccbee1fa5a81c37a06c08206" }, "downloads": -1, "filename": "ipromise-1.1.linux-x86_64.tar.gz", "has_sig": false, "md5_digest": "0e3eda94cb18a640942392aa0d9d3769", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 9437, "upload_time": "2019-08-26T00:49:18", "url": "https://files.pythonhosted.org/packages/47/62/39e775cf883b6aff09f566fe5b5e78764f97b35d48a0ec1adf62fbe6e1f6/ipromise-1.1.linux-x86_64.tar.gz" }, { "comment_text": "", "digests": { "md5": "e25c1b9e60ffb4563fdb35831ae4a34c", "sha256": "6da9148196c5b0bf82107da9f0c339a9d81c4074aaf8010dabd0a6388adc8afe" }, "downloads": -1, "filename": "ipromise-1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "e25c1b9e60ffb4563fdb35831ae4a34c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 8746, "upload_time": "2019-08-26T00:49:16", "url": "https://files.pythonhosted.org/packages/b6/db/59bc861d9090bba8449c3332e8330440a6537c6d501ab01805b05b2e4626/ipromise-1.1-py3-none-any.whl" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "d33822485a7fe4aa7c18177caf22ccd0", "sha256": "40bd8a0bfdf23a32128a3b49c12a7544549691c305ea2907cfa3c781ad9e7301" }, "downloads": -1, "filename": "ipromise-1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d33822485a7fe4aa7c18177caf22ccd0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 8750, "upload_time": "2019-08-26T00:55:44", "url": "https://files.pythonhosted.org/packages/aa/02/07d2d95d393c5ad91075029d8deb77388e97bf7a8c01fface33dfe6bb27f/ipromise-1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3127fec180001c3aaa3c5fd398cb5704", "sha256": "6d3b2b715a6b615b782aa1a42c70f83c6eec93565ca15b883d383f9189d86ee7" }, "downloads": -1, "filename": "ipromise-1.2.tar.gz", "has_sig": false, "md5_digest": "3127fec180001c3aaa3c5fd398cb5704", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5933, "upload_time": "2019-08-26T00:55:45", "url": "https://files.pythonhosted.org/packages/56/1d/4e8a149cc07f7eb1bfae918c157bf1722946d09ac7c13af330d860c97cab/ipromise-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "9a7a81e750eb2d5ff044f4c24ab00eb3", "sha256": "ad954ac33e6d02c702c92901cfbc51423b1fdf5f393f612f2a4d8231355925bd" }, "downloads": -1, "filename": "ipromise-1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "9a7a81e750eb2d5ff044f4c24ab00eb3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 9217, "upload_time": "2019-08-26T23:21:08", "url": "https://files.pythonhosted.org/packages/58/d1/fa8995ad79ae5ba8241be722c60ad34b5abba92243162fce2f2efcfc14e2/ipromise-1.3-py3-none-any.whl" } ], "1.4": [ { "comment_text": "", "digests": { "md5": "e73a6bd2a0256aabd4cc9b6d31a947b6", "sha256": "f78946c6ea0ecdaa372d5f56ffedfae4f8c9d3aede85d73801e014a0ee67f4a4" }, "downloads": -1, "filename": "ipromise-1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "e73a6bd2a0256aabd4cc9b6d31a947b6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 9251, "upload_time": "2019-08-26T23:49:24", "url": "https://files.pythonhosted.org/packages/b7/66/d3474b949658ad4dd797a035be117530922584d74de0e281b065a455c3cd/ipromise-1.4-py3-none-any.whl" } ], "1.5": [ { "comment_text": "", "digests": { "md5": "a50087dbd83da53c54d5b81a1585f3e7", "sha256": "b4986e6b0d04a97b238a3a4e5171e34524fc2ed18cb285f0f0022c8fa8784f88" }, "downloads": -1, "filename": "ipromise-1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "a50087dbd83da53c54d5b81a1585f3e7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 9312, "upload_time": "2019-09-02T23:37:07", "url": "https://files.pythonhosted.org/packages/7d/1b/c553ff4294876e0fd678631c82286844003874254189cf5a1c8dd2f006e8/ipromise-1.5-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a50087dbd83da53c54d5b81a1585f3e7", "sha256": "b4986e6b0d04a97b238a3a4e5171e34524fc2ed18cb285f0f0022c8fa8784f88" }, "downloads": -1, "filename": "ipromise-1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "a50087dbd83da53c54d5b81a1585f3e7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.7", "size": 9312, "upload_time": "2019-09-02T23:37:07", "url": "https://files.pythonhosted.org/packages/7d/1b/c553ff4294876e0fd678631c82286844003874254189cf5a1c8dd2f006e8/ipromise-1.5-py3-none-any.whl" } ] }