config¶
This page contains tutorials about the config
package.
Creating a configuration file with a single variable¶
The entry point to the config module is the config.manager.ConfigManager
class. This class is effectively a representation of your configuration file
in Python. It allows you to perform a number of operations to your config
file. You can add console variables as well as commands to execute. The
config.manager.ConfigManager
class will also place information about
each console variable in a comment block above the actual variable. Here is an
example script that creates a configuration file called addon.cfg
in
../cfg/source-python/
. This configuration file contains a single variable
called addon_player_damage
which defaults to 64:
# =============================================================================
# >> IMPORTS
# =============================================================================
# Source.Python Imports
# Config
from config.manager import ConfigManager
# Cvars
from cvars.flags import ConVarFlags
# Create the configuration file.
addon_config = ConfigManager('addon')
# Modify the header of the entire configuration file.
addon_config.header = 'Addon configuration file.'
# Create a console variable to add to the configuration file.
addon_player_damage = addon_config.cvar(
'addon_player_damage', '64',
'How much damage to cause to each player.', ConVarFlags.CHEAT
)
# Write the configuration file out to the folder.
addon_config.write()
# Execute the configuration file.
addon_config.execute()
And here is the resulting addon.cfg file:
// ######################################################################### //
// Addon configuration file. //
// ######################################################################### //
// Default Value: 64
// How much damage to cause to each player.
addon_player_damage "64"
Adding additional documentation to console variables¶
The config package allows you to write in additional information about a given
console variable. These appear as a header comment section above the variable.
The following example script adds a comment block above addon_player_damage
called Description
:
# =============================================================================
# >> IMPORTS
# =============================================================================
# Source.Python Imports
# Config
from config.manager import ConfigManager
# Cvars
from cvars.flags import ConVarFlags
# =============================================================================
# >> IMPLEMENTATION
# =============================================================================
# Create the configuration file.
addon_config = ConfigManager('addon')
# Modify the header of the entire configuration file.
addon_config.header = 'Addon configuration file.'
# Create a console variable. Note that this returns a
# _CvarManager instance which I can then add additional
# lines of text to. Note: This actually creates the
# console variable.
addon_player_damage = addon_config.cvar(
'addon_player_damage', '64',
'How much damage to cause to each player.', ConVarFlags.CHEAT
)
# I want to add some extra documentation for this variable.
# This creates a comment block called 'Description' right above
# the console command.
addon_player_damage.Description.append(
'Here is additional documentation on addon_player_damage.')
addon_player_damage.Description.append(
'Even more documentation.')
# Write the configuration file out to the folder.
# Any values modified by the server administrator will
# remain unchanged.
addon_config.write()
# Execute the configuration file.
addon_config.execute()
Which results in the following configuration file:
// ######################################################################### //
// Addon configuration file. //
// ######################################################################### //
// Description
// * Here is additional documentation on addon_player_damage.
// * Even more documentation.
// Default Value: 64
// How much damage to cause to each player.
addon_player_damage "64"
Couple of key takeaways from this example:
- The
config.manager.ConfigManager.cvar()
andconfig.manager.ConfigManager.command()
methods return objects which you can add string fields to. These fields get written as comment blocks above your console variable. - A server operator can change the default values in the configuration file. These changes will remain even if you call
config.manager.ConfigManager.write()
.
Adding sections¶
Adding sections to your configuration file is extremely simple. Just call the
config.manager.ConfigManager.section()
method. You can also pass in a
character to use in order to create the section boundaries:
# =============================================================================
# >> IMPORTS
# =============================================================================
# Source.Python Imports
# Config
from config.manager import ConfigManager
# Cvars
from cvars.flags import ConVarFlags
# =============================================================================
# >> IMPLEMENTATION
# =============================================================================
# Create the configuration file.
addon_config = ConfigManager('addon')
# Modify the header of the entire configuration file.
addon_config.header = 'Addon configuration file.'
# Create a console variable. Note that this returns a
# _CvarManager instance which I can then add additional
# lines of text to. Note: This actually creates the
# console variable.
addon_player_damage = addon_config.cvar(
'addon_player_damage', '64',
'How much damage to cause to each player.', ConVarFlags.CHEAT
)
# I want to add some extra documentation for this variable.
# This creates a comment block called 'Description' right above
# the console command.
addon_player_damage.Description.append(
'Here is additional documentation on addon_player_damage.')
addon_player_damage.Description.append(
'Even more documentation.')
# Add in a custom section now. Use the '$' sign to designate
# boundaries.
custom_section = addon_config.section('My custom section', '$')
# Add another variable.
addon_player_model = addon_config.cvar(
'addon_player_model', 'models/player.mdl',
'Model to set on the player.', ConVarFlags.CHEAT
)
# Write the configuration file out to the folder.
# Any values modified by the server administrator will
# remain unchanged.
addon_config.write()
# Execute the configuration file.
addon_config.execute()
This generates the following configuration file:
// ######################################################################### //
// Addon configuration file. //
// ######################################################################### //
// Description
// * Here is additional documentation on addon_player_damage.
// * Even more documentation.
// Default Value: 64
// How much damage to cause to each player.
addon_player_damage "64"
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ //
// My custom section //
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ //
// Default Value: models/player.mdl
// Model to set on the player.
addon_player_model "models/player.mdl"
Using context management¶
All of the above examples show explicitly calling the config.manager.ConfigManager.write()
and config.manager.ConfigManager.execute()
methods. You can also
automatically call these by using context management:
# =============================================================================
# >> IMPORTS
# =============================================================================
# Source.Python Imports
# Config
from config.manager import ConfigManager
# Cvars
from cvars.flags import ConVarFlags
# Create the configuration file.
# Using 'with' will utilize the __enter__ and __exit__ methods to
# automatically write and execute the configuration file.
with ConfigManager('addon') as addon_config:
# Modify the header of the entire configuration file.
addon_config.header = 'Addon configuration file.'
# Create a console variable to add to the configuration file.
addon_player_damage = addon_config.cvar(
'addon_player_damage', '64',
'How much damage to cause to each player.', ConVarFlags.CHEAT
)
For reference: contextlib