{ "info": { "author": "Joe Friedl", "author_email": "joe@joefriedl.net", "bugtrack_url": null, "classifiers": [], "description": "happy\n=====\n\n.. image:: https://img.shields.io/travis/grampajoe/happy.svg\n :target: https://travis-ci.org/grampajoe/happy\n.. image:: https://img.shields.io/coveralls/grampajoe/happy.svg\n :target: https://coveralls.io/r/grampajoe/happy\n.. image:: https://img.shields.io/scrutinizer/g/grampajoe/happy.svg\n :target: https://scrutinizer-ci.com/g/grampajoe/happy/\n\nQuickly set up and tear down Heroku apps!\n\nQuickly starting\n----------------\n\nAdd an `app.json manifest`_\nthat looks kinda like this:\n\n.. code:: json\n\n {\n \"name\": \"My App Thing\",\n \"repository\": \"https://github.com/helloitsme/thingy\",\n \"env\": {\n \"FROBULATION_LIMIT\": {\n \"description\": \"Maximum frobulations per lunar cycle.\",\n \"value\": \"7\"\n }\n },\n \"addons\": [\n \"pusher\"\n ]\n }\n\nPush that to your thing's ``master`` branch on GitHub so Heroku can find it.\n\nLog in with the `Heroku toolbelt`_ , then do this:\n\n.. code:: text\n\n $ pip install happy\n $ happy up butt-man-123\n Creating app... butt-man-123\n Building... done\n It's up! :) https://butt-man-123.herokuapp.com\n\nThat's it! You made a temporary app with all the fixins, which you can\nuse to continuously integrate or whatever you want to do.\n\nThen, you can get rid of it like:\n\n.. code:: text\n\n $ happy down butt-man-123\n Are you sure you want to delete butt-man-123? [y/N]: y\n Destroying app butt-man-123... done\n It's down. :(\n\n.. _app.json manifest: https://devcenter.heroku.com/articles/app-json-schema\n.. _Heroku toolbelt: https://toolbelt.heroku.com/\n\nCommands\n--------\n\nup\n~~\n\nUsage: ``happy up [OPTIONS] [APP_NAME]``\n\nBrings up a Heroku app.\n\nThe app name is stored in a file called ``.happy`` in the working directory so\nhappy can find it later.\n\n- ``APP_NAME``\n\n (optional) Name of the Heroku app to create. If this is not given, one is\n chosen for you by the Heroku API.\n\n- ``--auth-token``\n\n (optional) Heroku API auth token. If this is not given, happy assumes you're\n logged in through Heroku CLI, i.e. your token is stored in your ``netrc``\n file.\n\n- ``--env``\n\n (optional) Environment variable overrides, e.g. ``--env KEY=value``. For\n multiple variables, this option can be passed more than once. Variable names\n MUST match one of the names in the ``env`` section of your ``app.json``, or\n the build will fail with an ``invalid app.json`` message.\n\n- ``--tarball-url``\n\n (optional) URL of the tarball containing app.json. If this is not given,\n happy tries to infer it from an ``app.json`` file in the current directory.\n\ndown\n~~~~\n\nUsage: ``happy down [OPTIONS] [APP_NAME]``\n\nBrings down a Heroku app.\n\n- ``APP_NAME``\n\n (optional) Name of the Heroku app to delete. If this is not given, the app\n name is read from a file called ``.happy`` in the working directory.\n\n- ``--auth-token``\n\n (optional) Heroku API auth token. If this is not given, happy assumes you're\n logged in through Heroku CLI, i.e. your token is stored in your ``netrc``\n file.\n\n- ``--force``\n\n (optional) Suppress the delete confirmation prompt. Useful for automation!\n\nRunning the tests\n-----------------\n\n1. Install tox_ with ``pip install tox``.\n2. Run the tests with ``tox``.\n\n.. _tox: https://tox.readthedocs.org\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/grampajoe/happy", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "happy", "package_url": "https://pypi.org/project/happy/", "platform": "", "project_url": "https://pypi.org/project/happy/", "project_urls": { "Homepage": "https://github.com/grampajoe/happy" }, "release_url": "https://pypi.org/project/happy/1.2.1/", "requires_dist": [ "click", "requests" ], "requires_python": "", "summary": "Quickly set up and tear down Heroku apps!", "version": "1.2.1" }, "last_serial": 3379189, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "124192b127b05243580261aad567d419", "sha256": "4c61d4248f63c315c8e55e68c1b7f4b2d76f63e443eea56fc22e98a1e537d3e9" }, "downloads": -1, "filename": "happy-1.0.0.tar.gz", "has_sig": false, "md5_digest": "124192b127b05243580261aad567d419", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3583, "upload_time": "2015-02-16T03:19:59", "url": "https://files.pythonhosted.org/packages/03/b9/3016deea88be2fa551dd79637e155330a24a4d7e4a7c4550f16dfa9d2311/happy-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "b7eabf5b249d9e1ce24fedeec79871c8", "sha256": "d1061e11648507595fde8f5d02e0464c2c0cf4fe8e6af4eec78ca161de363747" }, "downloads": -1, "filename": "happy-1.1.0.tar.gz", "has_sig": false, "md5_digest": "b7eabf5b249d9e1ce24fedeec79871c8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4131, "upload_time": "2015-02-16T19:13:26", "url": "https://files.pythonhosted.org/packages/c2/1e/152f342e4d6e52b93c65ebb2a52954108ca10c5215e7c6351281d2ffedc6/happy-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "0910691ed0dc8933bd98c573084f613a", "sha256": "9087eb39f64261b391bde8c897b13140b8b79137d43f61e7df7cc4eb9d486316" }, "downloads": -1, "filename": "happy-1.2.0.tar.gz", "has_sig": false, "md5_digest": "0910691ed0dc8933bd98c573084f613a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4922, "upload_time": "2015-02-22T23:22:23", "url": "https://files.pythonhosted.org/packages/6b/b1/d038bdf0b73abd2014ac7c090a8aeb6d6b83c20a4cb043066d2c9e1c1b36/happy-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "a89345c586ac918a2fc6831cbae763e1", "sha256": "df030b3111873e2fcbbf562ebc75ffc32152c2f6f1575c21e83da766f8912fe4" }, "downloads": -1, "filename": "happy-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a89345c586ac918a2fc6831cbae763e1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7996, "upload_time": "2017-12-01T04:26:07", "url": "https://files.pythonhosted.org/packages/92/c9/106f881e96c78d767f58950e97796e8a615439650840c13afeb7bbda5d82/happy-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7342b5f5cfc730936ad8b1c12e5475c9", "sha256": "e198c77b379789682fa2b1e010dfbe2000024062de10a980811737bf43d2d3da" }, "downloads": -1, "filename": "happy-1.2.1.tar.gz", "has_sig": false, "md5_digest": "7342b5f5cfc730936ad8b1c12e5475c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4955, "upload_time": "2017-12-01T04:26:08", "url": "https://files.pythonhosted.org/packages/68/b8/ee1613a7411bcb3e5bc8627263b4dc4118787fffd542323f08872125d02c/happy-1.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a89345c586ac918a2fc6831cbae763e1", "sha256": "df030b3111873e2fcbbf562ebc75ffc32152c2f6f1575c21e83da766f8912fe4" }, "downloads": -1, "filename": "happy-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a89345c586ac918a2fc6831cbae763e1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7996, "upload_time": "2017-12-01T04:26:07", "url": "https://files.pythonhosted.org/packages/92/c9/106f881e96c78d767f58950e97796e8a615439650840c13afeb7bbda5d82/happy-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7342b5f5cfc730936ad8b1c12e5475c9", "sha256": "e198c77b379789682fa2b1e010dfbe2000024062de10a980811737bf43d2d3da" }, "downloads": -1, "filename": "happy-1.2.1.tar.gz", "has_sig": false, "md5_digest": "7342b5f5cfc730936ad8b1c12e5475c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4955, "upload_time": "2017-12-01T04:26:08", "url": "https://files.pythonhosted.org/packages/68/b8/ee1613a7411bcb3e5bc8627263b4dc4118787fffd542323f08872125d02c/happy-1.2.1.tar.gz" } ] }