Registry Model Features¶
A dictionary of particular features (e.g. custom fields) mapped to the Nautobot models which support them, arranged by app.
Add a new feature to the model_features
registry¶
The populate_model_features_registry()
function updates the registry model features with new apps. This is done by defining a list of dictionaries called lookup_confs
. Each dictionary in lookup_confs
contains the following three keys:
feature_name
: The name of the feature to be updated in the registry.field_names
: A list of names of fields that must be present in order for the model to be considered a validmodel_feature
.field_attributes
: An optional dictionary of attributes used to filter the fields. Only models with fields matching all the attributes specified in the dictionary will be considered. This parameter can be useful to narrow down the search for fields that match certain criteria. For example, iffield_attributes
is set to{"related_model": RelationshipAssociation}
, only fields with arelated_model
ofRelationshipAssociation
will be considered.
To add a new feature to the lookup_confs
list, follow these steps:
- Determine the name of the feature to be added, This name should be in
snake_case
as per convention - Determine the names of the fields that must be present in order for the model to be considered a valid
model_feature
. - (Optional) Determine any field attributes that can be used to filter the fields if
field_names
would not be enough. - Add a new dictionary with the following keys to
lookup_confs
which is innautobot.extras.utils.populate_model_features_registry()
:feature_name
: The name of the feature.field_names
: The list of names of fields.field_attributes
: (Optional) The dictionary of attributes to filter the fields.
from nautobot.extras.models.relationships import RelationshipAssociation
def populate_model_features_registry():
"""..."""
lookup_confs = [
...,
{
"feature_name": "relationships",
"field_names": ["source_for_associations", "destination_for_associations"],
"field_attributes": {"related_model": RelationshipAssociation},
},
...
]
With this only Models which have fields names of source_for_associations
and destination_for_associations
, which in turn has the attribute related_model=RelationshipAssociation
, would be a valid model for the feature relationships
.
Note
populate_model_features_registry()
and lookup_confs
provide an alternative to the older method of feature flagging models via the @extras_features
decorator. In general new feature flags should preferentially be implemented via additions to lookup_confs
, not by any new additions to extras_features
.