Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add parameter value origin field to parameters #1470

Merged
merged 27 commits into from
Dec 22, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
f9aca20
feat: add parameter value origin field to parameters
AleJo2995 Oct 19, 2023
2fccfbe
Merge branch 'develop' into fix/record-aditional-info
AleJo2995 Oct 19, 2023
8014121
Merge branch 'develop' into fix/record-aditional-info
AleJo2995 Oct 25, 2023
94ea07f
fix: remove wrong added field from oscal model
AleJo2995 Oct 31, 2023
2d51ba9
Merge branch 'develop' into fix/record-aditional-info
AleJo2995 Nov 10, 2023
015f2a6
fix: add param_value_origin to props and add validations
AleJo2995 Nov 10, 2023
338ad07
Merge branch 'fix/record-aditional-info' of https://github.com/IBM/co…
AleJo2995 Nov 10, 2023
4d3e5b1
Merge branch 'develop' into fix/record-aditional-info
AleJo2995 Nov 14, 2023
2e9d8ba
fix: correct ci
AleJo2995 Nov 14, 2023
6a6bc7c
Merge branch 'develop' into fix/record-aditional-info
AleJo2995 Nov 16, 2023
81bf9da
fix: correct param value origin cycle
AleJo2995 Nov 30, 2023
4fa3f9b
Merge branch 'fix/record-aditional-info' of https://github.com/IBM/co…
AleJo2995 Nov 30, 2023
284bd7c
fix: correct profile-param-value-origin flow
AleJo2995 Dec 5, 2023
a2cffce
fix: adding final corrections and test for inherited param-value-origin
AleJo2995 Dec 5, 2023
52c8920
fix: correct formating
AleJo2995 Dec 5, 2023
de1c86c
Merge branch 'develop' into fix/record-aditional-info
AleJo2995 Dec 5, 2023
1c984a2
fix: add step to ignore param-value-origin if no replacement was done…
AleJo2995 Dec 7, 2023
4adce20
Merge branch 'fix/record-aditional-info' of https://github.com/IBM/co…
AleJo2995 Dec 7, 2023
c2d9574
fix: correct code format
AleJo2995 Dec 7, 2023
fa0c238
Merge branch 'develop' into fix/record-aditional-info
AleJo2995 Dec 11, 2023
f628c69
fix: correct tests
AleJo2995 Dec 18, 2023
0e62504
Merge branch 'fix/record-aditional-info' of https://github.com/IBM/co…
AleJo2995 Dec 18, 2023
ef8ce5c
fix: use replace me placeholder instead of literal text
AleJo2995 Dec 18, 2023
56bbd8a
Merge branch 'develop' into fix/record-aditional-info
AleJo2995 Dec 19, 2023
928c7ba
Merge branch 'develop' into fix/record-aditional-info
AleJo2995 Dec 20, 2023
8cfc8de
fix: use replace me tag in default value for param-value-origin
AleJo2995 Dec 21, 2023
adde885
fix: correct code format
AleJo2995 Dec 21, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 46 additions & 0 deletions tests/trestle/core/commands/author/profile_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -1300,3 +1300,49 @@ def test_profile_generate_assesment_objectives(tmp_trestle_dir: pathlib.Path, mo
monkeypatch.setattr(sys, 'argv', test_args)

assert Trestle().run() == 0


def test_profile_generate_assemble_param_value_origin(tmp_trestle_dir: pathlib.Path, monkeypatch: MonkeyPatch) -> None:
"""Test the profile markdown generator."""
_, assembled_prof_dir, _, markdown_path = setup_profile_generate(tmp_trestle_dir, 'simple_test_profile.json')
yaml_header_path = test_utils.YAML_TEST_DATA_PATH / 'good_simple.yaml'
ac_path = markdown_path / 'ac'

# convert resolved profile catalog to markdown then assemble it after adding an item to a control
# generate, edit, assemble
test_args = f'trestle author profile-generate -n {prof_name} -o {md_name} -rs NeededExtra'.split( # noqa E501
)
test_args.extend(['-y', str(yaml_header_path)])
test_args.extend(['-s', all_sections_str])
monkeypatch.setattr(sys, 'argv', test_args)

assert Trestle().run() == 0

fc = test_utils.FileChecker(ac_path)

assert Trestle().run() == 0

assert fc.files_unchanged()

md_path = markdown_path / 'ac' / 'ac-1.md'
assert md_path.exists()
md_api = MarkdownAPI()
header, tree = md_api.processor.process_markdown(md_path)

assert header
header[const.SET_PARAMS_TAG]['ac-1_prm_1'][const.PARAM_VALUE_ORIGIN] = 'coming from xyz corporate policy'

md_api.write_markdown_with_header(md_path, header, tree.content.raw_text)

# assemble based on set_parameters_flag
test_args = f'trestle author profile-assemble -n {prof_name} -m {md_name} -o {assembled_prof_name}'.split()
test_args.append('-sp')
assembled_prof_dir.mkdir()
monkeypatch.setattr(sys, 'argv', test_args)
assert Trestle().run() == 0

profile, _ = ModelUtils.load_model_for_class(tmp_trestle_dir, 'my_assembled_prof',
prof.Profile, FileContentType.JSON)

# grabs first parameter in line and test out the value
assert profile.modify.set_parameters[0].param_value_origin == 'coming from xyz corporate policy'
2 changes: 2 additions & 0 deletions trestle/common/const.py
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,8 @@

GUIDELINES = 'guidelines'

PARAM_VALUE_ORIGIN = 'param-value-origin'

LABEL = 'label'

SECTIONS_TAG = TRESTLE_TAG + 'sections'
Expand Down
6 changes: 6 additions & 0 deletions trestle/common/model_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -631,6 +631,11 @@ def dict_to_parameter(param_dict: Dict[str, Any]) -> common.Parameter:
if const.AGGREGATES in param_dict:
# removing aggregates as this is prop just informative in markdown
param_dict.pop(const.AGGREGATES)
param_value_origin = None
if const.PARAM_VALUE_ORIGIN in param_dict:
param_value_origin = param_dict[const.PARAM_VALUE_ORIGIN]
# removing param-value-origin as this is prop don´t have any value
param_dict.pop(const.PARAM_VALUE_ORIGIN)
if const.ALT_IDENTIFIER in param_dict:
# removing alt-identifier as this is prop just informative in markdown
param_dict.pop(const.ALT_IDENTIFIER)
Expand All @@ -639,6 +644,7 @@ def dict_to_parameter(param_dict: Dict[str, Any]) -> common.Parameter:
param_dict.pop('ns')
param = common.Parameter(**param_dict)
param.props = none_if_empty(props)
param.param_value_origin = param_value_origin
return param

@staticmethod
Expand Down
4 changes: 3 additions & 1 deletion trestle/core/catalog/catalog_writer.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ def _construct_set_parameters_dict(
# pull only the values from the actual control dict
# all the other elements are from the profile set_param
new_dict[const.VALUES] = orig_dict.get(const.VALUES, None)
new_dict[const.PARAM_VALUE_ORIGIN] = None
new_dict[const.GUIDELINES] = orig_dict.get(const.GUIDELINES, None)
if new_dict[const.VALUES] is None:
new_dict.pop(const.VALUES)
Expand Down Expand Up @@ -197,7 +198,8 @@ def _construct_set_parameters_dict(
const.AGGREGATES,
const.ALT_IDENTIFIER,
const.DISPLAY_NAME,
const.PROFILE_VALUES
const.PROFILE_VALUES,
const.PARAM_VALUE_ORIGIN
)
ordered_dict = {k: new_dict[k] for k in key_order if k in new_dict.keys()}
set_param_dict[param_id] = ordered_dict
Expand Down
3 changes: 2 additions & 1 deletion trestle/core/commands/author/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,8 @@ def _replace_modify_set_params(
label=param.label,
values=param.values,
select=param.select,
props=param.props
props=param.props,
param_value_origin=param.param_value_origin
)
)
if profile.modify.set_parameters != new_set_params:
Expand Down
1 change: 1 addition & 0 deletions trestle/oscal/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -1626,6 +1626,7 @@ class Config:
values: Optional[List[constr(regex=r'^\S(.*\S)?$')]] = Field(None)
select: Optional[ParameterSelection] = None
remarks: Optional[str] = None
param_value_origin: Optional[str] = None
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is wrong. We are not adding a field directly to param origin in OSCAL. We are just adding a property. So OSCAL schema should not be changed.



class OriginActor(OscalBaseModel):
Expand Down
1 change: 1 addition & 0 deletions trestle/oscal/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,7 @@ class Config:
guidelines: Optional[List[common.ParameterGuideline]] = Field(None)
values: Optional[List[constr(regex=r'^\S(.*\S)?$')]] = Field(None)
select: Optional[common.ParameterSelection] = None
param_value_origin: Optional[str] = Field(None, alias='parameter-value-origin')

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is wrong. We are not changing the schema.


class Remove(OscalBaseModel):
Expand Down
Loading