Firenado extends the Tornado web framework which uses ini files to help developers to configure theirs applications.
Besides the fact the ini configuration from Tornado is pretty easy and straight forward to use, it just define key/value structures.
Let’s assume that someone wants to define hierarchical configuration structures . It is necessary create indexes that represent the hierarchy(i.e. my.hierarchical.index) and the file will be organized in a key/value manner. In this case the developer assumes the index is structured hierarchically or some extra development is needed to represent this data as should be in memory.
A key/value structure isn’t a problem if the application configuration is simple. When a project requires lots of configurable parameters ini files can be overwhelming.
Firenado uses yaml files instead that are organized in a hierarchical structure and can define lists and dictionaries values instead of only strings. With yaml boolean and numeric values are resolved with the same time when we consume them in the python side.
A Firenado application is defined by a configuration file. This file will define application aspects like session, data sources or the port to listen. The application file will overload configuration set by framework and system levels.
The framework config file will define the framework parts like:
- Firenado components offered by the framework
- Data connectors, used to connect to databases
- Log configuration
- Firenado cli management commands
- Session handlers and encoders
On the system config file level it is possible to define system level:
- Firenado components
- Data sources
- Custom data connectors
- Log configuration
- Custom cli managment commands
- Custom Session handlers and encoders
The app config file will define the application component and tornado behaviour(ie. port or socket, number of processes forked, etc). It is also possible to configure on this level:
- Data sources used by the application
- If session is enabled and what session handler and encoder is being used by
the application - Override framework and system configuration