Skip to content

trestle.core.trestle_base_model

trestle.core.trestle_base_model ¤

Trestle Base Model.

Attributes¤

Model = TypeVar('Model', bound='BaseModel') module-attribute ¤

Classes¤

TrestleBaseModel ¤

Bases: BaseModel


              flowchart TD
              trestle.core.trestle_base_model.TrestleBaseModel[TrestleBaseModel]

              

              click trestle.core.trestle_base_model.TrestleBaseModel href "" "trestle.core.trestle_base_model.TrestleBaseModel"
            

Trestle Base Model. Serves as wrapper around BaseModel for overriding methods.

Source code in trestle/core/trestle_base_model.py
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
class TrestleBaseModel(BaseModel):
    """Trestle Base Model. Serves as wrapper around BaseModel for overriding methods."""

    @classmethod
    def model_validate(
        cls: Type['Model'],
        obj: Any,
        *,
        strict: bool | None = None,
        from_attributes: bool | None = None,
        context: dict[str, Any] | None = None,
        extra: Any = None,
        by_alias: bool | None = None,
        by_name: bool | None = None,
    ) -> 'Model':
        """Validate object to the given class."""
        try:
            return super().model_validate(
                obj,
                strict=strict,
                from_attributes=from_attributes,
                context=context,
                extra=extra,
                by_alias=by_alias,
                by_name=by_name,
            )
        except ValidationError as e:
            # check if failed due to the wrong OSCAL version:
            oscal_version_error = False
            message = ''
            for err in e.errors():
                for field in err['loc']:
                    if field == 'oscal-version':
                        message = err['msg']
                        oscal_version_error = True
                        break
            if oscal_version_error:
                raise TrestleError(f'{message}')
            else:
                raise

    @classmethod
    def parse_obj(cls: Type['Model'], obj: Any) -> 'Model':
        """Parse object to the given class. Deprecated: use model_validate instead."""
        return cls.model_validate(obj)
Methods:¤
model_validate(obj, *, strict=None, from_attributes=None, context=None, extra=None, by_alias=None, by_name=None) classmethod ¤

Validate object to the given class.

Source code in trestle/core/trestle_base_model.py
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
@classmethod
def model_validate(
    cls: Type['Model'],
    obj: Any,
    *,
    strict: bool | None = None,
    from_attributes: bool | None = None,
    context: dict[str, Any] | None = None,
    extra: Any = None,
    by_alias: bool | None = None,
    by_name: bool | None = None,
) -> 'Model':
    """Validate object to the given class."""
    try:
        return super().model_validate(
            obj,
            strict=strict,
            from_attributes=from_attributes,
            context=context,
            extra=extra,
            by_alias=by_alias,
            by_name=by_name,
        )
    except ValidationError as e:
        # check if failed due to the wrong OSCAL version:
        oscal_version_error = False
        message = ''
        for err in e.errors():
            for field in err['loc']:
                if field == 'oscal-version':
                    message = err['msg']
                    oscal_version_error = True
                    break
        if oscal_version_error:
            raise TrestleError(f'{message}')
        else:
            raise
parse_obj(obj) classmethod ¤

Parse object to the given class. Deprecated: use model_validate instead.

Source code in trestle/core/trestle_base_model.py
68
69
70
71
@classmethod
def parse_obj(cls: Type['Model'], obj: Any) -> 'Model':
    """Parse object to the given class. Deprecated: use model_validate instead."""
    return cls.model_validate(obj)

handler: python