An Object Config Mapper (OCM)
Project description
Zeno | An Object Config Mapper (OCM)
I heard you like ORMs, so I got you an OCM.
This is very much still in beta. The idea for this comes from ORMs like SqlAlchemy and how Spring Boot uses @ConfigurationProperties
Zeno maps your configs to objects for you.
Spring:
Data:
MongoDb:
database: TESTDB
encryption: true
encryptionKey: "FakePassWord!"
password: "!54353Ffesf34"
replicaSet: FAKE-DB-531
second: 1
myList:
- first
- second
- third
MyServer:
host: my.server.com
port: 8080
Looks like
class Spring(Configuration): #Inheriting from Configuration lets the parser know which class to modify
"""
loads in from data.yml. accessing nested sections can be done via nested classes
"""
class Data:
class MongoDb:
database = String()
encryption = Boolean() # conversion automatically happens when specifying the type
encryptionKey = String()
password = String()
replicaSet = String()
second = Integer()
myList = List()
And can now be accessed like:
Spring().Data.myList # ['first', 'second', 'third']
Spring().Data.MongoDb.encryption is True # True
Install
pip3 install ZenoMapper
Import
from ZenoMapper.Configuration import ConfigParser, Configuration
from ZenoMapper.Types import String, Boolean, Integer, Lis
Using your custom configs with Zeno
Using your own configs is easy with Zeno, simply inherit from ConfigParser and instantiate the get_config()
function. Load in your file and Zeno will do the rest.
class MyConfig(ConfigParser):
"""
loading your own config is done via subclassing the ConfigParser class and implementing the
get_config function.
"""
def get_config(self):
with open("examples/data.yml", 'r') as stream:
return yaml.safe_load(stream)
Hold up, that's nice but I still like using dictionary methods
Well then person reading this, Zeno is for you. All Classes are dictionary class hybrids, so you can access them like plain old dictionaries when necessary.
Spring()['Data']['myList'] # ['first', 'second', 'third']
Spring()['Data'].myList # ['first', 'second', 'third']
Spring() # {'Data': {'MongoDb': {'database': 'TESTDB', 'encryption': True, 'encryptionKey': 'FakePassWord!', 'password': '!54353Ffesf34', 'replicaSet': 'FAKE-DB-531'}, 'second': 1, 'myList': ['first', 'second', 'third']}}
Types
Zeno currently has 4 types, where auto conversion will happen based on the specified type. It also brings a little static typing to Python. The plan is to add more, but currently Zeno supports: Integer
, String
, Boolean
, List
. Supported types can be found here
If you have another type you'd like but it isn't supported, etc. None
can be used to tell Zeno to not handle conversion
Choosing What to Map
Zeno is powerful. Only specify what you'd like to map and Zeno ignores the rest
class Spring(Configuration):
class Data:
class MongoDb:
database = String()
Using sections to map super nested dictionaries/ignore nesting classes (WIP)
class MyConfig(Configuration):
__section__ = 'Spring.Data.Mongodb'
database = String()
encryption = Boolean()
encryptionKey = String()
password = String()
replicaSet = String()
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.