Skip to main content

config service client

Project description

Build Status Maintainability codecov PyPI version

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for config-client, version 0.5.0
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 hashes
Filename, size config-client-0.5.0.tar.gz (6.3 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page