From 86a790d122312778dbf4cb773a7bc5e6a06469ae Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Wed, 28 Oct 2026 07:23:54 -0500 Subject: [PATCH 1/2] Support the Egeria 6.3 information supply chain mermaid graphs Egeria 6.3 returns up to five mermaid graphs on an InformationSupplyChainElement retrieved with addImplementation=true, each present only if it has content. - Add iscDataMeshMermaidGraph, iscSystemFabricMermaidGraph, iscDataFabricMermaidGraph and iscDataMappingMermaidGraph to MERMAID_GRAPHS / MERMAID_GRAPH_TITLES (kept aligned) and to MERMAID_ATTRIBUTE_KEYS. - Replace "iscimplementationGraph" in MERMAID_ATTRIBUTE_KEYS, which matched no field the server sends, with iscImplementationMermaidGraph, so the ISC implementation graph is fenced instead of printed raw. - Look mermaid graph keys up case-insensitively: servers before 6.3 wrote iscimplementationMermaidGraph. - Common-Mermaid and Common-Mermaid-Prop-Value: add a column per new graph; fix the Prop-Value key (iscImplementationGraph -> iscImplementationMermaidGraph). - HTML report page: load mermaid@11 instead of mermaid@10, which cannot parse Egeria's @{ shape: ... } node syntax. - Docs table and the solution-architect functional test use the 6.3 key. From Mandy Chessell's note on the 6.3 ISC graphs. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015pdMuTg6FmqPWeapeXM54g Signed-off-by: Dan Wolfson --- docs/output-formats-and-report-specs.md | 6 ++- pyegeria/core/_globals.py | 4 ++ pyegeria/view/base_report_formats.py | 10 +++- pyegeria/view/output_formatter.py | 29 ++++++++++-- .../test_solution_architect_omvs.py | 2 +- .../test_output_formatter_mermaid.py | 46 +++++++++++++++++++ 6 files changed, 91 insertions(+), 6 deletions(-) diff --git a/docs/output-formats-and-report-specs.md b/docs/output-formats-and-report-specs.md index bbe6b0b2..417b660a 100644 --- a/docs/output-formats-and-report-specs.md +++ b/docs/output-formats-and-report-specs.md @@ -445,7 +445,11 @@ The `name` field has no effect on detection for pie chart or custom graph column | `actionMermaidGraph` | Governance action graph | | `localLineageGraph` | Local lineage | | `edgeMermaidGraph` | Edge graph | -| `iscImplementationGraph` | ISC implementation graph | +| `iscImplementationMermaidGraph` | ISC implementation graph (context, solution-component design, implementation status). Servers before Egeria 6.3 sent `iscimplementationMermaidGraph`; it is matched case-insensitively | +| `iscDataMeshMermaidGraph` | ISC data mesh graph: digital products and their dependencies (Egeria 6.3+) | +| `iscSystemFabricMermaidGraph` | ISC system fabric graph: IT infrastructure and software capabilities (Egeria 6.3+) | +| `iscDataFabricMermaidGraph` | ISC data fabric graph: data assets, processes and actions linked by lineage, control flow and action-requester relationships (Egeria 6.3+) | +| `iscDataMappingMermaidGraph` | ISC data mapping graph: elements linked by data mappings, with their anchors (Egeria 6.3+) | | `specificationMermaidGraph` | Specification graph | | `solutionBlueprintMermaidGraph` | Solution blueprint | | `solutionSubcomponentMermaidGraph` | Solution sub-components | diff --git a/pyegeria/core/_globals.py b/pyegeria/core/_globals.py index b94438c4..c719dde6 100644 --- a/pyegeria/core/_globals.py +++ b/pyegeria/core/_globals.py @@ -128,10 +128,14 @@ def resolve_enum(enum_class: type[Enum], value: str | int) -> int | None: MERMAID_GRAPHS: list[str] = ["anchorMermaidGraph", "informationSupplyChainMermaidGraph","fieldLevelLineageGraph", "actionMermaidGraph", "localLineageGraph", "edgeMermaidGraph", "iscImplementationMermaidGraph", + "iscDataMeshMermaidGraph", "iscSystemFabricMermaidGraph", "iscDataFabricMermaidGraph", + "iscDataMappingMermaidGraph", "specificationMermaidGraph", "solutionBlueprintMermaidGraph","mermaidGraph", "solutionSubcomponentMermaidGraph", "governanceActionProcessMermaidGraph"] MERMAID_GRAPH_TITLES = ["Anchor Mermaid Graph", "Information Supply Chain Mermaid Graph","Field Level Lineage Graph", "Action Mermaid Graph", "Local Lineage Graph", "Edge Mermaid Graph", "ISC Implementation Mermaid Graph", + "ISC Data Mesh Graph", "ISC System Fabric Graph", "ISC Data Fabric Graph", + "ISC Data Mapping Graph", "Specification Mermaid Graph", "Solution Blueprint Mermaid Graph","Mermaid Graph", "Solution Subcomponent Mermaid Graph","Governance Action Process Mermaid Graph" ] TERM_STATUS = ["DRAFT", "PREPARED","PROPOSED","APPROVED", "REJECTED", "ACTIVE", "DEPRECATED", "DELETED", "OTHER"] diff --git a/pyegeria/view/base_report_formats.py b/pyegeria/view/base_report_formats.py index 950e10fc..1243db82 100644 --- a/pyegeria/view/base_report_formats.py +++ b/pyegeria/view/base_report_formats.py @@ -1441,6 +1441,10 @@ def _user_report_specs_dir() -> str: Column(name="Local Lineage Graph", key="localLineageGraph"), Column(name="Edge Mermaid", key="edgeMermaidGraph"), Column(name="ISC Implementation Graph", key='iscImplementationMermaidGraph'), + Column(name="ISC Data Mesh Graph", key="iscDataMeshMermaidGraph"), + Column(name="ISC System Fabric Graph", key="iscSystemFabricMermaidGraph"), + Column(name="ISC Data Fabric Graph", key="iscDataFabricMermaidGraph"), + Column(name="ISC Data Mapping Graph", key="iscDataMappingMermaidGraph"), Column(name="Specification Mermaid Graph", key='specificationMermaidGraph'), Column(name="Solution Blueprint Mermaid Graph", key='solutionBlueprintMermaidGraph'), Column(name="Solution Subcomponent Mermaid Graph", @@ -1477,7 +1481,11 @@ def _user_report_specs_dir() -> str: Column(name="Action Mermaid Graph", key='actionMermaidGraph'), Column(name="Local Lineage Graph", key="localLineageGraph"), Column(name="Edge Mermaid", key="edgeMermaidGraph"), - Column(name="ISC Implementation Graph", key='iscImplementationGraph'), + Column(name="ISC Implementation Graph", key='iscImplementationMermaidGraph'), + Column(name="ISC Data Mesh Graph", key="iscDataMeshMermaidGraph"), + Column(name="ISC System Fabric Graph", key="iscSystemFabricMermaidGraph"), + Column(name="ISC Data Fabric Graph", key="iscDataFabricMermaidGraph"), + Column(name="ISC Data Mapping Graph", key="iscDataMappingMermaidGraph"), Column(name="Specification Mermaid Graph", key='specificationMermaidGraph'), Column(name="Solution Blueprint Mermaid Graph", key='solutionBlueprintMermaidGraph'), Column(name="Solution Subcomponent Mermaid Graph", diff --git a/pyegeria/view/output_formatter.py b/pyegeria/view/output_formatter.py index f2645dd9..fcca361e 100644 --- a/pyegeria/view/output_formatter.py +++ b/pyegeria/view/output_formatter.py @@ -96,7 +96,11 @@ def _resolve_normalize_mermaid_flag(default: bool = True) -> bool: "localLineageGraph", "rootHierarchyMermaidGraph", "edgeMermaidGraph", - "iscimplementationGraph", + "iscImplementationMermaidGraph", + "iscDataMeshMermaidGraph", + "iscSystemFabricMermaidGraph", + "iscDataFabricMermaidGraph", + "iscDataMappingMermaidGraph", "specificationMermaidGraph", "solutionBlueprintMermaidGraph", "solutionSubcomponentMermaidGraph", @@ -255,11 +259,30 @@ def _extract_selected_mermaid_fields(element: dict, columns_struct: Optional[dic for attribute in selected_fields: key = attribute.get("key") value = _get_element_value(element, key) + if value is None: + value = _get_mermaid_graph_value(element, key) result.append(_format_mermaid_value(value)) return result +def _get_mermaid_graph_value(element: dict, key: str | None) -> Any: + """Look up a top-level mermaid graph key case-insensitively. + + Servers before Egeria 6.3 wrote 'iscimplementationMermaidGraph' (Jackson lower-cased the + leading 'ISC'); from 6.3 it is 'iscImplementationMermaidGraph'. Exact match wins. + """ + if not isinstance(element, dict) or not key: + return None + if key in element: + return element[key] + key_lower = key.lower() + for element_key, value in element.items(): + if isinstance(element_key, str) and element_key.lower() == key_lower: + return value + return None + + def _extract_referenceable_properties(element: dict[str, Any]) -> dict[str, Any]: # Get general header attributes guid = element.get('elementHeader', {}).get("guid", None) @@ -401,7 +424,7 @@ def markdown_to_html(markdown_text: str) -> str: Egeria Report - + @@ -1818,7 +1841,7 @@ def populate_common_columns( column['value'] = mermaid_val continue if key in MERMAID_GRAPHS and mermaid_dest_key not in MERMAID_GRAPHS: - column['value'] = element.get(key, '') + column['value'] = _get_mermaid_graph_value(element, key) or '' continue # --- Auto-generate Vega graphs for categorical counts if requested by the columns_struct --- diff --git a/tests/functional-tests/test_solution_architect_omvs.py b/tests/functional-tests/test_solution_architect_omvs.py index 62b0357f..88e12119 100644 --- a/tests/functional-tests/test_solution_architect_omvs.py +++ b/tests/functional-tests/test_solution_architect_omvs.py @@ -132,7 +132,7 @@ def test_find_info_supply_chains(self): if type(response) is list: print(f"Found {len(response)} information supply chains") print("\n\n" + json.dumps(response, indent=4)) - print(response[0].get("iscimplementationMermaidGraph")) + print(response[0].get("iscImplementationMermaidGraph")) elif type(response) is str: print("\n\nResponse: " + response) assert True diff --git a/tests/micro-tests/test_output_formatter_mermaid.py b/tests/micro-tests/test_output_formatter_mermaid.py index 4b45460d..fd468477 100644 --- a/tests/micro-tests/test_output_formatter_mermaid.py +++ b/tests/micro-tests/test_output_formatter_mermaid.py @@ -133,3 +133,49 @@ class _Cfg: assert of._resolve_normalize_mermaid_flag(default=True) is False + + +def test_isc_6_3_graph_keys_render_as_mermaid(): + elements = [{ + "iscImplementationMermaidGraph": "flowchart TD\\n I-->J", + "iscDataMeshMermaidGraph": "flowchart LR\\n P-->Q", + "iscDataMappingMermaidGraph": "flowchart LR\\n C-->D", + }] + columns_struct = { + "formats": { + "attributes": [ + {"name": "ISC Implementation Graph", "key": "iscImplementationMermaidGraph"}, + {"name": "ISC Data Mesh Graph", "key": "iscDataMeshMermaidGraph"}, + {"name": "ISC Data Mapping Graph", "key": "iscDataMappingMermaidGraph"}, + ] + } + } + + result = of.extract_mermaid_only(elements, columns_struct) + + assert result.count("```mermaid") == 3 + assert "I-->J" in result and "P-->Q" in result and "C-->D" in result + + +def test_isc_implementation_graph_matches_pre_6_3_lower_case_key(): + # Servers before Egeria 6.3 wrote the key with a lower-cased 'ISC'. + element = {"iscimplementationMermaidGraph": "flowchart TD\\n A-->B"} + columns_struct = { + "formats": { + "attributes": [ + {"name": "ISC Implementation Graph", "key": "iscImplementationMermaidGraph"}, + ] + } + } + + assert of._get_mermaid_graph_value(element, "iscImplementationMermaidGraph") == element["iscimplementationMermaidGraph"] + result = of.extract_mermaid_only([element], columns_struct) + assert "```mermaid" in result + assert "A-->B" in result + + +def test_mermaid_graph_titles_stay_aligned_with_keys(): + from pyegeria.core._globals import MERMAID_GRAPH_TITLES, MERMAID_GRAPHS + + assert len(MERMAID_GRAPHS) == len(MERMAID_GRAPH_TITLES) + assert MERMAID_GRAPH_TITLES[MERMAID_GRAPHS.index("iscDataFabricMermaidGraph")] == "ISC Data Fabric Graph" From a3563a59d89ef254367038e28683fe159a8e18b9 Mon Sep 17 00:00:00 2001 From: Dan Wolfson Date: Wed, 28 Oct 2026 07:32:45 -0500 Subject: [PATCH 2/2] Show the ISC mermaid graphs in the generated Information Supply Chain specs Generated report specs take their columns from the Create command's attributes, which are inputs. The ISC graphs are server-returned values, so adding them as compact-spec attributes would turn them into authorable template fields. Instead, gen_report_specs gets a GENERATED_EXTRA_COLUMNS table of display-only columns, appended to the ALL format and offered as a MERMAID format. refresh_specs keeps them on every regeneration. Information Supply Chain gets the five Egeria 6.3 ISC graphs. Regenerated with refresh_specs --merge-reports; only Information-Supply-Chain-DrE-Basic and -Advanced change. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015pdMuTg6FmqPWeapeXM54g Signed-off-by: Dan Wolfson --- commands/tech/gen_report_specs.py | 32 +- md_processing/data/generated_format_sets.json | 338 ++++++++++++++++++ pyegeria/view/base_report_formats.py | 4 +- tests/micro-tests/test_gen_report_specs.py | 29 ++ 4 files changed, 396 insertions(+), 7 deletions(-) diff --git a/commands/tech/gen_report_specs.py b/commands/tech/gen_report_specs.py index 403d9dac..938ffa0e 100644 --- a/commands/tech/gen_report_specs.py +++ b/commands/tech/gen_report_specs.py @@ -95,6 +95,22 @@ "url", } +# Display-only columns appended to a generated spec's ALL format and offered as +# a MERMAID format, keyed by command display_name. These are values the server +# returns (e.g. mermaid graphs), not command inputs, so they can't come from the +# compact spec's Attributes without turning into authorable template fields. +GENERATED_EXTRA_COLUMNS: dict[str, list[Column]] = { + # Egeria 6.3: find_information_supply_chains (add_implementation=True) returns + # up to five graphs, each present only if it has content. + "Information Supply Chain": [ + Column(name="ISC Implementation Graph", key="iscImplementationMermaidGraph"), + Column(name="ISC Data Mesh Graph", key="iscDataMeshMermaidGraph"), + Column(name="ISC System Fabric Graph", key="iscSystemFabricMermaidGraph"), + Column(name="ISC Data Fabric Graph", key="iscDataFabricMermaidGraph"), + Column(name="ISC Data Mapping Graph", key="iscDataMappingMermaidGraph"), + ], +} + def _clone_column(col: Column) -> Column: if hasattr(col, "model_dump"): @@ -260,19 +276,24 @@ def process_attr(label, details): return cols -def _build_generated_formats(columns: List[Column], default_types: Optional[List[str]] = None) -> List[Format]: +def _build_generated_formats(columns: List[Column], default_types: Optional[List[str]] = None, + extra_columns: Optional[List[Column]] = None) -> List[Format]: filtered_columns = _filter_generated_columns(columns) if not filtered_columns: return [] + extra_columns = [_clone_column(col) for col in extra_columns or []] if default_types is not None: - return [Format(types=default_types, attributes=filtered_columns)] + return [Format(types=default_types, attributes=filtered_columns + extra_columns)] list_columns = _order_list_columns(_filter_list_columns(filtered_columns)) - return [ + formats = [ Format(types=["LIST"], attributes=list_columns), - Format(types=["ALL"], attributes=filtered_columns), + Format(types=["ALL"], attributes=filtered_columns + extra_columns), ] + if extra_columns: + formats.append(Format(types=["MERMAID"], attributes=[_clone_column(col) for col in extra_columns])) + return formats def _derive_target_type(cmd_key: str, cmd_obj: dict) -> str: @@ -391,7 +412,8 @@ def build_format_sets_from_commands( analytic_spec_params=(extra_constraints or {}) if extra_find else {}, ) - formats = _build_generated_formats(columns, default_types=default_types) + formats = _build_generated_formats(columns, default_types=default_types, + extra_columns=GENERATED_EXTRA_COLUMNS.get(display_name)) if not formats: logger.debug(f"Skip {set_name}-{lvl}: no remaining attributes after generated filtering") continue diff --git a/md_processing/data/generated_format_sets.json b/md_processing/data/generated_format_sets.json index c398eab1..0ffa342b 100644 --- a/md_processing/data/generated_format_sets.json +++ b/md_processing/data/generated_format_sets.json @@ -245643,6 +245643,46 @@ "format": false, "detail_spec": null, "valid_values": [] + }, + { + "name": "ISC Implementation Graph", + "key": "iscImplementationMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mesh Graph", + "key": "iscDataMeshMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC System Fabric Graph", + "key": "iscSystemFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Fabric Graph", + "key": "iscDataFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mapping Graph", + "key": "iscDataMappingMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null } ], "columns": [ @@ -245790,6 +245830,135 @@ "format": false, "detail_spec": null, "valid_values": [] + }, + { + "name": "ISC Implementation Graph", + "key": "iscImplementationMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mesh Graph", + "key": "iscDataMeshMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC System Fabric Graph", + "key": "iscSystemFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Fabric Graph", + "key": "iscDataFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mapping Graph", + "key": "iscDataMappingMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + } + ] + }, + { + "types": [ + "MERMAID" + ], + "attributes": [ + { + "name": "ISC Implementation Graph", + "key": "iscImplementationMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mesh Graph", + "key": "iscDataMeshMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC System Fabric Graph", + "key": "iscSystemFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Fabric Graph", + "key": "iscDataFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mapping Graph", + "key": "iscDataMappingMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + } + ], + "columns": [ + { + "name": "ISC Implementation Graph", + "key": "iscImplementationMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mesh Graph", + "key": "iscDataMeshMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC System Fabric Graph", + "key": "iscSystemFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Fabric Graph", + "key": "iscDataFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mapping Graph", + "key": "iscDataMappingMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null } ] } @@ -246898,6 +247067,46 @@ "format": false, "detail_spec": null, "valid_values": null + }, + { + "name": "ISC Implementation Graph", + "key": "iscImplementationMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mesh Graph", + "key": "iscDataMeshMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC System Fabric Graph", + "key": "iscSystemFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Fabric Graph", + "key": "iscDataFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mapping Graph", + "key": "iscDataMappingMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null } ], "columns": [ @@ -247258,6 +247467,135 @@ "format": false, "detail_spec": null, "valid_values": null + }, + { + "name": "ISC Implementation Graph", + "key": "iscImplementationMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mesh Graph", + "key": "iscDataMeshMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC System Fabric Graph", + "key": "iscSystemFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Fabric Graph", + "key": "iscDataFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mapping Graph", + "key": "iscDataMappingMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + } + ] + }, + { + "types": [ + "MERMAID" + ], + "attributes": [ + { + "name": "ISC Implementation Graph", + "key": "iscImplementationMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mesh Graph", + "key": "iscDataMeshMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC System Fabric Graph", + "key": "iscSystemFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Fabric Graph", + "key": "iscDataFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mapping Graph", + "key": "iscDataMappingMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + } + ], + "columns": [ + { + "name": "ISC Implementation Graph", + "key": "iscImplementationMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mesh Graph", + "key": "iscDataMeshMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC System Fabric Graph", + "key": "iscSystemFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Fabric Graph", + "key": "iscDataFabricMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null + }, + { + "name": "ISC Data Mapping Graph", + "key": "iscDataMappingMermaidGraph", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": null } ] } diff --git a/pyegeria/view/base_report_formats.py b/pyegeria/view/base_report_formats.py index 1243db82..ce5eba3f 100644 --- a/pyegeria/view/base_report_formats.py +++ b/pyegeria/view/base_report_formats.py @@ -237,8 +237,8 @@ 'Home-Collection-DrE-Basic': FormatSet(target_type='Home Collection', heading='Home-Collection-DrE-Basic Attributes', description='Auto-generated format for Home Collection (Create, Basic).', family='Collections', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Purpose', key='purpose')])], action=ActionParameter(function='CollectionManager.find_collections', required_params=['search_string'], optional_params=['sequencing_order', 'sequencing_property', 'page_size', 'start_from', 'starts_with', 'ends_with', 'ignore_case', 'classification_names', 'metadata_element_subtypes', 'metadata_element_type'], spec_params={'metadata_element_type': 'HomeCollection'})), 'Informal-Tag-DrE-Advanced': FormatSet(target_type='Informal Tag', heading='Informal-Tag-DrE-Advanced Attributes', description='Auto-generated format for Informal Tag (Create, Advanced).', family='Feedback', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(function='ServerClient.find_tags', required_params=['search_string'], optional_params=['sequencing_order', 'sequencing_property', 'page_size', 'start_from', 'starts_with', 'ends_with', 'ignore_case', 'classification_names', 'metadata_element_subtypes', 'metadata_element_type'])), 'Informal-Tag-DrE-Basic': FormatSet(target_type='Informal Tag', heading='Informal-Tag-DrE-Basic Attributes', description='Auto-generated format for Informal Tag (Create, Basic).', family='Feedback', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Version Identifier', key='version_identifier'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier')])], action=ActionParameter(function='ServerClient.find_tags', required_params=['search_string'], optional_params=['sequencing_order', 'sequencing_property', 'page_size', 'start_from', 'starts_with', 'ends_with', 'ignore_case', 'classification_names', 'metadata_element_subtypes', 'metadata_element_type'])), - 'Information-Supply-Chain-DrE-Advanced': FormatSet(target_type='Information Supply Chain', heading='Information-Supply-Chain-DrE-Advanced Attributes', description='Auto-generated format for Information Supply Chain (Create, Advanced).', family='Solution Architect', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Estimated Volumetrics', key='estimated_volumetrics'), Column(name='In Information Supply Chain', key='in_supply_chain'), Column(name='Integration Style', key='integration_style'), Column(name='Nested Information Supply Chains', key='nested_info_supply_chains'), Column(name='Purposes', key='purposes'), Column(name='Scope', key='scope'), Column(name='Implemented By', key='implemented_by'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Purpose', key='purpose'), Column(name='Estimated Volumetrics', key='estimated_volumetrics'), Column(name='In Information Supply Chain', key='in_supply_chain'), Column(name='Integration Style', key='integration_style'), Column(name='Nested Information Supply Chains', key='nested_info_supply_chains'), Column(name='Purposes', key='purposes'), Column(name='Scope', key='scope'), Column(name='Implemented By', key='implemented_by'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(function='SolutionArchitect.find_information_supply_chains', required_params=['search_string'], optional_params=['sequencing_order', 'sequencing_property', 'page_size', 'start_from', 'starts_with', 'ends_with', 'ignore_case', 'classification_names', 'metadata_element_subtypes', 'metadata_element_type'])), - 'Information-Supply-Chain-DrE-Basic': FormatSet(target_type='Information Supply Chain', heading='Information-Supply-Chain-DrE-Basic Attributes', description='Auto-generated format for Information Supply Chain (Create, Basic).', family='Solution Architect', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='In Information Supply Chain', key='in_supply_chain'), Column(name='Integration Style', key='integration_style'), Column(name='Nested Information Supply Chains', key='nested_info_supply_chains'), Column(name='Purposes', key='purposes'), Column(name='Scope', key='scope'), Column(name='Implemented By', key='implemented_by'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Purpose', key='purpose'), Column(name='In Information Supply Chain', key='in_supply_chain'), Column(name='Integration Style', key='integration_style'), Column(name='Nested Information Supply Chains', key='nested_info_supply_chains'), Column(name='Purposes', key='purposes'), Column(name='Scope', key='scope'), Column(name='Implemented By', key='implemented_by')])], action=ActionParameter(function='SolutionArchitect.find_information_supply_chains', required_params=['search_string'], optional_params=['sequencing_order', 'sequencing_property', 'page_size', 'start_from', 'starts_with', 'ends_with', 'ignore_case', 'classification_names', 'metadata_element_subtypes', 'metadata_element_type'])), + 'Information-Supply-Chain-DrE-Advanced': FormatSet(target_type='Information Supply Chain', heading='Information-Supply-Chain-DrE-Advanced Attributes', description='Auto-generated format for Information Supply Chain (Create, Advanced).', family='Solution Architect', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Estimated Volumetrics', key='estimated_volumetrics'), Column(name='In Information Supply Chain', key='in_supply_chain'), Column(name='Integration Style', key='integration_style'), Column(name='Nested Information Supply Chains', key='nested_info_supply_chains'), Column(name='Purposes', key='purposes'), Column(name='Scope', key='scope'), Column(name='Implemented By', key='implemented_by'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Purpose', key='purpose'), Column(name='Estimated Volumetrics', key='estimated_volumetrics'), Column(name='In Information Supply Chain', key='in_supply_chain'), Column(name='Integration Style', key='integration_style'), Column(name='Nested Information Supply Chains', key='nested_info_supply_chains'), Column(name='Purposes', key='purposes'), Column(name='Scope', key='scope'), Column(name='Implemented By', key='implemented_by'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='ISC Implementation Graph', key='iscImplementationMermaidGraph'), Column(name='ISC Data Mesh Graph', key='iscDataMeshMermaidGraph'), Column(name='ISC System Fabric Graph', key='iscSystemFabricMermaidGraph'), Column(name='ISC Data Fabric Graph', key='iscDataFabricMermaidGraph'), Column(name='ISC Data Mapping Graph', key='iscDataMappingMermaidGraph')]), Format(types=['MERMAID'], attributes=[Column(name='ISC Implementation Graph', key='iscImplementationMermaidGraph'), Column(name='ISC Data Mesh Graph', key='iscDataMeshMermaidGraph'), Column(name='ISC System Fabric Graph', key='iscSystemFabricMermaidGraph'), Column(name='ISC Data Fabric Graph', key='iscDataFabricMermaidGraph'), Column(name='ISC Data Mapping Graph', key='iscDataMappingMermaidGraph')])], action=ActionParameter(function='SolutionArchitect.find_information_supply_chains', required_params=['search_string'], optional_params=['sequencing_order', 'sequencing_property', 'page_size', 'start_from', 'starts_with', 'ends_with', 'ignore_case', 'classification_names', 'metadata_element_subtypes', 'metadata_element_type'])), + 'Information-Supply-Chain-DrE-Basic': FormatSet(target_type='Information Supply Chain', heading='Information-Supply-Chain-DrE-Basic Attributes', description='Auto-generated format for Information Supply Chain (Create, Basic).', family='Solution Architect', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='In Information Supply Chain', key='in_supply_chain'), Column(name='Integration Style', key='integration_style'), Column(name='Nested Information Supply Chains', key='nested_info_supply_chains'), Column(name='Purposes', key='purposes'), Column(name='Scope', key='scope'), Column(name='Implemented By', key='implemented_by'), Column(name='Version Identifier', key='version_identifier'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='Purpose', key='purpose'), Column(name='In Information Supply Chain', key='in_supply_chain'), Column(name='Integration Style', key='integration_style'), Column(name='Nested Information Supply Chains', key='nested_info_supply_chains'), Column(name='Purposes', key='purposes'), Column(name='Scope', key='scope'), Column(name='Implemented By', key='implemented_by'), Column(name='ISC Implementation Graph', key='iscImplementationMermaidGraph'), Column(name='ISC Data Mesh Graph', key='iscDataMeshMermaidGraph'), Column(name='ISC System Fabric Graph', key='iscSystemFabricMermaidGraph'), Column(name='ISC Data Fabric Graph', key='iscDataFabricMermaidGraph'), Column(name='ISC Data Mapping Graph', key='iscDataMappingMermaidGraph')]), Format(types=['MERMAID'], attributes=[Column(name='ISC Implementation Graph', key='iscImplementationMermaidGraph'), Column(name='ISC Data Mesh Graph', key='iscDataMeshMermaidGraph'), Column(name='ISC System Fabric Graph', key='iscSystemFabricMermaidGraph'), Column(name='ISC Data Fabric Graph', key='iscDataFabricMermaidGraph'), Column(name='ISC Data Mapping Graph', key='iscDataMappingMermaidGraph')])], action=ActionParameter(function='SolutionArchitect.find_information_supply_chains', required_params=['search_string'], optional_params=['sequencing_order', 'sequencing_property', 'page_size', 'start_from', 'starts_with', 'ends_with', 'ignore_case', 'classification_names', 'metadata_element_subtypes', 'metadata_element_type'])), 'IT-Profile-Role-DrE-Advanced': FormatSet(target_type='IT Profile Role', heading='IT-Profile-Role-DrE-Advanced Attributes', description='Auto-generated format for IT Profile Role (Create, Advanced).', family='Actor Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Scope', key='scope'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Scope', key='scope'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(function='ActorManager.find_actor_roles', required_params=['search_string'], optional_params=['sequencing_order', 'sequencing_property', 'page_size', 'start_from', 'starts_with', 'ends_with', 'ignore_case', 'classification_names', 'metadata_element_subtypes', 'metadata_element_type'], spec_params={'metadata_element_type': 'ITProfileRole'})), 'IT-Profile-Role-DrE-Basic': FormatSet(target_type='IT Profile Role', heading='IT-Profile-Role-DrE-Basic Attributes', description='Auto-generated format for IT Profile Role (Create, Basic).', family='Actor Manager', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Description', key='description'), Column(name='Legal', key='legal'), Column(name='Scope', key='scope'), Column(name='Version Identifier', key='version_identifier'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Category', key='category'), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Legal', key='legal'), Column(name='Qualified Name', key='qualified_name'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Scope', key='scope')])], action=ActionParameter(function='ActorManager.find_actor_roles', required_params=['search_string'], optional_params=['sequencing_order', 'sequencing_property', 'page_size', 'start_from', 'starts_with', 'ends_with', 'ignore_case', 'classification_names', 'metadata_element_subtypes', 'metadata_element_type'], spec_params={'metadata_element_type': 'ITProfileRole'})), 'IT-Subsystem-DrE-Advanced': FormatSet(target_type='IT Subsystem', heading='IT-Subsystem-DrE-Advanced Attributes', description='Auto-generated format for IT Subsystem (Create, Advanced).', family='Collections', formats=[Format(types=['LIST'], attributes=[Column(name='Display Name', key='display_name'), Column(name='Qualified Name', key='qualified_name'), Column(name='GUID', key='guid'), Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties'), Column(name='Version Identifier', key='version_identifier'), Column(name='Status', key='status'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Category', key='category')]), Format(types=['ALL'], attributes=[Column(name='Effective From', key='effective_from'), Column(name='Effective Time', key='effective_time'), Column(name='Effective To', key='effective_to'), Column(name='Glossary Term', key='glossary_term'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Status', key='status'), Column(name='Zone Membership', key='zone_membership'), Column(name='Additional Properties', key='additional_properties'), Column(name='Category', key='category'), Column(name='Confidence Classification', key='confidence_classification', valid_values=['UNCLASSIFIED', 'AD_HOC', 'TRANSACTIONAL', 'AUTHORITATIVE', 'DERIVED', 'OBSOLETE', 'OTHER']), Column(name='Confidentiality Classification', key='confidentiality_classification', valid_values=['UNCLASSIFIED', 'INTERNAL', 'CONFIDENTIAL', 'SENSITIVE', 'RESTRICTED', 'OTHER']), Column(name='Criticality Classification', key='criticality_classification', valid_values=['UNCLASSIFIED', 'MARGINAL', 'IMPORTANT', 'CRITICAL', 'CATASTROPHIC', 'OTHER']), Column(name='Description', key='description'), Column(name='Display Name', key='display_name'), Column(name='GUID', key='guid'), Column(name='Identifier', key='identifier'), Column(name='Impact Classification', key='impact_classification', valid_values=['UNCLASSIFIED', 'LOW', 'MEDIUM', 'HIGH', 'OTHER']), Column(name='Legal', key='legal'), Column(name='Policy Management Point', key='policy_management_point'), Column(name='Qualified Name', key='qualified_name'), Column(name='Retention Classification', key='retention_classification', valid_values=['UNCLASSIFIED', 'TEMPORARY', 'PROJECT_LIFETIME', 'TEAM_LIFETIME', 'CONTRACT_LIFETIME', 'REGULATED_LIFETIME', 'TIMEBOXED_LIFETIME', 'OTHER']), Column(name='Security Tags', key='security_tags'), Column(name='URL', key='url'), Column(name='Version Identifier', key='version_identifier'), Column(name='Authors', key='authors'), Column(name='Content Status', key='content_status', valid_values=['DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'ACTIVE', 'DEPRECATED', 'OTHER']), Column(name='User Defined Content Status', key='user_defined_content_status'), Column(name='Purpose', key='purpose'), Column(name='User Defined Status', key='user_defined_status'), Column(name='Classifications', key='classifications'), Column(name='Anchor Scope Name', key='anchor_scope_guid'), Column(name='Supplementary Properties', key='supplementary_properties')])], action=ActionParameter(function='CollectionManager.find_collections', required_params=['search_string'], optional_params=['sequencing_order', 'sequencing_property', 'page_size', 'start_from', 'starts_with', 'ends_with', 'ignore_case', 'classification_names', 'metadata_element_subtypes', 'metadata_element_type'], spec_params={'metadata_element_type': 'ITSubsystem'})), diff --git a/tests/micro-tests/test_gen_report_specs.py b/tests/micro-tests/test_gen_report_specs.py index 123fcd5c..23d506fb 100644 --- a/tests/micro-tests/test_gen_report_specs.py +++ b/tests/micro-tests/test_gen_report_specs.py @@ -147,3 +147,32 @@ def test_generated_report_specs_preserve_explicit_default_types_override(tmp_pat "display_name", ] + + +def test_generated_information_supply_chain_spec_adds_isc_graph_columns(tmp_path): + payload = _make_compact_payload() + widget = payload["commands"].pop("Create Widget") + payload["commands"]["Create Information Supply Chain"] = { + **widget, "display_name": "Information Supply Chain", + "find_method": "SolutionArchitect.find_information_supply_chains", + } + file_path = tmp_path / "commands_testing_compact.json" + file_path.write_text(json.dumps(payload), encoding="utf-8") + + fs = build_format_sets_from_commands(file_path)["Information-Supply-Chain-DrE-Basic"] + graph_keys = [ + "iscImplementationMermaidGraph", + "iscDataMeshMermaidGraph", + "iscSystemFabricMermaidGraph", + "iscDataFabricMermaidGraph", + "iscDataMappingMermaidGraph", + ] + + all_keys = [col["key"] for col in _get_format(fs, "REPORT")["attributes"]] + list_keys = [col["key"] for col in _get_format(fs, "LIST")["attributes"]] + mermaid_format = _get_format(fs, "MERMAID") + + assert all_keys[-5:] == graph_keys + assert not set(graph_keys) & set(list_keys) + assert mermaid_format["types"] == ["MERMAID"] + assert [col["key"] for col in mermaid_format["attributes"]] == graph_keys