Skip to content

column

Column

Bases: BaseModel

Represents a Column of a Table.

Source code in src/cloe_nessy/models/column.py
class Column(BaseModel):
    """Represents a Column of a Table."""

    name: str
    data_type: str
    nullable: bool = True
    default_value: Any = None
    generated: str | None = None
    properties: dict[str, Any] = Field(default_factory=dict)
    comment: str | None = None

    @field_validator("data_type", mode="before")
    def data_type_transform(cls, raw: str) -> str:
        """Map potential aliases to the correct SQL data type.

        Args:
            raw: The value for the data type.
        """
        val = raw.lower()
        base_data_types = re.findall(r"\b[a-z]+\b", val)
        forbidden_characters = re.findall(r"[^a-z\<\>)]+", val)

        if forbidden_characters:
            raise ValueError(f"Forbidden characters in data type definition [ '{val}' ]: [' {forbidden_characters} ']")
        for base_data_type in base_data_types:
            if base_data_type not in COLUMN_DATA_TYPE_LIST:
                raise ValueError(f"Unknown data type used in data type definition [ '{val}' ]")
        return val

    @model_validator(mode="before")
    def _validate_generated_and_default_value(cls, v: Any) -> Any:
        """Check if a column has a default value and is generated.

        That doesn't make sense, so an error should be raised.
        """
        if v.get("default_value") and v.get("generated"):
            raise ValueError("A column can't have a default value and be generated.")
        if (v.get("default_value") or v.get("generated")) and v.get("nullable") is True:
            raise ValueError("A column can't have a default value or be generated and be nullable.")
        return v

_validate_generated_and_default_value(v)

Check if a column has a default value and is generated.

That doesn't make sense, so an error should be raised.

Source code in src/cloe_nessy/models/column.py
@model_validator(mode="before")
def _validate_generated_and_default_value(cls, v: Any) -> Any:
    """Check if a column has a default value and is generated.

    That doesn't make sense, so an error should be raised.
    """
    if v.get("default_value") and v.get("generated"):
        raise ValueError("A column can't have a default value and be generated.")
    if (v.get("default_value") or v.get("generated")) and v.get("nullable") is True:
        raise ValueError("A column can't have a default value or be generated and be nullable.")
    return v

data_type_transform(raw)

Map potential aliases to the correct SQL data type.

Parameters:

Name Type Description Default
raw str

The value for the data type.

required
Source code in src/cloe_nessy/models/column.py
@field_validator("data_type", mode="before")
def data_type_transform(cls, raw: str) -> str:
    """Map potential aliases to the correct SQL data type.

    Args:
        raw: The value for the data type.
    """
    val = raw.lower()
    base_data_types = re.findall(r"\b[a-z]+\b", val)
    forbidden_characters = re.findall(r"[^a-z\<\>)]+", val)

    if forbidden_characters:
        raise ValueError(f"Forbidden characters in data type definition [ '{val}' ]: [' {forbidden_characters} ']")
    for base_data_type in base_data_types:
        if base_data_type not in COLUMN_DATA_TYPE_LIST:
            raise ValueError(f"Unknown data type used in data type definition [ '{val}' ]")
    return val