Page:
Configuration Guide: `item_attributes`
Clone
1
Configuration Guide: `item_attributes`
Candifloss edited this page 2025-03-08 07:14:15 +00:00
Configuration Guide for item_attributes
The item_attributes list in config.py defines the structure and behavior of items in your inventory management system. Each item in the list is an instance of a class from definitions/attribute.py. This guide explains how to configure these attributes, their validation rules, and best practices.
Base Attribute Properties
All attribute types inherit from the Attribute base class and share the following properties:
| Property | Type | Description |
|---|---|---|
attrib_name |
str |
The name of the attribute (used in the database and code). |
display_name |
str |
The name displayed in the UI (e.g., form labels, table headers). |
html_input_type |
str |
The HTML input type (e.g., text, number, date, select). |
required |
bool |
Whether the attribute is required (default: False). |
unique |
bool |
Whether the attribute value must be unique (default: False). |
primary |
bool |
Whether the attribute is the primary key (default: False). |
default_val |
Optional[str] |
The default value for the attribute (default: None). |
compareto |
Optional[List[Tuple[str, str]]] |
Constraints comparing this attribute to another (e.g., [("lt", "other_attrib")]). |
Attribute Types
1. textAttribute
Used for string/text data.
Properties:
| Property | Type | Description |
|---|---|---|
regex |
Optional[str] |
A regex pattern to validate the input (e.g., r"^[A-Z0-9]+$"). |
min_length |
Optional[int] |
Minimum allowed length of the string (default: None). |
max_length |
Optional[int] |
Maximum allowed length of the string (default: 50). |
allowed_chars |
Optional[str] |
A string of allowed characters (e.g., "abcdefghijklmnopqrstuvwxyz"). |
Validation Rules:
- The
regexpattern must match the input (if provided). - The input length must be between
min_lengthandmax_length(if specified). - The input must only contain characters from
allowed_chars(if provided). - If
default_valis provided, it must satisfy all the above rules.
Example:
textAttribute(
attrib_name="hostname",
display_name="Host Name",
html_input_type="text",
required=True,
unique=True,
regex=r"^[a-z0-9.-_]+$", # Only lowercase letters, numbers, dots, hyphens, and underscores
min_length=3,
max_length=50,
allowed_chars="abcdefghijklmnopqrstuvwxyz0123456789.-_"
)
2. intAttribute
Used for integer data.
Properties:
| Property | Type | Description |
|---|---|---|
min_val |
Optional[int] |
Minimum allowed value (default: None). |
max_val |
Optional[int] |
Maximum allowed value (default: None). |
step |
int |
Step value for the HTML input (default: 1). |
Validation Rules:
- The input must be an integer.
- The input must be between
min_valandmax_val(if specified). - The
stepvalue must be a positive integer and smaller than the range (max_val - min_val). - If
default_valis provided, it must satisfy all the above rules.
Example:
intAttribute(
attrib_name="staffnum",
display_name="Staff No.",
html_input_type="number",
required=True,
min_val=100000, # 6 digits
max_val=99999999, # 8 digits
step=1
)
3. floatAttribute
Used for floating-point data.
Properties:
| Property | Type | Description |
|---|---|---|
min_val |
Optional[float] |
Minimum allowed value (default: None). |
max_val |
Optional[float] |
Maximum allowed value (default: None). |
step |
float |
Step value for the HTML input (default: 0.1). |
Validation Rules:
- The input must be a floating-point number.
- The input must be between
min_valandmax_val(if specified). - The
stepvalue must be positive and smaller than the range (max_val - min_val). - If
default_valis provided, it must satisfy all the above rules.
Example:
floatAttribute(
attrib_name="price",
display_name="Price",
html_input_type="number",
required=True,
min_val=0.0,
max_val=1000.0,
step=0.01
)
4. dateAttribute
Used for date data.
Properties:
| Property | Type | Description |
|---|---|---|
min_val |
Optional[str] |
Minimum allowed date (format: YYYY-MM-DD, default: None). |
max_val |
Optional[str] |
Maximum allowed date (format: YYYY-MM-DD, default: None). |
Validation Rules:
- The input must be a valid date in
YYYY-MM-DDformat. - The input must be between
min_valandmax_val(if specified). - If
default_valis provided, it must satisfy all the above rules.
Example:
dateAttribute(
attrib_name="warrantyfrom",
display_name="Warranty From",
html_input_type="date",
required=True,
min_val="2020-01-01",
max_val="2030-12-31"
)
5. selectAttribute
Used for dropdown selection menus.
Properties:
| Property | Type | Description |
|---|---|---|
options |
List[str] |
A list of allowed options (e.g., ["Active", "Inactive"]). |
Validation Rules:
- The input must be one of the options in the
optionslist. - If
default_valis provided, it must be one of the options.
Example:
selectAttribute(
attrib_name="status",
display_name="Status",
html_input_type="select",
required=True,
options=["Active", "Inactive"],
default_val="Active"
)
Validation Rules
Each attribute class has a validate() method that ensures the configuration is valid. Common validation rules include:
- Required Fields: Must have a value.
- Unique Fields: Must not conflict with existing values.
- Regex Patterns: Must match the input (for
textAttribute). - Numeric Values: Must fall within the specified range (for
intAttributeandfloatAttribute). - Dates: Must be in the correct format and within the allowed range (for
dateAttribute). - Select Options: Must include the default value (for
selectAttribute).
Best Practices
-
Primary Key:
- Ensure one attribute is marked as
primary=True. - This attribute will be used as the unique identifier for each item.
- Example:
textAttribute( attrib_name="assettag", display_name="Asset Tag", html_input_type="text", primary=True )
- Ensure one attribute is marked as
-
Unique Fields:
- Use
unique=Truefor attributes that must have unique values (e.g.,assettag). - Example:
textAttribute( attrib_name="hostname", display_name="Host Name", html_input_type="text", unique=True )
- Use
-
Default Values:
- Provide sensible defaults for required fields to simplify user input.
- Example:
dateAttribute( attrib_name="warrantyfrom", display_name="Warranty From", html_input_type="date", default_val="2020-01-01" )
-
Validation:
- Use
regex,allowed_chars, and length constraints to enforce data integrity. - Example:
textAttribute( attrib_name="hostname", display_name="Host Name", html_input_type="text", regex=r"^[a-z0-9.-_]+$", allowed_chars="abcdefghijklmnopqrstuvwxyz0123456789.-_" )
- Use
-
Constraints with
compareto:- Use
comparetoto enforce relationships between attributes (e.g., start date < end date). - Example:
dateAttribute( attrib_name="start_date", display_name="Start Date", html_input_type="date", compareto=[("lt", "end_date")] ), dateAttribute( attrib_name="end_date", display_name="End Date", html_input_type="date" )
- Use
Additional Notes
- Configuration Validation:
- The
validate_configfunction infunctions/validate_config.pyensures the configuration is valid. - It checks for duplicate attribute names, valid attribute properties, and valid
comparetoconstraints.
- The
- Dynamic Table Creation:
- The
create_asset_modelfunction indefinitions/models.pydynamically creates the database table based on theitem_attributesconfiguration.
- The