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://configserver:8888/configuration
BRANCH=master
PROFILE=development
APP_NAME=myapp

will result in:

http://configserver:8888/configuration/master/myapp-development.json

the url pattern can be customize on constructor with parameter url.

from config import spring

c = spring.ConfigServer(
        app_name='myapp',
        url="{address}/{branch}/{profile}-{app_name}.json"
    )
c.url
# output: 'http://localhost:8888/configuration/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/configuration
BRANCH=master
PROFILE=development
APP_NAME=

Usage Example

using standard client

from config.spring import ConfigServer

config_client = ConfigServer(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.config.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.config.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.config.get_attribute('spring.cloud.consul.port')

Integration with Flask.

from config.spring import ConfigServer
from flask import Flask


config_client = ConfigServer(app_name="myapp")
config_client.get_config()
app = Flask(__name__)
app.run(host='0.0.0.0',
        port=config_client.config['app']['port']

using asyncio

client using asyncio

import asyncio
from config.spring import ConfigServer


loop = asyncio.get_event_loop()
config_client = ConfigServer(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['spring']['cloud']['consul']['host'],
    config_client.config['spring']['cloud']['consul']['port'],
    loop
)
loop.run_until_complete(service_discovery)

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.

Source Distribution

config-client-0.3.1.tar.gz (4.3 kB view hashes)

Uploaded Source

Built Distribution

config_client-0.3.1-py3-none-any.whl (8.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page