{ "info": { "author": "SciJava team", "author_email": "ctrueden@wisc.edu", "bugtrack_url": null, "classifiers": [], "description": "[![build status](https://github.com/scijava/jgo/actions/workflows/build.yml/badge.svg)](https://github.com/scijava/jgo/actions/workflows/build.yml)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\n# jgo: painless Java component execution\n\n![](jgo.png)\n\n## Summary\n\n[Maven](https://maven.apache.org/) is a great tool. It manages dependencies so\nthat Java projects become reusable \"building blocks\" in a robust way, like\n`pip` for Python, `npm` for JavaScript, `gem` for Ruby, `cpan` for Perl, etc.\nAnd the [Maven Central repository](https://search.maven.org/) contains a\ntremendous wealth of code, ripe for reuse in your own projects.\n\nUnfortunately, Maven provides no easy way to actually __launch code__ from the\nbeautifully managed dependencies stored so lovingly into `~/.m2/repository`.\n\nThis project fills that gap: `jgo` launches Java code. You do not need to\ndownload or install any JARs; you just specify an \"endpoint\" consisting of a\n[Maven artifact](https://stackoverflow.com/a/2487511/1207769) identifier, plus\na main class if needed/desired, and `jgo` uses Maven to obtain and run it.\n\nTo do this, `jgo` builds the local environment on demand, caching it into a\nsubfolder of `~/.jgo`, so that the endpoint's particular dependencies are\navailable in one place.\n\n## Installation\n\nThe `jgo` project began life as a shell script, but was later translated into\nPython, so that tools such as [scyjava](https://github.com/scijava/scyjava)\ncould leverage its environment-building capabilities.\n\nAs such, there are now two implementations from which to choose!\nEach has pros and cons.\n\n### Prerequisites\n\n`jgo` uses `mvn` and `java` for the heavy lifting.\nThe shell script version needs some common utilities (e.g., `cat`).\nIf you are missing anything, the script will tell you.\n\n### The shell script\n\nThe `jgo.sh` shell script requires a POSIX-friendly system. It is known to\nwork on Linux, macOS, [Cygwin](https://www.cygwin.com/), Microsoft's\n[Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install),\nand Git BASH from the [Git for Windows](https://git-for-windows.github.io/) project.\n\n
Installing the shell script\n\nJust clone this repo and symlink `jgo.sh` into your favorite `bin` directory.\n\nFor example, assuming `~/bin` is on your PATH:\n\n```shell\ncd\ngit clone https://github.com/scijava/jgo\ncd bin\nln -s ../jgo/jgo.sh jgo\njgo --help\n```\n\n
\n\n### The Python module\n\nThe Python version of `jgo` offers a `jgo` console script, as\nwell as a `jgo` module for programmatically creating endpoints.\n\n
Installing with pip\n\n```shell\npip install jgo\n```\n\n
\n
Installing with conda\n\n```shell\nconda install -c conda-forge jgo\n```\n\n
\n
Installing from source\n\n```shell\ngit clone https://github.com/scijava/jgo\ncd jgo\n\n# install globally (not recommended unless using a virtual environment)\npip install .\n\n# install into ~/.local (see pip install --help for details)\npip install --user .\n\n# install into $PREFIX\npip install --prefix=$PREFIX .\n\n# install globally in developer mode (hot linked to working copy folder)\npip install -e .\n```\n\n
\n\n## Usage\n\n```\nUsage: jgo [-v] [-u] [-U] [-m] \n\n -v : verbose mode flag\n -u : update/regenerate cached environment\n -U : force update from remote Maven repositories (implies -u)\n -m : use endpoints for dependency management (see \"Pitfalls\" below)\n : any list of arguments to the JVM\n : the artifact(s) + main class to execute\n : any list of arguments to the main class\n\nThe endpoint should have one of the following formats:\n\n- groupId:artifactId\n- groupId:artifactId:version\n- groupId:artifactId:mainClass\n- groupId:artifactId:version:mainClass\n- groupId:artifactId:version:classifier:mainClass\n\nIf version is omitted, then RELEASE is used.\nIf mainClass is omitted, it is auto-detected.\nYou can also write part of a class beginning with an @ sign,\nand it will be auto-completed.\n\nMultiple artifacts can be concatenated with pluses,\nand all of them will be included on the classpath.\nHowever, you should not specify multiple main classes.\n```\n\n### Examples\n\n| Program | Command |\n|-----------------------------:|:------------------------------------------------------------------------------------|\n| Jython REPL | `jgo org.python:jython-standalone` |\n| JRuby eval | `echo \"puts 'Hello Ruby'\" \\| jgo org.jruby:jruby-complete:@jruby.Main` |\n| Groovy REPL | `jgo org.codehaus.groovy:groovy-groovysh:@shell.Main+commons-cli:commons-cli:1.3.1` |\n| SciJava REPL with JRuby | `jgo org.scijava:scijava-common:@ScriptREPL+org.scijava:scripting-jruby` |\n| SciJava REPL with Jython | `jgo org.scijava:scijava-common:@ScriptREPL+org.scijava:scripting-jython` |\n| SciJava REPL with Groovy | `jgo org.scijava:scijava-common:@ScriptREPL+org.scijava:scripting-groovy` |\n| SciJava REPL with Clojure | `jgo org.scijava:scijava-common:@ScriptREPL+org.scijava:scripting-clojure` |\n| SciJava REPL with JavaScript | `jgo org.scijava:scijava-common:@ScriptREPL+org.scijava:scripting-javascript` |\n\nNote the usage of the `+` syntax as needed to append elements to the classpath.\n\n### FAQ\n\n* __Is it fast?__\n Endpoints are synthesized in a local cache under `~/.jgo`.\n So invoking the same endpoint a second time is really quick.\n* __What does \"no installation\" mean?__\n Classpath elements are [hard-linked](https://en.wikipedia.org/wiki/Hard_link)\n into `~/.jgo` from `~/.m2/repository` rather than copied, so the `~/.jgo`\n folder has a tiny footprint even if you execute lots of different endpoints.\n* __What if an endpoint has a new version?__\n Pass the `-U` flag to `jgo` to rebuild the endpoint.\n Note that unlike `mvn`, though, `jgo` does not check for updates otherwise.\n\n### Configuration\n\nYou can configure the behavior of `jgo` using the `~/.jgorc` file.\n\n#### Repositories\n\nYou can define additional remote Maven repositories,\nfrom which artifacts will be retrieved. E.g.:\n\n```ini\n[repositories]\nscijava.public = https://maven.scijava.org/content/groups/public\n```\n\nIf you need more control over where artifacts come from\u2014for example, if you\nwant to use your own remote Maven repository as a mirror of Maven Central\u2014you\ncan do it using Maven's usual `~/.m2/settings.xml`; see [Using Mirrors for\nRepositories](https://maven.apache.org/guides/mini/guide-mirror-settings.html).\n\n#### Shortcuts\n\nYou can define shortcuts for launching commonly used programs:\n\n```ini\n[shortcuts]\nrepl = imagej:org.scijava.script.ScriptREPL\nimagej = net.imagej:imagej\nfiji = sc.fiji:fiji:LATEST\nscifio = io.scif:scifio-cli\n```\n\nShortcuts are substituted verbatim from the beginning of the endpoint,\nsingle-pass in the order they are defined. So e.g. now you can run:\n```shell\njgo repl\n```\nNote that with the `repl` shortcut above, the main class\n(`org.scijava.script.ScriptREPL`) comes from a _different_ artifact than\nthe toplevel artifact (`net.imagej:imagej`). This is intentional, so that\nall of [ImageJ](https://imagej.net/), including all of the various SciJava\n`scripting-` plugins, is included in the classpath of the REPL.\n\n#### Settings\n\nThere are a few configurable settings:\n\n```ini\n[settings]\nm2Repo = /path/to/.m2Repo (default ~/.m2/repository)\ncacheDir = /path/to/.jgo (default ~/.jgo)\nlinks = soft (options: hard, soft, none; default hard)\n```\nNote that the `jgo` cache dir can also be set via the `JGO_CACHE_DIR` environment\nvariable when using **Python** `jgo`. The precedence of reading the cache dir, from\nhighest to lowest:\n - `JGO_CACHE_DIR` environment variable\n - `cacheDir` in `settings` sections in `~/.jgorc`\n - default to `~/.jgo`\n\n### Pitfalls\n\n#### Dependency management\n\nMaven has a feature whereby a project can override the versions of transitive\n(a.k.a. inherited) dependencies, via a `` configuration.\nThe problem is: a library may then believe it depends on components at\nparticular versions as defined by its ``, but downstream\nprojects which depend on that library will resolve to different versions.\nSee [this SO thread](https://stackoverflow.com/q/45041888/1207769) and\n[this gist](https://gist.github.com/ctrueden/d058330c8a3687317806ce8cc18332c3)\nfor full details.\n\nTo work around this issue, you can pass `-m` to jgo, which\ncauses it to add all endpoints to the synthesized POM's\n`` section using\n[import scope](https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Importing_Dependencies).\nBy doing this, the versions of transitive dependencies used in the synthesized\nproject should more precisely match those of each endpoint itself\u2014although in\nthe case of multiple endpoints concatenated via the `+` operator with\nconflicting dependency management, the earlier endpoints will win because they\nwill be declared earlier in the POM. See also\n[issue #9](https://github.com/scijava/jgo/issues/9) in the jgo issue tracker.\n\n## Development\n\n### Code style\n\n`jgo` uses [`black`](https://github.com/psf/black) for its code style.\n\nAfter `pip install tox`, you can lint the code with:\n\n```shell\ntox -e lint\n```\n\n## Alternatives\n\n* [JBang](https://github.com/jbangdev/jbang)\n* [JPM4J](https://github.com/jpm4j) (discontinued)\n* [Mop](https://github.com/chirino/mop) (unmaintained)\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/scijava/jgo", "keywords": "", "license": "Public domain", "maintainer": "", "maintainer_email": "", "name": "jgo", "package_url": "https://pypi.org/project/jgo/", "platform": null, "project_url": "https://pypi.org/project/jgo/", "project_urls": { "Homepage": "https://github.com/scijava/jgo" }, "release_url": "https://pypi.org/project/jgo/1.0.4/", "requires_dist": [ "psutil" ], "requires_python": ">=3.6", "summary": "Launch Java code from Python and the CLI, installation-free.", "version": "1.0.4", "yanked": false, "yanked_reason": null }, "last_serial": 13764277, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "bb48f3a87f98b36de635d741eaba1276", "sha256": "af58189358467899e473b0bc4cd5ad6a7217313d3820f5a8a5659cd54e37712c" }, "downloads": -1, "filename": "jgo-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bb48f3a87f98b36de635d741eaba1276", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 11758, "upload_time": "2018-11-17T05:07:00", "upload_time_iso_8601": "2018-11-17T05:07:00.249248Z", "url": "https://files.pythonhosted.org/packages/6c/21/dbe2aed0821219183c6581bdea8e70d6908c2581b51f8576a7203b87288a/jgo-0.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f0a63d59ade3d21dda53fad6f97a78e3", "sha256": "880d880badc2b3ec88ed15f063be3fe12c83eec5c951b743b182b66d81977188" }, "downloads": -1, "filename": "jgo-0.1.0.tar.gz", "has_sig": false, "md5_digest": "f0a63d59ade3d21dda53fad6f97a78e3", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 15327, "upload_time": "2018-11-17T05:07:03", "upload_time_iso_8601": "2018-11-17T05:07:03.296054Z", "url": "https://files.pythonhosted.org/packages/53/79/ed76f1b53d64474e9b8cba96e6bbf547ed5ce39e2ff324a4d409112e95e3/jgo-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "36abe4e0d7361f48c206e2b65fc965e9", "sha256": "4b71151ce4c98b286280774867afebce09a33bb479ce3d81668f7865298edd43" }, "downloads": -1, "filename": "jgo-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "36abe4e0d7361f48c206e2b65fc965e9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 11995, "upload_time": "2018-11-27T17:46:10", "upload_time_iso_8601": "2018-11-27T17:46:10.383899Z", "url": "https://files.pythonhosted.org/packages/6e/2c/08febbd4221776bdad014478e0be5bcb4f7fe4db11a02dedad726534bd0d/jgo-0.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f7d204c2ed4d66c2944bc8debb274cc5", "sha256": "440d23946d5d91b9855b8329373a7b2b66d77231486cbb82542aed7177122a40" }, "downloads": -1, "filename": "jgo-0.2.0.tar.gz", "has_sig": false, "md5_digest": "f7d204c2ed4d66c2944bc8debb274cc5", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 15708, "upload_time": "2018-11-27T17:46:12", "upload_time_iso_8601": "2018-11-27T17:46:12.123707Z", "url": "https://files.pythonhosted.org/packages/fb/57/3bf6556915aaa6e0575c6ca420d0990ce7929735049a01a351554ad818a1/jgo-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "b140c0f861442d56090f23ef013b3eda", "sha256": "bffd3427666677cd6e98b37315333d307d9a348f212418d8feaf87c4abbfa707" }, "downloads": -1, "filename": "jgo-0.3.0.tar.gz", "has_sig": false, "md5_digest": "b140c0f861442d56090f23ef013b3eda", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 16268, "upload_time": "2019-01-16T17:39:24", "upload_time_iso_8601": "2019-01-16T17:39:24.086262Z", "url": "https://files.pythonhosted.org/packages/59/ac/4bf59049ac5eb20c9f82f9e620359da735f1cd6b094365cc88a098903e0d/jgo-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "25f702747a9f6001a7bde4bf596eec44", "sha256": "2a94536a47cfcf88f15becf3f71b4020df988d72e007eb9303b79342b6f6d00d" }, "downloads": -1, "filename": "jgo-0.4.0-py2-none-any.whl", "has_sig": false, "md5_digest": "25f702747a9f6001a7bde4bf596eec44", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=3", "size": 13832, "upload_time": "2019-06-11T14:52:43", "upload_time_iso_8601": "2019-06-11T14:52:43.082182Z", "url": "https://files.pythonhosted.org/packages/b5/1f/d6f57c8b3ba30247f9cf88a8c650fca7a5fdec8231f49ad03af2a251d7dc/jgo-0.4.0-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d247a49e201f45ec54a0eec88f656008", "sha256": "ac4e97b740da4e739db118355b8e4f53df2a3ab9f94350dc1c2e7c7e4fda544d" }, "downloads": -1, "filename": "jgo-0.4.0.tar.gz", "has_sig": false, "md5_digest": "d247a49e201f45ec54a0eec88f656008", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 17373, "upload_time": "2019-06-11T14:52:44", "upload_time_iso_8601": "2019-06-11T14:52:44.834102Z", "url": "https://files.pythonhosted.org/packages/98/98/2d0ead6ddf3eda5d9cea001f516ac64ddd096e16af0241285881a0da0e1b/jgo-0.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "285a6dbd6c2db4e021ec26365246d241", "sha256": "a8eb35610905f337a288db9763801b420a0e1ed1f123a2bddff78d51ad1499ac" }, "downloads": -1, "filename": "jgo-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "285a6dbd6c2db4e021ec26365246d241", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 13833, "upload_time": "2019-10-30T18:28:07", "upload_time_iso_8601": "2019-10-30T18:28:07.632404Z", "url": "https://files.pythonhosted.org/packages/80/39/4636af69b50e993c7023ab1845fde25db264aa8a35a6315976ad80ad04b8/jgo-0.5.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "eec320d13a14c8983648d234bcffe1ae", "sha256": "0fa63c9cf5f57010e0c150f94dda313e6139287c57dfa325e3af914965ee10ed" }, "downloads": -1, "filename": "jgo-0.5.0.tar.gz", "has_sig": false, "md5_digest": "eec320d13a14c8983648d234bcffe1ae", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 16761, "upload_time": "2019-10-30T18:28:09", "upload_time_iso_8601": "2019-10-30T18:28:09.026780Z", "url": "https://files.pythonhosted.org/packages/4f/64/41cace9c0aa04818bd7d17caba12c1d19dd192d5a25cbb3cb5dfeb79c469/jgo-0.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "2a2b7ee828246387538119b8e094cb49", "sha256": "9592a9396496abd660193f16553c300d5109b6df2322953aca9377bfa468fee4" }, "downloads": -1, "filename": "jgo-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2a2b7ee828246387538119b8e094cb49", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 13866, "upload_time": "2020-11-11T16:03:30", "upload_time_iso_8601": "2020-11-11T16:03:30.251839Z", "url": "https://files.pythonhosted.org/packages/8f/e0/d6a9511a83a25bd08c0322cefd0b0018a4558c2762486ca7160303fa28ba/jgo-1.0.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ed09bd6d440d8a5f1222945ecf31803a", "sha256": "2d7e64f96514ae10905f4434e054adb3d3786b6ee3773c10f297c8edf5dd4b5b" }, "downloads": -1, "filename": "jgo-1.0.0.tar.gz", "has_sig": false, "md5_digest": "ed09bd6d440d8a5f1222945ecf31803a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 16848, "upload_time": "2020-11-11T16:03:31", "upload_time_iso_8601": "2020-11-11T16:03:31.394676Z", "url": "https://files.pythonhosted.org/packages/b7/93/e09fcbf2355c50a752c8f3da1a056e51f2dba19c5fa3de7121332c00f181/jgo-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "0c8228d683030dcb47be68f12c033844", "sha256": "976c0f3f6b8d643f62617fb2d3698876937007a1d98011eca1df70b093267a97" }, "downloads": -1, "filename": "jgo-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0c8228d683030dcb47be68f12c033844", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 13886, "upload_time": "2021-05-04T18:30:43", "upload_time_iso_8601": "2021-05-04T18:30:43.122781Z", "url": "https://files.pythonhosted.org/packages/85/2e/e77e97e72dace41444443f3cb0640769e8d22723dd3f6c314fb4da0f316c/jgo-1.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d6bee207a9356cbe1930b18945c6e177", "sha256": "7631d1c25f1b66806e850e6155ea678845762012a13591d662eee8d2d88343b8" }, "downloads": -1, "filename": "jgo-1.0.1.tar.gz", "has_sig": false, "md5_digest": "d6bee207a9356cbe1930b18945c6e177", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 17279, "upload_time": "2021-05-04T18:30:44", "upload_time_iso_8601": "2021-05-04T18:30:44.700663Z", "url": "https://files.pythonhosted.org/packages/ce/38/5debccfcc4bb02f30683dddb5f71cb3a4666cc376e9ec1b4c52f11e770cf/jgo-1.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "013dae2729cb6c37e8b216097a15db9a", "sha256": "107a9d3c1587b87658605fa8e3d5457e754c77a948fb4acac1411585c8115a0b" }, "downloads": -1, "filename": "jgo-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "013dae2729cb6c37e8b216097a15db9a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 14508, "upload_time": "2021-08-03T17:46:48", "upload_time_iso_8601": "2021-08-03T17:46:48.719231Z", "url": "https://files.pythonhosted.org/packages/0f/44/a0da73e6aece942f6745b9fc5060e045404381313987ef42c8114f5ae95f/jgo-1.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9b4c74769fc15a23e2228a9d626ec16c", "sha256": "67761f77d44b9cfcc5e7078e8b4ff0ef4242a11db661a648fcc9ff52c96a64ae" }, "downloads": -1, "filename": "jgo-1.0.2.tar.gz", "has_sig": false, "md5_digest": "9b4c74769fc15a23e2228a9d626ec16c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 18200, "upload_time": "2021-08-03T17:46:50", "upload_time_iso_8601": "2021-08-03T17:46:50.014500Z", "url": "https://files.pythonhosted.org/packages/52/28/67f58ec92c8050a1762d0061c2a2811758386607f1c5a46865db90daf391/jgo-1.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "4c09e695cbb3fb9a10190cab2c52859f", "sha256": "ec8c432002284ebedc2e34bf0adeb4731a744080cea74630d81104b004322236" }, "downloads": -1, "filename": "jgo-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "4c09e695cbb3fb9a10190cab2c52859f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 14741, "upload_time": "2021-09-22T15:20:07", "upload_time_iso_8601": "2021-09-22T15:20:07.460675Z", "url": "https://files.pythonhosted.org/packages/a2/3f/26f0560e847797e55b0fe1b7cf6a27b26dca67e028678e4609f0a0784a9f/jgo-1.0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "6d5934f538b64e66ec9db4c03ec25ffd", "sha256": "bcd33b9ed1ea4981fcd9d4a62a95104594e01f0931ebf470bf7bec6be6d8026d" }, "downloads": -1, "filename": "jgo-1.0.3.tar.gz", "has_sig": false, "md5_digest": "6d5934f538b64e66ec9db4c03ec25ffd", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 18566, "upload_time": "2021-09-22T15:20:09", "upload_time_iso_8601": "2021-09-22T15:20:09.043207Z", "url": "https://files.pythonhosted.org/packages/77/fc/049e1a796062cebd9e09157e40ed64a5f5765d2356c8aa9869ebfd30e1d1/jgo-1.0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "6d2a8985aa91a0ed5554bc36244ffd0f", "sha256": "d79220e18d64013f4985ffe64046aa0574042d931ebd8ba4383ca5047e3a27c0" }, "downloads": -1, "filename": "jgo-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "6d2a8985aa91a0ed5554bc36244ffd0f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14545, "upload_time": "2022-05-09T23:11:49", "upload_time_iso_8601": "2022-05-09T23:11:49.874975Z", "url": "https://files.pythonhosted.org/packages/c6/82/711b22e7dfccf603823b09c327913fda9c572b79a71ba8694424e89efea6/jgo-1.0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e4773c0b73ea28803a48ee157051adad", "sha256": "d40bd0869e9fb303d06ac59b601a50361c7329b3ee27ccc8fc1c90c0b130023f" }, "downloads": -1, "filename": "jgo-1.0.4.tar.gz", "has_sig": false, "md5_digest": "e4773c0b73ea28803a48ee157051adad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 17420, "upload_time": "2022-05-09T23:11:51", "upload_time_iso_8601": "2022-05-09T23:11:51.074020Z", "url": "https://files.pythonhosted.org/packages/d1/2b/91988ddd2973b8c011c43ca1493158703e7543ce380a35ddd44e38b90eeb/jgo-1.0.4.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6d2a8985aa91a0ed5554bc36244ffd0f", "sha256": "d79220e18d64013f4985ffe64046aa0574042d931ebd8ba4383ca5047e3a27c0" }, "downloads": -1, "filename": "jgo-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "6d2a8985aa91a0ed5554bc36244ffd0f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14545, "upload_time": "2022-05-09T23:11:49", "upload_time_iso_8601": "2022-05-09T23:11:49.874975Z", "url": "https://files.pythonhosted.org/packages/c6/82/711b22e7dfccf603823b09c327913fda9c572b79a71ba8694424e89efea6/jgo-1.0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e4773c0b73ea28803a48ee157051adad", "sha256": "d40bd0869e9fb303d06ac59b601a50361c7329b3ee27ccc8fc1c90c0b130023f" }, "downloads": -1, "filename": "jgo-1.0.4.tar.gz", "has_sig": false, "md5_digest": "e4773c0b73ea28803a48ee157051adad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 17420, "upload_time": "2022-05-09T23:11:51", "upload_time_iso_8601": "2022-05-09T23:11:51.074020Z", "url": "https://files.pythonhosted.org/packages/d1/2b/91988ddd2973b8c011c43ca1493158703e7543ce380a35ddd44e38b90eeb/jgo-1.0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }