{ "info": { "author": "John Reese, Facebook", "author_email": "jreese@fb.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 1 - Planning", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "\"Bowler\"\n\n**Safe code refactoring for modern Python projects.**\n\n[![build status](https://travis-ci.com/facebookincubator/Bowler.svg?branch=master)](https://travis-ci.com/facebookincubator/Bowler)\n[![code coverage](https://img.shields.io/coveralls/github/facebookincubator/Bowler/master.svg)](https://coveralls.io/github/facebookincubator/Bowler)\n[![version](https://img.shields.io/pypi/v/bowler.svg)](https://pypi.org/project/bowler)\n[![changelog](https://img.shields.io/badge/change-log-blue.svg)](https://github.com/facebookincubator/bowler/blob/master/CHANGELOG.md)\n[![license](https://img.shields.io/pypi/l/bowler.svg)](https://github.com/facebookincubator/bowler/blob/master/LICENSE)\n[![code style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/ambv/black)\n\n\nOverview\n--------\n\nBowler is a refactoring tool for manipulating Python at the syntax tree level. It enables\nsafe, large scale code modifications while guaranteeing that the resulting code compiles\nand runs. It provides both a simple command line interface and a fluent API in Python for\ngenerating complex code modifications in code.\n\nBowler uses a \"fluent\" `Query` API to build refactoring scripts through a series\nof selectors, filters, and modifiers. Many simple modifications are already possible\nusing the existing API, but you can also provide custom selectors, filters, and\nmodifiers as needed to build more complex or custom refactorings. See the\n[Query Reference](https://pybowler.io/docs/api-query) for more details.\n\nUsing the query API to rename a single function, and generate an interactive diff from\nthe results, would look something like this:\n\n```python\nquery = (\n Query()\n .select_function(\"old_name\")\n .rename(\"new_name\")\n .diff(interactive=True)\n)\n```\n\nFor more details or documentation, check out https://pybowler.io\n\n\nInstalling Bowler\n-----------------\n\nBowler supports modifications to code from any version of Python 2 or 3, but it\nrequires Python 3.6 or higher to run. Bowler can be easily installed using most common\nPython packaging tools. We recommend installing the latest stable release from\n[PyPI][] with `pip`:\n\n```bash\npip install bowler\n```\n\nYou can also install a development version from source by checking out the Git repo:\n\n```bash\ngit clone https://github.com/facebookincubator/bowler\ncd bowler\npython setup.py install\n```\n\n\nLicense\n-------\n\nBowler is MIT licensed, as found in the `LICENSE` file.\n\n\n[PyPI]: https://pypi.org/p/bowler\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/facebookincubator/bowler", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "bowler", "package_url": "https://pypi.org/project/bowler/", "platform": "", "project_url": "https://pypi.org/project/bowler/", "project_urls": { "Homepage": "https://github.com/facebookincubator/bowler" }, "release_url": "https://pypi.org/project/bowler/0.8.0/", "requires_dist": [ "attrs", "click", "fissix", "sh" ], "requires_python": ">=3.6", "summary": "Safe code refactoring for modern Python projects", "version": "0.8.0" }, "last_serial": 5392350, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "4be14d2d50d3bf9f6c5ebc373acb1000", "sha256": "15deef7f153fd8589ff0c7c9ec851800caae53c76edf63c13128d5a527989be1" }, "downloads": -1, "filename": "bowler-0.0.1.tar.gz", "has_sig": false, "md5_digest": "4be14d2d50d3bf9f6c5ebc373acb1000", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 784, "upload_time": "2018-04-13T17:36:57", "url": "https://files.pythonhosted.org/packages/c2/8a/5bf5f5b8d54cae274db2709930d0711d4548d2f41c667f4e0011e5e532ad/bowler-0.0.1.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "b66bddf0c9e708e4b73ff906bd748d16", "sha256": "fd5d5f192dc1d814c31f7bbd4464f51737c5cd4264bcf0d008a7d41e080516d3" }, "downloads": -1, "filename": "bowler-0.5.0.tar.gz", "has_sig": false, "md5_digest": "b66bddf0c9e708e4b73ff906bd748d16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29097, "upload_time": "2018-08-25T02:16:59", "url": "https://files.pythonhosted.org/packages/7e/d6/315a16b90f93b34763c9bc2e1a4f16783d8d8170c1fa0f2243798deb5b46/bowler-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "179b02a4229d88fcdb93df54500f74a6", "sha256": "7a702efa1e64fdebf6b32c22e56586e147e65eb144aabbd2b6c36292288c33a5" }, "downloads": -1, "filename": "bowler-0.5.1.tar.gz", "has_sig": false, "md5_digest": "179b02a4229d88fcdb93df54500f74a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29219, "upload_time": "2018-09-07T01:39:43", "url": "https://files.pythonhosted.org/packages/b4/03/6e2666103b6cdd58e3f4290890581581f8aa50b595277c4e0dd3e90c8318/bowler-0.5.1.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "a031205ac31e3d432ad75a621c7ba079", "sha256": "b4e30d5e797366a083c23ab0b4189c60fb0b07663b70f9094dce477fffdf4b2c" }, "downloads": -1, "filename": "bowler-0.6.0.tar.gz", "has_sig": false, "md5_digest": "a031205ac31e3d432ad75a621c7ba079", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37155, "upload_time": "2018-12-18T19:01:48", "url": "https://files.pythonhosted.org/packages/47/77/e85c273243b47249dae98840184dfe12f115ae93508f1dc23fcca91e4b80/bowler-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "5e759960b3d693fdb49612e3bf8953de", "sha256": "7918744bd1a25629f7afccdcb9c290f00f2eb6c596ecd509046c5fb80bd57e34" }, "downloads": -1, "filename": "bowler-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5e759960b3d693fdb49612e3bf8953de", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 33954, "upload_time": "2019-04-05T01:27:55", "url": "https://files.pythonhosted.org/packages/32/46/4bc2cb2231b9cd4aaf134503d0b37ff000bcc45155dc99f87929ef73a42f/bowler-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c812bc943bff75b4f8b1cb58152d782d", "sha256": "8bee2f9b14c38b13e0d1f68ae417fa74ba40c45baa23dc2f927a220575332aef" }, "downloads": -1, "filename": "bowler-0.7.0.tar.gz", "has_sig": false, "md5_digest": "c812bc943bff75b4f8b1cb58152d782d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 39072, "upload_time": "2019-04-05T01:27:57", "url": "https://files.pythonhosted.org/packages/0d/59/25ddf9039fc07f497ec45d9b7081afff3eb49ede5c856cd32b7c41d9b392/bowler-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "2d475273e8c5a1155bf4a1e90b060cd5", "sha256": "b2d564fd3b927cb993ccc0cdc3c9203164284ef18770a09e5bd0be0923813b32" }, "downloads": -1, "filename": "bowler-0.7.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2d475273e8c5a1155bf4a1e90b060cd5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 34014, "upload_time": "2019-04-11T23:23:42", "url": "https://files.pythonhosted.org/packages/b8/5e/4565ba7f641c2b3aec5abc1efd39d06f808dfab9782d3c3d3ad23684f6fe/bowler-0.7.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eb1dbd43653fea425fddf8e90c9ff677", "sha256": "0571648323bf4ec74a17299a78b4d6126cb3ded38f8a33eacae9cbdd03f94b5c" }, "downloads": -1, "filename": "bowler-0.7.1.tar.gz", "has_sig": false, "md5_digest": "eb1dbd43653fea425fddf8e90c9ff677", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 39149, "upload_time": "2019-04-11T23:23:44", "url": "https://files.pythonhosted.org/packages/d3/55/ce9de02425bfeb9b3b72e5b544f569247988691811edc8a9d4ee307aefa1/bowler-0.7.1.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "8f9553c7dbc4ab3ef248380f5dc5e1a7", "sha256": "844ed17ebf4e81927d4b676c258f8db0cc60858c199ba28b9e55dee80b32bb67" }, "downloads": -1, "filename": "bowler-0.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8f9553c7dbc4ab3ef248380f5dc5e1a7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 34951, "upload_time": "2019-06-12T18:12:44", "url": "https://files.pythonhosted.org/packages/fa/cd/8aa0359aaafbfca0bf97b95c99b24dca88e31b776ed15987c2e1e378662e/bowler-0.8.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b36a47a84ac7522091b641c61a80a7bc", "sha256": "f3e0ba2e6d62d84e9dc34c07fd4ae6453c8de480e14cdd67a5665cfeedbf8cb2" }, "downloads": -1, "filename": "bowler-0.8.0.tar.gz", "has_sig": false, "md5_digest": "b36a47a84ac7522091b641c61a80a7bc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 41447, "upload_time": "2019-06-12T18:12:45", "url": "https://files.pythonhosted.org/packages/fe/39/93bd0365be20bc64a23f0d3be689696e5c0abfe7f6cba9eec2183019683a/bowler-0.8.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8f9553c7dbc4ab3ef248380f5dc5e1a7", "sha256": "844ed17ebf4e81927d4b676c258f8db0cc60858c199ba28b9e55dee80b32bb67" }, "downloads": -1, "filename": "bowler-0.8.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8f9553c7dbc4ab3ef248380f5dc5e1a7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 34951, "upload_time": "2019-06-12T18:12:44", "url": "https://files.pythonhosted.org/packages/fa/cd/8aa0359aaafbfca0bf97b95c99b24dca88e31b776ed15987c2e1e378662e/bowler-0.8.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b36a47a84ac7522091b641c61a80a7bc", "sha256": "f3e0ba2e6d62d84e9dc34c07fd4ae6453c8de480e14cdd67a5665cfeedbf8cb2" }, "downloads": -1, "filename": "bowler-0.8.0.tar.gz", "has_sig": false, "md5_digest": "b36a47a84ac7522091b641c61a80a7bc", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 41447, "upload_time": "2019-06-12T18:12:45", "url": "https://files.pythonhosted.org/packages/fe/39/93bd0365be20bc64a23f0d3be689696e5c0abfe7f6cba9eec2183019683a/bowler-0.8.0.tar.gz" } ] }