{ "info": { "author": "deadc0de6", "author_email": "deadc0de6@foo.bar", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "CPLOY\n=====\n\n|Build Status| |PyPI version| |Python| |License: GPL v3|\n\n*The ad hoc continuous deployment solution for developers*\n\nI sometimes have to code stuff that needs to be deployed and run on\nremote hosts. Since I don't have all my prefs/settings/dotfiles/etc on\nthe remote, I usually code on local and have a small one-liner lying\naround that allows me to quickly deploy the code (with ``scp`` or\nsimilar) and run some command on the other side (with ``ssh`` for\nexample). This is not optimal and that's the reason I created *cploy*.\n\n*Cploy* allows to mirror changes performed on a local directory to a\nremote host through SSH. A specific command (bash one-liner for example)\ncan be run after any change, for example to trigger a build or execute a\nscript.\n\nFeatures:\n\n- handle multiple syncs in parallel\n- secure sync through SSH\n- run in the background\n- execute command on each local change\n- ability to exclude some files from sync\n- save and resume tasks\n- load tasks from file\n\nQuick start:\n\n.. code:: bash\n\n # install cploy\n sudo pip3 install cploy\n # start the daemon\n cploy start\n # add a directory to sync\n cploy sync /tmp/local someuser@somehost /tmp/remote\n\nsee `usage <#usage>`__ for more info\n\n--------------\n\n**Table of Contents**\n\n- `Installation <#installation>`__\n- `Usage <#usage>`__\n\n- `Adding a task <#adding-a-task>`__\n- `Talking with the daemon <#talking-with-the-daemon>`__\n- `File exclusion <#file-exclusion>`__\n- `Sync events <#sync-events>`__\n- `Run a command on change <#run-a-command-on-change>`__\n- `Save and resume tasks <#save-and-resume-tasks>`__\n\n- `Contribution <#contribution>`__\n\nInstallation\n============\n\nTo install run:\n\n.. code:: bash\n\n $ sudo pip3 install cploy\n $ cploy --help\n\nOr from github directly\n\n.. code:: bash\n\n $ cd /tmp; git clone https://github.com/deadc0de6/cploy cploy-git && cd cploy-git\n $ sudo python3 setup.py install\n $ cploy --help\n\nTo work with *cploy* without installing it, you can do the following\n\n.. code:: bash\n\n $ cd /tmp; git clone https://github.com/deadc0de6/cploy cploy-git && cd cploy-git\n $ sudo pip3 install -r requirements.txt\n $ python3 -m cploy.cploy --help\n\nor install it in a virtualenv\n\n.. code:: bash\n\n $ cd /tmp; git clone https://github.com/deadc0de6/cploy cploy-git && cd cploy-git\n $ virtualenv -p python3 env\n $ source env/bin/activate\n $ python setup.py install\n $ cploy --help\n\nUsage\n=====\n\nThe usual way of using *cploy* is by starting the daemon. A task will\ncontinuously synchronize any change made to a specific local directory\non a remote path. All synchronizations are done through SSH.\n\nStart the daemon\n\n.. code:: bash\n\n $ cploy start --debug\n\nThe daemon's logs are in ``/tmp/cploy/cploy.log``. Debug logs and errors\nare written to ``/tmp/cploy/cploy.err``.\n\nAnd add a task to it:\n\n.. code:: bash\n\n # sync local dir /tmp/local\n # on host \"somehost\" under /tmp/remote\n $ cploy sync /tmp/local/ somehost /tmp/remote\n\nThat's it. Now every changes made in the ``/tmp/local`` directory will\nbe applied in ``/tmp/remote`` on *somehost*.\n\nAdding a task\n-------------\n\nTasks can be added by using the ``sync`` command.\n\nAfter adding a task, make sure to check the daemon to see if the task\nhas been added successfully with ``cploy info``. In case it wasn't,\nchecking the logs in ``/tmp/cploy/cploy.{log,err}`` usually allows to\nidentify the issue.\n\nConnections to a remote hosts is done using SFTP (SSH). Multiple\nconnection options can be applied: connection with password, with SSH\nkeys, using the SSH agent, different port, different username, etc.\n\nBesides using the above switches, The ** argument can also be provided\nusing a compact format similar to what the SSH client provides:\n\n::\n\n @:\n\nThe ```` is normalized based on the default user's\ndirectory on the remote (usually ``$HOME``). For example\n``../../tmp/test`` would result in ``/tmp/test`` if the remote user's\ndefault directory is ``/home/user``. Note that shell expansions are not\nperformed on remote paths (like ``~`` for example) neither are\nenvironment variables (like ``$HOME``).\n\nOnce a new task is added, *cploy* will start by copying any local\nexisting files to the remote directory to initiate the remote directory.\nThen, any change to the local directory is automatically applied on the\nremote.\n\nConnection Requirements:\n\n- SSH access is working (obviously)\n- remote host key is trusted\n- local directory exists (````)\n- remote directory does not exist (````) unless\n ``--force`` is used\n\nTalking with the daemon\n-----------------------\n\nA few commands are available to talk to the daemon:\n\n- **start**: start the daemon\n- **stop**: stop the daemon\n- **restart**: stop and then start the daemon\n- **info**: get a list of current tasks\n- **ping**: ping the daemon\n- **debug**: toggle debug flag\n- **unsync**: stop syncing a specific task\n- **resync**: force a full sync of the local directory to the remote\n one\n- **resume**: resume sync from a file\n\nIf you prefer not to use the daemon, *cploy* can also be entirely run in\nthe foreground by using the ``--front`` switch. However only a single\ntask can be added to it then.\n\nGetting information from the daemon allows to see the different task\nrunning and their id:\n\n.. code:: bash\n\n $ cploy info\n\nFile exclusion\n--------------\n\nFiles can be excluded from the sync in the monitored directory by using\nthe ``--exclude`` switch. Matching is done using\n`fnmatch `__.\n\nExample: exclude any hidden files\n\n::\n\n --exclude '*/.*'\n\nExample: exclude any files containing *test*\n\n::\n\n --exclude '*/test*'\n\nExclusions pattern can be loaded from a file using the ``--expath``\nswitch. The file should contain one pattern per line.\n\nFor example:\n\n::\n\n */.*\n */test*\n\nSync events\n-----------\n\nHere is a list of changes that are synchronized on the remote:\n\n- File creation\n- File deletion\n- File attribute change\n- File content modification\n- File move\n\nRun a command on change\n-----------------------\n\nA command can be added to a task using the ``--command`` switch. The\nprovided command will be run on the remote anytime a change is applied\non the local monitored directory.\n\n*Cploy* uses paramiko channel's\n`exec\\_command `__\nto execute the command which will be run from the default directory of\nthe remote user (usually ``$HOME``).\n\nFor example if the remote directory is ``/tmp/remote`` and the script to\nrun remotely is located in ``/tmp/remote/test.sh``, the command argument\nwill be ``--command=\"/tmp/remote/test.sh\"``.\n\nCurrently the specified command is run on any change with no control\nover the granularity.\n\nSave and resume tasks\n=====================\n\nEach time *cploy*'s daemon is stopped, it will append its running tasks\nto ``/tmp/cploy/cploy.save``. This file can easily be edited or saved\nfor backup.\n\n*Cploy* can resume tasks from a saved file by calling the ``resume``\ndaemon's command and providing it with a valid saved file.\n\nHere's an example of a saved file's content describing two tasks:\n\n::\n\n sync /tmp/first host1 /tmp/remote --debug --force\n sync /tmp/second host2 /tmp/remote --debug --force\n\nThis also allows to describe tasks in a file directly instead of calling\nthe command line for each task. Issuing the following command will load\nthe tasks from ``/tmp/sometasks``\n\n.. code:: bash\n\n $ cploy resume /tmp/sometasks\n\nNote that ``sync`` commands loaded from file get environment variables\n(and relative path) expanded.\n\nContribution\n============\n\nIf you are having trouble installing or using *cploy*, open an issue.\n\nIf you want to contribute, feel free to do a PR (please follow PEP8).\n\nHave a look at the *design* directory.\n\nLicense\n=======\n\nThis project is licensed under the terms of the GPLv3 license.\n\n.. |Build Status| image:: https://travis-ci.org/deadc0de6/cploy.svg?branch=master\n :target: https://travis-ci.org/deadc0de6/cploy\n.. |PyPI version| image:: https://badge.fury.io/py/cploy.svg\n :target: https://badge.fury.io/py/cploy\n.. |Python| image:: https://img.shields.io/pypi/pyversions/cploy.svg\n :target: https://pypi.python.org/pypi/cploy\n.. |License: GPL v3| image:: https://img.shields.io/badge/License-GPL%20v3-blue.svg\n :target: http://www.gnu.org/licenses/gpl-3.0\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/deadc0de6/cploy/archive/v0.6.4.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/deadc0de6/cploy", "keywords": "continuous deployment cli", "license": "GPLv3", "maintainer": "", "maintainer_email": "", "name": "cploy", "package_url": "https://pypi.org/project/cploy/", "platform": "", "project_url": "https://pypi.org/project/cploy/", "project_urls": { "Download": "https://github.com/deadc0de6/cploy/archive/v0.6.4.tar.gz", "Homepage": "https://github.com/deadc0de6/cploy" }, "release_url": "https://pypi.org/project/cploy/0.6.4/", "requires_dist": [ "docopt", "paramiko", "pyinotify", "python-daemon", "check-manifest; extra == 'dev'", "coverage; extra == 'test'", "pytest; extra == 'test'", "pytest-cov; extra == 'test'" ], "requires_python": "", "summary": "The ad hoc continuous deployment solution for developers", "version": "0.6.4" }, "last_serial": 4382176, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "3e49afab0ef45638ba8199833d89b10a", "sha256": "0fb5b762b754434a3439650a20d013f071c4844008b4e81b78956a8f1b9141c8" }, "downloads": -1, "filename": "cploy-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3e49afab0ef45638ba8199833d89b10a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 32262, "upload_time": "2018-03-26T17:10:52", "url": "https://files.pythonhosted.org/packages/71/44/828eee360a9873c08c4d32e03117749b38e7db8df5ae4d25b94efa226bb8/cploy-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b94c2b00f1c5f321c3d05f05eb63ee7a", "sha256": "8e2e1c83dd3892f747c3e94ce8a44f3197afb5d1db2c3096ea35faeaa0ad83f7" }, "downloads": -1, "filename": "cploy-0.1.tar.gz", "has_sig": false, "md5_digest": "b94c2b00f1c5f321c3d05f05eb63ee7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25757, "upload_time": "2018-03-26T17:10:53", "url": "https://files.pythonhosted.org/packages/6b/37/653d633740f82537c63e279fbe4b6e7840b7a401c8d0bf8c6884f646da32/cploy-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "a7b7d473efb743c36deaaa1a8f396826", "sha256": "9a89a3541a788f53225971ea56278a8bcc3f08b80c1bdd0638d4fcec49df170e" }, "downloads": -1, "filename": "cploy-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a7b7d473efb743c36deaaa1a8f396826", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 33555, "upload_time": "2018-03-27T08:22:56", "url": "https://files.pythonhosted.org/packages/8a/a2/3652de9d02c4763c6ee54818679d3f3003575259dcd121af3064f36a289a/cploy-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bec6c734adc5ea534de089ffd93b9c40", "sha256": "988f2d6b8d3563114bfc0a8a7ae8cd22621c13a32f5da4b9c1f034461eb1d5d7" }, "downloads": -1, "filename": "cploy-0.1.1.tar.gz", "has_sig": false, "md5_digest": "bec6c734adc5ea534de089ffd93b9c40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29699, "upload_time": "2018-03-27T08:22:58", "url": "https://files.pythonhosted.org/packages/b3/bb/51d8d520055fb4f44055c763b95340cc492d4f923f06c9c375614aaa0bec/cploy-0.1.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "135e478554a576c4dd7f9be208c9706d", "sha256": "9e6da007ce2267cc6de34f2c998b44d60666d9cd7d98a04fab01aa8419015cfb" }, "downloads": -1, "filename": "cploy-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "135e478554a576c4dd7f9be208c9706d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 35191, "upload_time": "2018-03-27T19:49:16", "url": "https://files.pythonhosted.org/packages/48/3c/88374fb14c2cb169a137e23fb8d90019b4366ab7f75b8f1543eeec93b1c5/cploy-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "243f22dd3f69639cc8ea347f5e367df1", "sha256": "2b1c6797501faf4580a1e56acd51acb12f1a50cb10b86b62351db95ca8bb07c9" }, "downloads": -1, "filename": "cploy-0.2.tar.gz", "has_sig": false, "md5_digest": "243f22dd3f69639cc8ea347f5e367df1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28147, "upload_time": "2018-03-27T19:49:17", "url": "https://files.pythonhosted.org/packages/b4/a3/84d438c4457afb128deef34a5b49999f3e0ce7eb62a92d1fa74a9f570c99/cploy-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "a390c0b1365c2914221f8579f87210c1", "sha256": "49648c91271da9b22cbb3ceb9844649e8e4a0f89353d1870a6dd71e45d4a7edf" }, "downloads": -1, "filename": "cploy-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "a390c0b1365c2914221f8579f87210c1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36135, "upload_time": "2018-03-28T07:51:12", "url": "https://files.pythonhosted.org/packages/45/ec/c80560cf57d6766f990d8161baf06bb57b2829f6d807e649d69eb91f858d/cploy-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "63a62f23dc6502c4704e0405b9c39e8e", "sha256": "dfd84425c422172b66a79eed61f189613908436ae7f92dc3c93457d163754ee0" }, "downloads": -1, "filename": "cploy-0.3.tar.gz", "has_sig": false, "md5_digest": "63a62f23dc6502c4704e0405b9c39e8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32453, "upload_time": "2018-03-28T07:51:13", "url": "https://files.pythonhosted.org/packages/a8/2d/8dbb1982362a5dfcab361e18759bb97f3c7ab71a0a524024bb5a93dd3d5d/cploy-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "3b46049dabfe21ffad8147c4ffdd9f4b", "sha256": "16787abeb1166c9a7c1eb4a544b06e5d5ff8829471a62037577b7825f4bf189b" }, "downloads": -1, "filename": "cploy-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3b46049dabfe21ffad8147c4ffdd9f4b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36290, "upload_time": "2018-03-30T13:12:57", "url": "https://files.pythonhosted.org/packages/c2/ec/874d306449f2cab61b649a94579a6d76465c9cf0aec35cd7fbb77940cf1c/cploy-0.3.1-py3-none-any.whl" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "34ff43a46c33d444d9655cfb304dacd9", "sha256": "ffe6bcf82e539be9ec2d9004abf751de7680d939ca91697c3987f044cbb2e7e5" }, "downloads": -1, "filename": "cploy-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "34ff43a46c33d444d9655cfb304dacd9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36089, "upload_time": "2018-03-30T18:06:08", "url": "https://files.pythonhosted.org/packages/13/d7/634ae7c737f145d0be6d6092d324a23f4709c5e039e2b57a938ec1a7adf2/cploy-0.4-py3-none-any.whl" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "a20da45e31af1f085465d20144636a34", "sha256": "1c290077fff253e7071197e58d0b719e4c67203dafb120092bfd98a28de9e1db" }, "downloads": -1, "filename": "cploy-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "a20da45e31af1f085465d20144636a34", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36095, "upload_time": "2018-04-10T20:49:14", "url": "https://files.pythonhosted.org/packages/ed/d2/5da92fcbe1737603f27e266336f3155df158dab63bb3725bf29a60e84f53/cploy-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ad9d4fb07b2733befc1da3ac9406f21e", "sha256": "bbda213f7f5bc30d67485e00bce6c921de17827edafd4bc440e96a09b6baba50" }, "downloads": -1, "filename": "cploy-0.5.1.tar.gz", "has_sig": false, "md5_digest": "ad9d4fb07b2733befc1da3ac9406f21e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29218, "upload_time": "2018-04-10T20:49:16", "url": "https://files.pythonhosted.org/packages/6e/cf/a66056bfacbd51966fc7529ed78e7448df3aeba84e4e680da2bc92b32d9d/cploy-0.5.1.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "16f3fbdf15987004e21b153758b3bfcf", "sha256": "7d7dc8b4de16843d0d422b742cb9004f9f84ef34f1875233d34d04a0d98d300f" }, "downloads": -1, "filename": "cploy-0.5.3-py3-none-any.whl", "has_sig": false, "md5_digest": "16f3fbdf15987004e21b153758b3bfcf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 31876, "upload_time": "2018-04-11T08:58:37", "url": "https://files.pythonhosted.org/packages/8d/e2/9ab06802b76a1370a0b6afe10f6fccc58e78f37dc4c67a72846d38cea2c8/cploy-0.5.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c19f9a56823e2edf3bc6d73862b21650", "sha256": "db9d75661638cf71b8ec0bbf432ec381ff4cfc4013297eacf4b9d455dc1baf93" }, "downloads": -1, "filename": "cploy-0.5.3.tar.gz", "has_sig": false, "md5_digest": "c19f9a56823e2edf3bc6d73862b21650", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32346, "upload_time": "2018-04-11T08:58:38", "url": "https://files.pythonhosted.org/packages/6e/d9/f81411b2c0bce44eae750a9a1f38fbeac90878d1c442522d68bd53590b12/cploy-0.5.3.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "c9c0be1114d2847e90baadffe47b8678", "sha256": "c6a0f2f0fd67781723f76b6058c43bc2ca48d5631bb87dc947358c2f648cd365" }, "downloads": -1, "filename": "cploy-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c9c0be1114d2847e90baadffe47b8678", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36330, "upload_time": "2018-04-12T20:34:57", "url": "https://files.pythonhosted.org/packages/e3/b0/e3ea0aa55d4e7de2d1f100a6b74b6f8f6eef33fe3774d98eb7bf2847a3a9/cploy-0.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "227d6541c992b7855a4f541ae1542ee0", "sha256": "e992826a1c9e8a6ac128ec653237ba2122a3c37a96bbbb38f438dee6fa5873e3" }, "downloads": -1, "filename": "cploy-0.6.1.tar.gz", "has_sig": false, "md5_digest": "227d6541c992b7855a4f541ae1542ee0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29479, "upload_time": "2018-04-12T20:34:59", "url": "https://files.pythonhosted.org/packages/0f/e6/530c569d86a731b9fc9bde220c0892c82474ea965f3e9d472b9ee56434d0/cploy-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "e973a180d4ef1f71b6202f280e6429ad", "sha256": "c628ff84fc31934fbbe315ee6a34870a546c32e3cc4fce59cf8fcda5443c8707" }, "downloads": -1, "filename": "cploy-0.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e973a180d4ef1f71b6202f280e6429ad", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 36354, "upload_time": "2018-04-15T20:26:05", "url": "https://files.pythonhosted.org/packages/de/1b/735269aa7e7d601f725be0b11a73db9f44de3006cfdd9ea0b9e7ed2b56c2/cploy-0.6.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "18ed460baa0ca30350361b04e8fb2aa3", "sha256": "2b2f723f481f5794700aa9e106a748e0cafd705073ec0fb8a64bf9e626a08187" }, "downloads": -1, "filename": "cploy-0.6.2.tar.gz", "has_sig": false, "md5_digest": "18ed460baa0ca30350361b04e8fb2aa3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29497, "upload_time": "2018-04-15T20:26:06", "url": "https://files.pythonhosted.org/packages/a2/d7/e7aece2638b1a3b12b193a615b3dd09c5f0020238f9541235b7f4caeaa1b/cploy-0.6.2.tar.gz" } ], "0.6.3": [ { "comment_text": "", "digests": { "md5": "c8ee4716590ef140e9c909b2aed8638c", "sha256": "337ce54b8a6bd0e15ebd4743eeb9c164edf2d06cdfcd1bbebdf9ecb856ad8be4" }, "downloads": -1, "filename": "cploy-0.6.3-py3-none-any.whl", "has_sig": false, "md5_digest": "c8ee4716590ef140e9c909b2aed8638c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 32113, "upload_time": "2018-04-18T15:50:52", "url": "https://files.pythonhosted.org/packages/fc/0d/125bbcfc3749245bfe65a74cc888836338daaa55f3ed17fdb6bc75d9b1fd/cploy-0.6.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f4445ec504089351aae20d124a491642", "sha256": "7f90c25bf322e9364ccf79e9d67fa418a7353073c86876ed041590e24f36cd38" }, "downloads": -1, "filename": "cploy-0.6.3.tar.gz", "has_sig": false, "md5_digest": "f4445ec504089351aae20d124a491642", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32597, "upload_time": "2018-04-18T15:50:53", "url": "https://files.pythonhosted.org/packages/02/66/efc3703300d147716df03a405ebfba9fbb0e3c6e50b3387424dcc96d526c/cploy-0.6.3.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "0ba80d88730bf34cfc679638f3247f48", "sha256": "4d5c8c6099f7df7eacbecab4e538a501fdef2d00f3b28b074307254b8956ebc7" }, "downloads": -1, "filename": "cploy-0.6.4-py3-none-any.whl", "has_sig": false, "md5_digest": "0ba80d88730bf34cfc679638f3247f48", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 32264, "upload_time": "2018-10-16T15:35:50", "url": "https://files.pythonhosted.org/packages/c0/a6/9e1da74c8faace79a7a4ce1613df84c239a359e15532c714df003e8140fc/cploy-0.6.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e4c66ad928560a7467b71e0e7d9160e", "sha256": "10d5d2cd86d353b43988b7e575fd37c972aef441ac9bfccecb7b4f5794189b41" }, "downloads": -1, "filename": "cploy-0.6.4.tar.gz", "has_sig": false, "md5_digest": "9e4c66ad928560a7467b71e0e7d9160e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32792, "upload_time": "2018-10-16T15:35:52", "url": "https://files.pythonhosted.org/packages/9b/33/78a8e36de9b35df59369646db606b3d95b226b2339f4be659d65d2ddafdc/cploy-0.6.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0ba80d88730bf34cfc679638f3247f48", "sha256": "4d5c8c6099f7df7eacbecab4e538a501fdef2d00f3b28b074307254b8956ebc7" }, "downloads": -1, "filename": "cploy-0.6.4-py3-none-any.whl", "has_sig": false, "md5_digest": "0ba80d88730bf34cfc679638f3247f48", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 32264, "upload_time": "2018-10-16T15:35:50", "url": "https://files.pythonhosted.org/packages/c0/a6/9e1da74c8faace79a7a4ce1613df84c239a359e15532c714df003e8140fc/cploy-0.6.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9e4c66ad928560a7467b71e0e7d9160e", "sha256": "10d5d2cd86d353b43988b7e575fd37c972aef441ac9bfccecb7b4f5794189b41" }, "downloads": -1, "filename": "cploy-0.6.4.tar.gz", "has_sig": false, "md5_digest": "9e4c66ad928560a7467b71e0e7d9160e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32792, "upload_time": "2018-10-16T15:35:52", "url": "https://files.pythonhosted.org/packages/9b/33/78a8e36de9b35df59369646db606b3d95b226b2339f4be659d65d2ddafdc/cploy-0.6.4.tar.gz" } ] }