INI-files parser with schemes and types
Project description
INI-files parser with schemes and types
Philosophy of Zini
Application’s settings must be simple! In it should be a code or complex structures. Must be only a simple types.
Why not…
JSON?
JSON is uncomfortable and unextendable.
YAML?
The YAML is like a garden of rakes. It’s very complex format. I do not need all it’s futures.
Configparser?
Configparser is ugly;
Configparser is overengineered;
Configparser is not have type casting;
Configparser is not have type checking;
Configparser is… configparser.
Supported types
- boolean:
simple true or false, e.g. key = true
- int:
simple numeric type, e.g. key = 13
- float:
float type, e.g. key = 3.14
- string:
strings always uses quotes, e.g. key = "some string"
- datetime:
datetime formated like as ISO 8601
YYYY-MM-DD
YYYY-MM-DD hh:mm
YYYY-MM-DD hh:mm:ss
YYYY-MM-DD hh:mm:ss.sss
When the time, you can set timezone as Z or ±hh:mm.
E.g.:
key = 2005-01-13
key = 2005-01-13 18:05:00
key = 2005-01-13 15:05:00 +03:00
key = 2005-01-13 15:00Z
- timedelta:
durations:
key = 20m — 20 minutes
key = 10h2m — 10 hours and 2 minutes
key = 1w2s — one week (7 days) and 2 seconds
key = 1s20ms — one 2 second and 20 milliseconds
key = 1w1d1h1m1s1ms — 694861001 milliseconds
- list:
list of values:
key = "string value" 2005-01-13 18:
00:0513
Examples
$ cat tests/test.ini
# first comment
[first]
boolean = false
integer = 13
[second]
; second comment
boolean = true
string = "some string"
[complex]
list =
"string"
"string too"
"else string"
Simple reading
>>> from zini import Zini
>>> ini = Zini()
>>> result = ini.read('tests/test.ini')
>>> isinstance(result, dict)
True
>>> result['first']['boolean'] is False # automatic type casting
True
>>> result['first']['integer'] == 13
True
>>> result['second']['string'] == "some string"
True
>>> result['complex']['list'] == ["string", "string too", "else string"]
True
Types and defaults
>>> from zini import Zini
>>> ini = Zini()
>>> ini['first']['integer'] = str # set type
>>> result = ini.read('tests/test.ini')
zini.ParseError: error in line 3: 'integer = 13'
>>> from zini import Zini
>>> ini = Zini()
>>> ini['second']['boolean'] = "string" # set type and default value
>>> result = ini.read('tests/test.ini')
zini.ParseError: error in line 7: 'boolean = true'
Lists of values
>>> import zini
>>> ini = zini.Zini()
>>> ini['third']['generic'] = [str]
>>> result = ini.read('tests/test.ini')
ParseError: error in line 20: ' 10'
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file zini-1.1.0.tar.gz
.
File metadata
- Download URL: zini-1.1.0.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ac1e91180b8d483eff1697332c774860983cf927c24810aae47011f00279c554 |
|
MD5 | 33eb739f551aa88e8986636ee57095fc |
|
BLAKE2b-256 | eee800051aae34d941df588e45b82f86d0602df90da6ed129ed77c43a74e502b |
File details
Details for the file zini-1.1.0-py3-none-any.whl
.
File metadata
- Download URL: zini-1.1.0-py3-none-any.whl
- Upload date:
- Size: 5.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3525836ec7e59d964fa691a964a424ce3c2e5b2ff33ee33832bbb4af434cb4c9 |
|
MD5 | af9e507a72dac4dbab97946416a2ad27 |
|
BLAKE2b-256 | 2228f74d3931788d26e45d7f28d1469ee5a6811b2bd7ea4ebd998a1cacbdbfde |