{ "info": { "author": "Jason Jones", "author_email": "slightlynybbled@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: CC0 1.0 Universal (CC0 1.0) Public Domain Dedication", "Natural Language :: English", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: System :: Software Distribution", "Topic :: Utilities" ], "description": "# Huddle\n\n`Huddle` is an application that allows one or more programs to be started, monitored, stopped, updated, and \nrestarted from one or more configuration files. This program works in Windows and Linux.\n\nMore complete documentation may be found on [GitHub Pages](https://slightlynybbled.github.io/huddle/).\n\n## Configuration File Format\n\nThe purpose of this program is to auto-deploy any arbitrary program in a fashion that is more suited to auto-scaling\nservers. Instead of having a git hook that pushes to a known set of servers, a running server continually polls\nthe git at specified intervals and - when there is an update - the server will pull the new data and re-deploy.\n\nAll of this is done using a configuration file, so no Python knowledge is required.\n\nThe simplest example of a configuration file will simply check for updates for a set of files every 60s:\n\n {\n \"repository\": {\n \"remote path\": \"https://github.com/slightlynybbled/dummy.git\",\n \"local path\": \"/home/ubuntu/git_example\",\n },\n }\n\nA more comprehensive configuration file:\n\n {\n \"repository\": {\n \"remote\": \"origin\",\n \"remote path\": \"https://github.com/slightlynybbled/dummy.git\",\n \"local path\": \"/home/ubuntu/git_example\",\n \"branch\": \"develop\",\n \"executable\": \"/usr/bin/git\"\n },\n\n \"timing\": {\n \"minimum\": 60,\n \"maximum\": 600\n },\n\n \"application\": {\n \"start\": \"/home/ubuntu/py3env/bin/python -m dummy_app.py\"\n }\n }\n\nThis file will initially start the application using the command under `start`, and check for application updates\nevery 60s to 600s (random). When an update to the `develop` branch is detected, the application will be halted, the\nlocal file updated, and the application re-started automatically.\n\nNote that INI is also supported. The above equivalent configuration:\n\n [repository]\n remote = origin\n remote path: https://github.com/slightlynybbled/dummy.git\n local path: C:/_code/_git_example\n branch: develop\n executable: /usr/bin/git\n\n [timing]\n minimum = 60\n maximum = 600\n\n [application]\n start = /home/ubuntu/py3env/bin/python -m dummy_app.py\n\nThe current flow chart for each application is:\n\n![flow chart](flow-chart.png)\n\nThis program, at initialization, should be all that is required to clone a remote repository, verify test status,\nsync changes, and stop/start/reboot the application.\n\n## Configuration Files\n\nAll configuration files should be saved within a particular directory with `.json` extensions. Any file that is\nprefixed with an underscore `_` will be ignored.\n\n /home/ubuntu/config_files\n /app1.json\n /app2.ini\n /_app3.json\n\nOr, in windows:\n\n C:\\config_files\n \\app1.json\n \\app2.ini\n \\_app3.json\n\nNote that `_app3.json` will be ignored.\n\n## Running the Application\n\nTo execute huddle, simply pass it the path to your configuration files using the `-c` or `--config` options:\n\n python -m huddle -c /home/ubuntu/config_files\n python -m huddle -c C:\\config_files\n\nDepending on the install location for huddle (virtual environments, etc.), the `python -m` may not be required:\n\n huddle -c /home/ubuntu/config_files\n huddle -c C:\\config_files\n\n# Status\n\nThe interface is stable enough to depend on. Testing is at about 60% on unit tests and I have verified basic\nfunctionality on windows and on linux (Debian). Currently, the 'check tests' portion of the API is not implemented\nand - if attempted - will raise a `NotImplementedError`.\n\n# Installation\n\nInstall with `pip install huddle` or simply download the most recent version of this repository and\n`python setup.py install`.\n\n\n\n", "description_content_type": null, "docs_url": "https://pythonhosted.org/huddle/", "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/slightlynybbled/huddle", "keywords": "auto-deployment,huddle", "license": "", "maintainer": "", "maintainer_email": "", "name": "huddle", "package_url": "https://pypi.org/project/huddle/", "platform": "", "project_url": "https://pypi.org/project/huddle/", "project_urls": { "Homepage": "https://github.com/slightlynybbled/huddle" }, "release_url": "https://pypi.org/project/huddle/0.1.5/", "requires_dist": [ "requests (>=2.12.4)" ], "requires_python": "", "summary": "A server-oriented auto-deployment utility for any type of program or script", "version": "0.1.5" }, "last_serial": 2911239, "releases": { "0.0.1.dev0": [], "0.1.0": [ { "comment_text": "", "digests": { "md5": "8d11ac604f5be50e5e6dea41d3ed44b5", "sha256": "82f461e8c32949deb5c660fc4634722a11796f1c8fb8792f49b9af85fd0545bd" }, "downloads": -1, "filename": "huddle-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8d11ac604f5be50e5e6dea41d3ed44b5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5462, "upload_time": "2017-01-06T03:07:20", "url": "https://files.pythonhosted.org/packages/0e/ce/9285c27dae00b89ad8cd0a5279a942373cce5804d678a797a824fa6892d3/huddle-0.1.0-py3-none-any.whl" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "66c867173de1d28d53ae66e54a00065e", "sha256": "7c7a3aca884e60e8c4d817426f1e3e2e2ad91c457a7d6e8dac76d79e2b8a2cc0" }, "downloads": -1, "filename": "huddle-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "66c867173de1d28d53ae66e54a00065e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5623, "upload_time": "2017-01-10T16:41:57", "url": "https://files.pythonhosted.org/packages/81/3a/852625c22b1c7fe6cf14f1b8b74375b6735ad6c592304b26af1fbaea110d/huddle-0.1.1-py3-none-any.whl" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "2a411d4cbf5c545fce952e0d0f7b7c6b", "sha256": "3301f41b9cafa0c6b8059db505f1aee9a5dfcf1e6de61d0820087126c721dc84" }, "downloads": -1, "filename": "huddle-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "2a411d4cbf5c545fce952e0d0f7b7c6b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6323, "upload_time": "2017-01-10T20:02:39", "url": "https://files.pythonhosted.org/packages/6b/36/98f8683ad17efeee98e741c6de10d41e9885b87b29cd06c787769cf522b2/huddle-0.1.2-py3-none-any.whl" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "fbbe4e082c0bd2b3565553be7545dc93", "sha256": "5539216f1516bb273538f02f1fd663974da1e92c5ca19c59812e5a01f639ff16" }, "downloads": -1, "filename": "huddle-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "fbbe4e082c0bd2b3565553be7545dc93", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6336, "upload_time": "2017-01-11T12:05:45", "url": "https://files.pythonhosted.org/packages/21/8a/dc278f5c46162c341e2faf248f71c3ffb58594c20d4f277926cafebc578e/huddle-0.1.3-py3-none-any.whl" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "27e5f2f2c222a14aa6c2ac9a01ec38c4", "sha256": "297417358f9859cfeaacdb4aff1f57c66a96c6c3b03819e98215c0204f1e0fab" }, "downloads": -1, "filename": "huddle-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "27e5f2f2c222a14aa6c2ac9a01ec38c4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8759, "upload_time": "2017-02-06T19:14:45", "url": "https://files.pythonhosted.org/packages/99/4e/04526a1ce7071b9c3f911ee1f90a2d2cc783d07a4a0e4279930cda0bb7fe/huddle-0.1.4-py3-none-any.whl" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "9a6dab36a64b2a054e4a9955729185b6", "sha256": "395611f394b050489898972dd7118cbe5abd1a91bf3c9ca4a13aa18933342318" }, "downloads": -1, "filename": "huddle-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "9a6dab36a64b2a054e4a9955729185b6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11888, "upload_time": "2017-05-30T23:49:21", "url": "https://files.pythonhosted.org/packages/88/28/5794e3ced8c5a7bc19184e956c82a04f95cb5b6dc04d2147c66176dd71b8/huddle-0.1.5-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9a6dab36a64b2a054e4a9955729185b6", "sha256": "395611f394b050489898972dd7118cbe5abd1a91bf3c9ca4a13aa18933342318" }, "downloads": -1, "filename": "huddle-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "9a6dab36a64b2a054e4a9955729185b6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11888, "upload_time": "2017-05-30T23:49:21", "url": "https://files.pythonhosted.org/packages/88/28/5794e3ced8c5a7bc19184e956c82a04f95cb5b6dc04d2147c66176dd71b8/huddle-0.1.5-py3-none-any.whl" } ] }