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/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/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/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..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'})), @@ -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_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 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"