{ "info": { "author": "Johan Hidding", "author_email": "j.hididng@esciencecenter.nl", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: System :: Distributed Computing" ], "description": "Python interface to Xenon 3.0\n=============================\n|ZenodoBadge| |ReadTheDocsBadge| |Apache2License| |BuildStatus| |CodacyBadge|\n\nPython interface to the `Xenon middleware library, v. 3.0\n`__. Xenon provides a simple programming\ninterface to various pieces of software that can be used to access distributed\ncompute and storage resources.\n\nUnderneath it uses `GRPC `__, to connect to the `Xenon-GRPC\n`__ service.\nWe've taken care to mirror the original Java API in this Python module as much\nas possible.\n\nInstalling\n----------\nClone this repository, and do::\n\n pip install .\n\nThe code will appear on PyPI when it is ready for release.\n\nDocumentation\n-------------\nThe compiled documentation is hosted on `Read the Docs\n`__. This includes a quick-start\nguide.\n\nExample\n-------\n\n.. code-block:: python\n\n import xenon\n from pathlib import Path\n import os\n\n xenon.init()\n\n # create a new job scheduler, using SSH to localhost to submit new jobs.\n with xenon.Scheduler.create(\n adaptor='ssh', location='localhost') as scheduler:\n\n # make a new job description. The executable must already be present on\n # the target host.\n target = Path('.') / 'stdout.txt'\n desc = xenon.JobDescription(\n executable='hostname',\n stdout=str(target.resolve()))\n\n # submit a job\n job = scheduler.submit_batch_job(desc)\n status = scheduler.wait_until_done(job, 1000)\n\n # read the standard output of the job. We can do this directly because\n # we ran on localhost, otherwise, we need to transfer the file first.\n with open(target) as f:\n print(f.read())\n\nDevelopment\n-----------\nPyXenon ships with the `Xenon-GRPC` jar-file and command-line executable. If\nthese need upgrading, build them manually, following instructions at\n`Xenon-GRPC `__, and place the contents of the\n``build/install/xenon-grpc-shadow`` folder (``lib`` and ``bin``) here.\n\nTo generate the `GRPC` code, run ``scripts/protoc.sh`` from the project root.\n\nSteps for upgrading Xenon-GRPC\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nIn the ``xenon-grpc`` repository, run::\n\n ./gradlew shadowJar\n\nThe updated JAR file will be located in ``./build/libs/xenon-grpc-${version}.jar``.\nAlso make sure to copy updated binary files from ``./build/install/xenon-grpc/bin``.\nThe target files should go to the ``./bin`` and ``./lib`` folders in the ``pyxenon`` repository.\n\nUpdate ``./xenon/versions.py``.\n\nTo update the GRPC Python bindings, run the ``./scripts/protoc.sh`` script.\n\nTo update the Xenon adaptor documentation, first ``pip install --upgrade .``, then run ``python ./scripts/print_adaptor_docs.py > docs/adaptors.rst``.\n\nRun ``tox`` before pushing anything back to github.\n\nTesting\n-------\nUnit tests all run against the `local` scheduler and the `file` adaptor for\nfilesystems. To run them, just do::\n\n $ pytest ./tests\n\nFor faster testing it may be useful to start the ``xenon-grpc`` daemon\nmanually; start it in a separate terminal as it may give useful output for\ndebugging.\n\nFor integration testing, run the following docker container to test against\nremote slurm\n\n.. code-block:: bash\n\n docker run --detach --publish 10022:22 nlesc/xenon-slurm:17\n\nAn example of some code running against this container is in\n``examples/tutorial.py``.\n\nContributing\n------------\n\nContributions can be made using GitHub pull requests. To add a feature,\nfirst install the test requirements\n\n::\n\n pip install -U tox\n\nand then run\n\n::\n\n tox\n\nuntil all tests succeed. The command checks against flake8 code\nstandards and syntax errors on Python 3.5 and 3.6. Then commit, to make sure\nthe change didn't break any code. The pull request will be evaluated in\n`Travis `__.\n\n.. |DOI| image:: https://zenodo.org/badge/doi/10.5281/zenodo.60929.svg\n :target: http://dx.doi.org/10.5281/zenodo.60929\n.. |PyPi version| image:: https://img.shields.io/pypi/v/pyxenon.svg\n :target: https://pypi.python.org/pypi/pyxenon\n.. |Apache2License| image:: https://img.shields.io/github/license/NLeSC/pyxenon.svg?branch=master\n :target: https://raw.githubusercontent.com/NLeSC/pyxenon/master/LICENSE\n.. |PythonVersions| image:: https://img.shields.io/pypi/pyversions/pyxenon.svg\n.. |BuildStatus| image:: https://travis-ci.org/xenon-middleware/pyxenon.svg?branch=master\n :target: https://travis-ci.org/NLeSC/pyxenon\n.. |CodacyBadge| image:: https://api.codacy.com/project/badge/grade/35e155e3bb08459aa2c24622d5fdb0d3\n :target: https://www.codacy.com/app/NLeSC/pyxenon\n.. |ReadTheDocsBadge| image:: https://readthedocs.org/projects/pyxenon/badge/?version=latest\n :target: http://pyxenon.readthedocs.io/en/latest/?badge=latest\n :alt: Documentation Status\n.. |ZenodoBadge| image:: https://zenodo.org/badge/47132292.svg\n :target: https://zenodo.org/badge/latestdoi/47132292", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/NLeSC/pyxenon", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pyxenon", "package_url": "https://pypi.org/project/pyxenon/", "platform": "", "project_url": "https://pypi.org/project/pyxenon/", "project_urls": { "Homepage": "https://github.com/NLeSC/pyxenon" }, "release_url": "https://pypi.org/project/pyxenon/3.0.3/", "requires_dist": null, "requires_python": "", "summary": "Python wrapper for the Xenon API.", "version": "3.0.3" }, "last_serial": 5834854, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "3f9d568c58213bc1e264e0e1c583ccc0", "sha256": "94334e84a8be2c621f6f3c3582e873183a90061575a79e9da7cb73b7ec67447d" }, "downloads": -1, "filename": "pyxenon-0.1.0.tar.gz", "has_sig": false, "md5_digest": "3f9d568c58213bc1e264e0e1c583ccc0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13936347, "upload_time": "2015-12-08T13:22:00", "url": "https://files.pythonhosted.org/packages/93/c5/3dfbcdbc9c51076fb8ccec089bd12ef5d90a651cffd2b048d8f3c4b9a91b/pyxenon-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "d2a388177a4d0ce91623e1c83f178b51", "sha256": "ce5d95224e94362808237cbda8f4686d384fc4d82c6347f2a96240c2765ca4ae" }, "downloads": -1, "filename": "pyxenon-0.2.0.tar.gz", "has_sig": false, "md5_digest": "d2a388177a4d0ce91623e1c83f178b51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13939249, "upload_time": "2016-05-26T13:49:35", "url": "https://files.pythonhosted.org/packages/a2/4d/830546598da8b9148170488dfc09b0f387d89e9ee356b50c146904d0338f/pyxenon-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "b6d0f2c6527146158679ef72c9149538", "sha256": "82f5c4734a61e27429f94de7e3152f5a2543832caf92d7be2000d4e51736148f" }, "downloads": -1, "filename": "pyxenon-0.2.1-py2-none-any.whl", "has_sig": false, "md5_digest": "b6d0f2c6527146158679ef72c9149538", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13954754, "upload_time": "2016-05-26T14:42:38", "url": "https://files.pythonhosted.org/packages/fa/f9/6042bbf7abff96164280b1ac096eded8af7d9af3c50b6deaa7a55fc221f3/pyxenon-0.2.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "232397bb6b95a87c39d79b2d4f777c73", "sha256": "9cd11f9c0767f8e4e3dd4bc917a80c514c588ece74a4977eb70cfb164fd07672" }, "downloads": -1, "filename": "pyxenon-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "232397bb6b95a87c39d79b2d4f777c73", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13954754, "upload_time": "2016-05-26T14:42:49", "url": "https://files.pythonhosted.org/packages/66/18/79b10f09752d468c2019a8bffc45381eba8cb85b8dc5f5ab8b6f2638877a/pyxenon-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "232251557d8ebca7b43887bf2e94f612", "sha256": "c79891f676331801e63159c145e2b4e0170bdc1e02066715486160a72e2ba9c6" }, "downloads": -1, "filename": "pyxenon-0.2.1.tar.gz", "has_sig": false, "md5_digest": "232251557d8ebca7b43887bf2e94f612", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13940819, "upload_time": "2016-05-26T14:42:57", "url": "https://files.pythonhosted.org/packages/3c/13/4fb34195333ccbb23ae9e0bca0357f1b5f1fe59a2cb334d301e6ead15cf5/pyxenon-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "652d13453fe6fd2b94f12f97d6613c04", "sha256": "7ef3b52c576aa6cf8574506174bb84fd005b93774a181719114ab8ffa6b82f8a" }, "downloads": -1, "filename": "pyxenon-0.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "652d13453fe6fd2b94f12f97d6613c04", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 13955179, "upload_time": "2016-08-11T14:45:07", "url": "https://files.pythonhosted.org/packages/2e/30/cb8439b7fb16d2f9c23806264c8e20fc28eaeaaec39d564c0f0e31e7881b/pyxenon-0.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f21db10e02c463788613520629d9ad5c", "sha256": "8dbea64fd9e02c659cd5223f81b981188cbe11cbe67ee74ef46f3f4f67f700cc" }, "downloads": -1, "filename": "pyxenon-0.2.2.tar.gz", "has_sig": false, "md5_digest": "f21db10e02c463788613520629d9ad5c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13941462, "upload_time": "2016-08-11T14:29:23", "url": "https://files.pythonhosted.org/packages/3c/34/bc892ce61b9e247a2a2806bcf2879f61f8eaf12499607e0790780ea7da65/pyxenon-0.2.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "295c35c58237eb4d13be1880b33078b9", "sha256": "5534a4faaf6a3856989c33aa088c1a0174277d3f9ff3c582a86c11958c463ba1" }, "downloads": -1, "filename": "pyxenon-0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "295c35c58237eb4d13be1880b33078b9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 13961281, "upload_time": "2016-08-25T13:53:25", "url": "https://files.pythonhosted.org/packages/7a/39/06646416ef587a858674bf0c447df9d0fd31aec45f948ec9f28888172268/pyxenon-0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0cd0fccdb891c1e133e5dca1195d59fd", "sha256": "729fcf11aa855a587d76b6510db2658b77db4b18b03b0b3802f83f2b657bfaaf" }, "downloads": -1, "filename": "pyxenon-0.3.tar.gz", "has_sig": false, "md5_digest": "0cd0fccdb891c1e133e5dca1195d59fd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13943918, "upload_time": "2016-08-25T13:53:49", "url": "https://files.pythonhosted.org/packages/6e/68/7ea2837ad7a69ac932d0b3e0273de215e32778d4f4d1e8ab7ee463224e6c/pyxenon-0.3.tar.gz" } ], "2.2": [ { "comment_text": "", "digests": { "md5": "e27167db7fba95d1c229b21e95175462", "sha256": "bd0715929a60d21960d021ecacc905a81e9c61f751599a2f1dc2a71f205b8e19" }, "downloads": -1, "filename": "pyxenon-2.2.tar.gz", "has_sig": false, "md5_digest": "e27167db7fba95d1c229b21e95175462", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19623047, "upload_time": "2017-11-06T15:42:03", "url": "https://files.pythonhosted.org/packages/2a/fe/f101b2e69ee86a1d799726b196c4d61102e4e9375e34486dea4b76e0d6ad/pyxenon-2.2.tar.gz" } ], "2.2.1": [ { "comment_text": "", "digests": { "md5": "aaea62b4e1299ac3f07d75233920b4d4", "sha256": "bb4d8d987cf2e54c7928b0929b301f3f22df5748108f13ba1509c075148035cc" }, "downloads": -1, "filename": "pyxenon-2.2.1.tar.gz", "has_sig": false, "md5_digest": "aaea62b4e1299ac3f07d75233920b4d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20224827, "upload_time": "2017-11-29T15:51:50", "url": "https://files.pythonhosted.org/packages/16/c2/cdf1bab02a57727d8af20f87eb85ae214d91b1e56ab4334224b6c50087a7/pyxenon-2.2.1.tar.gz" } ], "2.2.2": [ { "comment_text": "", "digests": { "md5": "864980ac9243212b39ba092c108c5525", "sha256": "16e82a7579b9adef12dab0591b2a25d6678842b5d89d79a0980592207da0f14c" }, "downloads": -1, "filename": "pyxenon-2.2.2.tar.gz", "has_sig": false, "md5_digest": "864980ac9243212b39ba092c108c5525", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20225111, "upload_time": "2018-01-03T13:19:50", "url": "https://files.pythonhosted.org/packages/0a/ca/8452cb702509981c7d8fbb9f66a02d2296941c4d049eb5524e9b90cfc347/pyxenon-2.2.2.tar.gz" } ], "2.2.3": [ { "comment_text": "", "digests": { "md5": "05190538d957510a3f5acde29c8744b6", "sha256": "9a7ae23e1647770db84ff0ca73faf785428347ee82243e63095b9189486ceb58" }, "downloads": -1, "filename": "pyxenon-2.2.3.tar.gz", "has_sig": false, "md5_digest": "05190538d957510a3f5acde29c8744b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47263638, "upload_time": "2018-03-12T13:21:33", "url": "https://files.pythonhosted.org/packages/89/c9/21a3209fa2f3f332d44fa69ec0cd6778bc2c1bbd9e81bfda6e19911bd2f5/pyxenon-2.2.3.tar.gz" } ], "2.3.0": [ { "comment_text": "", "digests": { "md5": "65659c69ef3aad4d5e224e26274534fe", "sha256": "defa36bcd7ffaff902517e4f2bd22ddc23fd25491b8d2e04e4445d0c6f7a8a42" }, "downloads": -1, "filename": "pyxenon-2.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "65659c69ef3aad4d5e224e26274534fe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 47268674, "upload_time": "2019-04-04T11:31:44", "url": "https://files.pythonhosted.org/packages/24/91/1b64f2edabbc55ac25b0284a1a85d5f2eb8a8cd2fe719c5b95855c190e8c/pyxenon-2.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b335b14ae395a137848d23471593c644", "sha256": "a5502f712ce44fe9063da8ef5ee02cc0bfae8c41fddd47089d1d4277adb7614f" }, "downloads": -1, "filename": "pyxenon-2.3.0.tar.gz", "has_sig": false, "md5_digest": "b335b14ae395a137848d23471593c644", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47260095, "upload_time": "2019-04-04T11:31:58", "url": "https://files.pythonhosted.org/packages/d6/00/ad2cdfeb905502621f2dd2a95bd9cddedfa6f37f8a957866815939873ec5/pyxenon-2.3.0.tar.gz" } ], "2.3.1": [ { "comment_text": "", "digests": { "md5": "c21941864c4fd8fe6812cc14e68046d8", "sha256": "e6e8db699c494a583e65df775d66645e3721b5a91943219a84e6bb025afebf49" }, "downloads": -1, "filename": "pyxenon-2.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "c21941864c4fd8fe6812cc14e68046d8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 47268605, "upload_time": "2019-04-11T14:42:25", "url": "https://files.pythonhosted.org/packages/8f/be/83dbe8dccd021ebf5d963b329542d5b12397d162389609f54737dfa97cd7/pyxenon-2.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7384488472fb2dd2230f6ce6986d10d1", "sha256": "a180d6726315db1b40feeacd84205c579ae3a426c9695fabcb38e93e48997e6e" }, "downloads": -1, "filename": "pyxenon-2.3.1.tar.gz", "has_sig": false, "md5_digest": "7384488472fb2dd2230f6ce6986d10d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 47260045, "upload_time": "2019-04-11T14:42:33", "url": "https://files.pythonhosted.org/packages/20/f6/876e637f33753e07d238035dc055329a3aecb137953d2c0a016d3cc84cf9/pyxenon-2.3.1.tar.gz" } ], "3.0.1": [ { "comment_text": "", "digests": { "md5": "d3ad708e3cf545cb9f38ae8af76f0afd", "sha256": "6eed3a9d1bb27493bfc50b39fb434f031a09c20033256f2632101400b8054627" }, "downloads": -1, "filename": "pyxenon-3.0.1.tar.gz", "has_sig": false, "md5_digest": "d3ad708e3cf545cb9f38ae8af76f0afd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22199272, "upload_time": "2019-09-09T14:27:12", "url": "https://files.pythonhosted.org/packages/fd/04/172fa824b7437c7d9dcda569dedc8e1b1b727604f28e9eb42c23be8e3b40/pyxenon-3.0.1.tar.gz" } ], "3.0.2": [ { "comment_text": "", "digests": { "md5": "851737991cd2b3a254d28bf6056e8afd", "sha256": "9aa9bea57dc4eb59255398bc30dbc0e9d76e70b1dfa1bc94a8210d30e8610070" }, "downloads": -1, "filename": "pyxenon-3.0.2.tar.gz", "has_sig": false, "md5_digest": "851737991cd2b3a254d28bf6056e8afd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22191486, "upload_time": "2019-09-13T09:52:38", "url": "https://files.pythonhosted.org/packages/14/26/0039e3b7e50913f7e2f4c349d2dba1eb56715970b2b232e8ff67a5496bb7/pyxenon-3.0.2.tar.gz" } ], "3.0.3": [ { "comment_text": "", "digests": { "md5": "9a1a8cb24d35ee7664ba53b1cbcb51ad", "sha256": "6840771716974da68d69e5cc24e017698f8f9bcebcfaf3cb5da41555d5ec772b" }, "downloads": -1, "filename": "pyxenon-3.0.3.tar.gz", "has_sig": false, "md5_digest": "9a1a8cb24d35ee7664ba53b1cbcb51ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22193245, "upload_time": "2019-09-16T08:31:49", "url": "https://files.pythonhosted.org/packages/7f/cc/af5083868d6f0354a0a79ddabe60cb78e60d6024a31c6f1c3a526fe28212/pyxenon-3.0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9a1a8cb24d35ee7664ba53b1cbcb51ad", "sha256": "6840771716974da68d69e5cc24e017698f8f9bcebcfaf3cb5da41555d5ec772b" }, "downloads": -1, "filename": "pyxenon-3.0.3.tar.gz", "has_sig": false, "md5_digest": "9a1a8cb24d35ee7664ba53b1cbcb51ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22193245, "upload_time": "2019-09-16T08:31:49", "url": "https://files.pythonhosted.org/packages/7f/cc/af5083868d6f0354a0a79ddabe60cb78e60d6024a31c6f1c3a526fe28212/pyxenon-3.0.3.tar.gz" } ] }