{ "info": { "author": "Yann B\u00fcchau", "author_email": "nobodyinperson@gmx.de", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: GNU General Public License v3 (GPLv3)" ], "description": "# Python Class Utilities\n\n[![pipeline status](https://gitlab.com/nobodyinperson/python3-class-tools/badges/master/pipeline.svg)](https://gitlab.com/nobodyinperson/python3-class-tools/commits/master)\n[![coverage report](https://gitlab.com/nobodyinperson/python3-class-tools/badges/master/coverage.svg)](https://nobodyinperson.gitlab.io/python3-class-tools/coverage-report/)\n[![documentation](https://img.shields.io/badge/docs-sphinx-brightgreen.svg)](https://nobodyinperson.gitlab.io/python3-class-tools/)\n[![PyPI](https://badge.fury.io/py/class-tools.svg)](https://badge.fury.io/py/class-tools)\n\n`class-tools` is a collection of utilities for Python classes that the author\nfrequently needs.\n\n## What can I do with `class-tools`?\n\n### Quickly Add Properties to Classes\n\n```python\nfrom class_tools.decorators import wrapper_property\n\n@wrapper_property(\"name\", default=lambda: \"Bob\", doc=\"The dog's name\")\n@wrapper_property(\"toy\", default=lambda: \"ball\")\n@wrapper_property(\"sharp_teeth\", default=lambda: 4, type=int)\nclass Dog:\n pass\n\ndog = Dog()\ndog.__doc__\n# \"The dog's name\"\ndog.name\n# 'Bob'\ndog.toy\n# 'ball'\ndog.sharp_teeth = \"4\" # (set as a string value)\ndog.sharp_teeth\n# 4 (returned as int)\n```\n\n### Add a Pretty `__repr__` Method\n\n```python\nfrom class_tools.decorators import *\n\n@with_init_from_properties()\n@with_repr_like_init_from_properties()\n@wrapper_property(\"name\")\n@wrapper_property(\"furcolor\")\nclass Cat:\n pass\n\ncat = Cat(name=\"Lucy\", furcolor=\"white\")\ncat\n# Cat(\n# furcolor = 'white',\n# name = 'Lucy'\n# )\n```\n\n### Make Classes Comparable by Properties\n\n```python\nfrom class_tools.decorators import *\n\n@with_eq_comparing_properties()\n@wrapper_property(\"name\")\n@wrapper_property(\"furcolor\")\nclass Cat:\n pass\n\nlucy = Cat()\nlucy.name = \"Lucy\"\nlucy.furcolor = \"white\"\nlucy_clone = Cat()\nlucy_clone.name = \"Lucy\"\nlucy_clone.furcolor = \"white\"\ngary = Cat()\ngary.name = \"Gary\"\nlucy == gary\n# False\nlucy == lucy_clone\n# True\n```\n\n### All of the Above\n\n```python\nfrom class_tools.propertyobject import PropertyObject\nfrom class_tools.decorators import wrapper_property\n\n@wrapper_property(\"name\")\n@wrapper_property(\"height\", type=float)\n@wrapper_property(\"friends\", type=list, default=list)\nclass Giraffe(PropertyObject):\n\t\tpass\n\nmatt = Giraffe(name=\"Matt\")\nmatt.height = 3\ngunther = Giraffe(name=\"Gunther\")\ngunther.friends.append(matt)\ngunther\n# Giraffe(\n# friends=[Giraffe(\n# friends=[],\n# height=3.0,\n# name='Matt'\n# )],\n# height=None,\n# name='Gunther'\n# )\n```\n\n## Installation\n\nThe `class-tools` package is best installed via `pip`. Run from anywhere:\n\n```bash\npython3 -m pip install --user class-tools\n```\n\nThis downloads and installs the package from the [Python Package\nIndex](https://pypi.org).\n\nYou may also install `class-tools` from the repository root:\n\n```bash\npython3 -m pip install --user .\n```\n\n## Documentation\n\nDocumentation of the `class-tools` package can be found [here on\nGitLab](https://nobodyinperson.gitlab.io/python3-class-tools/).\n\nAlso, the command-line help page `python3 -m class-tools -h` is your friend.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/nobodyinperson/python3-class-tools", "keywords": "", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "class-tools", "package_url": "https://pypi.org/project/class-tools/", "platform": "", "project_url": "https://pypi.org/project/class-tools/", "project_urls": { "Homepage": "https://gitlab.com/nobodyinperson/python3-class-tools" }, "release_url": "https://pypi.org/project/class-tools/0.2.0/", "requires_dist": null, "requires_python": "", "summary": "Python class utilities", "version": "0.2.0" }, "last_serial": 4768128, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "c725037e608676d2176cea17e895b154", "sha256": "98fb10405d9a11223144203dda3bc079264d5180b6964a9c367994c275e96416" }, "downloads": -1, "filename": "class-tools-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c725037e608676d2176cea17e895b154", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17398, "upload_time": "2019-01-26T19:51:18", "url": "https://files.pythonhosted.org/packages/82/9c/f9fa618fd866fef1249cd9de9c2b37089e38db4a686d7abba09d4a9ad5ec/class-tools-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "823e154228d47db0b5f26c1684c59ebc", "sha256": "b29624cc6584d9772ba405d10424b6c9f842db86cd89b4344d5bc919b41ce93c" }, "downloads": -1, "filename": "class-tools-0.1.1.tar.gz", "has_sig": false, "md5_digest": "823e154228d47db0b5f26c1684c59ebc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17445, "upload_time": "2019-01-26T20:39:42", "url": "https://files.pythonhosted.org/packages/1b/3c/5015f49762d04b9f1c271503f4688c738c0c09aab79caba37bbf9b538741/class-tools-0.1.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "4ca68c412f55ac192e88e6a79d1bd696", "sha256": "4039b5895ac8e9d2f0d1fd3641afbdac5017f72f800440db0faf87fd9bc29c58" }, "downloads": -1, "filename": "class-tools-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4ca68c412f55ac192e88e6a79d1bd696", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18862, "upload_time": "2019-02-01T11:54:10", "url": "https://files.pythonhosted.org/packages/76/e6/d473d6898fc3a308f22f3b7504f26d55022da40a9b65156a246461306506/class-tools-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4ca68c412f55ac192e88e6a79d1bd696", "sha256": "4039b5895ac8e9d2f0d1fd3641afbdac5017f72f800440db0faf87fd9bc29c58" }, "downloads": -1, "filename": "class-tools-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4ca68c412f55ac192e88e6a79d1bd696", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18862, "upload_time": "2019-02-01T11:54:10", "url": "https://files.pythonhosted.org/packages/76/e6/d473d6898fc3a308f22f3b7504f26d55022da40a9b65156a246461306506/class-tools-0.2.0.tar.gz" } ] }