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:05 13
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'
Metadata
Release files for zini 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| zini-1.1.0.tar.gz | 5.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zini-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 10.4 kB
Release files / zini-1.1.0.tar.gz
| Download URL | zini-1.1.0.tar.gz |
|---|---|
| Size | 5.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ac1e91180b8d483eff1697332c774860983cf927c24810aae47011f00279c554
|
|
BLAKE2b-256 checksum How to use checksums |
eee800051aae34d941df588e45b82f86d0602df90da6ed129ed77c43a74e502b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
Release files / zini-1.1.0-py3-none-any.whl
| Download URL | zini-1.1.0-py3-none-any.whl |
|---|---|
| Size | 5.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3525836ec7e59d964fa691a964a424ce3c2e5b2ff33ee33832bbb4af434cb4c9
|
|
BLAKE2b-256 checksum How to use checksums |
2228f74d3931788d26e45d7f28d1469ee5a6811b2bd7ea4ebd998a1cacbdbfde
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |