{ "info": { "author": "KillAChicken", "author_email": "KillAChicken@yandex.ru", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Topic :: Software Development :: Testing", "Topic :: Software Development :: Testing :: Mocking" ], "description": "loose-server\n============\n.. image:: https://travis-ci.com/KillAChicken/loose-server.svg?branch=master\n :target: https://travis-ci.com/KillAChicken/loose-server\n\nLoose server is a simple configurable server. It can be used to create temporary servers, dynamically add or remove endpoints and set responses for them from an application.\n\nInstallation\n============\n\n.. code-block:: text\n\n $ python -m pip install loose-server\n\nAdditional packages will be installed: ``Flask``, ``flask-restful`` (required for the server) and ``requests`` (required for the http clients).\n\nDocumentation\n=============\nDocumentation for the package can be found on the `Wiki `_.\n\nQuickstart\n==========\nLoose server has 2 variations:\n\n- Standalone server with API to manage rules via HTTP.\n- Flask application that can be used as a configurable mock in unit-tests.\n\nStandalone server\n-----------------\nA server can be started by the command\n\n.. code-block:: text\n\n $ python -m looseserver.default.server.run\n * Serving Flask app \"looseserver\" (lazy loading)\n * Environment: production\n WARNING: Do not use the development server in a production environment.\n Use a production WSGI server instead.\n * Debug mode: off\n * Running on http://127.0.0.1:50000/ (Press CTRL+C to quit)\n\nAPI endpoints are nested to the base configuration url. By default it is ``/_configuration/``.\n\n.. code-block:: python\n\n from looseserver.default.client.rule import PathRule\n from looseserver.default.client.response import FixedResponse\n from looseserver.default.client.http import HTTPClient\n\n client = HTTPClient(configuration_url=\"http://127.0.0.1:50000/_configuration/\")\n\n path_rule = client.create_rule(rule=PathRule(path=\"example\"))\n\n json_response = FixedResponse(\n status=200,\n headers={\"Content-Type\": \"application/json\"},\n body='{\"key\": \"value\"}',\n )\n client.set_response(rule_id=path_rule.rule_id, response=json_response)\n\nAll configured endpoints have a common prefix. By default it is ``/routes/``.\nThe response can be obtained by the following request\n\n.. code-block:: text\n\n $ curl http://127.0.0.1:50000/routes/example -i\n HTTP/1.0 200 OK\n Content-Type: application/json\n Content-Length: 16\n Server: Werkzeug/0.15.2 Python/3.5.2\n Date: Fri, 05 Apr 2019 14:08:50 GMT\n\n {\"key\": \"value\"}\n\nConfigurable mock\n-----------------\nLoose server can be used as a mock server in the following way\n\n.. code-block:: python\n\n from looseserver.default.server.application import configure_application\n from looseserver.default.client.flask import FlaskClient\n from looseserver.default.client.rule import PathRule\n from looseserver.default.client.response import FixedResponse\n\n application = configure_application(base_endpoint=\"/base/\", configuration_endpoint=\"/config/\")\n app_client=application.test_client()\n\n client = FlaskClient(configuration_url=\"/config/\", application_client=app_client)\n\n path_rule = client.create_rule(rule=PathRule(path=\"example\"))\n\n json_response = FixedResponse(\n status=200,\n headers={\"Content-Type\": \"application/json\"},\n body='{\"key\": \"value\"}',\n )\n client.set_response(rule_id=path_rule.rule_id, response=json_response)\n\n response = app_client.get(\"/base/example\")\n assert response.headers[\"Content-Type\"] == \"application/json\"\n assert response.json == {'key': 'value'}\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/KillAChicken/loose-server", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "loose-server", "package_url": "https://pypi.org/project/loose-server/", "platform": "", "project_url": "https://pypi.org/project/loose-server/", "project_urls": { "Homepage": "https://github.com/KillAChicken/loose-server" }, "release_url": "https://pypi.org/project/loose-server/1.0.0/", "requires_dist": [ "Flask", "flask-restful", "requests" ], "requires_python": "", "summary": "Dynamically configurable server", "version": "1.0.0" }, "last_serial": 5374997, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "8a9c3ca394ae770298fd83aae7064ec1", "sha256": "afe9b2967ab5203c04e7e9a4b95de172e40f2524891a4642b11ee34a6e82acc3" }, "downloads": -1, "filename": "loose_server-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8a9c3ca394ae770298fd83aae7064ec1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21521, "upload_time": "2019-04-05T15:26:22", "url": "https://files.pythonhosted.org/packages/da/5c/bc17295e5b2aa76963f1b53c37e95e9d15d90ab4a222dad9ee8ffc46d9af/loose_server-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "689940aece408f1a570e568411e1510f", "sha256": "2d4eb2105bf824926d027bb86ad3456226517b337e998f455f5a7af09e7db335" }, "downloads": -1, "filename": "loose-server-0.1.tar.gz", "has_sig": false, "md5_digest": "689940aece408f1a570e568411e1510f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12768, "upload_time": "2019-04-05T15:26:24", "url": "https://files.pythonhosted.org/packages/05/8a/ef15c03dc03dd66d000427536c397bb403e7c08130d06f67458ca990efcf/loose-server-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "05fb30c4b31d03c296f815c1edb9b90f", "sha256": "c3c0f4833ecc0150252b5f7e45fd0dd6770a4f317c37d2ca848987a7aa0c9070" }, "downloads": -1, "filename": "loose_server-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "05fb30c4b31d03c296f815c1edb9b90f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21627, "upload_time": "2019-04-05T18:13:00", "url": "https://files.pythonhosted.org/packages/e9/ec/7fb904bebe99a72e92734aef0d77962fc9f01c62345a9c908f1c684f617c/loose_server-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e7f340db609aaae687d3edf9f41f8268", "sha256": "aead68a886a0a49efc37c548442d76ca03c665481740de2e3003a81a48897373" }, "downloads": -1, "filename": "loose-server-0.2.tar.gz", "has_sig": false, "md5_digest": "e7f340db609aaae687d3edf9f41f8268", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13052, "upload_time": "2019-04-05T18:13:02", "url": "https://files.pythonhosted.org/packages/3e/1f/28e3d2b77bb127aaccca5bebf982b461f11e48617b68dae9d26ad05faf36/loose-server-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "e419d703a36d0fbeb6e703648e30f7bd", "sha256": "8ff353fdac8c276cbdbef1fab19fbd4a1ae615d799df101f60ecdfc563f5a7a0" }, "downloads": -1, "filename": "loose_server-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "e419d703a36d0fbeb6e703648e30f7bd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 22200, "upload_time": "2019-04-10T12:11:39", "url": "https://files.pythonhosted.org/packages/d4/bf/fc500794e553271a8254a1f3d5d89125ae0251d5cb9243c93d2d9527dd6d/loose_server-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1bbc712f0f3eed90ff7f334c17da024d", "sha256": "496893ea8d54e13153ec83168584e82252f4e06c5b747bb93a95852e1056364b" }, "downloads": -1, "filename": "loose-server-0.3.tar.gz", "has_sig": false, "md5_digest": "1bbc712f0f3eed90ff7f334c17da024d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13292, "upload_time": "2019-04-10T12:11:41", "url": "https://files.pythonhosted.org/packages/36/90/190b7e7689aa57485f83471d0cd345f4d649263121a71013e7ad2d640777/loose-server-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "1cb7d83e4ab33fb5a9980deb5b45000f", "sha256": "71f99d3bd1e6e73978afad9369752c7c1207e9f96be9603ffea16e29ec8111d7" }, "downloads": -1, "filename": "loose_server-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "1cb7d83e4ab33fb5a9980deb5b45000f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24336, "upload_time": "2019-04-13T22:06:19", "url": "https://files.pythonhosted.org/packages/00/98/57c58f2cfc8cec96d7639dbae2f7747de39b0cf52dee30043f4b48dc4253/loose_server-0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d839657281ca109e1beb2288342d433c", "sha256": "717fd6f7ade308301fa317907e9d884e0d458557cdc79b36d3ec820bdc58c419" }, "downloads": -1, "filename": "loose-server-0.4.tar.gz", "has_sig": false, "md5_digest": "d839657281ca109e1beb2288342d433c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13964, "upload_time": "2019-04-13T22:06:21", "url": "https://files.pythonhosted.org/packages/56/8d/e2bc0bd3dbe9062a796149b1b0932f059e74326a6a283970182c2023e895/loose-server-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "65383745abd03f225a68ad7d64bfb33e", "sha256": "cfa067ecc86366e00ae0a73d423b84c22f9f383268e224b308530d74429faea2" }, "downloads": -1, "filename": "loose_server-0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "65383745abd03f225a68ad7d64bfb33e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24324, "upload_time": "2019-04-16T12:07:45", "url": "https://files.pythonhosted.org/packages/63/15/b20eeef8f907a301698a64cac9bf3c630f638cad68482e057d4149856db6/loose_server-0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7729528faf1dc3a06ad613c502d025db", "sha256": "7120338b1e8783f53b11eb8aba7f5436daf2a8ace8a5aa11c939807fc8b8389a" }, "downloads": -1, "filename": "loose-server-0.5.tar.gz", "has_sig": false, "md5_digest": "7729528faf1dc3a06ad613c502d025db", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14003, "upload_time": "2019-04-16T12:07:47", "url": "https://files.pythonhosted.org/packages/bc/b0/abfe0405a1b2974ef330fb29b50bca08749965d95091bbe56afe113af758/loose-server-0.5.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "cb8241243ee134279bbde0ceffe4ee85", "sha256": "2065abc796bfcaedff0b2d635e9e888e94483104e705c728e8e3b6b540beac09" }, "downloads": -1, "filename": "loose_server-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "cb8241243ee134279bbde0ceffe4ee85", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24354, "upload_time": "2019-06-08T09:54:26", "url": "https://files.pythonhosted.org/packages/cb/66/b94a1177c2c10f1665a32d0d2b00c08c19b75bfae965e8da585bf34c63d5/loose_server-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bfcc8a3266f5eff77d208991d934787c", "sha256": "59d8c03a214d61aa87651d8453cba8195f3a416941d4a3f6d27055bb179fc34b" }, "downloads": -1, "filename": "loose-server-1.0.0.tar.gz", "has_sig": false, "md5_digest": "bfcc8a3266f5eff77d208991d934787c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14031, "upload_time": "2019-06-08T09:54:28", "url": "https://files.pythonhosted.org/packages/0f/68/7ce638286d3f3ed20806b618a5a3a65f48429605b9f58bb07a7308644860/loose-server-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cb8241243ee134279bbde0ceffe4ee85", "sha256": "2065abc796bfcaedff0b2d635e9e888e94483104e705c728e8e3b6b540beac09" }, "downloads": -1, "filename": "loose_server-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "cb8241243ee134279bbde0ceffe4ee85", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24354, "upload_time": "2019-06-08T09:54:26", "url": "https://files.pythonhosted.org/packages/cb/66/b94a1177c2c10f1665a32d0d2b00c08c19b75bfae965e8da585bf34c63d5/loose_server-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bfcc8a3266f5eff77d208991d934787c", "sha256": "59d8c03a214d61aa87651d8453cba8195f3a416941d4a3f6d27055bb179fc34b" }, "downloads": -1, "filename": "loose-server-1.0.0.tar.gz", "has_sig": false, "md5_digest": "bfcc8a3266f5eff77d208991d934787c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14031, "upload_time": "2019-06-08T09:54:28", "url": "https://files.pythonhosted.org/packages/0f/68/7ce638286d3f3ed20806b618a5a3a65f48429605b9f58bb07a7308644860/loose-server-1.0.0.tar.gz" } ] }