{ "info": { "author": "Hans", "author_email": "contact.kamik423@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.7" ], "description": "\n\n\n![logo](https://raw.githubusercontent.com/Kamik423/superspy/master/readme_images/logo.svg?sanitize=true)\n\n**S**mall **U**ncomplicated **P**lugin **E**xtensible **R**eliable **S**hell in **PY**thon\n\n\n# About\n\n**`SUPERSPY`** is a implementation of a shell and programming language written completely in Python. It is meant as a replacement of the builtin `cmd` module which allows scripting and advanced flow control functions.\n\n```python\n[SUPERSPY DEMO] >>> i = 4 + 3\n[SUPERSPY DEMO] >>> spam 3\nSPAM\nSPAM\nSPAM\n[SUPERSPY DEMO] >>> while i {\n[SUPERSPY DEMO] >>> printnl i\n[SUPERSPY DEMO] >>> printnl \" to go: \"\n[SUPERSPY DEMO] >>> joke\n[SUPERSPY DEMO] >>> i = i - 1\n[SUPERSPY DEMO] >>> }\n7.0 to go: Wenn ist das Nunst\u00fcck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!\n6.0 to go: Wenn ist das Nunst\u00fcck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!\n5.0 to go: Wenn ist das Nunst\u00fcck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!\n4.0 to go: Wenn ist das Nunst\u00fcck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!\n3.0 to go: Wenn ist das Nunst\u00fcck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!\n2.0 to go: Wenn ist das Nunst\u00fcck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!\n1.0 to go: Wenn ist das Nunst\u00fcck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!\n```\n\n`joke` and `spam` here are funktions easily defined in Python code:\n\n```python\nfrom superspy import ast, language\n\n@language.register_function('joke', 0)\nclass Joke(ast.Function):\n funniest_joke_in_the_world = 'Wenn ist das Nunst\u00fcck git und Slotermeyer?'\\\n 'Ja! Beiherhund das Oder die Flipperwaldt gersput!'\n def execute(self):\n print(self.funniest_joke_in_the_world)\n\n@language.register_function('spam')\nclass Spam(ast.Function):\n def execute(self):\n for _ in range(int(self.argument.execute())):\n print('SPAM')\n```\n\nIt also allows for the execution of entire scripts:\n\n```python\nprintnl \"COMPUTE FACTORIAL OF: \"\nbase = getnum\nbase_backup = base\n\nfactorial = 1\nwhile base {\n factorial = factorial * base\n base = base - 1\n}\n\nprintnl base_backup\nprintnl \"! = \"\nprint factorial\n```\n\n# Getting started\n\nSuperspy is meant to, in true Python fashion, be very easy to use.\n\n## Prerequisites\n\nSuperspy was developed in Python 3.7. Older versions cannot be guaranteed to work.\n\nIf you get it working on an older version please let me know!\n\n## Installing\n\nSetup manually from this repository or just type\n\n```bash\npip3 install superspy\n```\n\n## Basic usage\n\nTo understand how to run a script from file check out the [file_factorial](examples/file_factorial.py) script and its corresponding [factorial script](examples/factorial_script.spy), that also illustrates basic language functionality.\n\nTo learn how to run an interactive shell check out the [shell_demo](examples/shell_demo.py) script, that is being exanded upon by the [plugin_demo](examples/plugin_demo.py) and its [example implementation of a plugin](examples/demo_plugins/demo_plugin.py).\n\n### Superspy Language\n\nSuperspy is primarily a shell language, however it uses braces.\nCommands can be separated by lines or semicolons.\nSuperspy supports **strings** and **numbers**, which are always stored as float.\n\n**Variables** can be used in a similar way to Python:\n\n```python\na = 5\nb = 2 * a\n```\n\nBasic **Arithmetic** and **Logic** is also supported, in (mostly) the correct order of operations (see [the Bugfixes section of the Roadmap](#Roadmap):\n\n```python\nb = 2 * a - 3 / 4\nc = a == 9.25\nd = a != 10\n```\n\nBasic **IO** is also supported:\n\n```python\nmy_num_from_input = getnum\nmy_str_from_input = getstr\nprintnl \"Your inputed number was\"\nprintnl my_num_from_input\nprintnl \" and your string was \"\nprint my_str_from_input\n```\n\nHere `printnl` means **Print** **N**o **L**line, since the normal `print` has a line break.\nAlso `dis` prints the entire token tree and should be used for debugging.\n\nHowever, one of the primary reasons for Superspy's existence is the **Flow Control**:\n\n```python\nwhile base != 0 {\n factorial = factorial * base\n base = base - 1\n}\nif factorial == 120 {\n print \"Your number was 5\"\n} else {\n print \"Your number was not 5\"\n}\n```\n\nFor further features, that are not mentioned in the (roadmap)[#Roadmap], like running scripts from a shell, please create an issue (or even a pull request)!\n\n### Python\n\nThe way a new Ast/Interpreter is created will get further simplified in the future.\n\nCurrently you have to create a `Language` object, because a custom language might be defined.\nThen a `CodeSource` object has to be defined to be created to feed that Ast lines. Those can for example come from a file, string, or shell. \nFinally an `Ast` object, that does all the parsing and interpreting has to be created and executed.\n\n```python\nfrom superspy import ast, code_source, language\n\n# Run file\nlang = language.SuperSpyLanguage()\nsource = code_source.FileSource(f'path/to/my/script.spy')\nmy_ast = ast.Ast(source, lang)\nexit_code = my_ast.complete_run()\n\n# Run shell\nlang = language.SuperSpyLanguage(['path/to/my/plugin/folder']) # Plugin folder can be left out\nsource = code_source.ShellSource()\nmy_ast = ast.Ast(source, lang)\nmy_ast.error_mode = ast.ErrorMode.PRINT\nexit_code = my_ast.complete_run(run_after_each_line=True)\n```\n\n## Advanced Usage\n\nThe `complete_run` method is an abstraction for something similar to this:\n\n```python\nmy_ast.build_token_list()\nmy_ast.guess_variables()\nmy_ast.build_token_tree()\nmy_ast.interpret()\nexit_code: int = my_ast.get_exit_code()\n```\n\nIt can obviously be executed manually in this order and then customized any way.\nEverything is open source and the source code is hopefully documented very clearly, so if there are any questions of how something is implemented by default you check out the source code.\n\nTo implement custom functions available inside the language specify a plugin search path with custom python files inside. Check out the [plugin_demo](examples/plugin_demo.py) example and its [example implementation of a plugin](examples/demo_plugins/demo_plugin.py).\n\n```python\nfrom superspy import language\n\n@language.register_function('my_function_name_inside_the_shell', number_of_arguments)\nclass MyFunction(ast.Function):\n def execute(self):\n # Run code\n```\n\n# Rationale\n\nThis module was created because I wanted scripting functionality inside the `cmd` module, that was not there. I have also been toying around with creating my own programming language for a few years and never got around to it. But most of all I needed a distraction during the exams this year.\n\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/Kamik423/superspy", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "superspy", "package_url": "https://pypi.org/project/superspy/", "platform": "", "project_url": "https://pypi.org/project/superspy/", "project_urls": { "Homepage": "https://github.com/Kamik423/superspy" }, "release_url": "https://pypi.org/project/superspy/0.3.14/", "requires_dist": [ "pluginbase" ], "requires_python": "", "summary": "Small Uncomplicated Plugin Extensible Reliable Shell in PYthon", "version": "0.3.14" }, "last_serial": 4129708, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "12c940db259ea384a0fd474b1b6195e5", "sha256": "a5a1cd8357735dd0fc0ed9d5100f69d6a97c461ef521a20bdf3cc069f8952a0e" }, "downloads": -1, "filename": "superspy-0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "12c940db259ea384a0fd474b1b6195e5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14495, "upload_time": "2018-07-26T17:49:08", "url": "https://files.pythonhosted.org/packages/c7/6d/7be6d8a4524846a7b8717568f2eecd6059fffe853e3e0cf2df9075bfa970/superspy-0.1-py2-none-any.whl" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "483df1ea1d3abd1892ee8acd8b8063c5", "sha256": "4d32513b871df4d30a320ff1cca4fecf1e58432438c68dd13d3b7f3515238791" }, "downloads": -1, "filename": "superspy-0.1.1.tar.gz", "has_sig": false, "md5_digest": "483df1ea1d3abd1892ee8acd8b8063c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19761, "upload_time": "2018-07-26T18:06:18", "url": "https://files.pythonhosted.org/packages/58/15/bfea1ffc3932946bb13b76d6524ba38a851174f74dcad56d431cb67ebe07/superspy-0.1.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "baafec5328d8e30c72430e5d44a8fbde", "sha256": "956333cc3179485c7ea87dd9c9dfff8894f64adbf9f32b0d9609d64b40bcad6d" }, "downloads": -1, "filename": "superspy-0.2.tar.gz", "has_sig": false, "md5_digest": "baafec5328d8e30c72430e5d44a8fbde", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19777, "upload_time": "2018-07-27T16:41:31", "url": "https://files.pythonhosted.org/packages/f6/82/b603be93b97c2b061ae6dc6e26d4eb232b2f406e8a6834ba064accb7ca72/superspy-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "b96ca1095ca3be24f9d70bba2ef1e4f5", "sha256": "75d379f733c8b1b9706238ea6109ee9ce045d372c451d1b80e2245539a7e51c6" }, "downloads": -1, "filename": "superspy-0.3.tar.gz", "has_sig": false, "md5_digest": "b96ca1095ca3be24f9d70bba2ef1e4f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20550, "upload_time": "2018-08-02T17:26:00", "url": "https://files.pythonhosted.org/packages/58/24/9f6ca4f90089dc12bd0dc8463c00bcd82a93b78262ddb46b8a883ac1cd60/superspy-0.3.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "a9bbd9a9982ab444277e715666b3f056", "sha256": "413b7a013da605e93e028e2d9f764ea48b293e2777df908a9db93e7af407cf07" }, "downloads": -1, "filename": "superspy-0.3.1.tar.gz", "has_sig": false, "md5_digest": "a9bbd9a9982ab444277e715666b3f056", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24539, "upload_time": "2018-08-02T17:31:12", "url": "https://files.pythonhosted.org/packages/8d/8d/a606c62b960eaf36674b2036b58f61cb6f76a9c4e2edcd36a6fed4f89c4a/superspy-0.3.1.tar.gz" } ], "0.3.10": [ { "comment_text": "", "digests": { "md5": "f4e9f79841b3d859d74842f999720bb3", "sha256": "e77c40b1d46eb95c31a56c309801bd9f929bac424cd47b44e3230751eaaaebcc" }, "downloads": -1, "filename": "superspy-0.3.10-py3-none-any.whl", "has_sig": false, "md5_digest": "f4e9f79841b3d859d74842f999720bb3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23810, "upload_time": "2018-08-02T18:09:56", "url": "https://files.pythonhosted.org/packages/c6/d8/87fe213f5459c0e8c1c3b34480d2e71796010ef6feb4081fd834df2a1c42/superspy-0.3.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2840e87c0dda075540bedaf0ca2c08b6", "sha256": "d886a2e3a3b0c3aba432e4925cc36d62be36cdeb991a50090497a7d06c223357" }, "downloads": -1, "filename": "superspy-0.3.10.tar.gz", "has_sig": false, "md5_digest": "2840e87c0dda075540bedaf0ca2c08b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23615, "upload_time": "2018-08-02T18:09:59", "url": "https://files.pythonhosted.org/packages/8a/c6/fcb19ad310bf6fe277c74865dc37d6ccc9030849599d58672f8e205b9ce7/superspy-0.3.10.tar.gz" } ], "0.3.11": [ { "comment_text": "", "digests": { "md5": "e680e9194210197952ecf6686d8a93f8", "sha256": "804411098e58cd88e891845f57f47a8247a40dfacb680824251850c50f5c61a0" }, "downloads": -1, "filename": "superspy-0.3.11-py3-none-any.whl", "has_sig": false, "md5_digest": "e680e9194210197952ecf6686d8a93f8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23810, "upload_time": "2018-08-02T18:11:05", "url": "https://files.pythonhosted.org/packages/83/43/2d502599cb34a1e19e8dce9f17033edce1c3cde445fd516dfb6dcbe6073a/superspy-0.3.11-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ff1dcda040adb34b57348f4a96565f13", "sha256": "e44896204aa66413ef0778796ef97c46139b45a81d02e5c77c5b9781e1f12b57" }, "downloads": -1, "filename": "superspy-0.3.11.tar.gz", "has_sig": false, "md5_digest": "ff1dcda040adb34b57348f4a96565f13", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 89987, "upload_time": "2018-08-02T18:11:09", "url": "https://files.pythonhosted.org/packages/c4/05/f2708a5f9f574e37f1636ad2c695ea9999c84ae264af50729ebcb2a34f2d/superspy-0.3.11.tar.gz" } ], "0.3.12": [ { "comment_text": "", "digests": { "md5": "9842c2bb5e5ce181721b4abc1238652e", "sha256": "f4bfc86b16e6195775f491e7f5930a824caa15cc2b8b6e16600f48cdf6f4b126" }, "downloads": -1, "filename": "superspy-0.3.12-py3-none-any.whl", "has_sig": false, "md5_digest": "9842c2bb5e5ce181721b4abc1238652e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23824, "upload_time": "2018-08-02T18:13:46", "url": "https://files.pythonhosted.org/packages/78/dd/0fecdf5d789081958dafb91f7f39c8edcbcc7f39b3ace041bbc4ebc87c69/superspy-0.3.12-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1948af73fd3cd7ac635d48c0b1c0db07", "sha256": "30b817efdc0821b9067c2885fa2091e8b1c4d6d2cff5bb7dceea0da39cc65258" }, "downloads": -1, "filename": "superspy-0.3.12.tar.gz", "has_sig": false, "md5_digest": "1948af73fd3cd7ac635d48c0b1c0db07", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90007, "upload_time": "2018-08-02T18:13:52", "url": "https://files.pythonhosted.org/packages/93/e7/8b39dff3ad8a3842cf45a2e3baa298745c57f9793b6d98bb28b927e4b44a/superspy-0.3.12.tar.gz" } ], "0.3.13": [ { "comment_text": "", "digests": { "md5": "4505eb343ab42220af69c7adfa3c5842", "sha256": "0f5e095d6f4dda11c8abe30fcc5e006d16293a8f260c72dcc686c26120a5f13e" }, "downloads": -1, "filename": "superspy-0.3.13-py3-none-any.whl", "has_sig": false, "md5_digest": "4505eb343ab42220af69c7adfa3c5842", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23844, "upload_time": "2018-08-02T18:15:22", "url": "https://files.pythonhosted.org/packages/9d/28/4146c56a7390862bf43793043d7689f008c00231d79490f6ef284f6d213a/superspy-0.3.13-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0076328c46523e7b092cd558a94525e6", "sha256": "ebbc515d22e644937c7c0f68e9f419bee482ee9f192c8e91eaf073c0755f8503" }, "downloads": -1, "filename": "superspy-0.3.13.tar.gz", "has_sig": false, "md5_digest": "0076328c46523e7b092cd558a94525e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90041, "upload_time": "2018-08-02T18:15:28", "url": "https://files.pythonhosted.org/packages/e1/85/74ca54fd532b1cb82ce789e81b561cafacf7bacb44d856f8f3a24df42f90/superspy-0.3.13.tar.gz" } ], "0.3.14": [ { "comment_text": "", "digests": { "md5": "2c242cccc212fdf79d97614f5527d38a", "sha256": "6c1efe44d1d7e8f32df3793c4ccb0b307c077df57eb55d478bbffd94b1df10de" }, "downloads": -1, "filename": "superspy-0.3.14-py3-none-any.whl", "has_sig": false, "md5_digest": "2c242cccc212fdf79d97614f5527d38a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23839, "upload_time": "2018-08-02T18:15:56", "url": "https://files.pythonhosted.org/packages/d8/87/5d22ed0d46c96570ef6b3a61b3b2af0ad85c2638bfd136c417bbe40ba13e/superspy-0.3.14-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6097242b9fbaabe35147c3d1cb77dfaa", "sha256": "906dbe3daa2d683823d4d6faba70b9bcbdaef0de64941b9b4e4589065f4ba38e" }, "downloads": -1, "filename": "superspy-0.3.14.tar.gz", "has_sig": false, "md5_digest": "6097242b9fbaabe35147c3d1cb77dfaa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90047, "upload_time": "2018-08-02T18:16:05", "url": "https://files.pythonhosted.org/packages/d6/2c/6bc5113b02a28b7118cffef7c3659f9b1b0f5d7b8b66f2d40504617c7a36/superspy-0.3.14.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "9f1f30d8d5e675233c94729986648cbb", "sha256": "56c51d2241647f15875af5973616e73e96a4ba67848fc176b1def48c0748131e" }, "downloads": -1, "filename": "superspy-0.3.2.tar.gz", "has_sig": false, "md5_digest": "9f1f30d8d5e675233c94729986648cbb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24518, "upload_time": "2018-08-02T17:36:46", "url": "https://files.pythonhosted.org/packages/b4/07/99f5d87e4199b8efd4987dce1adb1a389798d868212e49c0666c284e5e01/superspy-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "732b1f36f05f8927ad539e5fd3945e0c", "sha256": "dff946b716c06b9107d4beee45c44c97bba1157b1a52802ef4f4c589100baee6" }, "downloads": -1, "filename": "superspy-0.3.3.tar.gz", "has_sig": false, "md5_digest": "732b1f36f05f8927ad539e5fd3945e0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24459, "upload_time": "2018-08-02T17:42:12", "url": "https://files.pythonhosted.org/packages/9a/96/751695d0f32f9fdb5a17add2ec96a6e53634e1b00621b7f9d6fd8185cb67/superspy-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "5b6b03a067915f4549d4a2b97e0248b1", "sha256": "adea6d48dfeafb357895b789e82ee0ee7b8c807400fc814fce3207dd8d460a4c" }, "downloads": -1, "filename": "superspy-0.3.4.tar.gz", "has_sig": false, "md5_digest": "5b6b03a067915f4549d4a2b97e0248b1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23533, "upload_time": "2018-08-02T17:51:02", "url": "https://files.pythonhosted.org/packages/80/80/27d6fc6220ffd4388790c142b210fe4737d1eb6a870c38548d039013f68d/superspy-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "846e70d66d1a5bd96285d6548f28a8df", "sha256": "98ac7f62b5610ee19dabdfe625d2849a01583c0c79664f90b987145c7544aba8" }, "downloads": -1, "filename": "superspy-0.3.5.tar.gz", "has_sig": false, "md5_digest": "846e70d66d1a5bd96285d6548f28a8df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23638, "upload_time": "2018-08-02T17:53:43", "url": "https://files.pythonhosted.org/packages/37/21/7c54c709af9091581c9eb7c2fe9c56f44610996fc778630fe9280cdcb755/superspy-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "049da6faa5734ef4600e17198ed84103", "sha256": "8f38669fe65ea28a9892028a6ce0ebc2fabc30d63ed0fc1f3c6d873d9ff9b404" }, "downloads": -1, "filename": "superspy-0.3.6.tar.gz", "has_sig": false, "md5_digest": "049da6faa5734ef4600e17198ed84103", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23643, "upload_time": "2018-08-02T17:56:41", "url": "https://files.pythonhosted.org/packages/a4/db/ce18dc8901201a17ec641b74afc8c25e5554099a87d4628dd6fd7c6edacb/superspy-0.3.6.tar.gz" } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "c5d1dd560dd777abeb3bc62853bb4e78", "sha256": "fa01b9e6eaef7788f472833180017c6cff2c4e7ccf769117c8ce6957956ca4cc" }, "downloads": -1, "filename": "superspy-0.3.7.tar.gz", "has_sig": false, "md5_digest": "c5d1dd560dd777abeb3bc62853bb4e78", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23644, "upload_time": "2018-08-02T18:01:31", "url": "https://files.pythonhosted.org/packages/6f/6d/da72ed63b4088ba35621e77c4d5b3342874d1e609804c4de459c028899cd/superspy-0.3.7.tar.gz" } ], "0.3.8": [ { "comment_text": "", "digests": { "md5": "91f7c5f58da2d461b59dea8910b82644", "sha256": "659164bced9207511273d43e2918c3aa63b43168487c7d1cbaaba6fc455140e6" }, "downloads": -1, "filename": "superspy-0.3.8-py3-none-any.whl", "has_sig": false, "md5_digest": "91f7c5f58da2d461b59dea8910b82644", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23812, "upload_time": "2018-08-02T18:07:54", "url": "https://files.pythonhosted.org/packages/4f/5d/37fec18ea11e2e97f1b0a45d8a1bf8c7413ae23e70812c9c14939ed57ae7/superspy-0.3.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3fdae00c41447ee38e774c58b48df105", "sha256": "17724b971cf164df93f90b616fbaf17e68f425e0184b1f792f8ffdd985f4a6f3" }, "downloads": -1, "filename": "superspy-0.3.8.tar.gz", "has_sig": false, "md5_digest": "3fdae00c41447ee38e774c58b48df105", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23643, "upload_time": "2018-08-02T18:07:55", "url": "https://files.pythonhosted.org/packages/3a/20/7203c256bb0888d356832bf7ba981a73ae99c6f4e08c8c6727144c07573f/superspy-0.3.8.tar.gz" } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "4c2d8fe03271455984d396d3e3a6b720", "sha256": "96b04d50020f3743fb1459afd274199a592174f63dff355bbcf35883dff20019" }, "downloads": -1, "filename": "superspy-0.3.9-py3-none-any.whl", "has_sig": false, "md5_digest": "4c2d8fe03271455984d396d3e3a6b720", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23801, "upload_time": "2018-08-02T18:09:21", "url": "https://files.pythonhosted.org/packages/ea/4f/8647a4a4dc6da484b9bced3769c684f48c95bc2a5fcb0a23d7b3846e1503/superspy-0.3.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dfac1f28917ecc7262b55d7993f03eb4", "sha256": "f735c46a256d3c1c69f51a94d0d9d1a28054cf42772fb99e8d177385e03eb903" }, "downloads": -1, "filename": "superspy-0.3.9.tar.gz", "has_sig": false, "md5_digest": "dfac1f28917ecc7262b55d7993f03eb4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23615, "upload_time": "2018-08-02T18:09:22", "url": "https://files.pythonhosted.org/packages/63/58/b83c4e9e392bef412560dff0f878464a94615309b53f1a980e2c3ae6df6b/superspy-0.3.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2c242cccc212fdf79d97614f5527d38a", "sha256": "6c1efe44d1d7e8f32df3793c4ccb0b307c077df57eb55d478bbffd94b1df10de" }, "downloads": -1, "filename": "superspy-0.3.14-py3-none-any.whl", "has_sig": false, "md5_digest": "2c242cccc212fdf79d97614f5527d38a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23839, "upload_time": "2018-08-02T18:15:56", "url": "https://files.pythonhosted.org/packages/d8/87/5d22ed0d46c96570ef6b3a61b3b2af0ad85c2638bfd136c417bbe40ba13e/superspy-0.3.14-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6097242b9fbaabe35147c3d1cb77dfaa", "sha256": "906dbe3daa2d683823d4d6faba70b9bcbdaef0de64941b9b4e4589065f4ba38e" }, "downloads": -1, "filename": "superspy-0.3.14.tar.gz", "has_sig": false, "md5_digest": "6097242b9fbaabe35147c3d1cb77dfaa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 90047, "upload_time": "2018-08-02T18:16:05", "url": "https://files.pythonhosted.org/packages/d6/2c/6bc5113b02a28b7118cffef7c3659f9b1b0f5d7b8b66f2d40504617c7a36/superspy-0.3.14.tar.gz" } ] }