The code is arranged as follows
DataItemBase
: This is an abstract class that defines an interface. Most of the interface throw "Not Implemented". It also contains hooks so the latter derived classes can implement dependency relationships. Please see data_item_base.py for more explanations.DataItem
: This is a concrete data item with actual value. The type of values it can be are limited to a set of fundamental types + "datetime". Also once a data item is declared, it cannot change type (like other Python variables) with a couple of exceptions. Please see data_item.py for more explanation.ContainerItem
: This is a tubular container of data items accessible by column name or index and row index. Because of this recursive definition, a container item column can be another container item. So, container item is really not tabular. It could take any arbitrary shape. Please see container_item.py for more explanation.SystemItem
: This is where dependency mechanism is implemented. You can define a dependency which signifies an independent column -> dependent column relationships between columns. Circular dependencies are allowed and handled properly by going around the circle a set number of times. You can also define actions on columns. Please see system_item.py and test_system_item.py for more explanation and example.