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
Release files for config-client-c3 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| config-client-c3-0.1.1.tar.gz | 9.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| config_client_c3-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.6 kB
Release files / config-client-c3-0.1.1.tar.gz
| Download URL | config-client-c3-0.1.1.tar.gz |
|---|---|
| Size | 9.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
54ce7c36a01d4876e7b05521ecd3ffda7f57853de3deff225c9ef8a007abfaf2
|
|
BLAKE2b-256 checksum How to use checksums |
38a99270c8dceb91870fbcef717f7e414fae865a007bc1a879880ac754bcce99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.8.1
|
Release files / config_client_c3-0.1.1-py3-none-any.whl
| Download URL | config_client_c3-0.1.1-py3-none-any.whl |
|---|---|
| Size | 13.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f2d30cd4ba952291643bd612ca23cf753d74d8f9903e0ff11141d32e455f260a
|
|
BLAKE2b-256 checksum How to use checksums |
5ba81f08205e89eedc03dce76c2cc09bd759f5c3f9338d2c437eaf3d933a439e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.42.1 CPython/3.8.1
|