libconf - a Python reader for libconfig files
This weekend, I uploaded my first package to PyPI: libconf, a pure-Python reader for files in libconfig format. This configuration file format is reminiscent of JSON and is mostly used in C/C++ projects through the libconfig library. It looks like this:
version = 7;
window: {
title: "libconfig example"
position: { x: 375; y: 210; w: 800; h: 600; }
};
capabilities: {
can-do-lists: (true, 0x3A20, ("sublist"), {subgroup: "ok"})
can-do-arrays: [3, "yes", True]
};
There are already two Python implementations: pylibconfig2 is a pure-Python reader licensed under GPLv3 and python-libconfig provides bindings for the libconfig C++ library. The first one I didn't like because of it's licensing, the second one I didn't like because of the more involved installation procedure. Also, I kind of enjoy writing parsers.
So, I set down during the easter weekend and wrote libconf. It's a pure-Python
reader for libconfig files with an interface similar to the Python
json
module. There are two main methods: load(f)
and
loads(string)
. Both return a dict
-like data-structure that can be indexed
(config['version']
), but supports attribute access as well
(config.version
):
import libconf
>>> with open('example.cfg') as f:
... config = libconf.load(f)
>>> config['window']['title']
'libconfig example'
>>> config.window.title
'libconfig example'
It was a fun little project. Creating a recursive descent parser is pretty straightforward, especially for such a simple file format. Writing documentation, packaging and uploading to GitHub and PyPI took longer than coding up the implementation itself.
Comments