{
"info": {
"author": "Prasad Anjangi, Mandar Chitre, Chinmay Pendharkar, Manu Ignatius",
"author_email": "prasad@subnero.com, mandar@arl.nus.edu.sg, chinmay@subnero.com, manu@subnero.com",
"bugtrack_url": null,
"classifiers": [
"Development Status :: 5 - Production/Stable",
"Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6"
],
"description": "Python Gateway\n==============\n\n\nIntroduction\n------------\n\nThis Python package provides a `Gateway` class to interact with the fj\u00e5ge agents. The fj\u00e5ge agents reside in one or more containers that provide agent management, directory and messaging services. Various containers may run on the same node or on different nodes in a network. This Python `Gateway` class allows the external Python scripts to interact with fj\u00e5ge agents using an interface implemented in Python. The Python APIs use the package `fjagepy`.\n\nThe first step is to install the `fjagepy` package using::\n\n pip install fjagepy\n\nImport all the necessary symbols from `fjagepy` package::\n\n from fjagepy import Gateway, AgentID, Message, MessageClass, GenericMessage, Performative\n\nor just::\n\n from fjagepy import *\n\nImport message classes\n----------------------\n\nSince the Java/Groovy message classes are not directly available in Python, we use the `MessageClass` utility to dynamically create specified message classes. An example of such is shown::\n\n ShellExecReq = MessageClass('org.arl.fjage.shell.ShellExecReq')\n\nThe `ShellExecReq` class can now be used to instantiate new objects like::\n\n msg = ShellExecReq()\n\nThe fully qualified class name as a string must be provided as an argument to this method. The fully qualified class names that are already supported by fj\u00e5ge are documented `here `_.\n\nOpen a connection\n-----------------\n\nIf a fjage server is running, we can create a connection using `Gateway` class::\n\n gw = Gateway(hostname, port)\n\nwhere `hostname` and `port` is the IP address and the port number of the device on which the fj\u00e5ge server is running. The `gw` object is created which can be used to call the methods of `Gateway` class.\n\nSend and receive messages\n-------------------------\n\nWe have seen earlier that the agents interact with each other using messages. The python gateway can similarly send and receive messages to the agents running on containers running on diffeent machines. An example of request and response message are as shown below:\n\nRequest message::\n\n msg = Message()\n msg.recipient = abc\n gw.send(msg)\n\nwhere `abc` is the AgentID of the agent you are trying to send the message to.\n\nAnother alternative to send a message is following::\n\n msg = Message(recipient = abc)\n rsp = gw.request(msg, timeout)\n\nIn the above code snippet, a request method is used to send a message and receive the response back. Different responses that can be received are documented `here `_.\n\n`msg` is an instance of `Message` class and in the ablove example, the intended recipient is set to the AgentID `abc`. The constructed message `msg` is sent to the agents running on master container using `gw.send(msg)`.\n\nA simple example of executing a shell command from remote connection opened using Gateway class is as shown below::\n\n gw = Gateway(hostname, port)\n ShellExecReq = MessageClass('org.arl.fjage.shell.ShellExecReq')\n shell = gw.agentForService('org.arl.fjage.shell.Services.SHELL')\n req = ShellExecReq(recipient=shell, cmd = 'ps')\n rsp = gw.request(req, 1000)\n print(rsp)\n gw.close()\n\nIn the code above, we first open a connection to the fj\u00e5ge server. Next, we import the `ShellExecReq` message that we will require later. We want to send this message to an agent which supports the `SHELL` service (honoring the `ShellExecReq` messages). The `agentForService` method of the `Gateway` class allows us to look up that agent. Next, we construct the `ShellExecReq` message to request execution of a shell command (in this case `ps`). The `request` method then sends the message and waits for a response, which we then print and close the connection.\n\nGeneric messages\n----------------\n\nAs the use case of `GenericMessage` is already explained before, we will illustrate it's use using the Python gateway API::\n\n gw = Gateway(hostname, port)\n shell = gw.agentForService('org.arl.fjage.shell.Services.SHELL')\n gmsg = GenericMessage(recipient=shell, text='hello', data=np.random.randint(0,9,(100)))\n gw.send(gmsg)\n\nThe shell agent running on the server side will receive this generic message sent through gateway::\n\n rgmsg = receive(GenericMessage, 1000)\n println rgmsg.text\n println rgmsg.data\n\n\nPublish and subscribe\n---------------------\n\nWe know that there are times when we may want to publish a message without explicitly knowing who the recipients are. All agents subscribing to the topic that we publish on would then receive the published message. For example::\n\n gw.topic('abc')\n\nreturns an object representing the named topic. A user can subscribe to this topic using::\n\n gw.subscribe(gw.topic('abc'))\n\nBut if we are interested in receiving all the messages sent from a particular agent whose `AgentID` we know (for example `shell`), then::\n\n shell = gw.agentForService('org.arl.fjage.shell.Services.SHELL')\n gw.subscribe(shell)\n\nwill allow to receive the published messages by `shell` agent.\n\n\nClose a connection:\n-------------------\n\nIn order to close the connection to the fj\u00e5ge server, we can call the `close` method provided by the `Gateway` class::\n\n gw.close()\n\n\n",
"description_content_type": "",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/org-arl/fjage/tree/dev/src/main/python",
"keywords": "",
"license": "BSD (3-clause)",
"maintainer": "",
"maintainer_email": "",
"name": "fjagepy",
"package_url": "https://pypi.org/project/fjagepy/",
"platform": "",
"project_url": "https://pypi.org/project/fjagepy/",
"project_urls": {
"Homepage": "https://github.com/org-arl/fjage/tree/dev/src/main/python"
},
"release_url": "https://pypi.org/project/fjagepy/1.6.1/",
"requires_dist": [
"numpy (>=1.11)"
],
"requires_python": ">=3",
"summary": "Python Gateway",
"version": "1.6.1"
},
"last_serial": 5878577,
"releases": {
"1.4.1-b1": [
{
"comment_text": "",
"digests": {
"md5": "edd63fe88cd6394c3bd8a18a57030dbe",
"sha256": "a7a2dbd29389d308022a3b15a9e70852551aa9e8d3ab0e49d6f7cc4a76db5baa"
},
"downloads": -1,
"filename": "fjagepy-1.4.1b1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "edd63fe88cd6394c3bd8a18a57030dbe",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 9834,
"upload_time": "2017-12-05T10:25:24",
"url": "https://files.pythonhosted.org/packages/9b/02/155f5b6ad8879606cc21b44d0d184beaf9eee7ab3f1be06c66139eb16e28/fjagepy-1.4.1b1-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "932a9a88e418e41fe24e435e535b7938",
"sha256": "38455de2f9cc4d15b10fbd6a79058918789a17d81fa7addfb73bec1ddee642ed"
},
"downloads": -1,
"filename": "fjagepy-1.4.1-b1.tar.gz",
"has_sig": false,
"md5_digest": "932a9a88e418e41fe24e435e535b7938",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 7321,
"upload_time": "2017-12-05T10:25:25",
"url": "https://files.pythonhosted.org/packages/ad/66/a5dc00f34eb28f83bb40dcc552ee65f0a496aeafc67dabca37913735a6bd/fjagepy-1.4.1-b1.tar.gz"
}
],
"1.4.2b2": [
{
"comment_text": "",
"digests": {
"md5": "9caa5b5fef72e012ae6ff56b5e9e05e3",
"sha256": "014d3d6c15d4b86aa68f3ee18944ae52ccc6b7544be3a88a914633b0a5e586f2"
},
"downloads": -1,
"filename": "fjagepy-1.4.2b2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "9caa5b5fef72e012ae6ff56b5e9e05e3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 8563,
"upload_time": "2018-05-23T04:43:22",
"url": "https://files.pythonhosted.org/packages/1f/22/87ae2bba6c5ebe546a7f238032bae94079350f20f9bcc20b9eeff2997643/fjagepy-1.4.2b2-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "8529de2c241f8d00561e71d99cbaa5af",
"sha256": "87ac26ee1be3ebee5a0c23e2f504d97c4b1c78a2fbb754b68a79edef05cc4c9a"
},
"downloads": -1,
"filename": "fjagepy-1.4.2b2.tar.gz",
"has_sig": false,
"md5_digest": "8529de2c241f8d00561e71d99cbaa5af",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 7418,
"upload_time": "2018-05-23T04:43:23",
"url": "https://files.pythonhosted.org/packages/ef/eb/7f659f92a9f39e609e361e48422161d548d34d0bca9318b420ccf0239dc1/fjagepy-1.4.2b2.tar.gz"
}
],
"1.4.2b3": [
{
"comment_text": "",
"digests": {
"md5": "a44adaf5c347cde38456868dfceab62d",
"sha256": "7b90c83ab5506b5e61befb8c797a139c3401360ea071bb4011466af2511428f6"
},
"downloads": -1,
"filename": "fjagepy-1.4.2b3.tar.gz",
"has_sig": false,
"md5_digest": "a44adaf5c347cde38456868dfceab62d",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 7444,
"upload_time": "2018-06-24T15:29:38",
"url": "https://files.pythonhosted.org/packages/52/ec/61c571cfdeb416f8a8bf4851c662b2d3c8139636fe77299efe5b7ddc8ee0/fjagepy-1.4.2b3.tar.gz"
}
],
"1.4.2b4": [
{
"comment_text": "",
"digests": {
"md5": "4844582a79f80cf57cf1540000196bae",
"sha256": "77abb01ad5bc400219333dbcda16c10e39f6225a68b741cd06678e1c13b412af"
},
"downloads": -1,
"filename": "fjagepy-1.4.2b4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4844582a79f80cf57cf1540000196bae",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 8941,
"upload_time": "2018-09-25T07:05:44",
"url": "https://files.pythonhosted.org/packages/17/8b/2042db25c73eeb5aa06ab9828258ba6c6e82a254af5e0f3146516a363026/fjagepy-1.4.2b4-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "5524841eb9f6a19e6a1dc0cf267d79c5",
"sha256": "dc6143b8d1df599a76e01de56ecef459a0dabbd400df85a450b02b1db769ec42"
},
"downloads": -1,
"filename": "fjagepy-1.4.2b4.tar.gz",
"has_sig": false,
"md5_digest": "5524841eb9f6a19e6a1dc0cf267d79c5",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 7751,
"upload_time": "2018-09-25T07:05:46",
"url": "https://files.pythonhosted.org/packages/fc/78/2ae822296e515682bbd1cea2f088e0ed9ea48900be07a8bd73fac5282bfe/fjagepy-1.4.2b4.tar.gz"
}
],
"1.4.2b5": [
{
"comment_text": "",
"digests": {
"md5": "3bc7c774dcbd0f02253e90712a5983e2",
"sha256": "3e9a208fdf5b52ccd1beb3fb90265a0b5f5139c948004a2a86ae831f3fd20446"
},
"downloads": -1,
"filename": "fjagepy-1.4.2b5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3bc7c774dcbd0f02253e90712a5983e2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 8973,
"upload_time": "2018-10-01T19:17:24",
"url": "https://files.pythonhosted.org/packages/5f/1c/696e5e97458275cdcd82d54021156ce6d7f21e6ad6109d737d1bf87f2b31/fjagepy-1.4.2b5-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "cded9e7a34525220d7aa41784bf7d9d1",
"sha256": "b74188b468dfe396d87de0116b6e7dd584551db04ad8e5a961508f497b2d2764"
},
"downloads": -1,
"filename": "fjagepy-1.4.2b5.tar.gz",
"has_sig": false,
"md5_digest": "cded9e7a34525220d7aa41784bf7d9d1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 7779,
"upload_time": "2018-10-01T19:17:27",
"url": "https://files.pythonhosted.org/packages/40/a2/b4b9a5039b36cac053aa99135e55556f2f6e4599a389b1af63cd3c517c38/fjagepy-1.4.2b5.tar.gz"
}
],
"1.5": [
{
"comment_text": "",
"digests": {
"md5": "6910da9ad7743e3bc338369ffae76850",
"sha256": "c338e12d935287bbedb9c43ea960d5a060fe6cee29d80dd0a4e71721ef7a5e8a"
},
"downloads": -1,
"filename": "fjagepy-1.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "6910da9ad7743e3bc338369ffae76850",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 10143,
"upload_time": "2018-12-24T06:32:02",
"url": "https://files.pythonhosted.org/packages/c6/d0/476e9fe78411c2ee2a69429d04bd880f74c9c6f440b5d109b0af341f67bd/fjagepy-1.5-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "7d2836c39cd80b14e88c9d3a2d6e5c05",
"sha256": "7d2f87b78240b403a14a619f7d8a11ac0edf82f2472c6784d6a5a73913582501"
},
"downloads": -1,
"filename": "fjagepy-1.5.tar.gz",
"has_sig": false,
"md5_digest": "7d2836c39cd80b14e88c9d3a2d6e5c05",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 8782,
"upload_time": "2018-12-24T06:32:04",
"url": "https://files.pythonhosted.org/packages/78/6a/1c32dd4dd30c6c6ce8714b718dcf683889ed4d4c51604aa827042578980e/fjagepy-1.5.tar.gz"
}
],
"1.5.1": [
{
"comment_text": "",
"digests": {
"md5": "4506d3ca6eec14fb1913d2b893da5918",
"sha256": "7b1c50b8e11f37647b03f0f2e716e19cf8753b9c08b3baff29f40a37cb694ea4"
},
"downloads": -1,
"filename": "fjagepy-1.5.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4506d3ca6eec14fb1913d2b893da5918",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 4086,
"upload_time": "2018-12-24T08:16:27",
"url": "https://files.pythonhosted.org/packages/6d/11/0fd6a4208d6a31b6138c18ef594cd2b255fdef84bc6468b0b586d09332c7/fjagepy-1.5.1-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "49cb638dfa9f08ce5ef4051b472175f4",
"sha256": "45f8b6e51f649d9ee92e6bed81628d683a33ab2c54272ef67a8617cea1b2ed2b"
},
"downloads": -1,
"filename": "fjagepy-1.5.1.tar.gz",
"has_sig": false,
"md5_digest": "49cb638dfa9f08ce5ef4051b472175f4",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 3469,
"upload_time": "2018-12-24T08:16:29",
"url": "https://files.pythonhosted.org/packages/29/18/472979b35d5826928893f7277b324f0b92ed089b6071ec32492a4bd841fd/fjagepy-1.5.1.tar.gz"
}
],
"1.5.2": [
{
"comment_text": "",
"digests": {
"md5": "da88b18d3367db27957ce12606116029",
"sha256": "58c530eeafa729071041a37a4b003edb4f493c90a17bd28906993a208d5d729b"
},
"downloads": -1,
"filename": "fjagepy-1.5.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "da88b18d3367db27957ce12606116029",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 10175,
"upload_time": "2018-12-24T09:34:09",
"url": "https://files.pythonhosted.org/packages/a3/85/e554aa743b0f71e726f30cda5bf8e419efe853cc805145923f0b77e6c214/fjagepy-1.5.2-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "313f93f06cacdd1caa9ccd58a80d601a",
"sha256": "294a9784b3f57ab1a0daec05b0c7ddd6e8bb3485ebc925b9a958b8a0813e394d"
},
"downloads": -1,
"filename": "fjagepy-1.5.2.tar.gz",
"has_sig": false,
"md5_digest": "313f93f06cacdd1caa9ccd58a80d601a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 9212,
"upload_time": "2018-12-24T09:34:11",
"url": "https://files.pythonhosted.org/packages/58/5e/6b153ca8a8ac8f55705136c9a8493dea951c7789308d8303dcfea7a30af2/fjagepy-1.5.2.tar.gz"
}
],
"1.5.2a0": [
{
"comment_text": "",
"digests": {
"md5": "0d705baebbe76cc47898e92611689644",
"sha256": "4f302dd01040b6b129a92a75c8d6932a9e15e0cc42a63f8a89c85239e3fde56d"
},
"downloads": -1,
"filename": "fjagepy-1.5.2a0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0d705baebbe76cc47898e92611689644",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 10246,
"upload_time": "2019-02-14T11:44:50",
"url": "https://files.pythonhosted.org/packages/fb/00/b9d0c72f730090f3a8de3f5813d529de07cf40ca072349b09a7bc32a870c/fjagepy-1.5.2a0-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "af5f021601182277269e003e86e96239",
"sha256": "03a39adff6c1a5a8e6dc3d73fadc1b6927ab93fbf0d75f9031f785a4c0b196b1"
},
"downloads": -1,
"filename": "fjagepy-1.5.2a0.tar.gz",
"has_sig": false,
"md5_digest": "af5f021601182277269e003e86e96239",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 9263,
"upload_time": "2019-02-14T11:44:52",
"url": "https://files.pythonhosted.org/packages/97/d1/c36d587411cd25330ea2ee2c484ae27f456f9b7914d454b9b5d3261fb02e/fjagepy-1.5.2a0.tar.gz"
}
],
"1.5.2a1": [
{
"comment_text": "",
"digests": {
"md5": "49caaf131b015702b2ba8c373e7b5ab0",
"sha256": "c7aad2533490f80e981cdd48f72d8b966a068cdf9d13b0c04871a0b6af6461dc"
},
"downloads": -1,
"filename": "fjagepy-1.5.2a1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "49caaf131b015702b2ba8c373e7b5ab0",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 10211,
"upload_time": "2019-02-15T14:24:07",
"url": "https://files.pythonhosted.org/packages/b6/ac/64a82377ed1f66ea147ce806b737407e37c355bdeba690a3ed094a3a8aa5/fjagepy-1.5.2a1-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "82b858c648f41b9e061b9c956223dc4b",
"sha256": "e209ab55068f9b1994b3529f1ad0e8da9b27def43042bea8d2cd0d0aab331182"
},
"downloads": -1,
"filename": "fjagepy-1.5.2a1.tar.gz",
"has_sig": false,
"md5_digest": "82b858c648f41b9e061b9c956223dc4b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 9223,
"upload_time": "2019-02-15T14:24:09",
"url": "https://files.pythonhosted.org/packages/7a/24/3cbe4a79e3f574785df45da048674857c827a8542d76faa37d56bfbaf423/fjagepy-1.5.2a1.tar.gz"
}
],
"1.5.2a2": [
{
"comment_text": "",
"digests": {
"md5": "e412bf8692e074230df62cb569b874da",
"sha256": "2c245917236acffe4901ea59fd45858aad174082779d29d3dc45404510b2de9e"
},
"downloads": -1,
"filename": "fjagepy-1.5.2a2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e412bf8692e074230df62cb569b874da",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 10440,
"upload_time": "2019-02-21T05:15:08",
"url": "https://files.pythonhosted.org/packages/c2/11/32c3d6a18c7691c36cebe8b06d628b50246611498f4885146c15cac9b0a7/fjagepy-1.5.2a2-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "0fc0b69f97c3d319f9299acaa3762b51",
"sha256": "c1df9bc50d61107ad9201286299298878af1643dd5fd5a58599292b76ff680e9"
},
"downloads": -1,
"filename": "fjagepy-1.5.2a2.tar.gz",
"has_sig": false,
"md5_digest": "0fc0b69f97c3d319f9299acaa3762b51",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 9430,
"upload_time": "2019-02-21T05:15:09",
"url": "https://files.pythonhosted.org/packages/a4/5f/5bc0decc6f02a376c07975204b55078a1d3be2a36aa0850c23c0e08f8d49/fjagepy-1.5.2a2.tar.gz"
}
],
"1.6": [
{
"comment_text": "",
"digests": {
"md5": "3f5a4ab60ae2ab58771fea815ccec3b2",
"sha256": "9c91e135866cbfe306630e80ae008d18816115e74b7fd1918db47d459673ecc7"
},
"downloads": -1,
"filename": "fjagepy-1.6-py3-none-any.whl",
"has_sig": false,
"md5_digest": "3f5a4ab60ae2ab58771fea815ccec3b2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 10751,
"upload_time": "2019-09-09T11:13:43",
"url": "https://files.pythonhosted.org/packages/3d/38/159338ad451218652aec30ebd9513d6e26ea4679903c47df10def1457652/fjagepy-1.6-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "af46657e909c6d13062a9e2fea44906a",
"sha256": "d215df1926792e447f297f4f752bf8fa45770133c6b51a8f41c71c92d3a341bd"
},
"downloads": -1,
"filename": "fjagepy-1.6.tar.gz",
"has_sig": false,
"md5_digest": "af46657e909c6d13062a9e2fea44906a",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 11788,
"upload_time": "2019-09-09T11:13:45",
"url": "https://files.pythonhosted.org/packages/bc/fa/8f0802eb91dd28c97a263d3127b8b21b9d351c42c27905977128c115f343/fjagepy-1.6.tar.gz"
}
],
"1.6.1": [
{
"comment_text": "",
"digests": {
"md5": "c67fb5dba8f74bb8d046c89d83861e9b",
"sha256": "aad93611b6c3179467b2dca70b4b4cd91b543c11d3b642eef7128015d9ba0daf"
},
"downloads": -1,
"filename": "fjagepy-1.6.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c67fb5dba8f74bb8d046c89d83861e9b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 10787,
"upload_time": "2019-09-24T09:28:34",
"url": "https://files.pythonhosted.org/packages/93/ee/8e5bbae93118093150ca6de246241a2005788e1cedebb996a3c3386e812a/fjagepy-1.6.1-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d85b0735dde1749f8f05fd6fd18e22c3",
"sha256": "e93ab6d996d19e19df9c9c7f9474a20c84906b5986bf69e170542d446e2ee67b"
},
"downloads": -1,
"filename": "fjagepy-1.6.1.tar.gz",
"has_sig": false,
"md5_digest": "d85b0735dde1749f8f05fd6fd18e22c3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 11818,
"upload_time": "2019-09-24T09:28:37",
"url": "https://files.pythonhosted.org/packages/86/de/55d396c21ae2876f423c8e62bfed348f260b3a73efbf37b9382d10d37ee0/fjagepy-1.6.1.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "c67fb5dba8f74bb8d046c89d83861e9b",
"sha256": "aad93611b6c3179467b2dca70b4b4cd91b543c11d3b642eef7128015d9ba0daf"
},
"downloads": -1,
"filename": "fjagepy-1.6.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c67fb5dba8f74bb8d046c89d83861e9b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3",
"size": 10787,
"upload_time": "2019-09-24T09:28:34",
"url": "https://files.pythonhosted.org/packages/93/ee/8e5bbae93118093150ca6de246241a2005788e1cedebb996a3c3386e812a/fjagepy-1.6.1-py3-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "d85b0735dde1749f8f05fd6fd18e22c3",
"sha256": "e93ab6d996d19e19df9c9c7f9474a20c84906b5986bf69e170542d446e2ee67b"
},
"downloads": -1,
"filename": "fjagepy-1.6.1.tar.gz",
"has_sig": false,
"md5_digest": "d85b0735dde1749f8f05fd6fd18e22c3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3",
"size": 11818,
"upload_time": "2019-09-24T09:28:37",
"url": "https://files.pythonhosted.org/packages/86/de/55d396c21ae2876f423c8e62bfed348f260b3a73efbf37b9382d10d37ee0/fjagepy-1.6.1.tar.gz"
}
]
}