{ "info": { "author": "Daniel Tahara", "author_email": "dktahara@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8" ], "description": "K8s Jobs\n=========\n\n.. image:: https://badge.fury.io/py/k8s-jobs.svg\n :target: https://badge.fury.io/py/k8s-jobs\n.. image:: https://travis-ci.com/danieltahara/k8s-jobs.svg?token=cZTmQ2jMoLFe6Ve33X6M&branch=master\n\nK8s Jobs is a library for implementing an asynchronous job server on Kubernetes. It is\nintended to provide a simple framework for executing single-shot asynchronous jobs or\ncommands (unlike something like Celery that can have arbitrary fanout and nesting), as\nwell as a server implementation that can stand in as a replacement for AWS Batch and\ntrigger jobs on-command.\n\nKubernetes Job Management\n-------------------------\n\nThis project provides an abstraction around kubernetes APIs to allow you to dynamically\nspawn (templated) jobs and clean up after them when they have run.\n\nThe two abstractions of interest are the ``JobManager`` and ``JobManagerFactory``. The\nlatter provides a factory for the former and helps convert (kubernetes) configuration\ninto a working application.\n\nThe ``JobManager`` is responsible for creating (templated) jobs given a job definition\nname and template arguments. It is recommended that the jobs target a dedicated node\ninstance group so as not to contend with live application resources. It is further\nrecommended that you configure the `Cluster Autoscaler\n`_ on this\ninstance group to ensure you do not run out of capacity (even better would be something\nlike the `Escalator `_, a batch job-oriented\nautoscaler). This will most closely mirror the behavior of a service like AWS Batch,\nwhich automatically adjusts the number of nodes based on workload.\n\nThe ``JobManager`` is also responsible for cleaning up terminated (completed or failed)\njobs after some retention period. This is provided for version compatibility across K8s,\nand to avoid using a feature that is still in Alpha. For more details, see the `TTL\nController\n`_.\n\nLabeling and Annotations\n++++++++++++++++++++++++\n\nThe ``JobManager`` (and associated objects) makes use of `labels and annotations\n`_ in\norder to properly identify and manage jobs. Of note are the following:\n\nLabels:\n\n* ``app.kubernetes.io/managed-by``: A recommended kubernetes label, populated with the\n value of the ``JobSigner`` signature. This is used to logically identify jobs created\n by the ``JobManager`` of interest, rather than by third party applications or users.\n* ``job_definition_name``: Identifies the job definition on which the job was based\n (maps to a name in the manager config).\n\nAnnotations:\n\n* ``job_deletion_time_unix_sec``: If present, the earliest time at which the job can be\n deleted. It is only set after the job has reached a terminal state. This is meant to\n help implement baseline retention for resource management purposes, as well as to\n provide an avenue for users to mark and prevent the deletion of a job so that it can\n be inspected for debugging.\n\nExamples\n--------\n\nFlask Server\n++++++++++++\n\nThe server is a proof-of-concept implementation intended as a replacement for and\nextension to AWS Batch. It is a flask application housed completely under\n``examples/flask``. You do not need to use the server in order to take advantage of the\nprimitives on which it relies.\n\nThe server listens on a route for job creation requests, much in the same way AWS batch\nmight be implemented under the hood.\n\nKubernetes Resources\n++++++++++++++++++++\n\nThe Kubernetes resources under ``examples/k8s/`` provide the configuration needed for\ndeploying a server to Kubernetes. Specifically, it demonstrates how to configure jobs to\nbe run by the manager. It relies on ConfigMap volume mounts in order to load the\ntemplates into a consistent location. See the ``JobManagerFactory`` for the specific\nrequired structure.\n\nThere is a corresponding dockerfile at ``examples/Dockerfile`` that can be used with the\ntemplates. You can build it as follows:\n\n.. code::\n\n docker build -t flask-app -f examples/Dockerfile .\n\nQuickStart\n----------\n\nTo install dependencies:\n\n.. code:: bash\n\n poetry install\n\nTo run the sample server locally (make sure you have ``~/.kube/config`` configured):\n\n.. code:: bash\n\n JOB_SIGNATURE=foo JOB_NAMESPACE=default JOB_DEFINITIONS_CONFIG_PATH=path/to/conf python examples/flask/app.py\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/danieltahara/k8s-jobs", "keywords": "", "license": "Apache-2.0", "maintainer": "", "maintainer_email": "", "name": "k8s-jobs", "package_url": "https://pypi.org/project/k8s-jobs/", "platform": "", "project_url": "https://pypi.org/project/k8s-jobs/", "project_urls": { "Homepage": "https://github.com/danieltahara/k8s-jobs", "Repository": "https://github.com/danieltahara/k8s-jobs" }, "release_url": "https://pypi.org/project/k8s-jobs/0.2.0/", "requires_dist": [ "kubernetes (>=10.0,<11.0)", "jinja2 (>=2.10,<3.0)", "dataclasses (>=0.6.0,<0.7.0)" ], "requires_python": ">=3.6,<4", "summary": "Async Job Manager + AWS Batch Replacement for K8s", "version": "0.2.0", "yanked": false, "yanked_reason": null }, "last_serial": 7563179, "releases": { "0.1.1": [ { "comment_text": "", "digests": { "md5": "669950b57d47704d8115ecce978363e4", "sha256": "fe013c42544b36ff4084c2793fed2af1a8197beed275850569f71a3301d4948d" }, "downloads": -1, "filename": "k8s_jobs-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "669950b57d47704d8115ecce978363e4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<3.8", "size": 10103, "upload_time": "2019-09-24T04:59:21", "upload_time_iso_8601": "2019-09-24T04:59:21.346782Z", "url": "https://files.pythonhosted.org/packages/f4/1e/682e509bfa41ce06b72b8aa410c276a54087a532bfd7659599d299ca4879/k8s_jobs-0.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "6d15eab66110fef6f74221fec376bac0", "sha256": "a2b6fe2f6089bc6d18098019cb473b5070080db05599d711e50e749ef43ed121" }, "downloads": -1, "filename": "k8s-jobs-0.1.1.tar.gz", "has_sig": false, "md5_digest": "6d15eab66110fef6f74221fec376bac0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<3.8", "size": 10012, "upload_time": "2019-09-24T04:59:19", "upload_time_iso_8601": "2019-09-24T04:59:19.777495Z", "url": "https://files.pythonhosted.org/packages/40/31/a8f63a91a2a7826cbefe3f1268e9d759387b7bda19c9349dd7199a786b89/k8s-jobs-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.10": [ { "comment_text": "", "digests": { "md5": "f037e1c32565f6c25f327df27a974596", "sha256": "a8bfe580a3c9bbb83ce10edf1e70886b4f5c0f0c773acc1e32799db2c2496b61" }, "downloads": -1, "filename": "k8s_jobs-0.1.10-py3-none-any.whl", "has_sig": false, "md5_digest": "f037e1c32565f6c25f327df27a974596", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<3.8", "size": 12746, "upload_time": "2019-10-16T00:29:50", "upload_time_iso_8601": "2019-10-16T00:29:50.211146Z", "url": "https://files.pythonhosted.org/packages/89/56/93682e9bac42f8689f26e6100d3e2da2adc972db5602ae45f705f461d865/k8s_jobs-0.1.10-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9fc8f6abeec1ef69fc112e5faa240ff1", "sha256": "f54b9b2c743a8a32b986a433a45b3af4ec1c79485a0a59ae3947bfd0bb7555c9" }, "downloads": -1, "filename": "k8s-jobs-0.1.10.tar.gz", "has_sig": false, "md5_digest": "9fc8f6abeec1ef69fc112e5faa240ff1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<3.8", "size": 12959, "upload_time": "2019-10-16T00:29:48", "upload_time_iso_8601": "2019-10-16T00:29:48.356878Z", "url": "https://files.pythonhosted.org/packages/9b/81/9c5e4f600178596688cc1fdf2974877786b07cc73b07d40f165d66435bf9/k8s-jobs-0.1.10.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.11": [ { "comment_text": "", "digests": { "md5": "cf303d3954407b8e4deec3aa5651e217", "sha256": "29e03d115ecdef9cbdac75ed01957165ef0b3606ead62432266f6dbd40b69f4d" }, "downloads": -1, "filename": "k8s_jobs-0.1.11-py3-none-any.whl", "has_sig": false, "md5_digest": "cf303d3954407b8e4deec3aa5651e217", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<3.8", "size": 12795, "upload_time": "2019-10-25T19:27:48", "upload_time_iso_8601": "2019-10-25T19:27:48.098298Z", "url": "https://files.pythonhosted.org/packages/c2/2a/0666b4fc506b11f43f70593b82d1fcc9d1d2cdb3776e54a8623a25798e6a/k8s_jobs-0.1.11-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "bfeeaca3a67624bda3684393aaf3986f", "sha256": "a3e8bf5a07607b515bec3248a799a33672090fbba2bbe01aa0efb7fcd2adc945" }, "downloads": -1, "filename": "k8s-jobs-0.1.11.tar.gz", "has_sig": false, "md5_digest": "bfeeaca3a67624bda3684393aaf3986f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<3.8", "size": 13014, "upload_time": "2019-10-25T19:27:46", "upload_time_iso_8601": "2019-10-25T19:27:46.691726Z", "url": "https://files.pythonhosted.org/packages/3d/f0/f187f6b69cf22a19d8a80b7d81f08974e5aee4cbb7b372c45b8d06c7d561/k8s-jobs-0.1.11.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.12": [ { "comment_text": "", "digests": { "md5": "955087a26657a27f441e9c4f31549e1d", "sha256": "b970c6153d3698c5a876696525f73378a97cbe10efcbf9f5264d645e81d36233" }, "downloads": -1, "filename": "k8s_jobs-0.1.12-py3-none-any.whl", "has_sig": false, "md5_digest": "955087a26657a27f441e9c4f31549e1d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<3.8", "size": 12957, "upload_time": "2019-10-25T23:09:44", "upload_time_iso_8601": "2019-10-25T23:09:44.367132Z", "url": "https://files.pythonhosted.org/packages/67/28/245098da9f25d783b9fb5fe4be17b183b35319ad5215047952e3cf126b49/k8s_jobs-0.1.12-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "c774a2949b11d2b0b9a4a4d527b31137", "sha256": "1f5da3386a421dc92ee8738c165ef009d6fc5cf89ab8f60b8ab749add9e049a9" }, "downloads": -1, "filename": "k8s-jobs-0.1.12.tar.gz", "has_sig": false, "md5_digest": "c774a2949b11d2b0b9a4a4d527b31137", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<3.8", "size": 13249, "upload_time": "2019-10-25T23:09:42", "upload_time_iso_8601": "2019-10-25T23:09:42.813321Z", "url": "https://files.pythonhosted.org/packages/f7/c8/d8e9ad5920638b325c0443aa2ebd857029eb3836f13c1f519cbfd8c25472/k8s-jobs-0.1.12.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.13": [ { "comment_text": "", "digests": { "md5": "89d0bd31c7aa2b4e4552bc65f26065de", "sha256": "1ba18352a194b4d127dfbce891b5d011fb10c2cd5b021ce12ffcd15dba85dfcc" }, "downloads": -1, "filename": "k8s_jobs-0.1.13-py3-none-any.whl", "has_sig": false, "md5_digest": "89d0bd31c7aa2b4e4552bc65f26065de", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<3.8", "size": 12980, "upload_time": "2019-10-26T00:31:42", "upload_time_iso_8601": "2019-10-26T00:31:42.570738Z", "url": "https://files.pythonhosted.org/packages/86/36/5f542b7ce2126c13534b3173680bcd0234dcc250944ac347b8ab4d64dd15/k8s_jobs-0.1.13-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ecc7503576dbbae411d8d6621953fe43", "sha256": "46c080e6cc43c457aa517cbeaaaace294e67d3c9602afe40b11333217cf583ec" }, "downloads": -1, "filename": "k8s-jobs-0.1.13.tar.gz", "has_sig": false, "md5_digest": "ecc7503576dbbae411d8d6621953fe43", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<3.8", "size": 13273, "upload_time": "2019-10-26T00:31:40", "upload_time_iso_8601": "2019-10-26T00:31:40.909357Z", "url": "https://files.pythonhosted.org/packages/16/01/6eed160acb0ca2a81a19958e34574cefda00e0f474bb93e7dca7ab43960a/k8s-jobs-0.1.13.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "a400ade76d191ca6c3407329fc70620e", "sha256": "7e406f77c8ef25551cded44463539dc4c442fa5bd7a2a1a1889791fbb17c1cde" }, "downloads": -1, "filename": "k8s_jobs-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "a400ade76d191ca6c3407329fc70620e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<3.8", "size": 10231, "upload_time": "2019-10-01T01:56:38", "upload_time_iso_8601": "2019-10-01T01:56:38.073151Z", "url": "https://files.pythonhosted.org/packages/f6/ef/64e1d15cbedeb1aedf12152e58a67fbbe986e2d157ee751b07329d1f3c62/k8s_jobs-0.1.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7e757fbc40fccb9a174a9b5cb2c1fe4b", "sha256": "c52e525b1339bc288dcb2fe65d42b284485ef4f0e8319834160a0523a6dfe1c2" }, "downloads": -1, "filename": "k8s-jobs-0.1.2.tar.gz", "has_sig": false, "md5_digest": "7e757fbc40fccb9a174a9b5cb2c1fe4b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<3.8", "size": 10212, "upload_time": "2019-10-01T01:56:36", "upload_time_iso_8601": "2019-10-01T01:56:36.559938Z", "url": "https://files.pythonhosted.org/packages/82/88/b98a7beb98e3ec2244e80015bfbf7c5ca74e854bd8e57c2aa89d8317622b/k8s-jobs-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "8d9a4bd9cc6f40e39ade6f6d2b5689a2", "sha256": "d9b87d249f9bd68b08c53c35107c9d4494dec5ace0d12ea25e0de4f6c1856f57" }, "downloads": -1, "filename": "k8s_jobs-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "8d9a4bd9cc6f40e39ade6f6d2b5689a2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<3.8", "size": 10419, "upload_time": "2019-10-02T06:07:59", "upload_time_iso_8601": "2019-10-02T06:07:59.330820Z", "url": "https://files.pythonhosted.org/packages/70/01/0c94fbe8c9eb01d915cbe505165fd0bfe4f14d03e95641275fc0fda23c87/k8s_jobs-0.1.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7c1c556eb30d8078f05a09a1292c2694", "sha256": "f5fad028c0170873383602dfc4228b6cbe35abc7520768a01599c552bba2921d" }, "downloads": -1, "filename": "k8s-jobs-0.1.3.tar.gz", "has_sig": false, "md5_digest": "7c1c556eb30d8078f05a09a1292c2694", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<3.8", "size": 10442, "upload_time": "2019-10-02T06:07:57", "upload_time_iso_8601": "2019-10-02T06:07:57.606779Z", "url": "https://files.pythonhosted.org/packages/96/c5/d6d3d07ce268976abe98c8e4c14b4fb335a1c02776b04af69fc1e5acb89a/k8s-jobs-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "e304b91da70e0d4e9888916c8a6fafd6", "sha256": "50897e2a5fecf9fc37f109de9b5e9b3e34bfbf9bfb8bacdf07ba42145e934c53" }, "downloads": -1, "filename": "k8s_jobs-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "e304b91da70e0d4e9888916c8a6fafd6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<3.8", "size": 10422, "upload_time": "2019-10-03T04:32:02", "upload_time_iso_8601": "2019-10-03T04:32:02.464131Z", "url": "https://files.pythonhosted.org/packages/0d/e7/a468b0c33dd6b834662d8b29118220324b4d0379a35a8130cc327b65baa9/k8s_jobs-0.1.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "7339a97f66fbcdedae0ad37bac18a0ef", "sha256": "a0571d6bc52210cebb35cc7b13719a6e1bb7a136332263744d93227120e2d895" }, "downloads": -1, "filename": "k8s-jobs-0.1.4.tar.gz", "has_sig": false, "md5_digest": "7339a97f66fbcdedae0ad37bac18a0ef", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<3.8", "size": 10443, "upload_time": "2019-10-03T04:32:01", "upload_time_iso_8601": "2019-10-03T04:32:01.125626Z", "url": "https://files.pythonhosted.org/packages/09/19/aa8504c47bc7029b81ed5def1336f6df1cfd7e5c59f305d35e566237b964/k8s-jobs-0.1.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "67c4057990196cdfa88ca6e9a31c568a", "sha256": "b6ae53033080ada11a29a222771a5761c88429645d27020a0b7d65ce3d2535b9" }, "downloads": -1, "filename": "k8s_jobs-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "67c4057990196cdfa88ca6e9a31c568a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<3.8", "size": 10798, "upload_time": "2019-10-04T05:57:26", "upload_time_iso_8601": "2019-10-04T05:57:26.297490Z", "url": "https://files.pythonhosted.org/packages/6e/3b/58eb2de683e3089960c793b63be8219c3d673c0418b761ae95e19cbc108c/k8s_jobs-0.1.5-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5b286453bb36de7b73c14b90922a27ae", "sha256": "ce518c14783b87fe5eaedec2fd793401880f624aa77bec648b33aa9dcf0097ce" }, "downloads": -1, "filename": "k8s-jobs-0.1.5.tar.gz", "has_sig": false, "md5_digest": "5b286453bb36de7b73c14b90922a27ae", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<3.8", "size": 10813, "upload_time": "2019-10-04T05:57:25", "upload_time_iso_8601": "2019-10-04T05:57:25.003958Z", "url": "https://files.pythonhosted.org/packages/a0/8e/d2c98edcf3324dd86d1a361aa0530570c93d4c90fbf71c5e25eced46155c/k8s-jobs-0.1.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "aa72a8c9d0abd1774df4aa37466f9de4", "sha256": "9bb1ae67c3bcf1c9f1558f083814159aa72d76dbc79e7deaef28eaf82c6e515c" }, "downloads": -1, "filename": "k8s_jobs-0.1.6-py3-none-any.whl", "has_sig": false, "md5_digest": "aa72a8c9d0abd1774df4aa37466f9de4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<3.8", "size": 11954, "upload_time": "2019-10-06T20:43:32", "upload_time_iso_8601": "2019-10-06T20:43:32.152935Z", "url": "https://files.pythonhosted.org/packages/e3/29/c0fd2e9f06bc088a41c9f3922d25f2e11d3fc5bf817f2a5ebcdb74feb816/k8s_jobs-0.1.6-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "430c35441490905cbaf3b47fd83c65c4", "sha256": "46db1c1b4b497141bd2fe3c02c19215685d7620be38e035bfe073f05d697ecf2" }, "downloads": -1, "filename": "k8s-jobs-0.1.6.tar.gz", "has_sig": false, "md5_digest": "430c35441490905cbaf3b47fd83c65c4", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<3.8", "size": 12370, "upload_time": "2019-10-06T20:43:30", "upload_time_iso_8601": "2019-10-06T20:43:30.941523Z", "url": "https://files.pythonhosted.org/packages/b5/8e/406766b5eb34d0f483b8415dbe5d0b434d3c6b277bded9239011f28ed25e/k8s-jobs-0.1.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "c85462c584588b7fcea2a490be9cbfc5", "sha256": "929541ab8031cc0bd65d0bac8ade428c6c66ea1e287b9dc422727d0650c4cba2" }, "downloads": -1, "filename": "k8s_jobs-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "c85462c584588b7fcea2a490be9cbfc5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<3.8", "size": 12292, "upload_time": "2019-10-06T21:27:15", "upload_time_iso_8601": "2019-10-06T21:27:15.590272Z", "url": "https://files.pythonhosted.org/packages/b8/f3/a34e7cdaa0b7b3be098712217ad7e4a1033248bd954cca4e467868797f0f/k8s_jobs-0.1.7-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ffe3c0f8a1c07b37e9e9f1ed4bb8e3a1", "sha256": "6f9c1933814534800bcc8b7cc8de65b90bdf0cb6e3f1e5570e1b11851f099b2b" }, "downloads": -1, "filename": "k8s-jobs-0.1.7.tar.gz", "has_sig": false, "md5_digest": "ffe3c0f8a1c07b37e9e9f1ed4bb8e3a1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<3.8", "size": 12512, "upload_time": "2019-10-06T21:27:14", "upload_time_iso_8601": "2019-10-06T21:27:14.066835Z", "url": "https://files.pythonhosted.org/packages/ff/22/291ae3a80b332df4138b9ca9eead1f9afe9b0c59d2ad8fb68799a08b2c09/k8s-jobs-0.1.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "9e945422febda9c5672fd57cc47b3b43", "sha256": "2e2cd634d010a5b487f9201397e1c73d058e8399baffd4d94a3d4d3d57d00a88" }, "downloads": -1, "filename": "k8s_jobs-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "9e945422febda9c5672fd57cc47b3b43", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<3.8", "size": 12294, "upload_time": "2019-10-08T21:56:53", "upload_time_iso_8601": "2019-10-08T21:56:53.594027Z", "url": "https://files.pythonhosted.org/packages/fe/c9/db428acb7c831ee6272dc125ca442ad2a96ee702f1f8ce41335835de0f31/k8s_jobs-0.1.8-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d4030652526ed4204ca3642ba75d14e0", "sha256": "3e334e15521df282dac79082ff01979a3f45d55c888fd0ccaff099e4d33319c6" }, "downloads": -1, "filename": "k8s-jobs-0.1.8.tar.gz", "has_sig": false, "md5_digest": "d4030652526ed4204ca3642ba75d14e0", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<3.8", "size": 12563, "upload_time": "2019-10-08T21:56:51", "upload_time_iso_8601": "2019-10-08T21:56:51.834046Z", "url": "https://files.pythonhosted.org/packages/1c/92/f13aee323af24283f4edd1d0c367d75f0741cca71658481758cbd0b7b422/k8s-jobs-0.1.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "70e65ff8c074d0e84ac8b0498cda07cd", "sha256": "6ee0292d7e41b308f798ea1afc83422e5e29975b6585d90d8ae4ebbf9bcf967d" }, "downloads": -1, "filename": "k8s_jobs-0.1.9-py3-none-any.whl", "has_sig": false, "md5_digest": "70e65ff8c074d0e84ac8b0498cda07cd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<3.8", "size": 12554, "upload_time": "2019-10-11T04:41:25", "upload_time_iso_8601": "2019-10-11T04:41:25.417403Z", "url": "https://files.pythonhosted.org/packages/c6/0e/562f127fcfe818035854c4ad4a087d44fd1bf7da39bc1522527210bfde40/k8s_jobs-0.1.9-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9345807eb1e80d48bcfebd523db6e7d7", "sha256": "2fb3eed113ffe882bc9d450f466044fb9d2716cad4566532c5d45e17509b0353" }, "downloads": -1, "filename": "k8s-jobs-0.1.9.tar.gz", "has_sig": false, "md5_digest": "9345807eb1e80d48bcfebd523db6e7d7", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<3.8", "size": 12811, "upload_time": "2019-10-11T04:41:23", "upload_time_iso_8601": "2019-10-11T04:41:23.557107Z", "url": "https://files.pythonhosted.org/packages/18/6a/abd0f42df4504b3da01d6e30b9ff10c080cca38d9f13611642cf12f322c6/k8s-jobs-0.1.9.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "1d083d63d9f8f6d3f8f5dec37f3d1c5c", "sha256": "978fb454bbbd7997f0619c9af94efe711f001b438e40700475609422074257a4" }, "downloads": -1, "filename": "k8s_jobs-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1d083d63d9f8f6d3f8f5dec37f3d1c5c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4", "size": 12972, "upload_time": "2020-06-25T19:47:54", "upload_time_iso_8601": "2020-06-25T19:47:54.373488Z", "url": "https://files.pythonhosted.org/packages/1c/7d/0d1923b05cbc2aa2f8600b47d7b5b549de033a8fdf95cb8acf1aec3481c5/k8s_jobs-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4ee03979cc84bbaaf6fc5eddf36feef6", "sha256": "d3af00df2291b4ab55434224bcfba89548e8897d34b49da58994465f2325bc63" }, "downloads": -1, "filename": "k8s-jobs-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4ee03979cc84bbaaf6fc5eddf36feef6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4", "size": 13328, "upload_time": "2020-06-25T19:47:52", "upload_time_iso_8601": "2020-06-25T19:47:52.805641Z", "url": "https://files.pythonhosted.org/packages/0b/0d/639c501cc2cbfb43be905bd33616dede72a8b3abce93c94de90161ff68f1/k8s-jobs-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1d083d63d9f8f6d3f8f5dec37f3d1c5c", "sha256": "978fb454bbbd7997f0619c9af94efe711f001b438e40700475609422074257a4" }, "downloads": -1, "filename": "k8s_jobs-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1d083d63d9f8f6d3f8f5dec37f3d1c5c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6,<4", "size": 12972, "upload_time": "2020-06-25T19:47:54", "upload_time_iso_8601": "2020-06-25T19:47:54.373488Z", "url": "https://files.pythonhosted.org/packages/1c/7d/0d1923b05cbc2aa2f8600b47d7b5b549de033a8fdf95cb8acf1aec3481c5/k8s_jobs-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "4ee03979cc84bbaaf6fc5eddf36feef6", "sha256": "d3af00df2291b4ab55434224bcfba89548e8897d34b49da58994465f2325bc63" }, "downloads": -1, "filename": "k8s-jobs-0.2.0.tar.gz", "has_sig": false, "md5_digest": "4ee03979cc84bbaaf6fc5eddf36feef6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6,<4", "size": 13328, "upload_time": "2020-06-25T19:47:52", "upload_time_iso_8601": "2020-06-25T19:47:52.805641Z", "url": "https://files.pythonhosted.org/packages/0b/0d/639c501cc2cbfb43be905bd33616dede72a8b3abce93c94de90161ff68f1/k8s-jobs-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }