{ "info": { "author": "Artyom Goncharov", "author_email": "m4yers@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Topic :: Software Development :: Build Tools" ], "description": "======\nCRUTCH\n======\n\n.. image:: https://img.shields.io/pypi/status/crutch.svg\n :target: https://pypi.python.org/pypi/crutch\n :alt: PyPi Status\n\n.. image:: https://img.shields.io/pypi/v/crutch.svg\n :target: https://pypi.python.org/pypi/crutch\n :alt: PyPi Version\n\n.. image:: https://img.shields.io/pypi/pyversions/crutch.svg\n :target: https://pypi.python.org/pypi/crutch\n :alt: Python Versions\n\n.. image:: https://travis-ci.org/m4yers/crutch.svg?branch=master\n :target: https://travis-ci.org/m4yers/crutch\n :alt: Build Status\n\n.. image:: https://coveralls.io/repos/github/m4yers/crutch/badge.svg?branch=master\n :target: https://coveralls.io/github/m4yers/crutch?branch=master\n :alt: Test Coverage\n\n.. image:: https://landscape.io/github/m4yers/crutch/master/landscape.svg?style=flat\n :target: https://landscape.io/github/m4yers/crutch/master\n :alt: Code Health\n\nHave you ever had this moment when you wanted to write a small tool or just try\nout some new algorithm but the thought of assembling proper project folder\nstructure spoiled the desire...\n\nCRUTCH is a console development environment, though its definition sounds a bit\nweird it does allow you to create a fully customized project, manage its\nlifecycle, including `configure`, `build`, `test`, `clean` `add/remove\nfiles/features/tests`, plus language specific features. Also you can extend its\nfunctionality by writing a language module or a feature for already existing\none.\n\n.. contents::\n\nInstallation\n============\n\n>From pip::\n\n $ pip install crutch\n\n\nUsage\n=====\n\nIn its simplest form you interact with CRUTCH via two commands::\n\n $ crutch new \n $ crutch\n\nThose two lines create a project and `build`, `test`, `run` or whatever default\naction is configured for this type of project... that is all you need to get\nthings going. The default project configuration supposed to provide you with\nthings necessary to just start writing stuff, but if you need more you can add\nfeatures to your projects.\n\nFeatures(MOST OF THIS STUFF IS STILL TODO)\n-------------\n\nFeature is something that extends CRUTCH capabilities and specifically adds\nfunctionality to your projects's runner. CRUTCH itself has only one feature,\nwhich is called `new`, that all it does: *create a new project*, and it will\nstay this way forever. Additional functionality will be added via language\nextensions and features for them.\n\n>From user perspective feature is an action keyword that follows `crutch`\ncommand, akin to `new`. For example compile-time projects normally will include\n`build` feature, most projects will include `clean` and `test` features. Nice\nfeatures to have are: `install`, `publish`, `debug` etc.\n\nFeature allows for a second cli parameters parsing, thus you can invoke an\naction for a feature::\n\n $ crutch test add core/runner\n\nThis line invokes `test` feature of the current project with `add` action that\nallows you to add a test file in one go(assuming you are not wearing yours\nsmart ass hat and not trying to modify configuration files manually). The\nsymmetrical operation would be::\n\n $ crutch test remove core/runner\n\nThis will remove the test files and do cleanup afterwards. Using `test` feature\nto manage test files is WAY better than doing this manually...\n\n\nSo, how do you add features? One way is to stay with default provided features,\nanother is to specify a list of features with `new` action::\n\n $ crutch new cpp -f xcode gtest\n\nThis line forces `cpp` extension to generate `xcode` build project using `cmake`\nand add `gtest` based `test` feature.\n\nWhat if you want to add a feature after you've already created a project? What\nmight be the way? Just guess... The `feature` feature of course::\n\n $ crutch feature add doxygen\n\nThis line adds `doxygen` based `doc` feature to the project.\n\nThe last thing... a feature has a default action, normally it is associated\nwith its essence, invoking this::\n\n $ crutch doxygen\n\nNaturally will build documentation, and by invoking this::\n\n $ crutch doc\n\nYou achieve the same, because `doxygen` feature belongs to `doc` feature\ncategory...\n\n\nFeature Category\n----------------\n\nFeature categories is something that is not really reflected in CLI, but\nnonetheless is very important concept. Every feature belongs to a category,\nduh... This means that at the very least you can invoke an action on a feature\nby providing its category name instead. This is very true for categories that\ncan have only `one` active feature at a time. BUT, if category can have\nmultiple active features it can modify or even add new actions you can invoke::\n\n $ crutch lint\n\nThis `lint` category has several features: `pep8`, `pylint`, `flake8` etc. So\nby invoking category's default action you run all those linter features one\nafter another to verify your code, alternatively you can run them separately::\n\n $ crutch pep8\n $ crutch pylint\n\nThis opens door for a very complex scenarios, like running custom test server\nbench that is basically a tech-stack that needs to be managed. So you can\nprovide a custom category `bench` that contains multitude of optional features,\nlike `mysql`, `maria`, `couchbase`, `apache`, etc. And this category provides\nfew actions like `start`, `stop`, `publish` etc that you can invoke to run all\nthis madness...Anyway this multi-category is a far feature, and I am writing\nthis here so I won't forget it later\n\nTypes\n-------------\n\nIn Progress::\n\n cpp\n python\n\nIn Future::\n\n c#\n java\n vim\n ...\n\n\nLinks\n=====\n\n* PyPI_\n* GitHub_\n* `Travis CI`_\n* Coveralls_\n\n.. _PyPI: https://pypi.python.org/pypi/crutch/\n.. _GitHub: https://github.com/m4yers/crutch\n.. _`Travis CI`: https://travis-ci.org/m4yers/crutch\n.. _`Coveralls`: https://coveralls.io/r/m4yers/crutch\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/m4yers/crutch", "keywords": "projects,bootstrap", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "crutch", "package_url": "https://pypi.org/project/crutch/", "platform": "", "project_url": "https://pypi.org/project/crutch/", "project_urls": { "Homepage": "https://github.com/m4yers/crutch" }, "release_url": "https://pypi.org/project/crutch/0.3.0/", "requires_dist": [ "jinja2", "networkx" ], "requires_python": ">=2.7, <3", "summary": "Get a project running quickly", "version": "0.3.0" }, "last_serial": 3109479, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "e7f2ecdc794fcaf6430f5534c2ff8104", "sha256": "e2ca944117a81336a7bfbcb2d579e3a5da57c7bd88e34584c652cf33826628a6" }, "downloads": -1, "filename": "crutch-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e7f2ecdc794fcaf6430f5534c2ff8104", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 2771, "upload_time": "2017-08-06T21:07:06", "url": "https://files.pythonhosted.org/packages/fb/a9/d7d22314e6c5bafb0c2347d4ffe3fa108dc7743e9cb62d10d027057aea12/crutch-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c6054f04b9d7de148560a9074d675cd4", "sha256": "8e48ce17250bd35048893aa1594eba79b705b23e55cc24fdab022be59510184a" }, "downloads": -1, "filename": "crutch-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c6054f04b9d7de148560a9074d675cd4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1554, "upload_time": "2017-08-06T21:07:08", "url": "https://files.pythonhosted.org/packages/8f/19/b276d795f276fb436a2f6178eff35d85ebdd35a32f16e316196a78d3034e/crutch-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "a9d37e696840688e93338e4d033944d5", "sha256": "1a6800c9c72573666ad8a068d4f267d1600c48d200076a9aa2846e76d1ed4858" }, "downloads": -1, "filename": "crutch-0.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "a9d37e696840688e93338e4d033944d5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3", "size": 3289, "upload_time": "2017-08-07T15:41:21", "url": "https://files.pythonhosted.org/packages/6b/a4/3c9e95d232bb53d7ee762b44130fa9f407acef2b28e9937a1359cb4f297c/crutch-0.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8037c48db08527e6e6f51a7e8a57df59", "sha256": "94255cf0de920638f32b0c3c3a4639493ba01fb92d601b8475546e4f25051ee9" }, "downloads": -1, "filename": "crutch-0.2.0.tar.gz", "has_sig": false, "md5_digest": "8037c48db08527e6e6f51a7e8a57df59", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 1840, "upload_time": "2017-08-07T15:41:22", "url": "https://files.pythonhosted.org/packages/ca/15/504698905912f774dcc363d481d2bc74ebfe453fa5a1e324c999e816a744/crutch-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "d5774753a097d0931a6dc0c0abdd3e65", "sha256": "b216a639f94ac9b0b5bbcc749c3f1d121a9d327dd71c1605f49dca295351c8ad" }, "downloads": -1, "filename": "crutch-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d5774753a097d0931a6dc0c0abdd3e65", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3273, "upload_time": "2017-08-07T15:49:24", "url": "https://files.pythonhosted.org/packages/5b/d3/9b771347d3c2712e5c46b0375bdd9c88269fe6d5917c2de1b82ad92d162c/crutch-0.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a0ccf27b6400e768b4a1d36a21f352e9", "sha256": "301114e92406c4434f3e716276ee694769dd6c098da66c8d79604f676c716f36" }, "downloads": -1, "filename": "crutch-0.2.1.tar.gz", "has_sig": false, "md5_digest": "a0ccf27b6400e768b4a1d36a21f352e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1815, "upload_time": "2017-08-07T15:49:26", "url": "https://files.pythonhosted.org/packages/ba/43/07e586b413980f432a9eae9b107b6eaefdcd867af08d265ef8d1fbba41db/crutch-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "44b5032018634bfd8cc75e28de0f6231", "sha256": "8f7030925f3a4c75d6693d1ffc2f72a2e79d1bc9e09fe55c6cbc8f1e79c8b2df" }, "downloads": -1, "filename": "crutch-0.2.2-py2-none-any.whl", "has_sig": false, "md5_digest": "44b5032018634bfd8cc75e28de0f6231", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.6", "size": 3297, "upload_time": "2017-08-08T06:35:18", "url": "https://files.pythonhosted.org/packages/c0/ce/57748502de183c7cbae79fe65d733d03d9d5ebbf36983f8a15ed4b226528/crutch-0.2.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b907574966fdb9823ea3ad36678958e7", "sha256": "1f4f130d0dff38d3971487680df22a6dbccf2a333a4b7bd0980fb0ff2e1f9ee9" }, "downloads": -1, "filename": "crutch-0.2.2.tar.gz", "has_sig": false, "md5_digest": "b907574966fdb9823ea3ad36678958e7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6", "size": 1842, "upload_time": "2017-08-08T06:35:19", "url": "https://files.pythonhosted.org/packages/2f/d3/cb0c28bf2b8d157fb1ef29fd91f8a852162b06e3a9241fedebd15a7ede5c/crutch-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "fac2334a62938adbfd6326e190f4cea5", "sha256": "1793536e6503bbee7e29d85b28aa42fc30a7466020ad1423bd93d696fc45a074" }, "downloads": -1, "filename": "crutch-0.2.3-py2-none-any.whl", "has_sig": false, "md5_digest": "fac2334a62938adbfd6326e190f4cea5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.6, <3", "size": 3620, "upload_time": "2017-08-08T07:09:53", "url": "https://files.pythonhosted.org/packages/9b/52/f2d9c5fac2b092258cad51b09261689388a1eb6eb4242da78042725e1a84/crutch-0.2.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "68dc4bd549b26b9d9ef324469070df3c", "sha256": "9fa13f58cab4480695fb76ba77fb096ce80e80ad358c3e1a2b32b288ab714acd" }, "downloads": -1, "filename": "crutch-0.2.3.tar.gz", "has_sig": false, "md5_digest": "68dc4bd549b26b9d9ef324469070df3c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.6, <3", "size": 2069, "upload_time": "2017-08-08T07:09:54", "url": "https://files.pythonhosted.org/packages/53/71/3cd985a968ebcc33a0ef76df8016de90bdb0df6a8cd6d92531cb41fed351/crutch-0.2.3.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "19382f54628a5a03dc2d7ee5ae8db01c", "sha256": "f553ee1db38043ceb03703aa7a401e6959a2e1985812bfd0a8c621dce85671ec" }, "downloads": -1, "filename": "crutch-0.2.4-py2-none-any.whl", "has_sig": false, "md5_digest": "19382f54628a5a03dc2d7ee5ae8db01c", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7, <3", "size": 3624, "upload_time": "2017-08-08T15:05:46", "url": "https://files.pythonhosted.org/packages/b2/06/1a89cf0f083d1e428f9e75e6391647440e7f3f326cffa8d9a026a463257f/crutch-0.2.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e341d61a5a014ebeeadc0e4a0d31c7a0", "sha256": "f2ee2d4af7c57151f4177b6f174d7079bfbe4aefc617792d09f6d7dd73edfd26" }, "downloads": -1, "filename": "crutch-0.2.4.tar.gz", "has_sig": false, "md5_digest": "e341d61a5a014ebeeadc0e4a0d31c7a0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, <3", "size": 2078, "upload_time": "2017-08-08T15:05:47", "url": "https://files.pythonhosted.org/packages/ab/72/c4c79387e3b8f8693c49bba4cb69528e8f8e6493d9144de7ba857314c623/crutch-0.2.4.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "df2d24458fbcba3604f187a836af1b3b", "sha256": "3c3bae7f5f78924708452c914a8ab30ae956c838fb4d315d9b44fea2d5fca517" }, "downloads": -1, "filename": "crutch-0.3.0-py2-none-any.whl", "has_sig": false, "md5_digest": "df2d24458fbcba3604f187a836af1b3b", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7, <3", "size": 7047, "upload_time": "2017-08-20T07:54:42", "url": "https://files.pythonhosted.org/packages/73/64/f33def2404408c64704597487388209ee429746fab66124ed3ebdeb70daa/crutch-0.3.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0e22345d52e6aba243125f5989229ecb", "sha256": "0c841b760077973c1ee7c2af13d4c4896ba563e8aefcbf8481903a7bb08fbe6f" }, "downloads": -1, "filename": "crutch-0.3.0.tar.gz", "has_sig": false, "md5_digest": "0e22345d52e6aba243125f5989229ecb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, <3", "size": 4220, "upload_time": "2017-08-20T07:54:43", "url": "https://files.pythonhosted.org/packages/5d/4b/7142a238f624e23b5d0c68fbe410e54f037db020d9236a982ac3ef0e6f7b/crutch-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "df2d24458fbcba3604f187a836af1b3b", "sha256": "3c3bae7f5f78924708452c914a8ab30ae956c838fb4d315d9b44fea2d5fca517" }, "downloads": -1, "filename": "crutch-0.3.0-py2-none-any.whl", "has_sig": false, "md5_digest": "df2d24458fbcba3604f187a836af1b3b", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7, <3", "size": 7047, "upload_time": "2017-08-20T07:54:42", "url": "https://files.pythonhosted.org/packages/73/64/f33def2404408c64704597487388209ee429746fab66124ed3ebdeb70daa/crutch-0.3.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0e22345d52e6aba243125f5989229ecb", "sha256": "0c841b760077973c1ee7c2af13d4c4896ba563e8aefcbf8481903a7bb08fbe6f" }, "downloads": -1, "filename": "crutch-0.3.0.tar.gz", "has_sig": false, "md5_digest": "0e22345d52e6aba243125f5989229ecb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, <3", "size": 4220, "upload_time": "2017-08-20T07:54:43", "url": "https://files.pythonhosted.org/packages/5d/4b/7142a238f624e23b5d0c68fbe410e54f037db020d9236a982ac3ef0e6f7b/crutch-0.3.0.tar.gz" } ] }