Skip to content

version

trestle.core.commands.version ¤

Trestle Validate Command.

Attributes¤

logger = logging.getLogger(__name__) module-attribute ¤

Classes¤

VersionCmd ¤

Bases: CommandBase

Output version info for trestle and OSCAL.

Source code in trestle/core/commands/version.py
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
72
73
74
75
76
class VersionCmd(CommandBase):
    """Output version info for trestle and OSCAL."""

    name = 'version'

    def _init_arguments(self) -> None:
        self.add_argument('-n', '--name', help='Name of the OSCAL model', default=None, type=str)
        self.add_argument(
            '-t',
            '--type',
            help='Type of the model being queried: (catalog, profile, component-definition, ...)',
            default=None,
            type=str
        )

    def _get_version(self, type_name: str, obj_name: str, trestle_root: pathlib.Path) -> str:
        """Fetch the version of the OSCAL object from its metadata."""
        oscal_object, obj_path = ModelUtils.load_model_for_type(trestle_root, type_name, obj_name)  # type: ignore

        if not (oscal_object.metadata or oscal_object.metadata.version):  # type: ignore
            raise TrestleError(f'Unable to determine the version. Metadata version is missing in model: {obj_path}.')

        return oscal_object.metadata.version

    def _run(self, args: argparse.Namespace) -> int:
        try:
            status = CmdReturnCodes.COMMAND_ERROR.value

            if not args.name and not args.type:
                version_string = f'Trestle version v{__version__} based on OSCAL version {OSCAL_VERSION}'
                self.out(version_string)
                status = CmdReturnCodes.SUCCESS.value

            if not (args.name and args.type) and (args.name or args.type):
                raise TrestleError('Either both arguments --name and --type should be provided or none.')

            if args.name and args.type:
                trestle_root = pathlib.Path(args.trestle_root)
                version = self._get_version(args.type, args.name, trestle_root)
                version_string = f'Version of OSCAL object of {args.name} {args.type} is: {version}.'
                self.out(version_string)
                status = CmdReturnCodes.SUCCESS.value

            return status
        except Exception as e:  # pragma: no cover
            return handle_generic_command_exception(e, logger, 'Error occurred when running trestle version')
Attributes¤
name = 'version' class-attribute instance-attribute ¤

Functions¤

handler: python