{ "info": { "author": "namuyan", "author_email": "", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.6" ], "description": "Restricted Python Virtual Machine\n====\nRestricted Python Virtual Machine (R-PVM) implemented by pure python.\n\nspecification\n----\n* aim for complete safe sandbox\n* designed for Python3.6 bytecode\n* execute one by one\n* good for smart contract of crypto currency\n* **No warranty and unstable**\n\ncheck\n----\n* cannot use MAKE_FUNCTION op (lambda, comprehension and inner fnc)\n* cannot use async/await\n* limit to execute function\n* YOU must select safe function\n\nInstall\n----\n`pip3 install rpvm`\n\nHow to use\n----\n```python\nfrom rpvm.vm import VirtualMachine\nfrom RestrictedPython import safe_builtins, safe_globals\n \nsource = \"\"\"\na = 1\nb = 2\nc = a + b\n\"\"\"\ncode = compile(source, '', 'exec')\n \nb = safe_builtins.copy()\nl = dict()\ng = safe_globals.copy()\nvm = VirtualMachine(code, b, l, g)\n \nsteps = 0\nmax_steps = 500\nwhile not vm.finish and steps < max_steps:\n vm.exec()\n steps += 1\nprint(\"complete?\", vm.finish)\nprint(\"result\", vm.return_value)\nprint(\"c is\", l['c'])\n```\n\ntest\n----\n```bash\npython3 -m pytest tests\n```\n\nAuthor\n----\n[@namuyan_mine](https://twitter.com/namuyan_mine)", "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/namuyan/rpvm", "keywords": "", "license": "MIT Licence", "maintainer": "", "maintainer_email": "", "name": "rpvm", "package_url": "https://pypi.org/project/rpvm/", "platform": "", "project_url": "https://pypi.org/project/rpvm/", "project_urls": { "Homepage": "https://github.com/namuyan/rpvm" }, "release_url": "https://pypi.org/project/rpvm/0.1.0a1/", "requires_dist": null, "requires_python": "", "summary": "Restricted Python Virtual Machine", "version": "0.1.0a1" }, "last_serial": 5526187, "releases": { "0.1.0a1": [ { "comment_text": "", "digests": { "md5": "6b0c13687931450779997565f0a4ac8c", "sha256": "4d352685e38b9bca4355419a5238ecb07802aa0bb0593366fbf0ca442381ba15" }, "downloads": -1, "filename": "rpvm-0.1.0a1.tar.gz", "has_sig": false, "md5_digest": "6b0c13687931450779997565f0a4ac8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8020, "upload_time": "2019-07-13T06:18:34", "url": "https://files.pythonhosted.org/packages/58/8d/965446ed7bc26253a6bedf1148b3c207009c206975765e67f16a28f3349c/rpvm-0.1.0a1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6b0c13687931450779997565f0a4ac8c", "sha256": "4d352685e38b9bca4355419a5238ecb07802aa0bb0593366fbf0ca442381ba15" }, "downloads": -1, "filename": "rpvm-0.1.0a1.tar.gz", "has_sig": false, "md5_digest": "6b0c13687931450779997565f0a4ac8c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8020, "upload_time": "2019-07-13T06:18:34", "url": "https://files.pythonhosted.org/packages/58/8d/965446ed7bc26253a6bedf1148b3c207009c206975765e67f16a28f3349c/rpvm-0.1.0a1.tar.gz" } ] }