Dynamically configurable server
Project description
loose-server
Loose 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.
Installation
Flask and flask-restful are required for the server.
$ python -m pip install Flask flask-restful loose-server
requests are required for the http client.
$ python -m pip install requests loose-server
Usage
Loose server has 2 variations:
Standalone server with API to manage rules via HTTP.
Flask application that can be used as a configurable mock in unit-tests.
Standalone server
A server can be started by the command
$ python -m looseserver.server.run
* Serving Flask app "run" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:50000/ (Press CTRL+C to quit)
API endpoints are nested to the base configuration url. By default it is /_configuration/.
from looseserver.client.http import HTTPClient
from looseserver.default.client.rule import PathRule
from looseserver.default.client.response import FixedResponse
client = HTTPClient(base_url="http://127.0.0.1:50000/_configuration/")
path_rule_spec = PathRule(path="example")
path_rule = client.create_rule(rule=path_rule_spec)
json_response = FixedResponse(
status=200,
headers={"Content-Type": "application/json"},
body='{"key": "value"}',
)
client.set_response(rule_id=path_rule.rule_id, response=json_response)
All configured endpoints have a common prefix. By default it is /routes/. The response can be obtained by the following request
$ curl http://127.0.0.1:50000/routes/example -i
HTTP/1.0 200 OK
Content-Type: application/json
Content-Length: 16
Server: Werkzeug/0.15.2 Python/3.5.2
Date: Fri, 05 Apr 2019 14:08:50 GMT
{"key": "value"}
Configurable mock
Loose server can be used as a mock server in the following way
from looseserver.server.run import configure_application
from looseserver.client.flask import FlaskClient
from looseserver.default.client.rule import PathRule
from looseserver.default.client.response import FixedResponse
application = configure_application(
base_endpoint="/routes/",
configuration_endpoint="/_configuration/",
)
app_client=application.test_client()
client = FlaskClient(base_url="/_configuration/", application_client=app_client)
path_rule_spec = PathRule(path="example")
path_rule = client.create_rule(rule=path_rule_spec)
json_response = FixedResponse(
status=200,
headers={"Content-Type": "application/json"},
body='{"key": "value"}',
)
client.set_response(rule_id=path_rule.rule_id, response=json_response)
response = app_client.get("/routes/example")
assert response.headers["Content-Type"] == "application/json"
assert response.json == {'key': 'value'}
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for loose_server-0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | c3c0f4833ecc0150252b5f7e45fd0dd6770a4f317c37d2ca848987a7aa0c9070 |
|
MD5 | 05fb30c4b31d03c296f815c1edb9b90f |
|
BLAKE2b-256 | e9ec7fb904bebe99a72e92734aef0d77962fc9f01c62345a9c908f1c684f617c |