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
File details
Details for the file loose-server-0.2.tar.gz
.
File metadata
- Download URL: loose-server-0.2.tar.gz
- Upload date:
- Size: 13.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/20.7.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.5.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | aead68a886a0a49efc37c548442d76ca03c665481740de2e3003a81a48897373 |
|
MD5 | e7f340db609aaae687d3edf9f41f8268 |
|
BLAKE2b-256 | 3e1f28e3d2b77bb127aaccca5bebf982b461f11e48617b68dae9d26ad05faf36 |
File details
Details for the file loose_server-0.2-py3-none-any.whl
.
File metadata
- Download URL: loose_server-0.2-py3-none-any.whl
- Upload date:
- Size: 21.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/20.7.0 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.5.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c3c0f4833ecc0150252b5f7e45fd0dd6770a4f317c37d2ca848987a7aa0c9070 |
|
MD5 | 05fb30c4b31d03c296f815c1edb9b90f |
|
BLAKE2b-256 | e9ec7fb904bebe99a72e92734aef0d77962fc9f01c62345a9c908f1c684f617c |