Skip to main content

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

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)

Source distribution for config-client-c3 0.1.1
File Size Uploaded
config-client-c3-0.1.1.tar.gz 9.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for config-client-c3 0.1.1
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page