{ "info": { "author": "Mital Ashok", "author_email": "mital.vaja@googlemail.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 :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries" ], "description": "objecttools\r\n===========\r\n\r\nVarious tools for working with objects and classes in Python\r\n\r\nCached properties\r\n-----------------\r\n\r\nWorks just like a normal property, but returned values are cached:\r\n\r\n.. code:: python\r\n\r\n from objecttools import CachedProperty\r\n\r\n class ExpensiveOperations(object):\r\n @CachedProperty\r\n def expensive_attribute(self):\r\n return self.calculate()\r\n \r\n # To make it settable\r\n \r\n @expensive_attribute.setter\r\n def expensive_attribute(self, value):\r\n pass\r\n \r\n # To make it deletable\r\n \r\n @expensive_attribute.deleter\r\n def expensive_attribute(self):\r\n pass\r\n\r\n e = ExpensiveOperations()\r\n e.other_attribute = 1\r\n print(e.expensive_attribute) # Takes a long time.\r\n print(e.expensive_attribute) # Very quick; just retrieve from cache\r\n v = e.expensive_attribute\r\n\r\n e.other_attribute = 2 # expensive_attribute should be different now!\r\n print(e.expensive_attribute) # Old value that is wrong.\r\n del e.expensive_attribute\r\n print(e.expensive_attribute) # Takes a long time, but returns new value.\r\n e.other_attribute = 1\r\n # Reset to known value\r\n e.expensive_attribute = v\r\n print(e.expensive_attribute) # Correct value!\r\n\r\nSingletons\r\n----------\r\n\r\n.. code:: python\r\n\r\n from objecttools import Singleton\r\n\r\n Sentinel = Singleton.create('Sentinel')\r\n\r\n Sentinel() is Sentinel() # True\r\n\r\n d.get('missing_value', Sentinel()) is Sentinel() # True\r\n\r\n class GlobalState(dict, metaclass=Singleton):\r\n attr = 0\r\n\r\n\r\n gs = GlobalState()\r\n gs['value'] = 7\r\n gs.attr = 1\r\n\r\n print(GlobalState()['value'] + GlobalState().attr) # 8\r\n\r\nFor Python 2 and 3 compatibility, use it as a decorator:\r\n\r\n.. code:: python\r\n\r\n @Singleton.as_decorator\r\n class Class(object):\r\n pass\r\n\r\nObjectProxy\r\n-----------\r\n\r\nCreate a weak-referenceable proxy to an object that supports the same\r\noperations:\r\n\r\n.. code:: python\r\n\r\n from objecttools import ObjectProxy\r\n \r\n ls = [1, 2, 3]\r\n proxy = ObjectProxy(ls)\r\n \r\n proxy.append(4)\r\n proxy += [5, 6]\r\n proxy[2:4] = [7, 8, 9]\r\n print(ls) # [1, 2, 7, 8, 9, 5, 6]\r\n\r\nserializable\r\n------------\r\n\r\nCreate serializable forms of objects (For pickling)\r\n\r\n.. code:: python\r\n\r\n from objecttools import SerializableFunction, SerializableConstant\r\n import pickle\r\n \r\n file = open('file.txt', 'w')\r\n \r\n f = lambda file, a: file.write(a)\r\n \r\n try:\r\n # Cannot pickle files, even though it is a global constant\r\n gile = pickle.loads(pickle.dumps(file))\r\n except TypeError:\r\n gile = pickle.loads(pickle.dumps(SerializableConstant('file', __name__))).value\r\n \r\n try:\r\n # Cannot pickle functions if they are lambdas\r\n # Or are inner functions\r\n # Or are deleted after creation\r\n # Or are methods\r\n g = pickle.loads(pickle.dumps(f))\r\n except pickle.PicklingError:\r\n g = pickle.loads(pickle.dumps(SerializableFunction(f)))\r\n \r\n g(gile, 'data') # Works\r\n\r\nInstalling\r\n----------\r\n\r\nFrom `PyPI `__\r\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n\r\n.. code:: bash\r\n\r\n $ pip install objecttools\r\n\r\nFrom source\r\n~~~~~~~~~~~\r\n\r\n.. code:: bash\r\n\r\n $ git clone 'https://github.com/MitalAshok/objecttools.git'\r\n $ python ./objecttools/setup.py install\r\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/MitalAshok/objecttools", "keywords": "library", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "objecttools", "package_url": "https://pypi.org/project/objecttools/", "platform": "any", "project_url": "https://pypi.org/project/objecttools/", "project_urls": { "Homepage": "https://github.com/MitalAshok/objecttools" }, "release_url": "https://pypi.org/project/objecttools/1.0.1/", "requires_dist": null, "requires_python": "", "summary": "Various tools for working with objects and classes in Python", "version": "1.0.1" }, "last_serial": 3087841, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "c9ba3afd6340577afd35f22d8b46f1bd", "sha256": "3ae06eca05d0478e0937425e2708c7d8fb1f475616cb18267a2a235f577cfe77" }, "downloads": -1, "filename": "objecttools-0.0.1.tar.gz", "has_sig": false, "md5_digest": "c9ba3afd6340577afd35f22d8b46f1bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4625, "upload_time": "2017-06-29T19:35:31", "url": "https://files.pythonhosted.org/packages/a4/5b/7e21e9998ec26a7a1e1b11ae6e634bdcb8e8a44760111b127a086a895667/objecttools-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "c04436311d251a7bb3184da46c988d7f", "sha256": "adf166ae1c14e12e49ee4b829ab4f2d1066fd8f64c6fd4f36772efb0b9b35eaa" }, "downloads": -1, "filename": "objecttools-0.0.2.tar.gz", "has_sig": false, "md5_digest": "c04436311d251a7bb3184da46c988d7f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4668, "upload_time": "2017-06-30T10:29:23", "url": "https://files.pythonhosted.org/packages/04/1c/6a21ad99ced93fb0997ccba5b3f9d7b40cd30e1b6575bc1205358b797aa7/objecttools-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "4e4c92c1443eae60b8f6f59ce06fac8c", "sha256": "69cf74769a232bda254e593e0250566fd9b7728f029f32c074dd4845ae939006" }, "downloads": -1, "filename": "objecttools-0.0.3.tar.gz", "has_sig": false, "md5_digest": "4e4c92c1443eae60b8f6f59ce06fac8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4783, "upload_time": "2017-06-30T11:00:30", "url": "https://files.pythonhosted.org/packages/be/81/9846ed6c7de748797e382c63f3e57cee5a826c9e7ea5ed5b555b96ca021c/objecttools-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "b81515cb5df9ddb572828d7654eb5f2d", "sha256": "6b182fd994c66eca50cf03ab2a0806bdf3825e65f8aad1c6f7243c81ee4d1c46" }, "downloads": -1, "filename": "objecttools-0.0.4.tar.gz", "has_sig": false, "md5_digest": "b81515cb5df9ddb572828d7654eb5f2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5109, "upload_time": "2017-07-04T19:45:05", "url": "https://files.pythonhosted.org/packages/c3/a7/0fadb38247b4ba3ead80cb4656d1950b44973905d20bf68cbd52d07cd227/objecttools-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "ad988b1249b32b4b77f66a57e0620e6e", "sha256": "51d889cd681cb0d5a8e1275b6d167155925803efaf309d2477d34f1a79fb6ce1" }, "downloads": -1, "filename": "objecttools-0.0.5.zip", "has_sig": false, "md5_digest": "ad988b1249b32b4b77f66a57e0620e6e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9185, "upload_time": "2017-07-31T20:46:20", "url": "https://files.pythonhosted.org/packages/15/dc/12c971a4266d3acb939e3762d4dbeb212f96656a4628ab18cf7ff88e473b/objecttools-0.0.5.zip" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "0a96f235b93ca6a25eb1e38d688cc03b", "sha256": "10d9a720208ce94e5e55d93d9dbf5245da1e4ba142809ec1b3e3b6d7b78f028d" }, "downloads": -1, "filename": "objecttools-0.0.6.zip", "has_sig": false, "md5_digest": "0a96f235b93ca6a25eb1e38d688cc03b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12452, "upload_time": "2017-08-06T12:14:26", "url": "https://files.pythonhosted.org/packages/b0/1f/23d9e259991107267c5146cc30b56dfb38c1c01d8584229166a149fb1c32/objecttools-0.0.6.zip" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "f626484feffa70eb9c1e04a8c1db3db9", "sha256": "b8c35c6e647feef01271b9b4beb28fd50ca8ca12998869270ffa6a815e3071c8" }, "downloads": -1, "filename": "objecttools-1.0.0.zip", "has_sig": false, "md5_digest": "f626484feffa70eb9c1e04a8c1db3db9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16429, "upload_time": "2017-08-07T17:10:51", "url": "https://files.pythonhosted.org/packages/22/21/ce1e7e8dfd76e8820097d6044342cd9c3839973b34940704e5d8c3ce6804/objecttools-1.0.0.zip" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "21354a9d3869e38cd8a0992f7a5d6892", "sha256": "ba27b70c5bf9ef479d60dd6f79f60dc274e2134bb9cd35fafaf5477f28e9d37e" }, "downloads": -1, "filename": "objecttools-1.0.1.tar.gz", "has_sig": false, "md5_digest": "21354a9d3869e38cd8a0992f7a5d6892", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11384, "upload_time": "2017-08-10T18:53:42", "url": "https://files.pythonhosted.org/packages/f1/5f/25089ad4fea2a9de63b09f66a55236f808e8667d31a3ea38a965fb9ca47b/objecttools-1.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "21354a9d3869e38cd8a0992f7a5d6892", "sha256": "ba27b70c5bf9ef479d60dd6f79f60dc274e2134bb9cd35fafaf5477f28e9d37e" }, "downloads": -1, "filename": "objecttools-1.0.1.tar.gz", "has_sig": false, "md5_digest": "21354a9d3869e38cd8a0992f7a5d6892", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11384, "upload_time": "2017-08-10T18:53:42", "url": "https://files.pythonhosted.org/packages/f1/5f/25089ad4fea2a9de63b09f66a55236f808e8667d31a3ea38a965fb9ca47b/objecttools-1.0.1.tar.gz" } ] }