Library for runtime updating project settings.
Project description
runtime-config-py
This library allows you to update project settings at runtime. In its basic use case, it is just a client for the server, but if necessary, you can implement your adapter for the desired source and get settings from them.
runtime-config-py supports Python 3.8+.
Examples of using:
-
Create feature flags to control which features are enabled for users. Feature flags are especially useful when the service is based on a microservice architecture and the addition of a new feature affects multiple services.
-
Quick response to problems in project infrastructure. For example, if one of consumers sends too many requests to another service, and you need to reduce its performance.
Table of contents:
Installation
You can install the library like this:
-
from pypi
pip install "runtime-config-py[aiohttp]"
or
poetry add runtime-config-py -E aiohttp
-
from git:
pip install git+https://github.com/runtime-config/runtime-config-py.git#egg="runtime-config-py[aiohttp]"
Source dependencies have been moved to extras to give you more control over which libraries are installed. If you have a project dependency on a certain version of aiohttp you can install the library without specifying extras.
pip install runtime-config-py
Usage
Examples of using the library can be found here.
Let's see a simple example of using this library together with aiohttp application.
from aiohttp import web
from runtime_config import RuntimeConfig
from runtime_config.sources import ConfigServerSrc
async def hello(request):
name = request.app['config'].name
return web.Response(text=f'Hello world {name}!')
async def init(application):
source = ConfigServerSrc(host='http://127.0.0.1:8080', service_name='hello_world')
config = await RuntimeConfig.create(init_settings={'name': 'Alex'}, source=source)
application['config'] = config
async def shutdown(application):
await application['config'].close()
app = web.Application()
app.on_startup.append(init)
app.on_shutdown.append(shutdown)
app.add_routes([web.get('/', hello)])
web.run_app(app, port=5000)
Before running this code, you need to run server from which this library can take new values for your variables. If you don't do this, nothing bad will not happen. You simply cannot change the value of the name variable at runtime :)
Automatic source initialization
You can simplify library initialization by automatically creating a source instance. Simply define the following environment variables and the source instance will be created automatically:
- RUNTIME_CONFIG_HOST
- RUNTIME_CONFIG_SERVICE_NAME
Ways to access settings
This library supports several ways to access variables. All of them are shown below:
print(config.name)
print(config['name'])
print(config.get('name', default='Dima'))
Backend
Currently, only 1 backend is supported. Later, support for other backends, such as redis, will probably be added to the library, but this is not in the nearest plans.
If you need support for another settings storage source right now, you can write your own source. Implementing this is
very simple. You need to create a class that will be able to retrieve data from the desired source and will inherit
from runtime_config.sources.base.BaseSource
. After that, an instance of the class you created must be passed to
the RuntimeConfig.create
method.
your_source = YourSource(...)
config = await RuntimeConfig.create(..., source=your_source)
Development
Install deps
poetry install --all-extras
Tests
Check the work of the library on several versions of Python at once using the command below:
make test-multi-versions
The simple test run is available through the command below:
make test
Style code
For automatic code formatting and code verification, you need to use the command below:
make lint
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 runtime_config_py-0.0.7.tar.gz
.
File metadata
- Download URL: runtime_config_py-0.0.7.tar.gz
- Upload date:
- Size: 10.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.2 CPython/3.8.14 Linux/5.15.0-1022-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 952f9197f03c8b14042b81f6d049b6c37fd8deac117d9ea2ac45f731a2004ecb |
|
MD5 | a8eac0189f11e08b00b068396b25007c |
|
BLAKE2b-256 | 21d90503c10b6f5e742f4c79a894ad28338660c97c51b775247286d61d6f2bb6 |
File details
Details for the file runtime_config_py-0.0.7-py3-none-any.whl
.
File metadata
- Download URL: runtime_config_py-0.0.7-py3-none-any.whl
- Upload date:
- Size: 10.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.2.2 CPython/3.8.14 Linux/5.15.0-1022-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6b36bbba89e7b79d3889511bdb7acf3630a02ae35de2d13c6a73ca9e516932c3 |
|
MD5 | 75b4636b0685191b373cf163cec1d6da |
|
BLAKE2b-256 | c53b0eb70128f4288f3194ce2c75818bcf7c616efa0fdc8cdcef3dcb5e4d567a |