{ "info": { "author": "Eric Lapouyade", "author_email": "elapouya@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3" ], "description": "\n======\nNoAttr\n======\n\nWhen you access an object with chained attributes ::\n\n info = obj.a.b.c.d or 'Unknown'\n \nUsually, it will failed when one intermediate attribute return \u2018None\u2018 ::\n \n if obj.a returns None\n obj.a.b.c.d will fail with that exception :\n AttributeError: 'NoneType' object has no attribute 'b'\n \nTo avoid that, instead of returning a \u2018None\u2018 value, one should return \u2018NoAttr\u2018, by this way, \neven next chained attribute will return \u2018NoAttr\u2018 ::\n\n if obj.a returns NoAttr\n obj.a.b.c.d will not fail and will return NoAttr\n \n\u2018NoAttr\u2018 can be seen as False, 0, '', [] or {} depending on the context, so ::\n\n if obj.a returns NoAttr\n \n obj.a.b.c.d or 'Unknown' will return 'Unknown'\n \n for i in obj.a.b.c.d:\n print i\n prints nothing \n \n obj.a.b.c.d + 1 returns 1\n \n obj.a.b.c.d.anyfunc() returns NoAttr\n \n but for ljust(), rjust(), rfind(), find(), rindex(), index(), count()\n NoAttr is seen as '' :\n \n obj.a.b.c.d.ljust(3) returns ' '\n\nNews\n====\n0.0.8 (2018-08-24)\n------------------\n__iter__() now returns an empty iter\n\n0.0.7 (2018-08-21)\n------------------\nUpdate code for python3 compatibility\n\n0.0.6 (2016-03-11)\n------------------\nremove __or__ and __rshift__ definition for python_textops\n\n0.0.5 (2015-10-13)\n------------------\nadd as_list property\n\n0.0.4 (2015-08-19)\n------------------\nadd __setattr__ to avoid any modification\n\n0.0.3 (2015-07-27)\n------------------\nFirst official version\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/elapouya/noattr", "keywords": "attribute", "license": "LGPL 2.1", "maintainer": "", "maintainer_email": "", "name": "noattr", "package_url": "https://pypi.org/project/noattr/", "platform": "", "project_url": "https://pypi.org/project/noattr/", "project_urls": { "Homepage": "https://github.com/elapouya/noattr" }, "release_url": "https://pypi.org/project/noattr/0.0.8/", "requires_dist": null, "requires_python": "", "summary": "To avoid NoneType AttributeError exception on chained attributes", "version": "0.0.8" }, "last_serial": 4203453, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "66c6acc155b50deea0a12bcb80b5352e", "sha256": "568f1732af47cd94842d0c1cf29b379e87556d53cb79cc23ec5bdf0ef62b3504" }, "downloads": -1, "filename": "noattr-0.0.1.tar.gz", "has_sig": false, "md5_digest": "66c6acc155b50deea0a12bcb80b5352e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2325, "upload_time": "2015-07-27T11:23:52", "url": "https://files.pythonhosted.org/packages/d0/67/d272597d8255fda01c38798e1909886ca1025e2fad2b0b93b7d700e52dcd/noattr-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "13aea9f94c336038f1aec9fa81d38d5f", "sha256": "05200e177dfada8dde7c84680862902040a7090d74304ed35d261d6c44a1fe18" }, "downloads": -1, "filename": "noattr-0.0.2.tar.gz", "has_sig": false, "md5_digest": "13aea9f94c336038f1aec9fa81d38d5f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2342, "upload_time": "2015-07-27T11:26:58", "url": "https://files.pythonhosted.org/packages/98/cc/6015c911252e156fa8df89ee936cbf5c2e74f7fa859db3cb722b1d6825db/noattr-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "d8c7c08a6e873705591210067a7d62ef", "sha256": "575124f355d3fed5fec050a02f20c23130b5eb2a46a6d1d9399b698849ad8021" }, "downloads": -1, "filename": "noattr-0.0.3.tar.gz", "has_sig": false, "md5_digest": "d8c7c08a6e873705591210067a7d62ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2458, "upload_time": "2015-07-27T11:41:45", "url": "https://files.pythonhosted.org/packages/fe/56/41abb90aa8942c99718a279c9d43de5d0bb19dd9f9707af630ac4015b9e0/noattr-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "e7bb103390d1907749496a7888960ef3", "sha256": "e0c560e33cf216270f8bed2156576e11229e6da8c02503381ad336a4469fe151" }, "downloads": -1, "filename": "noattr-0.0.4.tar.gz", "has_sig": false, "md5_digest": "e7bb103390d1907749496a7888960ef3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2529, "upload_time": "2015-08-19T13:05:32", "url": "https://files.pythonhosted.org/packages/9e/fd/c2fbf85765aec30b1c5d738c0a7e59e66ecee0ee8dc96bec4192c9e149e2/noattr-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "59bff5e63bb1f668ab33f57bcb8eec21", "sha256": "11e6243bde0b8efb006513aa130ec6151138d12e307a7e12d5b1b70378c8fdf3" }, "downloads": -1, "filename": "noattr-0.0.5.tar.gz", "has_sig": false, "md5_digest": "59bff5e63bb1f668ab33f57bcb8eec21", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2752, "upload_time": "2015-10-13T12:47:37", "url": "https://files.pythonhosted.org/packages/02/9f/3a9b28e66cba6d259b52589e6f5b646bc7b6248cef6219dbcce48ffbaf04/noattr-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "6c10ab20552354007019263f0807a246", "sha256": "f70093feea8c7bd545360162569af90bd6ab47b9ed7011eb80b4b3ab7141b920" }, "downloads": -1, "filename": "noattr-0.0.6.tar.gz", "has_sig": false, "md5_digest": "6c10ab20552354007019263f0807a246", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2402, "upload_time": "2016-03-11T15:14:22", "url": "https://files.pythonhosted.org/packages/fd/ad/8aa26cc0065b6c519b5827dc4b7df3368831a338c7539d7d29af9ae2a7b5/noattr-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "0656ebae9578d406968afcc16b5227b4", "sha256": "ef36a41f78f9d4e55b5a3b1ac1b451d4ee1be26a0b995820dfb03775888579d4" }, "downloads": -1, "filename": "noattr-0.0.7.tar.gz", "has_sig": false, "md5_digest": "0656ebae9578d406968afcc16b5227b4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2892, "upload_time": "2018-08-21T10:21:14", "url": "https://files.pythonhosted.org/packages/8b/3f/44aa25ba2027a020bf2ec3809835f3ee5269cecb11793e93dcb2023a3bdd/noattr-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "8d130d397701994f05c0991974efd02b", "sha256": "05e88d82b2eb30a24f32da2dc3cf3bb443d0a5d085cdebef95b2eb71039fdd69" }, "downloads": -1, "filename": "noattr-0.0.8.tar.gz", "has_sig": false, "md5_digest": "8d130d397701994f05c0991974efd02b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2955, "upload_time": "2018-08-24T11:53:54", "url": "https://files.pythonhosted.org/packages/06/49/3b5abf249e998f5b839d0c775de85388bce19ad64c987c78fada40582ee6/noattr-0.0.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8d130d397701994f05c0991974efd02b", "sha256": "05e88d82b2eb30a24f32da2dc3cf3bb443d0a5d085cdebef95b2eb71039fdd69" }, "downloads": -1, "filename": "noattr-0.0.8.tar.gz", "has_sig": false, "md5_digest": "8d130d397701994f05c0991974efd02b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2955, "upload_time": "2018-08-24T11:53:54", "url": "https://files.pythonhosted.org/packages/06/49/3b5abf249e998f5b839d0c775de85388bce19ad64c987c78fada40582ee6/noattr-0.0.8.tar.gz" } ] }