Skip to content

Models

CFM dataclass

CFM(root: Feature, constraints: list[Constraint])

Dataclass representing a feature model.

constraints instance-attribute

constraints: list[Constraint]

List of constraints in the feature model.

features property

features: list[Feature]

Dynamically computed list of all features in the feature model.

is_unbound property

is_unbound: bool

Check if the feature model is unbound.

root instance-attribute

root: Feature

Root feature of the feature model.

Feature dataclass

Feature(name: str, instance_cardinality: Cardinality, group_type_cardinality: Cardinality, group_instance_cardinality: Cardinality, parent: Feature | None, children: list[Feature])

Dataclass representing a feature in a feature model.

children instance-attribute

children: list[Feature]

List of child features.

group_instance_cardinality instance-attribute

group_instance_cardinality: Cardinality

Group instance cardinality of the feature.

group_type_cardinality instance-attribute

group_type_cardinality: Cardinality

Group type cardinality of the feature.

instance_cardinality instance-attribute

instance_cardinality: Cardinality

Instance cardinality of the feature

is_required property

is_required: bool

Check if the feature is required.

is_unbound property

is_unbound: bool

Check if the feature is unbound.

name instance-attribute

name: str

Globally unique name of the feature.

parent instance-attribute

parent: Feature | None

Parent feature. None if root feature.

Cardinality dataclass

Cardinality(intervals: list[Interval])

Dataclass representing a cardinality.

intervals instance-attribute

intervals: list[Interval]

Ordered list of cardinality intervals.

is_valid_cardinality

is_valid_cardinality(value: int) -> bool

Check if a value is a valid cardinality for the given intervals.

Source code in cfmtoolbox/models.py
def is_valid_cardinality(self, value: int) -> bool:
    """Check if a value is a valid cardinality for the given intervals."""

    for interval in self.intervals:
        if (interval.lower <= value) and (
            interval.upper is None or interval.upper >= value
        ):
            return True
    return False

Interval dataclass

Interval(lower: int, upper: int | None)

Dataclass representing a cardinality interval.

lower instance-attribute

lower: int

Lower bound of the interval.

upper instance-attribute

upper: int | None

Upper bound of the interval. None if unbounded.

ConfigurationNode dataclass

ConfigurationNode(value: str, children: list[ConfigurationNode])

Dataclass representing configuration of a CFM feature.

children instance-attribute

List of child feature nodes.

value instance-attribute

value: str

Value of the feature node.

validate

validate(cfm: CFM) -> bool

Validate the feature node against the feature model.

Source code in cfmtoolbox/models.py
def validate(self, cfm: CFM) -> bool:
    """Validate the feature node against the feature model."""

    # Check if root feature is valid
    if cfm.root.name != self.value.split("#")[0]:
        return False

    if not self.validate_children(cfm.root):
        return False

    return self.validate_constraints(cfm)