{ "info": { "author": "Hynek Schlawack", "author_email": "hs@ox.cx", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "======================================\nattrs: Attributes without boilerplate.\n======================================\n\n.. image:: https://img.shields.io/pypi/v/attrs.svg\n :target: https://pypi.python.org/pypi/attrs/\n :alt: Latest Version\n\n.. image:: https://travis-ci.org/hynek/attrs.svg\n :target: https://travis-ci.org/hynek/attrs\n :alt: CI status\n\n.. image:: https://codecov.io/github/hynek/attrs/coverage.svg?branch=master\n :target: https://codecov.io/github/hynek/attrs?branch=master\n :alt: Coverage\n\n.. teaser-begin\n\n``attrs`` is an `MIT `_-licensed Python package with class decorators that ease the chores of implementing the most common attribute-related object protocols:\n\n.. code-block:: pycon\n\n >>> import attr\n >>> @attr.s\n ... class C(object):\n ... x = attr.ib(default=42)\n ... y = attr.ib(default=attr.Factory(list))\n >>> i = C(x=1, y=2)\n >>> i\n C(x=1, y=2)\n >>> i == C(1, 2)\n True\n >>> i != C(2, 1)\n True\n >>> attr.asdict(i)\n {'y': 2, 'x': 1}\n >>> C()\n C(x=42, y=[])\n >>> C2 = attr.make_class(\"C2\", [\"a\", \"b\"])\n >>> C2(\"foo\", \"bar\")\n C2(a='foo', b='bar')\n\n(If you don\u2019t like the playful ``attr.s`` and ``attr.ib``, you can also use their no-nonsense aliases ``attr.attributes`` and ``attr.attr``).\n\nYou just specify the attributes to work with and ``attrs`` gives you:\n\n- a nice human-readable ``__repr__``,\n- a complete set of comparison methods,\n- an initializer,\n- and much more\n\n*without* writing dull boilerplate code again and again.\n\nThis gives you the power to use actual classes with actual types in your code instead of confusing ``tuple``\\ s or confusingly behaving ``namedtuple``\\ s.\n\nSo put down that type-less data structures and welcome some class into your life!\n\n.. note::\n I wrote an `explanation `_ on why I forked my own ``characteristic``.\n It's not dead but ``attrs`` will have more new features.\n\n``attrs``\\ \u2019s documentation lives at `Read the Docs `_, the code on `GitHub `_.\nIt\u2019s rigorously tested on Python 2.6, 2.7, 3.3+, and PyPy.\n\n\nAuthors\n-------\n\n``attrs`` is written and maintained by `Hynek Schlawack `_.\n\nThe development is kindly supported by `Variomedia AG `_.\n\nIt\u2019s the spiritual successor of `characteristic `_ and aspires to fix some of it clunkiness and unfortunate decisions. Both were inspired by Twisted\u2019s `FancyEqMixin `_ but both are implemented using class decorators because `sub-classing is bad for you `_, m\u2019kay?\n\n\nThe following folks helped forming ``attrs`` into what it is now:\n\n- `Glyph `_\n- `HawkOwl `_\n- `Lynn Root `_\n- `Wouter Bolsterlee `_\n\nOf course ``characteristic``\\ \u2019s `hall of fame `_ applies as well since they share a lot of code.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://attrs.readthedocs.org/", "keywords": "class,attribute,boilerplate", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "cylitestblarghblargh", "package_url": "https://pypi.org/project/cylitestblarghblargh/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/cylitestblarghblargh/", "project_urls": { "Homepage": "https://attrs.readthedocs.org/" }, "release_url": "https://pypi.org/project/cylitestblarghblargh/15.3.0/", "requires_dist": null, "requires_python": "", "summary": "Attributes without boilerplate.", "version": "15.3.0" }, "last_serial": 2132530, "releases": { "15.1.0.dev0": [ { "comment_text": "", "digests": { "md5": "086ecd6c892361e2ccbf89faa5c0bca5", "sha256": "b80a2fa1d7ea2f10aa1378413946ef3ce15bf9de92d5b8afb7324771355c51ea" }, "downloads": -1, "filename": "cylitestblarghblargh-15.1.0.dev1.tar.gz", "has_sig": false, "md5_digest": "086ecd6c892361e2ccbf89faa5c0bca5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33806, "upload_time": "2016-05-24T04:20:10", "url": "https://files.pythonhosted.org/packages/b2/b7/3460c23343fa97a575ba234e0c39fbfe8afd06b837e4a92380fe649a13fa/cylitestblarghblargh-15.1.0.dev1.tar.gz" } ], "15.3.0": [ { "comment_text": "", "digests": { "md5": "39d9cefc7c757bd35c7cf75c03adba6a", "sha256": "1330efa8fd12585830f9fa9f52303745e506ca00a198cf91d7080d5c914d1cf0" }, "downloads": -1, "filename": "cylitestblarghblargh-15.3.0.tar.gz", "has_sig": false, "md5_digest": "39d9cefc7c757bd35c7cf75c03adba6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33834, "upload_time": "2016-05-25T07:42:15", "url": "https://files.pythonhosted.org/packages/ee/5d/785c5f764c92c9d6f09c4ca2584ba789b3dc21ae6ec61f0f5a29067207f2/cylitestblarghblargh-15.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "39d9cefc7c757bd35c7cf75c03adba6a", "sha256": "1330efa8fd12585830f9fa9f52303745e506ca00a198cf91d7080d5c914d1cf0" }, "downloads": -1, "filename": "cylitestblarghblargh-15.3.0.tar.gz", "has_sig": false, "md5_digest": "39d9cefc7c757bd35c7cf75c03adba6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33834, "upload_time": "2016-05-25T07:42:15", "url": "https://files.pythonhosted.org/packages/ee/5d/785c5f764c92c9d6f09c4ca2584ba789b3dc21ae6ec61f0f5a29067207f2/cylitestblarghblargh-15.3.0.tar.gz" } ] }