config service client
Project description
config-client
config-client package for spring cloud config.
Installing
Install and update using pip:
pip install -U config-client
Dependencies
Setup
The default URL pattern is:
CONFIGSERVER_ADDRESS
/BRANCH
/APP_NAME
-PROFILE
.json
# expected environment variables: # CONFIGSERVER_ADDRESS=http://localhost:8888 BRANCH=master PROFILE=development APP_NAME=myapp
will result in:
http://localhost:8888/master/myapp-development.json
The url pattern can be customize on constructor with parameter url
.
from config import spring c = spring.ConfigClient( app_name='myapp', url="{address}/{branch}/{profile}-{app_name}.json" ) c.url # output: 'http://localhost:8888/master/development-myapp.json'
Default values
if no value was adjusted for the environment variables below, the default value will be assumed, as:
CONFIGSERVER_ADDRESS=http://localhost:8888 BRANCH=master PROFILE=development APP_NAME=
Supported response format
- JSON
Just add the .json
extension to the end of the URL parameter. For example:
c = ConfigClient( app_name='foo', profile='development', address='http://localhost:8000', branch='master', url='{address}/{branch}/{app_name}-{profile}.json' # < )
It will result in URL: http://localhost:8000/master/foo-development.json
.
Notice
.yaml
it's not supported, all extensions will be converted to .json
internally.
Usage Example
using standard client
from config.spring import ConfigClient config_client = ConfigClient(app_name='my_app') config_client.get_config() # option 1: dict like with direct access config_client.config['spring']['cloud']['consul']['host'] # option 2: dict like using get config_client.config.get('spring').get('cloud').get('consul').get('port') # option 3: using get_attribute method config_client.get_attribute('spring.cloud.consul.port')
standard client with @decorator
For use cases where environment variables are set.
from config import spring @spring.config_client() def my_test(config_client=None): config_client.config['spring']['cloud']['consul']['host'] config_client.config.get('spring').get('cloud').get('consul').get('port') config_client.get_attribute('spring.cloud.consul.port')
For use cases where environment variables are not set can you use decorator parameters, as example below:
from config import spring @spring.config_client(app_name='myapp', branch="dev") def my_test(config_client=None): config_client.config['spring']['cloud']['consul']['host'] config_client.config.get('spring').get('cloud').get('consul').get('port') config_client.get_attribute('spring.cloud.consul.port')
Integration with Flask.
from config.spring import ConfigClient from flask import Flask config_client = ConfigClient(app_name="myapp") config_client.get_config() app = Flask(__name__) app.run(host='0.0.0.0', port=config_client.config.get('app').get('port')
using asyncio
client using asyncio
import asyncio from config.spring import ConfigClient loop = asyncio.get_event_loop() config_client = ConfigClient(app_name='myapp') config_client.get_config() async def service_discovery(): await discovery_client.register( config_client.config['app']['name'], config_client.config.get('app').get('port') ) discovery_client = Consul( config_client.config.get('spring').get('cloud').get('consul').get('host'), config_client.get_attribute('spring.cloud.consul.port'], loop ) loop.run_until_complete(service_discovery)
create singleton instance
Assuming default values.
from config.spring import create_config_client c = create_config_client() d = create_config_client() print(id(c)) print(id(d))
With custom values.
from config.spring import create_config_client c = create_config_client(address='http://localhost:8888/configuration', app_name='autosprocessuais-pecas-txtos', branch="ft-sdintegracoes-591") d = create_config_client(address='http://localhost:8888/configuration', app_name='autosprocessuais-pecas-txtos', branch="ft-sdintegracoes-591") print(id(c)) print(id(d))
cloudfoundry integration
Default usage
from config.cf import CF cf = CF() cf.get_config()
It's necessary bind Config Server with the application first.
A example application it's available on:
Custom usage
from config.cf import CF from config.spring import ConfigClient cf = CF(client=ConfigClient(app_name='simpleweb000', url="{address}/{branch}/{app_name}.json")) cf.get_config()
Development
Running Tests
Install development dependencies.
pip install -r requirements-dev.txt
To execute tests just run:
python -m pytest -v --cov-report term --cov=config tests
Links
- License: Apache License
- Code: https://github.com/amenezes/config-client
- Issue tracker: https://github.com/amenezes/config-client/issues
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size config_client-0.5.0-py3-none-any.whl (11.8 kB) | File type Wheel | Python version py3 | Upload date | Hashes View |
Filename, size config-client-0.5.0.tar.gz (6.3 kB) | File type Source | Python version None | Upload date | Hashes View |
Hashes for config_client-0.5.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 56cda1d9890a8d419022ee565c930ebc36ecbad253ed0a0e22cee825403406d1 |
|
MD5 | d7ccd61585720a6d246fe79463620157 |
|
BLAKE2-256 | f554038ac5ef7647fccd5ca65762cb2179aa71a8ab8dc5f1b85a99f3c3cae661 |