config service client for pcf config-server3
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
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 config-client3-2.0.0.tar.gz
.
File metadata
- Download URL: config-client3-2.0.0.tar.gz
- Upload date:
- Size: 8.7 kB
- Tags: Source
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3bcebd4636e88e97a13bdc8d7ab3f848b9a267e2181112f3e24fd685c618c76d |
|
MD5 | d3307b73cb28790b914f5fef7f299491 |
|
BLAKE2b-256 | 51feecf7c865723afc7d336b44d5e27e17268c1e90bcfaf8b36a42a9463fed81 |
File details
Details for the file config_client3-2.0.0-py3-none-any.whl
.
File metadata
- Download URL: config_client3-2.0.0-py3-none-any.whl
- Upload date:
- Size: 12.4 kB
- Tags: Python 3
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 55ede01ec0caa41c90659449f380655096fe4c8b865f01841bd8863356abc37a |
|
MD5 | cd423a8ba1f1db1666fab9ccbd9f1291 |
|
BLAKE2b-256 | 47ec4f794a85bbe936e8f8b71767286ad1ea672ae91e4208f6678122809c0cca |