{ "info": { "author": "Julien Tayon", "author_email": "julien@tayon.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Python Software Foundation License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.7" ], "description": "=====================================================\nConfined: a safe resource bound immutable interpreter\n=====================================================\n\n* source: https://github.com/jul/confined\n* ticketing: https://github.com/jul/confined/issues\n\n.. image:: \n https://travis-ci.org/jul/confined.png\n\nUse\n===\n\nThe purpose of this interpreter is to confine the user in a predictable way\nso that you don't have to fear to give your user the possibility to execute \narbitrary code on your servers.\n\nThe language is mapping its input/internal stack to immutable data structures\nso that remote it is safe to pass it \n\nUsage\n=====\n\nExample:\n\n print templatize(dict(\n price=1, \n q=3, \n vat=19.6, \n name=\"super carcajou\", country=\"FR\"\n ),'''\n <:\n \"hello\":world\n :> ici <:\n $name\n :> has\n <:\n $price >NUM\n $q >NUM MUL\n $vat >NUM 100:_per_cent_to_per_one DIV \n 1:_having_price_AND_vat ADD MUL >STR\n \" \":_separator\n CAT\n \"comment in string and drop\":_or_in_tag\n DROP\n \"\u20ac\":_cur \"$\":_cur \n $country\n \"FR\":_cocorico\n 1:_nb_of_lines_for_looking_match\n MATCH\n IFT\n CAT :>\n may I have a dict please? <:\n $price >NUM\n $q\n \"a string\":with_a_name\n \"ignored\":_because_tag_starts_with_\n 1231231231231231:a_long_int\n \"a new name\":_with_space\n TAG\n EDICT\n :> .... \n <: \"fin\": :>\n end''')\n\nGives : \n hello ici super carcajou has\n 18.31 \u20ac\n may I have a dict please? {\n \"q\": \"3\", \n \"price\": \"1\", \n \"with_a_name\": \"a string\", \n \"a new name\": \"1231231231231231\"\n } .... \n fin\n end\n\n\nChangelog\n=========\n\n* 0.1.0 initial release oops forgot __name__ == main\n* 0.1.1 initial release\n* 0.1.2 going to fast, mis clicked a button in pypi\n* 0.1.4 forgot howto declare requirements\n* 0.1.9 after too many failure, embedding check_arg in this\n\nRoadmap before 1.0.0\n********************\n\n* ensuring that stack is controled in size\n* handle string in a nice way. I want ot be able to mix latin1/chinese in Input\n* handle Decimal nitroglycerine correctly so that users CAN multiply safely\n* Having a cheatsheet for the language\n* create a loads/dumps to be able to serialize code from a user for remote\n execution\n* limiting the size of the input scripts\n* using only iterator to be able to do nth repeated operation without copying everything in memory\n* handle versions compatibility for remote execution\n* handle the precisions and formating of Decimal\n* enough tests to feel secure\n* python 3", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.org/jul/confined", "keywords": null, "license": "License :: OSI Approved :: BSD License", "maintainer": null, "maintainer_email": null, "name": "confined", "package_url": "https://pypi.org/project/confined/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/confined/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.org/jul/confined" }, "release_url": "https://pypi.org/project/confined/0.1.10/", "requires_dist": null, "requires_python": null, "summary": "Sage templating language with bounded resource", "version": "0.1.10" }, "last_serial": 1511615, "releases": { "0.1.1": [], "0.1.10": [ { "comment_text": "", "digests": { "md5": "fb9f90f91e505af0913d9d9de8c9207d", "sha256": "176022c9ad4adb41e4528b1161bd906f960ae6e0a080a3deccd91a7ce4597d31" }, "downloads": -1, "filename": "confined-0.1.10.tar.gz", "has_sig": false, "md5_digest": "fb9f90f91e505af0913d9d9de8c9207d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10531, "upload_time": "2015-04-19T17:21:01", "url": "https://files.pythonhosted.org/packages/a8/6c/4a0edb6d0658907096af557cad03a3ab0627f186d2639ad678cb5b25b8d8/confined-0.1.10.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "35e05f024fa161772fcd178605d87005", "sha256": "0b847ac2c8027a3635293457a76089202d9a99f6a7a77339203617ed3428b4df" }, "downloads": -1, "filename": "confined-0.1.4.tar.gz", "has_sig": false, "md5_digest": "35e05f024fa161772fcd178605d87005", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8989, "upload_time": "2015-04-19T16:09:55", "url": "https://files.pythonhosted.org/packages/e1/f6/a0622fbd7446a1808e55df8af2dce8d8104edce05cfa60911a19025d809b/confined-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "bc7c9c35dd4be0ff4aa1ef7259a241a5", "sha256": "de35f866e7d08f1e353d18a9c93319eb2596bbb870eddcb12a2c4e49ced3ae18" }, "downloads": -1, "filename": "confined-0.1.5.tar.gz", "has_sig": false, "md5_digest": "bc7c9c35dd4be0ff4aa1ef7259a241a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8563, "upload_time": "2015-04-19T16:37:37", "url": "https://files.pythonhosted.org/packages/d4/e0/2a01859213ebd1b8cfade51767784caf959896813e50b238b1509a4eba0c/confined-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "a43926e56c65b47eed7eef62826c5354", "sha256": "3f0a6c41c1860ff6968a2c83462084f2f2478daeb030e9a1f9f88992a83b240b" }, "downloads": -1, "filename": "confined-0.1.6.tar.gz", "has_sig": false, "md5_digest": "a43926e56c65b47eed7eef62826c5354", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8661, "upload_time": "2015-04-19T16:39:16", "url": "https://files.pythonhosted.org/packages/3a/46/72b649ebf1fe7b34ae8e9942990737f994957bc4bf0f1b19c4335d4c9154/confined-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "4c6518389a8cceb7300fc65eadb94bf8", "sha256": "d6fe0b49f48e31da9b5072b8f6bdfa87bcab90461c84c36495bdb1da4a0eff7a" }, "downloads": -1, "filename": "confined-0.1.7.tar.gz", "has_sig": false, "md5_digest": "4c6518389a8cceb7300fc65eadb94bf8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8663, "upload_time": "2015-04-19T16:43:24", "url": "https://files.pythonhosted.org/packages/7c/80/5e02fee26a8fecbd7c22bafe1d1d194a9ae20a0dc70214021b31f5e0ecf2/confined-0.1.7.tar.gz" } ], "0.1.9": [ { "comment_text": "", "digests": { "md5": "829b1b78f07e039b32ecd7576e3e0410", "sha256": "b81e23d3240fcb883a91bd267703a4fad9f479b3062737103586a2c88761e9c0" }, "downloads": -1, "filename": "confined-0.1.9.tar.gz", "has_sig": false, "md5_digest": "829b1b78f07e039b32ecd7576e3e0410", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9511, "upload_time": "2015-04-19T16:59:26", "url": "https://files.pythonhosted.org/packages/46/15/2cb2a1fd35a71d2c527abfa2c9f94ab10eeab5f25b81afe5fc60d39549aa/confined-0.1.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "fb9f90f91e505af0913d9d9de8c9207d", "sha256": "176022c9ad4adb41e4528b1161bd906f960ae6e0a080a3deccd91a7ce4597d31" }, "downloads": -1, "filename": "confined-0.1.10.tar.gz", "has_sig": false, "md5_digest": "fb9f90f91e505af0913d9d9de8c9207d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10531, "upload_time": "2015-04-19T17:21:01", "url": "https://files.pythonhosted.org/packages/a8/6c/4a0edb6d0658907096af557cad03a3ab0627f186d2639ad678cb5b25b8d8/confined-0.1.10.tar.gz" } ] }