{
"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"
}
]
}