Defining custom configuration

Any code you write using Reahl is packaged as a component even your web application itself.

Each Reahl component used by an application can have its own configuration file located in a common configuration directory.

The tutorial.componentconfigbootstrap example shows how to make a component read configuration from such a file. The example uses its own config setting (componentconfig.showheader) to control whether AddressBookPanel has a heading or not.

The Configuration for the system is available anywhere in your code as config of the current ExecutionContext:

class AddressBookPanel(Div):
    def __init__(self, view):
        super().__init__(view)

        config = ExecutionContext.get_context().config
        if config.componentconfig.showheader:
            self.add_child(H(view, 1, text='Addresses'))
        
        for address in Session.query(Address).all():
            self.add_child(AddressBox(view, address))

        self.add_child(AddAddressForm(view))

AddressConfig (which inherits from Configuration) defines the available configuration settings and associated information. Declare each config setting by assigning an instance of ConfigSetting to a class attribute of AddressConfig with the name you want:

class AddressConfig(Configuration):
    filename = 'componentconfig.config.py'
    config_key = 'componentconfig'

    showheader = ConfigSetting(default=False, description='Whether the title should be shown as a heading too')

Note

It is good practice to always provide a default value for a setting. If all your settings have sensible defaults, your application can be started up and run without any config file present at all–something a new user will appreciate. Similarly, the description is used to enable useful output when you run, for example:

reahl listconfig -i etc/

In the .reahlproject file, AddressConfig is added as the configuration of the component:

 <configuration locator="reahl.doc.examples.tutorial.componentconfigbootstrap.componentconfigbootstrap:AddressConfig"/>

Config files contain Python code. In componentconfig.config.py (the filename) an instance of AddressConfig is available as componentconfig (the config_key):


componentconfig.showheader = True