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