📄⇄🛠Two way configurations mapping helper for Python
MIT License
Two way configurations mapping helper for Python.
from biconfigs import Biconfigs
configs = Biconfigs('configs.json')
# Simply change the dict, and it will automatically save the changes to file.
configs['options'] = {'debug': True,
'username': 'Anthony',
'list': [] }
# Access with simple 'x.y.z' style
configs.options.list.append('example')
Content of file configs.json
after execution:
{
"options": {
"debug": true,
"list": [
"example"
],
"username": "Anthony"
}
}
* Biconfigs also supports CSON and YAML file formats.
pip install biconfigs
No dependencies required
Tested on Python 2.6
, 2.7
, 3.3
, 3.4
, 3.5
, pypy
, pypy3
setdefault
, etc.
# All the following single statement will cause saving
configs['item'] = 'value'
configs['options'] = {}
configs.options['list'] = []
configs.options.list.append('example')
configs.options['list'] = []
configs.options.clear()
value2 = configs.setdefault('item2', 45)
# All the following single statement will NOT cause saving
value = configs.item
configs['item'] = 'value' # The value of 'item' is not changed
value3 = configs.get('item_not_exists', 'default_value')
By default, Biconfigs use asynchronous saving. You can disable the feature
by setting async_write
to False
# set "async_write=False" if your want to use synchronous saving
# to ensure your data saved to file in time,
# WARNING: In sync mode, your changes will block the incoming statement
# until the file correctly saved.
configs = Biconfigs('configs.json', async_write=False)
configs['item'] = 'value' # Blocking
# Configure file saved already
# Your code...
Normally, Biconfigs will write the changes to file immediately. But sometime you
may want to update values frequently, which will result in a IO bottleneck. So you
can use with
statement to prevent auto saving for a while.
with configs:
for i in range(1000):
configs['some_key'] = i
# This statement will execute saving process only one time when exiting "with" scope
Simply use reload
function to reload from file.
Note: reload
will discard all present data in Biconfigs-object and loads new ones from file)
configs.reload()
Biconfigs use Prettified Json
as default parser.
You may want to set parser='json'
to save as compacted json file.
configs = Biconfigs('configs.json', parser='json')
configs['item'] = 'value'
configs['debug'] = False
configs.json:
{"debug": false, "item": "value"}
Available Parsers
json
: Compact JSON formatpretty-json
: Prettified JSONcson
: CSON format, refer to CSON
yaml
: YAML format, refer to YAML
Biconfigs supports CSON by avakar/pycson
from biconfigs import Biconfigs
from biconfigs import parser_cson
configs = Biconfigs('configs.cson', parser='cson')
# Then use biconfigs as you normally would...
Extra requirements
To use CSON, you need to install extra requirement
pip install biconfigs[cson]
Or install cson
manually:
pip install cson
CSON problems
Please check avakar/pycson: The Language
Biconfigs supports YAML by PyYAML
from biconfigs import Biconfigs
from biconfigs import parser_yaml
configs = Biconfigs('configs.yml', parser='yaml')
# Then use biconfigs as you normally would...
Extra requirements
To use YAML, you need to install extra requirement
pip install biconfigs[yaml]
Or install PyYAML
manually:
pip install PyYAML
MIT