{ "info": { "author": "", "author_email": "", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "A Python library for Juju\n=========================\n\nSource code: https://github.com/juju/python-libjuju\n\nBug reports: https://github.com/juju/python-libjuju/issues\n\nDocumentation: https://pythonlibjuju.readthedocs.io/en/latest/\n\n\nRequirements\n------------\n\n* Python 3.5+\n* Juju 2.0+\n\n\nDesign Notes\n------------\n\n* Asynchronous - uses asyncio and async/await features of python 3.5\n* Websocket-level bindings are programmatically generated (indirectly) from the\n Juju golang code, ensuring full api coverage\n* Provides an OO layer which encapsulates much of the websocket api and\n provides familiar nouns and verbs (e.g. Model.deploy(), Application.add_unit(),\n etc.)\n\n\nInstallation\n------------\n\n.. code:: bash\n\n pip3 install juju\n\n\nQuickstart\n----------\nHere's a simple example that shows basic usage of the library. The example\nconnects to the currently active Juju model, deploys a single unit of the\nubuntu charm, then exits:\n\n\n.. code:: python\n\n #!/usr/bin/python3\n\n import logging\n import sys\n\n from juju import loop\n from juju.model import Model\n\n\n async def deploy():\n # Create a Model instance. We need to connect our Model to a Juju api\n # server before we can use it.\n model = Model()\n\n # Connect to the currently active Juju model\n await model.connect_current()\n\n try:\n # Deploy a single unit of the ubuntu charm, using the latest revision\n # from the stable channel of the Charm Store.\n ubuntu_app = await model.deploy(\n 'ubuntu',\n application_name='ubuntu',\n series='xenial',\n channel='stable',\n )\n\n if '--wait' in sys.argv:\n # optionally block until the application is ready\n await model.block_until(lambda: ubuntu_app.status == 'active')\n finally:\n # Disconnect from the api server and cleanup.\n await model.disconnect()\n\n\n def main():\n logging.basicConfig(level=logging.INFO)\n\n # If you want to see everything sent over the wire, set this to DEBUG.\n ws_logger = logging.getLogger('websockets.protocol')\n ws_logger.setLevel(logging.INFO)\n\n # Run the deploy coroutine in an asyncio event loop, using a helper\n # that abstracts loop creation and teardown.\n loop.run(deploy())\n\n\n if __name__ == '__main__':\n main()\n\n\nMore examples can be found in the docs, as well as in the ``examples/``\ndirectory of the source tree which can be run using ``tox``. For\nexample, to run ``examples/connect_current_model.py``, use:\n\n.. code:: bash\n\n tox -e example -- examples/connect_current_model.py\n\n\nVersioning\n----------\n\nPylibjuju releases now track the Juju release cadence. New generated schemas\nwill be updated per Juju releases.\n\n\nChangelog\n---------\n\n2.6.3\n^^^^^\n\n * Refactor bundle handler code so that it can be more resilient against changes\n to the bundle changes API.\n * Updated the dependencies to the latest version (pyyaml)\n\n2.6.2\n^^^^^\nWednesday August 27 2019\n\n * Fixes validation issue with a go interface{} type (Any type) being returned\n from the Juju API server (#344)\n\n2.6.1\n^^^^^\nWednesday August 21 2019\n\n * Pylibjuju now validates arguments correctly, instead of relying on default\n positional argument values.\n\n2.6.0\n^^^^^\nWednesday August 14 2019\n\n* Update facade methods for Juju 2.6.6\n* Pylibjuju release now follows the cadence of Juju releases, which also\n includes bumping the version number to follow suit.\n* Pinned API facades. All facades in Pylibjuju are now pinned to a set of\n facade versions that is more conservative to prevent breakages against new\n features. The ability to override the pinned facades and specify your own\n facade versions is possible upon connection to a controller or model.\n* Cross model relations (CMR) when deploying and adding relations. Additionally\n getting information about the CMR offers are available on the model.\n* Cross model relations (CMR) in bundles.\n* Ability to export bundle including overlays.\n* Manual provisioning without a ubuntu user (#335)\n* Addition of remote applications when adding relations via SAAS blocks\n* Applying topological sorting to bundle changes API response, allows deployment\n of complex bundles possible.\n* Updated definitions types to include the latest information from Juju.\n* Keyword arguments (`unknown_field` in code) are now available on Juju\n responses.\n\n0.11.7\n^^^^^^\nWednesday April 19 2019\n\n* Update facade methods for Juju 2.6.4\n* Support for trusted bundles and charms (See: Trust_ documentation)\n\n.. _Trust: https://discourse.jujucharms.com/t/deploying-applications-advanced/1061#heading--trusting-an-application-with-a-credential\n\n0.11.6\n^^^^^^\nWednesday May 22 2019\n\n* Disable hostname checking on controller connection (#305)\n* Handle RedirectError payloads returned by Login RPCs (#303)\n\n\n0.11.5\n^^^^^^\nMonday April 1 2019\n\n* Handle deltas of unknown types (fixes connecting to Juju 2.6 controllers) (#299)\n* Test fixes (#298)\n\n\n0.11.4\n^^^^^^\nMonday April 1 2019\n\n* Additional work with annotations. (#290)\n* Check server cert. (#296)\n\n\n0.11.3\n^^^^^^\nWednesday March 13 2019\n\n* k8s bundles no longer have application placement (#293)\n* Add retry for connection if all endpoints fail (#288)\n* Support generation of registration string for model sharing. (#279)\n* Add Twine for dist upload on release (#284)\n\n\n0.11.2\n^^^^^^\nWednesday January 16 2019\n\n* update facade methods for Juju 2.5-rc2 (#281)\n* Add test case for redirect during connect (#275)\n* Implement App.get_resources and pinned resources in bundles (#278)\n\n\n0.11.1\n^^^^^^\nThursday December 13 2018\n\n* Fix bundles with subordinates for Juju <2.5 (#277)\n\n\n0.11.0\n^^^^^^\nTuesday December 11 2018\n\n* Updates for new Juju version (#274)\n* Fix wrong variable name in revoke_model function (#271)\n\n\n0.10.2\n^^^^^^\nTuesday September 18 2018\n\n* set include_stats to false to reduce request time (#266)\n\n\n0.10.1\n^^^^^^\nMonday September 17 2018\n\n* Retry ssh in manual provision test (#265)\n* Clean up lint and add lint coverage to travis config (#263)\n* Increase the timeout for charmstore connections (#262)\n* Fix log level of `Driver connected to juju` message (#258)\n\n\n0.10.0\n^^^^^^\nThursday August 16 2018\n\n* Fix error due to scp extra opts order (#260)\n* Implement set/get model constraints (#253)\n\n\n0.9.1\n^^^^^\nMonday July 16 2018\n\n* Update websockets to 6.0 to fix OS X support due to Brew update to Py3.7 (#254)\n\n\n0.9.0\n^^^^^\nFriday June 29 2018\n\n* python3.7 compatibility updates (#251)\n* Handle juju not installed in is_bootstrapped for tests (#250)\n* Add app.reset_config(list). (#249)\n* Implement model.get_action_status (#248)\n* Fix `make client` in Python 3.6 (#247)\n\n\n0.8.0\n^^^^^\nThursday June 14 2018\n\n* Add support for adding a manual (ssh) machine (#240)\n* Backwards compatibility fixes (#213)\n* Implement model.get_action_output (#242)\n* Fix JSON serialization error for bundle with lxd to unit placement (#243)\n* Fix reference in docs to connect_current (#239)\n* Wrap machine agent status workaround in version check (#238)\n* Convert seconds to nanoseconds for juju.unit.run (#237)\n* Fix spurious intermittent failure in test_machines.py::test_status (#236)\n* Define an unused juju-zfs lxd storage pool for Travis (#235)\n* Add support for Application get_actions (#234)\n\n\n0.7.5\n^^^^^\nFriday May 18 2018\n\n* Surface errors from bundle plan (#233)\n* Always send auth-tag even with macaroon auth (#217)\n* Inline jsonfile credential when sending to controller (#231)\n\n0.7.4\n^^^^^\nTuesday Apr 24 2018\n\n* Always parse tags and spaces constraints to lists (#228)\n* Doc index improvements (#211)\n* Add doc req to force newer pymacaroons to fix RTD builds\n* Fix dependency conflict for building docs\n\n0.7.3\n^^^^^\nTuesday Feb 20 2018\n\n* Full macaroon bakery support (#206)\n* Fix regression with deploying local charm, add test case (#209)\n* Expose a machines series (#208)\n* Automated test runner fixes (#205)\n\n0.7.2\n^^^^^\nFriday Feb 9 2018\n\n* Support deploying bundle YAML file directly (rather than just directory) (#202)\n\n0.7.1\n^^^^^\nMonday Dec 18 2017\n\n* Fix missed renames of model_uuids (#197)\n\n0.7.0\n^^^^^\nFri Dec 15 2017\n\n* Fix race condition in adding relations (#192)\n* Fix race condition in connection monitor test (#183)\n* Fix example in README (#178)\n* Fix rare hang during Unit.run (#177)\n* Fix licensing quirks (#176)\n* Refactor model handling (#171)\n* Refactor users handling, add get_users (#170)\n* Upload credential to controller when adding model (#168)\n* Support 'applications' key in bundles (#165)\n* Improve handling of thread error handling for loop.run() (#169)\n* Fix encoding when using to_json() (#166)\n* Fix intermittent test failures (#167)\n\n0.6.1\n^^^^^\nFri Sept 29 2017\n\n* Fix failure when controller supports newer facade version (#145)\n* Fix test failures (#163)\n* Fix SSH key handling when adding a new model (#161)\n* Make Application.upgrade_charm upgrade resources (#158)\n* Expand integration tests to use stable/edge versions of juju (#155)\n* Move docs to ReadTheDocs (https://pythonlibjuju.readthedocs.io/en/latest/)\n\n0.6.0\n^^^^^\nThu June 29 2017\n\n* Implement scp functionality (#149)\n* Add Unit.public_address property (#153)\n* Adds support for getting/setting config on a model (#152)\n\n0.5.3\n^^^^^\nThu June 22 2017\n\n* Improve handling of closed connections (#148)\n* Configurable and larger max message size (#146)\n\n0.5.2\n^^^^^\nWed June 14 2017\n\n* Fix deploying non-stable channels and explicit revs (#144)\n\n0.5.1\n^^^^^\nTue June 13 2017\n\n* Update schema for Juju 2.3 alpha1 (#142)\n* Improve API doc navigation and coverage (#141)\n* Add type info to Model.add_machine docs (#138)\n\n0.5.0\n^^^^^\nThu June 8 2017\n\n* Add machine status properties (#133)\n* Add model context manager (#128)\n* Implement Application.upgrade_charm method (#132)\n\n0.4.3\n^^^^^\nThu June 1 2017\n\n* Accept new / unknown API fields gracefully (#131)\n* Add support for new agent-version field in ModelInfo (#131)\n* Replace pip with pip3 in install instructions (#129)\n* Strip local:-prefix from local charm urls (#121)\n\n0.4.2\n^^^^^\nWed May 10 2017\n\n* Support (and prefer) per-controller macaroon files (#125)\n\n0.4.1\n^^^^^\nWed Apr 27 2017\n\n* Remove VERSION_MAP and rely on facade list from controller (#118)\n* Refactor connection task management to avoid cancels (#117)\n* Refactored login code to better handle redirects (#116)\n\n0.4.0\n^^^^^\nWed Apr 19 2017\n\n* Feature/api version support (#109)\n* Expanding controller.py with basic user functions, get_models and\n destroy (#89)\n* Added Monitor class to Connection. (#105)\n* Support placement lists (#103)\n* Include resources from store when deploying (#102)\n* Allow underscore to dash translation when accessing model\n attributes (#101)\n* Added controller to ssh fix. (#100)\n* Regen schema to pick up missing APIs\n* Improve error handling\n* Fix issue where we do not check to make sure that we are receiving the\n correct response.\n* Retry calls to charmstore and increase timeout to 5s\n* Make connect_model and deploy a bit more friendly\n* Fix model name not including user\n* Implement Model.get_status\n* Add integration tests.\n\n0.3.0\n^^^^^\nMon Feb 27 2017\n\n* Fix docstrings for placement directives.\n* Implement Model.add_machine()\n* Bug fix - \"to\" parameter to Model.deploy() was broken\n* Add docs and examples for adding machines and containers and deploying\n charms to them.\n* Make Machine.destroy() block the current coroutine, returning only after\n the machine is actually removed from the remote model. This is more\n consistent with the way the other apis work (e.g. Model.deploy(),\n Application.add_unit(), etc).\n* Raise NotImplementedError in all unimplemented method stubs instead of\n silently passing.\n\n0.2.0\n^^^^^\nThu Feb 16 2017\n\n* Add default ssh key to newly created model.\n* Add loop helpers and simplify examples/deploy.py\n* Add support for deploying local charms, and bundles containing local charm paths.\n* Add ability to get cloud name for controller.\n* Bug fix - fix wrong api used in Model.destroy_unit()\n* Add error detection in bundle deploy.\n\n0.1.2\n^^^^^\nThu Dec 22 2016\n\n* Bug fix - Include docs in package\n\n0.1.1\n^^^^^\nThu Dec 22 2016\n\n* Bug fix - Include VERSION file in package\n\n0.1.0\n^^^^^\nWed Dec 21 2016\n\n* Initial Release", "description_content_type": "", "docs_url": "https://pythonhosted.org/juju/", "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/juju/python-libjuju", "keywords": "", "license": "Apache 2", "maintainer": "Juju Ecosystem Engineering", "maintainer_email": "juju@lists.ubuntu.com", "name": "juju", "package_url": "https://pypi.org/project/juju/", "platform": "", "project_url": "https://pypi.org/project/juju/", "project_urls": { "Homepage": "https://github.com/juju/python-libjuju" }, "release_url": "https://pypi.org/project/juju/2.6.3/", "requires_dist": null, "requires_python": "", "summary": "Python library for Juju", "version": "2.6.3" }, "last_serial": 5850923, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "c83b8ff2508bb45cbcdebebaf69fd6d3", "sha256": "3793345f5c1a3b771ccdccfbb211f3c956ad51c8f8cc578e389d26496be6c43a" }, "downloads": -1, "filename": "juju-0.1.0.tar.gz", "has_sig": false, "md5_digest": "c83b8ff2508bb45cbcdebebaf69fd6d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 115396, "upload_time": "2016-12-21T16:07:15", "url": "https://files.pythonhosted.org/packages/8c/9c/eb9428b839ba35455d710f0bdf78917a0fc57f6306da2b1fc4f6831b85f9/juju-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "10e89db29a83fb076d90348f5f1fb753", "sha256": "b4d3b0185a71dc426abf5d6175b1e516ea84b8b34b98e7712d4c2dd4bcbee8f3" }, "downloads": -1, "filename": "juju-0.1.1.tar.gz", "has_sig": false, "md5_digest": "10e89db29a83fb076d90348f5f1fb753", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 122247, "upload_time": "2016-12-22T14:18:30", "url": "https://files.pythonhosted.org/packages/d5/4d/692763a7b93d2ee9ce44190e329dd60b63c508e44873d73136553ba8e66d/juju-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "a9e5d675b06fd9b3eacdf4b378224f08", "sha256": "c5d44cb33ada338897b6d6297d87236d0780384842b2be66a3063310bc850179" }, "downloads": -1, "filename": "juju-0.1.2.tar.gz", "has_sig": false, "md5_digest": "a9e5d675b06fd9b3eacdf4b378224f08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 127029, "upload_time": "2016-12-22T14:23:50", "url": "https://files.pythonhosted.org/packages/f7/61/cba0e21fd011c57c8d100094112f351abe13937ad34fba59d086ddcce20c/juju-0.1.2.tar.gz" } ], "0.10.0": [ { "comment_text": "", "digests": { "md5": "cb14bd9c2d99912b296e87ffa8729abb", "sha256": "ea0436f9280516a50856cea90c80c71f6e3f107aa32c989347d8a4eca95366e4" }, "downloads": -1, "filename": "juju-0.10.0.tar.gz", "has_sig": false, "md5_digest": "cb14bd9c2d99912b296e87ffa8729abb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 206090, "upload_time": "2018-08-16T13:59:09", "url": "https://files.pythonhosted.org/packages/cd/97/a5d504a9a2b1b442f1e92d7d77ce3db1ddeb7c9015077efa49a5973cd916/juju-0.10.0.tar.gz" } ], "0.10.1": [ { "comment_text": "", "digests": { "md5": "7e900fbe952855021004d807d385225e", "sha256": "b0bd744c61b77e683d7d5a0e262a87decbbc20c0ad0c7bb79c50fb6f054a307d" }, "downloads": -1, "filename": "juju-0.10.1.tar.gz", "has_sig": false, "md5_digest": "7e900fbe952855021004d807d385225e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 206488, "upload_time": "2018-09-17T17:45:13", "url": "https://files.pythonhosted.org/packages/af/a3/12f4c964f4e0b27ed59b8dcb97578187281cb744a56814fbdd3eb9e7c020/juju-0.10.1.tar.gz" } ], "0.10.2": [ { "comment_text": "", "digests": { "md5": "ed58790157fd6566be61397f4bcfcace", "sha256": "917fcd76a39fd0bfab60bcdb0d8432827c31a616efaa6b3572bd7126cfdbd2e1" }, "downloads": -1, "filename": "juju-0.10.2.tar.gz", "has_sig": false, "md5_digest": "ed58790157fd6566be61397f4bcfcace", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 206612, "upload_time": "2018-09-18T13:10:28", "url": "https://files.pythonhosted.org/packages/36/00/ac2f903dbf9d146f8861116d9c718a21d30a2f35c472a81f5433e89b9bac/juju-0.10.2.tar.gz" } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "ddc10082e21f0048a35f053582463333", "sha256": "81879f14df7b0ceafa5bb9b3834fb49d2b50ef3730079ab2eb7c5cb7844b7ff1" }, "downloads": -1, "filename": "juju-0.11.0.tar.gz", "has_sig": false, "md5_digest": "ddc10082e21f0048a35f053582463333", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 276739, "upload_time": "2018-12-11T18:59:27", "url": "https://files.pythonhosted.org/packages/92/09/05072103064b28ad023f309a85ab9c00f283d9f3afb0256e58aeab7e9bba/juju-0.11.0.tar.gz" } ], "0.11.1": [ { "comment_text": "", "digests": { "md5": "7c2d2e884010febe21c3063a94a41725", "sha256": "c197bd6ea78aebd1c7abe30f705fe331c649b2535c5137cfe4fe161b711d58e3" }, "downloads": -1, "filename": "juju-0.11.1.tar.gz", "has_sig": false, "md5_digest": "7c2d2e884010febe21c3063a94a41725", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 276863, "upload_time": "2018-12-13T22:51:32", "url": "https://files.pythonhosted.org/packages/ac/51/652b8323da38d2cca23b9a08b400c8a074a7a10d11c2a3abe472518a88aa/juju-0.11.1.tar.gz" } ], "0.11.2": [ { "comment_text": "", "digests": { "md5": "2eb2f66d82cb873bf643e95b38880f4f", "sha256": "d286b9a9fed710685c7864bb832e1b8afe24c1dce6f5ad9dff64c2c2f526e0fe" }, "downloads": -1, "filename": "juju-0.11.2.tar.gz", "has_sig": false, "md5_digest": "2eb2f66d82cb873bf643e95b38880f4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 274776, "upload_time": "2019-01-16T14:58:48", "url": "https://files.pythonhosted.org/packages/85/4b/5c2699d8b4b50b4ce3319b308c4daade42288025769c7c8273d4d20b019e/juju-0.11.2.tar.gz" } ], "0.11.3": [ { "comment_text": "", "digests": { "md5": "238bde4dcf58132a075d23deb1352e8c", "sha256": "491f9fc2a92a72159a4878b624db3d58ea81e3a105f486cbe50d51818ff6bdf8" }, "downloads": -1, "filename": "juju-0.11.3.tar.gz", "has_sig": false, "md5_digest": "238bde4dcf58132a075d23deb1352e8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 279099, "upload_time": "2019-03-13T21:56:03", "url": "https://files.pythonhosted.org/packages/ec/89/657d4cb0f1808c74137362454453f77d129ae24cb61ab15c29927553957f/juju-0.11.3.tar.gz" } ], "0.11.4": [ { "comment_text": "", "digests": { "md5": "bae17919c71d34154ee7df8ecdd154e9", "sha256": "4788e0faa64bc37c87c91b463bd6ac5afb4d571bec96c7e3127ea75445afe7b9" }, "downloads": -1, "filename": "juju-0.11.4.tar.gz", "has_sig": false, "md5_digest": "bae17919c71d34154ee7df8ecdd154e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 279483, "upload_time": "2019-04-01T18:10:53", "url": "https://files.pythonhosted.org/packages/7b/69/b86a4bb3f6a7719163b9c8d8913dea8fa7c17ca17926325937f2d3a7fcc3/juju-0.11.4.tar.gz" } ], "0.11.5": [ { "comment_text": "", "digests": { "md5": "486dbdaa0b83b74097d75416cd6efd06", "sha256": "9c09b91e049934bb8f1db3dea2d9b28eca85c13915312f80eb8d4ec9a365ed11" }, "downloads": -1, "filename": "juju-0.11.5.tar.gz", "has_sig": false, "md5_digest": "486dbdaa0b83b74097d75416cd6efd06", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 279659, "upload_time": "2019-04-01T22:20:31", "url": "https://files.pythonhosted.org/packages/cd/fd/14ffad016ae20288d9a9ec7ba282ce979c96d2423bd5294cb1e5be1e75c5/juju-0.11.5.tar.gz" } ], "0.11.6": [ { "comment_text": "", "digests": { "md5": "440fa8c9b6c2954bb714f91c6889a151", "sha256": "87fe75611c562d4198b8e08b5a8e9a134c9d14a4013a417ca3636a970731331a" }, "downloads": -1, "filename": "juju-0.11.6.tar.gz", "has_sig": false, "md5_digest": "440fa8c9b6c2954bb714f91c6889a151", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 280508, "upload_time": "2019-05-22T17:41:50", "url": "https://files.pythonhosted.org/packages/57/a8/9774978a9c887061198aecf93a64d3f5aa59648677e539e5697b4a43cb8f/juju-0.11.6.tar.gz" } ], "0.11.7": [ { "comment_text": "", "digests": { "md5": "3ccfe84ca12204bad8ad95f55856a0b2", "sha256": "3357de68874c3bd2e1daf3f19122a9f25804903b197cf7409b24e1ab8fc3f210" }, "downloads": -1, "filename": "juju-0.11.7.tar.gz", "has_sig": false, "md5_digest": "3ccfe84ca12204bad8ad95f55856a0b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 325824, "upload_time": "2019-06-20T11:21:56", "url": "https://files.pythonhosted.org/packages/1a/4f/4eb5e030fd3149f488b84b0416d686f6d0d1992082b6e741ede6d0108940/juju-0.11.7.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "c8d87f4c01400b6fb575c7b545ef72cb", "sha256": "28a315fb405c45a67f003141eff8c0b7c939ef74d78bcae3d3c2a2d716838acc" }, "downloads": -1, "filename": "juju-0.2.0.tar.gz", "has_sig": false, "md5_digest": "c8d87f4c01400b6fb575c7b545ef72cb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 131711, "upload_time": "2017-02-16T15:52:25", "url": "https://files.pythonhosted.org/packages/1f/4c/12c4bceb1179e22fc26480b572bb50946a370a6cd119735592b9611fc8f0/juju-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "6ea48fba62a1917b5ee46adcf86bd8a0", "sha256": "ac35676dae6ef98b033705404b3d27a3c832869fff39fdc895b7dd01a22c4751" }, "downloads": -1, "filename": "juju-0.3.0.tar.gz", "has_sig": false, "md5_digest": "6ea48fba62a1917b5ee46adcf86bd8a0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 133234, "upload_time": "2017-02-27T15:02:12", "url": "https://files.pythonhosted.org/packages/f5/41/bcdfd1eb0b7f17d183989dbc97dd85238bd1c6bd23bcc334cbf26dbf4720/juju-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "9312d0f6fc1bd51517ed9f9bd8731406", "sha256": "6eeae60fa31e1031fafe280501f2d4aaab5501cf8013cb43adfc8aac62333966" }, "downloads": -1, "filename": "juju-0.4.0.tar.gz", "has_sig": false, "md5_digest": "9312d0f6fc1bd51517ed9f9bd8731406", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 167127, "upload_time": "2017-04-19T21:25:03", "url": "https://files.pythonhosted.org/packages/cb/b4/08600469d051bf27474a266f0922c40e892cb33fb30e5e12ba41af103c48/juju-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "361f495730f72927cd2e0580ba3e06e1", "sha256": "f8d2afbee413b1de2041286ac36ab85321fb3ade0c8ff805c25792b85d936913" }, "downloads": -1, "filename": "juju-0.4.1.tar.gz", "has_sig": false, "md5_digest": "361f495730f72927cd2e0580ba3e06e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 166804, "upload_time": "2017-04-28T00:22:31", "url": "https://files.pythonhosted.org/packages/8e/e1/cd79f646672a8e08ef9680d60872349e609d4ac3c5eeddd2aa26deddc27e/juju-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "829ea7f12362624575b048f927977343", "sha256": "a3d301d411a7559b2e6a8b33794be708803f266cd82878eeefc40f03d7a1a29f" }, "downloads": -1, "filename": "juju-0.4.2.tar.gz", "has_sig": false, "md5_digest": "829ea7f12362624575b048f927977343", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 167759, "upload_time": "2017-05-10T22:15:31", "url": "https://files.pythonhosted.org/packages/bd/c1/acb19e12456f0afb4e9fca96606e7de4ee036afded0300ee2b29e8b08bad/juju-0.4.2.tar.gz" } ], "0.4.3": [ { "comment_text": "", "digests": { "md5": "996ac3aace17df7bf7a27e2c7e0dc7c7", "sha256": "9c6d842925ca3661c09d947f34eb995f1f8649999a2baa6f7e196deefbf513eb" }, "downloads": -1, "filename": "juju-0.4.3.tar.gz", "has_sig": false, "md5_digest": "996ac3aace17df7bf7a27e2c7e0dc7c7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 170504, "upload_time": "2017-06-01T18:33:02", "url": "https://files.pythonhosted.org/packages/3d/26/543538bd9d8cadf5aa513277e83dec6fd8add81f9611c01b400a12821a2f/juju-0.4.3.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "e570a605370d8248d3cbfe343799406b", "sha256": "a1e18ebc70be1d36a45ff52243b0453d441ffe0b8fd83ef1685b88e3af68c65b" }, "downloads": -1, "filename": "juju-0.5.0.tar.gz", "has_sig": false, "md5_digest": "e570a605370d8248d3cbfe343799406b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 172248, "upload_time": "2017-06-08T15:18:57", "url": "https://files.pythonhosted.org/packages/df/23/323d14442cdb0a9c412871cd5482601f1d4f402dcbb3918d5241b2b4f9a2/juju-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "5bad6248765abd9568d5352604efdee6", "sha256": "7754e7ce8452d228dbcfb02743a37a757eb0a4f5a45087161917a1d9ed41f66c" }, "downloads": -1, "filename": "juju-0.5.1.tar.gz", "has_sig": false, "md5_digest": "5bad6248765abd9568d5352604efdee6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 179860, "upload_time": "2017-06-13T19:24:08", "url": "https://files.pythonhosted.org/packages/98/10/093d5ff9a4a49cfc207b335d6a2ad32f255565c292dbd483ac9a4cae805a/juju-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "e58646ba45d3fe371b38925bc8b03db2", "sha256": "0330da89d348bea3388765d35f3db1f0c5a4810af092401875ae419beff9b693" }, "downloads": -1, "filename": "juju-0.5.2.tar.gz", "has_sig": false, "md5_digest": "e58646ba45d3fe371b38925bc8b03db2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 179952, "upload_time": "2017-06-14T18:03:04", "url": "https://files.pythonhosted.org/packages/5a/03/3d49b4457600f392c307e9c7526831c293df2f446508a2823385b9838460/juju-0.5.2.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "3ff3f77259ab832bfd8152ad3fffd174", "sha256": "2454958564c99030a8072d7315a6ceb72700e4f57fbba6d21b59f52c86b52e93" }, "downloads": -1, "filename": "juju-0.5.3.tar.gz", "has_sig": false, "md5_digest": "3ff3f77259ab832bfd8152ad3fffd174", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 181099, "upload_time": "2017-06-22T20:21:28", "url": "https://files.pythonhosted.org/packages/f5/dc/ea4f4bff279515eda8567995109ae3ca6c5e92dc9debfc43e2c0fcb3fa51/juju-0.5.3.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "81c7823f6306bb8f664d3022c49f717a", "sha256": "aa0be18059318cde7c819cffd59dac1a96e9f84aa49fdaf32ce1cdadd7e6b042" }, "downloads": -1, "filename": "juju-0.6.0.tar.gz", "has_sig": false, "md5_digest": "81c7823f6306bb8f664d3022c49f717a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 182254, "upload_time": "2017-06-29T18:53:33", "url": "https://files.pythonhosted.org/packages/c7/88/13a748d442b2dbcb02852edbeed358f500ee089d1921f1538ba903b8b351/juju-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "450e34c40f28bfe961ed9f7e1c427dab", "sha256": "189eed44947c6ea0bb64c1cd1e8c1c14fd7e72099da94673233f90fb3e27b77e" }, "downloads": -1, "filename": "juju-0.6.1.tar.gz", "has_sig": false, "md5_digest": "450e34c40f28bfe961ed9f7e1c427dab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 183326, "upload_time": "2017-09-29T16:53:45", "url": "https://files.pythonhosted.org/packages/19/32/33a84b9b49aae3ba1f2f70a1b7d96664de7327e2dd18c8c88a0ec5e09d65/juju-0.6.1.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "70746e2c3354dbb9cc04ff76fece4666", "sha256": "36af14b60d1820aeddcef8d3de5c0cd354bd5d3ef7a30ee9b8791480ceeb07fd" }, "downloads": -1, "filename": "juju-0.7.0.tar.gz", "has_sig": false, "md5_digest": "70746e2c3354dbb9cc04ff76fece4666", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 187678, "upload_time": "2017-12-15T21:11:08", "url": "https://files.pythonhosted.org/packages/ef/e7/2597ab4e2f2606beeb302757786c30199c614d79672fb654647e2808edac/juju-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "c261f0b2d0352c9bedbc8f89a6b9cdea", "sha256": "5b7cfcb5aa4b7ae9f9b0d181547c15bca4d5931f3e1fd59a824faa700b5dbdc6" }, "downloads": -1, "filename": "juju-0.7.1.tar.gz", "has_sig": false, "md5_digest": "c261f0b2d0352c9bedbc8f89a6b9cdea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 187775, "upload_time": "2017-12-18T20:51:30", "url": "https://files.pythonhosted.org/packages/3a/e5/eaa5d4b96243cb1b028560a5c83be0da0a459fe32c291c22eb0be39d9fef/juju-0.7.1.tar.gz" } ], "0.7.2": [ { "comment_text": "", "digests": { "md5": "cbf0fc5b23a6526e491040e1d8d22f23", "sha256": "d50cf4f103f2bcb63b4f6f32b0317eacbbab8f064efc3c274b4143c035eb5260" }, "downloads": -1, "filename": "juju-0.7.2.tar.gz", "has_sig": false, "md5_digest": "cbf0fc5b23a6526e491040e1d8d22f23", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 187998, "upload_time": "2018-02-09T19:37:48", "url": "https://files.pythonhosted.org/packages/62/9a/59a49e6ada2655462b096fe04d6e2d0c6da4d93c05501fc006b3a818e3c0/juju-0.7.2.tar.gz" } ], "0.7.3": [ { "comment_text": "", "digests": { "md5": "d790ff31935ce937d4f37dc4f46a3777", "sha256": "07fe467668528bffb18412900ab3a41b091893fbb81f3a39934657f5bb49ad3a" }, "downloads": -1, "filename": "juju-0.7.3.tar.gz", "has_sig": false, "md5_digest": "d790ff31935ce937d4f37dc4f46a3777", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 195300, "upload_time": "2018-02-20T19:06:57", "url": "https://files.pythonhosted.org/packages/d3/84/54d9be41c75bdaaf40139212a07d8f6f28a2559647e28d5370b994312d28/juju-0.7.3.tar.gz" } ], "0.7.4": [ { "comment_text": "", "digests": { "md5": "4bfc655a59f36fac7a2fd8c17d39ef92", "sha256": "1635a387ad3194e8353868001cc1d5e972161b1ec86dfe662868572fcdf7c7f5" }, "downloads": -1, "filename": "juju-0.7.4.tar.gz", "has_sig": false, "md5_digest": "4bfc655a59f36fac7a2fd8c17d39ef92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 195718, "upload_time": "2018-04-24T13:32:53", "url": "https://files.pythonhosted.org/packages/03/7c/46efdd890d2ebd6f1feec13fabf332dbca049662dbe5adc44aae9790167b/juju-0.7.4.tar.gz" } ], "0.7.5": [ { "comment_text": "", "digests": { "md5": "f6821dc41bfa9ce66fa5717575a33c63", "sha256": "9ff2bccd328c364af5efe8aa00b5041bd9ff65111c69448220cea35bffcb3f20" }, "downloads": -1, "filename": "juju-0.7.5.tar.gz", "has_sig": false, "md5_digest": "f6821dc41bfa9ce66fa5717575a33c63", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 197865, "upload_time": "2018-05-18T16:07:33", "url": "https://files.pythonhosted.org/packages/fa/6b/04751c78e333880d888049c5c704706986c187763095c099c6a8e618fe04/juju-0.7.5.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "1961f7aa0dcc134f72afc90daa9a6c01", "sha256": "dd82c4216384508e86e9b06e45a38b6e7fb83911291acbabb640cfe257022da3" }, "downloads": -1, "filename": "juju-0.8.0.tar.gz", "has_sig": false, "md5_digest": "1961f7aa0dcc134f72afc90daa9a6c01", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 204602, "upload_time": "2018-06-14T17:49:56", "url": "https://files.pythonhosted.org/packages/12/06/a5e59159557d0e65e390350f8da39137d2332716021193fcb02d21598f10/juju-0.8.0.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "af2750f213bdfaf1a109b5baefc72425", "sha256": "8726a58d5d68c49a2d3589566db33b8686cd85779e09739c2db03fd70e72f185" }, "downloads": -1, "filename": "juju-0.9.0.tar.gz", "has_sig": false, "md5_digest": "af2750f213bdfaf1a109b5baefc72425", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 205475, "upload_time": "2018-06-29T18:22:08", "url": "https://files.pythonhosted.org/packages/c7/c0/a315341dc251a9f2e9dfe32a8b9f1667a15c80be8e1396fdd35e6617b4c9/juju-0.9.0.tar.gz" } ], "0.9.1": [ { "comment_text": "", "digests": { "md5": "7311310a4ba637d3ff77eb10defbfcff", "sha256": "530f96c7088f83dbb7faf00a48604f0d94c149ca88ef6535cfd65e0adcd13adb" }, "downloads": -1, "filename": "juju-0.9.1.tar.gz", "has_sig": false, "md5_digest": "7311310a4ba637d3ff77eb10defbfcff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 205627, "upload_time": "2018-07-16T21:33:14", "url": "https://files.pythonhosted.org/packages/ae/35/168c89f79ae296a67ec7ce4fb54a21344feafd0c91444de53d7c2a3b8b60/juju-0.9.1.tar.gz" } ], "2.6.0": [ { "comment_text": "", "digests": { "md5": "8999ce7a8e2db24b83110819195a2353", "sha256": "1015c6dd1deebcf1b6d9dc8344a6c2f08ee9158264b6129957dc4591feac4e4b" }, "downloads": -1, "filename": "juju-2.6.0.tar.gz", "has_sig": false, "md5_digest": "8999ce7a8e2db24b83110819195a2353", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 342913, "upload_time": "2019-08-14T16:55:38", "url": "https://files.pythonhosted.org/packages/06/9b/f04fcfa49db74899102bfe0802e898a6f7789c62a67cd823ad22362f7aa7/juju-2.6.0.tar.gz" } ], "2.6.1": [ { "comment_text": "", "digests": { "md5": "dd2daa3efadcebddad0cf81e1429ee90", "sha256": "6fbda803f05b21350048a020eca95a479031c4ad9fa0d990618fed7ea5f9a1f1" }, "downloads": -1, "filename": "juju-2.6.1.tar.gz", "has_sig": false, "md5_digest": "dd2daa3efadcebddad0cf81e1429ee90", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 397223, "upload_time": "2019-08-21T16:50:41", "url": "https://files.pythonhosted.org/packages/0a/f9/3c4fc20dec699d93f971dc7a777f043a095d8ec85a4e00b57b96bb7f1eb2/juju-2.6.1.tar.gz" } ], "2.6.2": [ { "comment_text": "", "digests": { "md5": "acabaa7075c0bf778ad5c144c01a641a", "sha256": "63fb0484064bb039e0e81aadfb5a8290661c62d99775e459c0f93e1136b417df" }, "downloads": -1, "filename": "juju-2.6.2.tar.gz", "has_sig": false, "md5_digest": "acabaa7075c0bf778ad5c144c01a641a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 398228, "upload_time": "2019-08-27T16:10:20", "url": "https://files.pythonhosted.org/packages/a8/40/1bba4aa6e76bb2967a40afd6f2f237118fdce5e5a8b208bb53e408398103/juju-2.6.2.tar.gz" } ], "2.6.3": [ { "comment_text": "", "digests": { "md5": "d5c99c619afff26eb7eac3daf1a5c724", "sha256": "cbf0ed3c317dc98b307f74ff1cb99978857c008aeb05d8206c7313a28fdc207e" }, "downloads": -1, "filename": "juju-2.6.3.tar.gz", "has_sig": false, "md5_digest": "d5c99c619afff26eb7eac3daf1a5c724", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 403238, "upload_time": "2019-09-18T12:04:42", "url": "https://files.pythonhosted.org/packages/18/f2/714e253e7a8a0c697b2ccd11bc42622cf4aca69eaa599e00e8aa976cb540/juju-2.6.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d5c99c619afff26eb7eac3daf1a5c724", "sha256": "cbf0ed3c317dc98b307f74ff1cb99978857c008aeb05d8206c7313a28fdc207e" }, "downloads": -1, "filename": "juju-2.6.3.tar.gz", "has_sig": false, "md5_digest": "d5c99c619afff26eb7eac3daf1a5c724", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 403238, "upload_time": "2019-09-18T12:04:42", "url": "https://files.pythonhosted.org/packages/18/f2/714e253e7a8a0c697b2ccd11bc42622cf4aca69eaa599e00e8aa976cb540/juju-2.6.3.tar.gz" } ] }