{ "info": { "author": "GaoRongxin", "author_email": "rongxin.gao@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2.7", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Utilities" ], "description": "# MooKoo\n\nMooKoo\u662f\u4e00\u4e2a\u57fa\u4e8ePython\u7684Mock http server\n\n## \u5b89\u88c5\n\n### \u4f7f\u7528pip\u5b89\u88c5\n\n``` bash\npip install mookoo\nmookoo mock1 && cd mock1 && python mock.py\n# \u5728\u6d4f\u89c8\u5668\u4e2d\u8bbf\u95ee http://localhost:7928/hello\n```\n\n### \u624b\u5de5\u5b89\u88c5\n\n``` bash\nmkdir mock1; cd mock1\ngit clone https://github.com/gaorx/mookoo.git && rm -rf mookoo/.git\nvim mock.py\n```\n\n## \u8d77\u6b65\n\n\u5728`mock1`\u76ee\u5f55\u4e2d\uff0c\u7f16\u8f91`mock.py`\n\n``` python\nfrom mookoo import *\nGET('/hello').json({\"message\": \"Hello MooKoo!\"})\nrun()\n```\n\n\u7136\u540e\u5728shell\u4e2d\u6267\u884c\n\n``` bash\npython mock.py\n# \u4e5f\u53ef\u4ee5\u8bbe\u5b9a\u7aef\u53e3\n# python mock.py -p 9928\n```\n\n\u7136\u540e\u5728\u6d4f\u89c8\u5668\u4e2d\u5c31\u8bbf\u95ee`http://localhost:7928/hello`\uff0c\u5c31\u53ef\u4ee5\u770b\u5230\n\n``` json\n{\"message\": \"Hello Mookoo\"}\n```\n\n\u4e5f\u53ef\u4ee5\u8bbf\u95ee`http://localhost:7928/+mookoo`\u67e5\u770b\u6b64\u5e2e\u52a9\u6587\u4ef6\n\n\n\n## \u8fdb\u9636\n\n### \u52a8\u6001\u52a0\u8f7d\u6587\u4ef6\n\n\u5728`mock1`\u76ee\u5f55\u4e2d\uff0c\u521b\u5efa`hello.json`\uff0c\u7136\u540e\u7f16\u8f91\u5b83\uff0c\u7136\u540e\u4f7f\u7528\u4e0b\u9762\u7684\u4ee3\u7801\u52a8\u6001\u52a0\u8f7d\n\n``` python\nGET('/hello').load_json('hello.json')\n```\n\n### \u4fee\u6539`Status`\u548c`Header`\n\n``` python\n# \u5b9a\u5236Status\nGET('/404').html('

Not found

', status=404)\n\n# \u52a0\u5165Header\nGET('/custom_header').text(\"Press F12\", header={\"My-Header\": \"HeaderContent\"})\n\n# \u4fee\u6539content_type\nGET('/custom_content_type').text(\"

Press F12

\", content_type='text/html')\n```\n\n### \u52a8\u6001\u54cd\u5e94\n\n``` python\n@GET('/dynamic/')\ndef _dynamic(sub):\n\tresponse.content_type = 'text/plain'\n return \"Sub path is %s, query_string is '%s'\" % (sub, request.query_string)\n```\n\n### \u9759\u6001\u6587\u4ef6\n\n\u5c06\u4e00\u5f20\u5728`mock1`\u76ee\u5f55\u4e2d\u590d\u5236\u4e00\u5f20\u56fe\u7247`hello.jpg`\n\n``` python\nGET('/image').static_file('hello.jpg')\n```\n\n### \u9759\u6001\u76ee\u5f55\n\n``` python\n@mookoo.GET('/static/')\ndef _static_dir(filename):\n return mookoo.static_file(os.path.join('static_dir', filename))\n```\n\n### \u52a8\u6001JSON\n\n\u5728`mock1`\u76ee\u5f55\u4e2d\uff0c\u521b\u5efa`hello.json.py`\uff0c\u5185\u5bb9\u4e3a:\n\n``` python\nJSON = {\n\t\"message\": \"Python json\",\n \"query_string\": request.query_string,\n}\n```\n\n\u7136\u540e\u4f7f\u7528\u4e0b\u9762\u7684\u4ee3\u7801\u52a0\u8f7d:\n\n``` python\nGET('/dynamic_json').load_json('hello.json.py')\n```\n\n### Helpers\n\n\u53ef\u4ee5\u4f7f\u7528`mookoo.helper`\u6ce8\u518c\u5171\u4eab\u51fd\u6570\uff0c\u7136\u540e\u5728\u52a8\u6001JSON\u4e2d\u53ef\u4ee5\u4f7f\u7528`helpers`\u6765\u4f7f\u7528\u8fd9\u4e9b\u51fd\u6570\u3002\u4f8b\u5982\u5728`mock.py`\u4e2d\uff1a\n\n``` python\n@helper\ndef helper1():\n\treturn \"Helper1\"\n\n@helper()\ndef helper2():\n\treturn \"Helper2\"\n\n@helper('helper3')\ndef the_name_is_not_helper3():\n\treturn \"Helper3\"\n\nGET('/dynamic_json').load_json('hello.json.py')\n```\n\n\u5728`hello.json.py`\u4e2d\n\n``` python\nJSON = {\n\t\"message\": \"Python json\",\n \"query_string\": request.query_string,\n \"helper1\": helpers.helper1(),\n \"helper2\": helpers.helper2(),\n \"helper3\": helpers.helper3(),\n}\n```\n\n### \u91cd\u5b9a\u5411\n\n``` python\nGET('/redirect').redirect('https://github.com/gaorx/mookoo')\n```\n\n### \u4ee3\u7406\n\n``` python\nGET('/http_rfc').proxy('https://tools.ietf.org/rfc/rfc2616.txt')\n```\n\n\u6ce8\u610f: Proxy\u53ea\u4f1a\u4f7f\u7528\u8f6c\u53d1\u6e90Header\u4e2d\u7684Status\u548cContent-Type\uff0c\u5176\u4f59Header\u4e0d\u8f6c\u53d1\u3002\n\n\n\n\n\n", "description_content_type": null, "docs_url": null, "download_url": null, "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/gaorx/mookoo/", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "mookoo", "package_url": "https://pypi.org/project/mookoo/", "platform": "any", "project_url": "https://pypi.org/project/mookoo/", "project_urls": { "Homepage": "https://github.com/gaorx/mookoo/" }, "release_url": "https://pypi.org/project/mookoo/0.1.0/", "requires_dist": null, "requires_python": null, "summary": "Mock HTTP server", "version": "0.1.0" }, "last_serial": 2057235, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "76ede2f9312c2801740b8b7c8c9f1bb8", "sha256": "36cce15c4708d36bd5df218e76f8ee7abfdc24d41ef3ce040f56f37c1f5be430" }, "downloads": -1, "filename": "mookoo-0.1.0.tar.gz", "has_sig": false, "md5_digest": "76ede2f9312c2801740b8b7c8c9f1bb8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50546, "upload_time": "2016-04-11T07:28:47", "url": "https://files.pythonhosted.org/packages/c0/e2/db6c04ae6dcb30599e5d1a080136ed015cc9495657a10c47ed6eb12df48a/mookoo-0.1.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "76ede2f9312c2801740b8b7c8c9f1bb8", "sha256": "36cce15c4708d36bd5df218e76f8ee7abfdc24d41ef3ce040f56f37c1f5be430" }, "downloads": -1, "filename": "mookoo-0.1.0.tar.gz", "has_sig": false, "md5_digest": "76ede2f9312c2801740b8b7c8c9f1bb8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50546, "upload_time": "2016-04-11T07:28:47", "url": "https://files.pythonhosted.org/packages/c0/e2/db6c04ae6dcb30599e5d1a080136ed015cc9495657a10c47ed6eb12df48a/mookoo-0.1.0.tar.gz" } ] }