Task headers¶
What is a table header¶
Each table in Lampyre is described by its header. Headers consist of their table name and fields. Every field in a header has a unique name, data type and some other features.
Fields and types¶
Every field should be of one of the following data types: string, integer, float, boolean or datetime. In the Lighthouse API these types are listed in the ValueType
special class . Also, if the field type is a string, it can contain binary information on an image or color. These data types are listed in the BinaryType
class.
Describing headers in the code¶
In order to describe a table header in a custom task script, one should create a class using a Header
metaclass and then describe the fields as this class’s properties, using the instances of the Field
:
class AccountsHeader(metaclass=Header):
display_name = 'Accounts'
Name = Field(display_name='Name', type=ValueType.String, system_name='name')
Age = Field('Age', ValueType.Integer)
UserPic = Field('Avatar', ValueType.String, binary_type=BinaryType.Image)
Reserved class property display_name here contains a table name.
The system_name argument in the Field
constructor is optional and serves as a unique identifier for the field in some cases.
Additional header properties¶
After defining your header class, you can change some of its field special properties using the set_property()
method. This method requires a field system name, special property name and its value.
Here are these properties:
datetime_format
- If a field is of the ValueType.DateTime type, you can set the custom format for dates in this column using C# formathidden
property allows hiding a field in the default table viewmultiline_width
sets the column width in pixelscoordinates
marks the field as the one containing coordinates in Geojsonlatitude
marks the field as containing data on latitudelongitude
marks the field as containing data on longitude
This is how to set such properties in a code:
AccountsHeader.set_property(AccountsHeader.UserPic.system_name, 'hidden', True)
Features¶
Header
classes have some additional features to make the development process easier:
create_empty()
creates a dictionary with header fields as keys (this is what write_line()
requires to add a row)
This is useful, because write_line requires the line dict to contain all the header fields.
line = AccountsHeader.create_empty() # this dictionary contains all AccountsHeader fields
line[AccountsHeader.Name] = 'John Galt'
result_writer.write_line(line, header_class=AccountsHeader)
get_fields()
creates a dictionary with the field names (as they are named in the class properties) as keys and fields as values
assert AccountsHeader.get_fields()['UserPic'] == AccountsHeader.UserPic # true
fields
returns a list of all the header fields
dtype
returns a dictionary with the field system names and data types for the Pandas.DataFrame constructor or other functions, like read_csv
import pandas as pd
df = pd.read_csv('accounts.csv', dtype=AccountsHeader.dtype)
print(df['Age'])
# 0 27
# 1 41
# ...
# Name: Age, dtype: int32