Accessing the Values in the Parsed Document
Once parsed, a configuration file becomes a Document
instance,
which itself is derived from Value
.
You can think of it as a tree of values and sections, and you can access these values in several different ways depending on your needs.
Accessing Values via Name-Path
If you know the fixed names of the values in your configuration, you can access them directly using a string-based name-path:
import erbsland.conf as elcl
try:
doc = elcl.load("configuration.elcl")
server_port = doc["server.port"].as_int()
server_host = doc["server.host"].as_text()
# ...
except elcl.Error as e:
print(f"Failed to load configuration: {e}")
The path is always resolved relative to the instance you access it from.
Note
When you use a string name-path, it must be parsed and validated on every lookup. If you repeatedly access the same values, it is more efficient to pre-compile the name-paths once:
SERVER_PORT = elcl.NamePath.from_text("server.port")
SERVER_HOST = elcl.NamePath.from_text("server.host")
This way, any syntax errors are raised early (at definition time), and lookups are faster.
Accessing Values via Index
Every Value
also behaves like a Python list,
so you can access elements using an index:
first_server = doc["server"][0]
last_server = doc["server"][-1]
The difference to regular Python lists is that errors are not raised as IndexError
,
but as ConfValueNotFound
.
Iterating over Value and Section Lists
Every value is iterable. This makes it easy to loop through lists of sections or values:
for server_value in doc["server"]:
port = server_value["port"].as_int()
host = server_value["host"].as_text()
# ...
This is especially useful when your configuration defines multiple sections of the same kind (for example, multiple servers, clients, or plugins).