{ "info": { "author": "Frank Niessink", "author_email": "frank@niessink.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Utilities" ], "description": "# Sub-do\n\n[![PyPI](https://img.shields.io/pypi/v/sub-do.svg)](https://pypi.org/project/sub-do/)\n[![Updates](https://pyup.io/repos/github/fniessink/sub-do/shield.svg)](https://pyup.io/repos/github/fniessink/sub-do/)\n\nCommand-line application to run commands in subdirectories.\n\n## Table of contents\n\n- [Installation](#installation)\n- [Usage](#usage)\n- [Recent changes](#recent-changes)\n- [Developing *Sub-do*](#developing-sub-do)\n - [Installing the development environment and dependencies](#installing-the-development-environment-and-dependencies)\n - [Running unit tests](#running-unit-tests)\n - [Generating documentation](#generating-documentation)\n\n## Installation\n\n*Sub-do* requires Python 3.6 or newer.\n\n`pip install --upgrade sub-do`\n\n## Usage\n\n```console\n$ sub-do --help\nusage: sub-do [-h] [-V] [-d [directory [directory ...]]] command\n\npositional arguments:\n command command to run\n\noptional arguments:\n -h, --help show this help message and exit\n -V, --version show program's version number and exit\n -d [directory [directory ...]], --directory [directory [directory ...]]\n directories to run the command in (default: all subdirectories except those whose\n names begin with a dot)\n\nWhen using -d, use -- to separate directories from the command or put the command first\n```\n\nTo run a command in all subdirectories of the current directory:\n\n```console\n$ sub-do 'ls | wc -l'\n['ls | wc -l' in sub_do/ exited with 0]\n[stdout]\n 3\n\n['ls | wc -l' in dist/ exited with 0]\n[stdout]\n 2\n\n['ls | wc -l' in ci/ exited with 0]\n[stdout]\n 2\n\n['ls | wc -l' in tests/ exited with 0]\n[stdout]\n 3\n\n['ls | wc -l' in sub_do.egg-info/ exited with 0]\n[stdout]\n 6\n\n['ls | wc -l' in docs/ exited with 0]\n[stdout]\n 2\n\n['ls | wc -l' in build/ exited with 0]\n[stdout]\n 4\n```\n\n## Recent changes\n\nSee the [change log](https://github.com/fniessink/sub-do/blob/master/CHANGELOG.md).\n\n## Developing *Sub-do*\n\n### Installing the development environment and dependencies\n\nRun `pip install -r requirements-dev.txt` to install the development dependencies.\n\n### Running unit tests\n\nTo run the unit tests and check their code coverage:\n\n```console\n$ ci/unittest.sh\n----------------------------------------------------------------------\nRan 14 tests in 0.017s\n\nOK\nName Stmts Miss Branch BrPart Cover\n-----------------------------------------\n-----------------------------------------\nTOTAL 115 0 21 0 100%\n\n7 files skipped due to complete coverage.\n```\n\nThe HTML coverage report is written to `build/unittest-coverage/`.\n\n### Generating documentation\n\nThis `README.md` file is generated with `python docs/generate_readme.py`.\n\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/fniessink/sub-do", "keywords": "", "license": "Apache License, Version 2.0", "maintainer": "", "maintainer_email": "", "name": "sub-do", "package_url": "https://pypi.org/project/sub-do/", "platform": "", "project_url": "https://pypi.org/project/sub-do/", "project_urls": { "Homepage": "https://github.com/fniessink/sub-do" }, "release_url": "https://pypi.org/project/sub-do/0.2.0/", "requires_dist": null, "requires_python": ">=3.6", "summary": "Command-line application to run commands in subdirectories.", "version": "0.2.0" }, "last_serial": 4527014, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "e34ab2b0b747d92ba37fbf15e9117077", "sha256": "54528b54a3f4e948cd39453d8eb3c32665374f39f9a9903a7c6947b6ccf3a0c5" }, "downloads": -1, "filename": "sub_do-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e34ab2b0b747d92ba37fbf15e9117077", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6448, "upload_time": "2018-11-21T19:55:43", "url": "https://files.pythonhosted.org/packages/9c/21/b539ac5afb8119850fb987f8e01efcf88b49ec51a3680f66d3a17a571fd2/sub_do-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "da77c16d81cfc8dc1e0798dd8fd36cfd", "sha256": "ceba45c9d705247fb64424a6fd1a5224ed0967bc081204fdf80ad4f1ab04e41f" }, "downloads": -1, "filename": "sub-do-0.1.0.tar.gz", "has_sig": false, "md5_digest": "da77c16d81cfc8dc1e0798dd8fd36cfd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 1752, "upload_time": "2018-11-21T19:55:45", "url": "https://files.pythonhosted.org/packages/70/a8/a9cdcdec7b6fde2bbc26f876d24c1e01db145e9b37900c10f933b306b5d9/sub-do-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "1052d0352138e2f2eed49b9b0721e505", "sha256": "0e9cb65875407592626284331d3dad491f6f263874fa620d991c21eb1a254e92" }, "downloads": -1, "filename": "sub_do-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1052d0352138e2f2eed49b9b0721e505", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 10755, "upload_time": "2018-11-25T20:49:44", "url": "https://files.pythonhosted.org/packages/30/12/08eef56743778db6cf23b8fd4304526a98dd1921c08eba0d32e660182ab0/sub_do-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "243875579862e3939b79a7c833ef737e", "sha256": "52d7f5fead722fb4b7ffac6384f25f9458522bfd32886c1eb164ff685b5e7061" }, "downloads": -1, "filename": "sub-do-0.2.0.tar.gz", "has_sig": false, "md5_digest": "243875579862e3939b79a7c833ef737e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4776, "upload_time": "2018-11-25T20:49:45", "url": "https://files.pythonhosted.org/packages/08/ea/4a17ae2f064b560bae81e4bd665e7c9447612196d6987e3959fc8b68150c/sub-do-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1052d0352138e2f2eed49b9b0721e505", "sha256": "0e9cb65875407592626284331d3dad491f6f263874fa620d991c21eb1a254e92" }, "downloads": -1, "filename": "sub_do-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1052d0352138e2f2eed49b9b0721e505", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 10755, "upload_time": "2018-11-25T20:49:44", "url": "https://files.pythonhosted.org/packages/30/12/08eef56743778db6cf23b8fd4304526a98dd1921c08eba0d32e660182ab0/sub_do-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "243875579862e3939b79a7c833ef737e", "sha256": "52d7f5fead722fb4b7ffac6384f25f9458522bfd32886c1eb164ff685b5e7061" }, "downloads": -1, "filename": "sub-do-0.2.0.tar.gz", "has_sig": false, "md5_digest": "243875579862e3939b79a7c833ef737e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4776, "upload_time": "2018-11-25T20:49:45", "url": "https://files.pythonhosted.org/packages/08/ea/4a17ae2f064b560bae81e4bd665e7c9447612196d6987e3959fc8b68150c/sub-do-0.2.0.tar.gz" } ] }