How often do you wonder where to store the project settings? When your project is small it is not a big problem. But if your big project consists of dozens of microservices then there is a problem of centralized configuration management. The Сonsul have a key/value storage that is ideal for this.
With consul-options you can define and use options in your code by a simple and elegant way. Just take a look at the example:
class DB(ConsulKV):
pass
class Users(DB):
host = '127.0.0.1'
port = 5432
user = 'postgres'
password = 'postgres'
dbname = 'users'
class Orders(DB):
host = '127.0.0.1'
port = 5432
user = 'postgres'
password = 'postgres'
dbname = 'orders'
Now you can access option values in a clear way:
from consul_options import options
print options.db.users.host
print options.db.orders.dbname
consul-options automagically creates folders and keys with default values defined above in Consul and later read them from there. So if anyone will change the value of db/orders/host key to something different in Consul then you will get that value.
When you declare a new class based on ConsulKV default bahavior is creation a folder in Consul key/value storage with name of your class in lowercase. Each class attribute you define will have mapping to key folder/key. If you don't agree with generated folder name you are free to choose any other with reserved class attribute __key__ as shown below:
class WorkerOptions(ConsulKV):
__key__ = 'worker'
host = '127.0.0.1'
port = 80
After that you can access to the option with "worker" in path:
from consul_options import options
print options.worker.host
print options.worker.port
To create hierarchical key structure you can take advantage of usual class hierarchy:
from consul_options import ConsulKV, options
class WorkerOptions(ConsulKV):
__key__ = 'worker'
host = '127.0.0.1'
port = 80
class DB(WorkerOptions):
host = '127.0.0.1'
port = 5432
user = 'postgres'
password = 'postgres'
print options.worker.db.host # 'host'
print options.worker.db.port # 5432
It is also possible to create keys at root level with class attribute __root__:
class RootOptions(ConsulKV):
__root__ = True
host = '127.0.0.1'
port = 80
print options.host
print options.port
consul-options is compatible with both Python 2 and Python 3.
Use pip to install:
$ pip install consul-options
consul-options is developed and distributed under the Apache 2.0 license.