{ "info": { "author": "Graham Dumpleton", "author_email": "Graham.Dumpleton@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "This package provides a plugin for the ``powershift`` command line client\nwhich contains commands for assisting in the building and running of Python\nS2I based images with OpenShift.\n\nThis includes adding OpenShift V2 style action hooks and job scripts,\nas well as extensions to additionally allow environment variables to be\ndynamically set for both builds and deployments. Additional hooks\nscripts can be provided related to verifying an image after a build,\nperforming initial setup of data required by an application, data\nmigration on deployments with updated application source code, readiness\nchecks and liveness checks. Commands are also provided for starting an\ninteractive shell or running programs with the same environment as an\napplication is deployed with.\n\nThis package requires that the ``powershift-cli`` package also be installed.\nTo install the ``powershift-cli`` package, and the ``powershift`` command\nline program contained in that package, along with this plugin, you should\nuse ``pip`` to install the package ``powershift-cli[image]``, rather than\njust ``powershift-image``.\n\nBe aware that this package is only usable in the context of building and\ndeploying an application being built into an image using the Python S2I\nbuilder. There is no point installing it in your personal development\nenvironment as it is dependent on the specific environment of the Python\nS2I builder image and how it adds application source code to that image\nduring the build process.\n\nThe normal way which the package would be installed for use, would be to add\nto the ``.s2i/bin/assemble`` script of application source code being used\nwith the Python S2I builder::\n\n #!/bin/bash\n pip install --no-cache-dir powershift-cli[image]\n exec powershift image assemble\n\nA corresponding ``.s2i/bin/run`` script would be also be created which\ncontains::\n\n #!/bin/bash\n exec powershift image run\n\nBoth these scripts should be made executable.\n\nAll other commands provided by the plugin would then always be executed in\nthe running container created by the Python S2I builder these scripts were\nincorporated in.\n\nFor more details on how to install the ``powershift`` command line program\nand available plugins see:\n\n* https://github.com/getwarped/powershift-cli\n\nAvailable commands\n------------------\n\nTo see all available commands you can use inbuilt help features of the\n``powershift image``.\n\n::\n\n Usage: powershift image [OPTIONS] COMMAND [ARGS]...\n\n Assemble S2I based image and run application.\n\n Extends S2I based image build and execution to incorporate action\n hooks which can customize installation and setup of the application,\n as well as the environment used when the application is run.\n\n Provides the means to create an interactive shell or run commands in\n the container with the same environment as the application.\n\n Also, allows the manual running of custom action hooks for initial\n setup of data, run data migration when updating to a new version of\n the application, verify an application after a build, test for\n readiness or liveness of an application.\n\n Options:\n --help Show this message and exit.\n\n Commands:\n alive Trigger action hook which tests if alive.\n assemble Runs the build process for the image.\n exec Run a command with application environment.\n jobs Run job scripts in specified category.\n migrate Triggers action hook to migrate any data.\n ready Trigger action hook which tests if ready.\n run Runs the application built into the image.\n setup Triggers action hook to setup any data.\n shell Create a shell with application environment.\n verify Trigger action hook which verifies image.\n\nTypes of Action Hooks\n---------------------\n\nUnder OpenShift V2, the action hooks which were provided were:\n\n* ``pre_build`` - Executed prior to building application artefacts.\n* ``build`` - Executed after building application artefacts.\n* ``deploy`` - Executed prior to starting the application.\n* ``post_deploy`` - Executed after the application has been started.\n\nEquivalent hooks to all but ``post_deploy`` can readily be implemented\nin V3. The reason that ``post_deploy`` cannot be implemented is that\nwhen using Docker, the application is generally left running as process\nID 1. That is, no process manager is usually used within a running\nDocker container.\n\nThat there is no overarching process manager makes it somewhat difficult to\nrun something after the application has been started as the application\nactually keeps control and is not running in background. Solutions such as\nrunning ``post_deploy`` in the background, delayed by a sleep, isn't\npractical as you can't be sure the application has actually been started\nproperly before running it.\n\nIf required, anything like ``post_deploy`` is better implemented outside of\nthe container, using features of OpenShift such as lifecycle hooks.\n\nAs well as not implementing ``post_deploy``, personal experience from\nworking in Python suggests that the action hooks are better off modelled a\nbit differently than in V2 with additional functionality added. For this\nimplementation though we have to keep reasonably close to the original in\nOpenShift V2 as it isn't possible to break open the original S2I\n``assemble`` and ``run`` scripts to insert additional hook points. This\ndoes impose certain limitations on ``pre_build`` as explained below.\n\nTwo new action hooks that are added though are ``build_env`` and\n``deploy_env``. Technically these aren't hook scripts in the way the\nexisting OpenShift V2 actions are. This is because they will not be\nexecuted as a distinct process, but inline to the replacement ``assemble``\nand ``run`` scripts. Their purpose is to allow additional environment\nvariables to be dynamically set. This can be important when needing to set\nenvironment variables dynamically based on information extracted from\npackages installed as part of the build process.\n\nFinally a ``run`` action hook is also allowed. This if supplied will\nsupersede the ``run`` script provided in the S2I builder. It is expected\nthat it runs the application to be deployed. It must not return and\nmust ensure the application run inherits the process ID of the script.\n\nUsing the Action Hooks\n----------------------\n\nTo add your own action hooks, create the following files as necessary:\n\n* ``.s2i/action_hooks/pre_build``\n* ``.s2i/action_hooks/build_env``\n* ``.s2i/action_hooks/build``\n* ``.s2i/action_hooks/deploy_env``\n* ``.s2i/action_hooks/deploy``\n* ``.s2i/action_hooks/run``\n\nThe ``pre_build``, ``build``, ``deploy`` and ``run`` scripts must all be\nexecutable. This is necessary due to a bug in Docker support for some file\nsystems. It is not possible for the ``assemble`` script to do ``chmod +x``\non scripts prior to running. If you forget the implementation of actions\nhooks provided will warn you.\n\nThe ``pre_build``, ``build``, ``deploy`` and ``run`` scripts would normally\nbe shell scripts, but could technically be any executable program you can\nrun to do what you need. If using a shell script, it is recommended to\nset::\n\n set -eo pipefail\n\nso that the scripts will fail fast, with an error propagated back up to the\n``assemble`` or ``run`` script. You can print out messages from these\nscripts if necessary to help debugging.\n\nThe ``build_env`` and ``deploy_env`` scripts must be shell scripts. They do\nnot need to be executable nor have a ``#!`` line. They will be executed\ninline to the ``assemble`` and ``run`` scripts, being interpreted as a\n``bash`` script.\n\nThese ``build_env`` and ``deploy_env`` scripts can be used to set any\nenvironment variables you need to set. It is not necessary to export\nvariables as any variables set in the scripts will be automatically\nexported. Being evaluated as a shell script, you can include shell logic or\nuse inline parameter substitution. You can thus do things like::\n\n LOGLEVEL=${LOGLEVEL:-1}\n\nJust keep in mind that if including complicated logic that requires\ntemporary variables, that they will be automatically exported. You may wish\nto use shell functions and bash local variables to restrict what is\nexported to whatever is set at global scope.\n\nYou should not print any messages from ``deploy_env`` as that will be\nexecuted for any shell session and the output may interfere with the result\nwhen running one off commands using ``powershift image exec``.\n\nIn the case of the ``pre_build`` action hook, be aware that unlike in V2,\nthe application source code will not have been copied into place at that\npoint. If this script needs to reference any files which are provided with\nthe application source code, it will need to access them from the\n``/tmp/src`` directory where they are held before being moved into the\ncorrect location by the original ``assemble`` script.\n\nRunning Action Commands\n-----------------------\n\nIn addition to the action hooks which will be executed during the build and\ndeployment of the application, you can also provide additional action hooks\nwhich can be executed with specific commands. These are:\n\n* ``verify`` - Commands to verify an image. Would be run from\n ``postCommit`` action of a build configuration to test an image before it\n is used in a deployment.\n\n* ``ready`` - Commands to test whether the application is ready to accept\n requests. Would be run from a readiness health check of a deployment\n configuration.\n\n* ``alive`` - Commands to test whether the application is still running\n okay. Would be run from a liveness health check of a deployment\n configuration.\n\n* ``setup`` - Commands to initialize any data for an application, including\n perhaps setting up a database. Would be run manually, or if guarded by\n a check against being run multiple times, could be run from a ``deploy``\n action hook script.\n\n* ``migrate`` - Commands to perform any data migration, including perhaps\n updating a database. Would be run from a mid lifecycle hook if using the\n recreate deployment strategy, or from a ``deploy`` action hook script if\n it is not a scaled application and not using rolling deployments.\n\nAn appropriate executable script with corresponding names would be added to\nthe ``.s2i/action_hooks`` directory. It would be run with the corresponding\nsub command of ``powershift image``. In all cases the ``deploy_env`` script\nwill be sourced to ensure that the same environment variables as would be\nused for the deployment of the application are also used for these.\n\nThe benefit of using these action hooks triggered by a command, is that\nonly the unchanging action command need be listed in build or deployment\nconfigurations if required. This makes it possible to make changes to what\nis run from the hook script and you do not need to ensure you update the\nbuild or deployment configuration in sync with the changes to the\napplication source code.\n\nExecuting Cron Job Scripts\n--------------------------\n\nUnder OpenShift V2, in addition to the action hooks mechanism, it was also\npossible to provide sets of scripts to be executed at regular intervals by\n``cron`` running in the OpenShift environment.\n\nThis script doesn't provide a replacement for ``cron``, but does provide\na helper command for executing a set of scripts under a specified\ncategory, such as 'hourly'. This command could be run in a distinct\ncontainer to the running application from an OpenShift *CronJob*, or by a\ndaemon process running in the application container which implements\ncron like functionality.\n\nThere is no restriction on the category names for the job scripts, but\nas a starting point it is suggested you use the same names supported under\nOpenShift V2. For each category you want to use, create a sub directory\nunder ``.s2i/jobs``. For example:\n\n* ``.s2i/jobs/minutely``\n* ``.s2i/jobs/hourly``\n* ``.s2i/jobs/daily``\n* ``.s2i/jobs/weekly``\n* ``.s2i/jobs/monthly``\n\nIn that sub directory, add your jobs script and make the script file\nexecutable. For example, if you were running a web application which used\nDjango, you might create the cron job script::\n\n .s2i/jobs/hourly/clearsessions\n\nwhere the contents of the executable script file contains::\n\n #!/bin/bash\n\n set -eo pipefail\n\n python manage.py clearsessions\n\nThe command used with the OpenShift *CronJob* set to be executed hourly\nwould then be::\n\n powershift image jobs hourly\n\nInteractive Shell and Commands\n------------------------------\n\nIf needing to start an interactive shell with the same environment as the\ndeployed application, use ``powershift image shell``. To execute a one off\ncommand with the same environment, use ``powershift image exec`` and supply\nthe program and options as arguments.", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/getwarped/powershift-image", "keywords": "openshift kubernetes", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "powershift-image", "package_url": "https://pypi.org/project/powershift-image/", "platform": "", "project_url": "https://pypi.org/project/powershift-image/", "project_urls": { "Homepage": "https://github.com/getwarped/powershift-image" }, "release_url": "https://pypi.org/project/powershift-image/1.4.2/", "requires_dist": null, "requires_python": "", "summary": "PowerShift command plugin for working in S2I images.", "version": "1.4.2" }, "last_serial": 3646489, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "313ad4bb04535cb342c051dc30a4d029", "sha256": "75f9be84c9317996ef0fe65e9a85decabf5ae2413ea674b00df9e572ec8ea63e" }, "downloads": -1, "filename": "powershift-image-1.0.0.tar.gz", "has_sig": false, "md5_digest": "313ad4bb04535cb342c051dc30a4d029", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4761, "upload_time": "2017-06-27T04:02:05", "url": "https://files.pythonhosted.org/packages/a9/76/d9ae4e00a8e850e56214a5da93172796a3f97630687f5dda74713fe1ddda/powershift-image-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "9d256e5f2e0882770e433ef0d17951dd", "sha256": "f123554bfa25c02dc06f9b695d49a67fc5d3e8a1f8447e8b7503374755516271" }, "downloads": -1, "filename": "powershift-image-1.0.1.tar.gz", "has_sig": false, "md5_digest": "9d256e5f2e0882770e433ef0d17951dd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4766, "upload_time": "2017-06-27T04:14:17", "url": "https://files.pythonhosted.org/packages/5f/d7/cf0f273411c5e21ef680959131757351e2440aee2d3487005c4fc94d983f/powershift-image-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "716483b2647677549803ed52e7cb0df5", "sha256": "e264b93c1c44c09e1799e64c61402f7d472d53acf990f7a66788b343662d223f" }, "downloads": -1, "filename": "powershift-image-1.0.2.tar.gz", "has_sig": false, "md5_digest": "716483b2647677549803ed52e7cb0df5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4771, "upload_time": "2017-06-27T04:24:38", "url": "https://files.pythonhosted.org/packages/c2/7c/9774834ead2af0f9af480b54af241fbdc85e1adf194146994aca08dd5a17/powershift-image-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "1730bcfa1001fa422e778760bad749e1", "sha256": "93ec053def26d1b2c48ced38cc603d2d2fbd9fa9c4be7e1a952868504def2f46" }, "downloads": -1, "filename": "powershift-image-1.0.3.tar.gz", "has_sig": false, "md5_digest": "1730bcfa1001fa422e778760bad749e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4781, "upload_time": "2017-06-27T04:38:49", "url": "https://files.pythonhosted.org/packages/d4/07/2589b38b3486707af618a67f81a11a83526485836f0a665ef7e601423df2/powershift-image-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "a7da568f8397789da53780181c489837", "sha256": "e316775b26fd0a8c97a133a6d617643800f38ad49d7b88fef03f0e8b0711c213" }, "downloads": -1, "filename": "powershift-image-1.0.4.tar.gz", "has_sig": false, "md5_digest": "a7da568f8397789da53780181c489837", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4965, "upload_time": "2017-06-27T12:39:13", "url": "https://files.pythonhosted.org/packages/89/a2/ec529c10f5fd5eda6c1aeeb2bdcbf9088fdd73f9c63eb2b0cb1e54a42ca1/powershift-image-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "4f29dada4015a10a90d378f625e1e70e", "sha256": "a931399a9307ab49f5f5f1c432168affd3d91c8097aa2d84e7cef7ebe798bf82" }, "downloads": -1, "filename": "powershift-image-1.0.5.tar.gz", "has_sig": false, "md5_digest": "4f29dada4015a10a90d378f625e1e70e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4968, "upload_time": "2017-06-27T12:50:14", "url": "https://files.pythonhosted.org/packages/a7/fb/a691a52777dce01a7c3ed42cf264301518dba77adffe12c1f91f568b5a76/powershift-image-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "6c475aa5531617803f6609825ac92e49", "sha256": "de9469fb9b708a5e428dd523ae80992d2db99d48fbcaf546145f8299ddfa15ba" }, "downloads": -1, "filename": "powershift-image-1.0.6.tar.gz", "has_sig": false, "md5_digest": "6c475aa5531617803f6609825ac92e49", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4972, "upload_time": "2017-06-27T12:59:37", "url": "https://files.pythonhosted.org/packages/14/e7/924bbbfc067877828b9436efb9f102d64c11f019582b281aa178ca0e2f71/powershift-image-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "27a57a8abf3ed7644867f0eaae98ad54", "sha256": "94642f0ae51295d5142fc337eaa942bdb47ae400ad43167148ca4f4ba3f72a2f" }, "downloads": -1, "filename": "powershift-image-1.0.7.tar.gz", "has_sig": false, "md5_digest": "27a57a8abf3ed7644867f0eaae98ad54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9062, "upload_time": "2017-07-04T10:38:24", "url": "https://files.pythonhosted.org/packages/f2/74/a6b2d4a678214ac01fe76cf7741b6d0bca4dedf65f2661b022f12be19ff6/powershift-image-1.0.7.tar.gz" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "cdc7313b6c39ee973c039ab82e8ec7e5", "sha256": "c5aca1497abbd21075f0619142383de2f61f36315494e875675832ce72bba207" }, "downloads": -1, "filename": "powershift-image-1.0.8.tar.gz", "has_sig": false, "md5_digest": "cdc7313b6c39ee973c039ab82e8ec7e5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9124, "upload_time": "2017-07-04T10:49:53", "url": "https://files.pythonhosted.org/packages/7f/14/933d3fa2eb05c27a30bcd82ebf633c46abee47534376695f82eb15402129/powershift-image-1.0.8.tar.gz" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "8742d9bdc9c04c8ea40835828691504d", "sha256": "ba45ebb2d726bcf4c49e8c0c4360e7842885c67e6e962bd218e4edd5f34cfe6c" }, "downloads": -1, "filename": "powershift-image-1.0.9.tar.gz", "has_sig": false, "md5_digest": "8742d9bdc9c04c8ea40835828691504d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9159, "upload_time": "2017-07-28T05:49:14", "url": "https://files.pythonhosted.org/packages/3c/ac/225183c81c6464da9f3348516bd4af71cfb672a1c7b34d8a7edafb6cd289/powershift-image-1.0.9.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "9d5ad664c87ac8549835fc6388ad7871", "sha256": "4524e7800f4b097455c8fccfa2789fd1cc22f9e891cd4b65359e461bd29ecea3" }, "downloads": -1, "filename": "powershift-image-1.1.0.tar.gz", "has_sig": false, "md5_digest": "9d5ad664c87ac8549835fc6388ad7871", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9388, "upload_time": "2017-10-01T12:01:40", "url": "https://files.pythonhosted.org/packages/35/f5/19b36c0b3c1e6686decacbae3a936c258eb911a93893dc2cb6a5d36484a4/powershift-image-1.1.0.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "c4bce8e66707ec205f58097c929791d5", "sha256": "4333cd13790ec13a9ca628adb79d5eff9769044af02ddcb4290a44eeef8585db" }, "downloads": -1, "filename": "powershift-image-1.1.1.tar.gz", "has_sig": false, "md5_digest": "c4bce8e66707ec205f58097c929791d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9415, "upload_time": "2017-10-18T06:21:53", "url": "https://files.pythonhosted.org/packages/ad/8c/82db383119bdc0578af9c485bc9ad5543a3421684ca42fd1bb2ebc91f7f8/powershift-image-1.1.1.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "64aaadec0c2477c21267f1c5ac2a620c", "sha256": "0a107c63635324ca9d29f08da485861682b1047271278b5e913450ebf8174ab3" }, "downloads": -1, "filename": "powershift-image-1.2.0.tar.gz", "has_sig": false, "md5_digest": "64aaadec0c2477c21267f1c5ac2a620c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9762, "upload_time": "2017-10-25T01:07:31", "url": "https://files.pythonhosted.org/packages/97/d2/3f0a89869a0206b98304c3b98c42119c25be49ad5e636619dd02fbff0578/powershift-image-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "8e531d6c61d9df8be2b329d260320208", "sha256": "8ad4efc60961afef11cfde64ed6c4ae5736e258378c7649989b9cbf9fe977ba1" }, "downloads": -1, "filename": "powershift-image-1.2.1.tar.gz", "has_sig": false, "md5_digest": "8e531d6c61d9df8be2b329d260320208", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9771, "upload_time": "2017-10-25T01:12:29", "url": "https://files.pythonhosted.org/packages/eb/4a/663dca5ee4d91a5a98c08e0ca8fae1861c506aac70df7460fc1461381117/powershift-image-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "28143c7f168400c49a22bafca395fe99", "sha256": "4cc21738d31cce43fe385cd5077f2b288b5c57020a4f49cb97c48c0f8080fc86" }, "downloads": -1, "filename": "powershift-image-1.2.2.tar.gz", "has_sig": false, "md5_digest": "28143c7f168400c49a22bafca395fe99", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9790, "upload_time": "2017-10-25T01:21:50", "url": "https://files.pythonhosted.org/packages/d2/fe/e85da70fd4fbc0287a01ff71e10c5d37578c41e860fabfd562b0396d9c33/powershift-image-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "0a2076d8d89faa3a10333ee56bac7007", "sha256": "f129cd8fb1927ba24c2aa7e3777bf4009eacd87b89d7b6dc36082d45f710f49f" }, "downloads": -1, "filename": "powershift-image-1.2.3.tar.gz", "has_sig": false, "md5_digest": "0a2076d8d89faa3a10333ee56bac7007", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10413, "upload_time": "2017-10-25T01:47:56", "url": "https://files.pythonhosted.org/packages/9f/ef/e7ef3b4a2f13d0cec099dc1d7df48b6a577d2bccb08c7e8ac15b2ea3df94/powershift-image-1.2.3.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "deef91f675fb9ebdb81eb34d425e4cdb", "sha256": "312b1c7548f4bada291a8f4832b56d38e3873905ea5c123e4f4a1c58d6573737" }, "downloads": -1, "filename": "powershift-image-1.3.0.tar.gz", "has_sig": false, "md5_digest": "deef91f675fb9ebdb81eb34d425e4cdb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10581, "upload_time": "2017-11-19T04:12:31", "url": "https://files.pythonhosted.org/packages/db/68/49bbe2d5dcbc15abfc5e5fcdca85d94effaf30d022bdba4617adafe33b9b/powershift-image-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "d95dee71d060fa000624260010853978", "sha256": "72c12b51a13640c09dbbfb77b3494aac6d63e92634eb400c49f8e4749f00b8ab" }, "downloads": -1, "filename": "powershift-image-1.4.0.tar.gz", "has_sig": false, "md5_digest": "d95dee71d060fa000624260010853978", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10689, "upload_time": "2017-11-27T11:28:00", "url": "https://files.pythonhosted.org/packages/71/a6/cc01568e90622c58d227cd531c445dd7112ed564ff257a57b688acf119f0/powershift-image-1.4.0.tar.gz" } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "bb5be31f60e3ddd52e9e2aecce8658f2", "sha256": "ad02654c4124a20da0d0a3d5dfe029f355d0c350ba401b62ef6f1f6998a81397" }, "downloads": -1, "filename": "powershift-image-1.4.1.tar.gz", "has_sig": false, "md5_digest": "bb5be31f60e3ddd52e9e2aecce8658f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11934, "upload_time": "2018-01-31T07:54:51", "url": "https://files.pythonhosted.org/packages/a9/32/9fafcaba4d5d8b5b7e640d225e75c006a3bafcef49ed75777d729ae6f96b/powershift-image-1.4.1.tar.gz" } ], "1.4.2": [ { "comment_text": "", "digests": { "md5": "14212fd0a0f191a01c92936b41e374b5", "sha256": "e76a1bfebc948e71846f706c836fd0a76773fa73baa8d3a3939e004bbdd4097e" }, "downloads": -1, "filename": "powershift-image-1.4.2.tar.gz", "has_sig": false, "md5_digest": "14212fd0a0f191a01c92936b41e374b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11935, "upload_time": "2018-03-07T04:09:05", "url": "https://files.pythonhosted.org/packages/32/e0/04cc8d1d5658f3082626b986d5c7f7fe899d8adbed558352b80635480600/powershift-image-1.4.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "14212fd0a0f191a01c92936b41e374b5", "sha256": "e76a1bfebc948e71846f706c836fd0a76773fa73baa8d3a3939e004bbdd4097e" }, "downloads": -1, "filename": "powershift-image-1.4.2.tar.gz", "has_sig": false, "md5_digest": "14212fd0a0f191a01c92936b41e374b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11935, "upload_time": "2018-03-07T04:09:05", "url": "https://files.pythonhosted.org/packages/32/e0/04cc8d1d5658f3082626b986d5c7f7fe899d8adbed558352b80635480600/powershift-image-1.4.2.tar.gz" } ] }