diff --git a/docs/dr_egeria_manual.md b/docs/dr_egeria_manual.md index f3a0956e..4cc6d6e1 100644 --- a/docs/dr_egeria_manual.md +++ b/docs/dr_egeria_manual.md @@ -283,7 +283,13 @@ Dr.Egeria organizes its commands into "families," each corresponding to a specif - `Create Dashboard Sheet`: Create a named, ordered, nestable Dashboard Sheet — a local pyegeria-managed layout record (not yet an Egeria element; see `pyegeria/view/_output_dashboard_sheet_models.py`). - `Link Report to Dashboard Sheet`: Place a `Report` (by name) onto a Dashboard Sheet as an ordered Placement, with layout hints (`Placement Span`/`Placement Emphasis`), optional viewer-role tagging (`Placement Perspectives`), and an optional drill-down target (`Placement Detail Spec`). - `Add Text on Dashboard Sheet`: Place literal markdown text (a section header, explanation, or caption) onto a Dashboard Sheet as an ordered Placement, alongside Report placements — no Egeria element involved; also supports `Placement Perspectives` for viewer-role tagging. -- **Asset Maker** (added 2026-09-11): Instantiate Open Metadata catalog templates via `pyegeria/omvs/automated_curation.py`'s create-from-template surface — no update path, since the underlying OMVS methods are create-only. `Create Element` is the generic, Advanced-only mechanism (raw `typeName`/`templateGUID`/`placeholderPropertyValues`); twelve Basic-level, type-specific wrappers cover the common cases: `Create Secrets Store Element`, `Create Kafka Server Element`, `Create CSV Data File Element`, `Create Postgres Server Element`, `Create Postgres Database Element`, `Create Folder Element`, `Create UC Server Element`, `Create UC Catalog Element`, `Create UC Schema Element`, `Create UC Table Element`, `Create UC Function Element`, `Create UC Volume Element`. Live-verified: `Create Schema Type` (see below) and `Create CSV Data File Element` round-tripped against a running server; `Create Kafka Server Element` currently fails on a server with no "Apache Kafka Server" catalog template registered — a pre-existing gap in that server's template catalog, not a defect in this command. +- **Asset Maker** (added 2026-09-11): Instantiate Open Metadata catalog templates via `pyegeria/omvs/automated_curation.py`'s create-from-template surface — no update path, since the underlying OMVS methods are create-only. The generic, Advanced-only `Create Element` (raw `typeName`/`templateGUID`/`placeholderPropertyValues`) moved to the Automation family on 2026-10-02; twelve Basic-level, type-specific wrappers remain here for the common cases: `Create Secrets Store Element`, `Create Kafka Server Element`, `Create CSV Data File Element`, `Create Postgres Server Element`, `Create Postgres Database Element`, `Create Folder Element`, `Create UC Server Element`, `Create UC Catalog Element`, `Create UC Schema Element`, `Create UC Table Element`, `Create UC Function Element`, `Create UC Volume Element`. Live-verified: `Create Schema Type` (see below) and `Create CSV Data File Element` round-tripped against a running server; `Create Kafka Server Element` currently fails on a server with no "Apache Kafka Server" catalog template registered — a pre-existing gap in that server's template catalog, not a defect in this command. +- **Automation** (added 2026-10-02): Commands that set Egeria's governance engines running, via `pyegeria/omvs/automated_curation.py` (processors in `md_processing/v2/automation.py`). + - `Initiate Governance Action Process` / `Initiate Governance Action Type`: run a process or a single action type. `Action Targets` takes one `action target name: element` pair per line; `Request Parameters` takes `name: value` pairs. + - `Initiate Survey`: run a survey (e.g. `PostgreSQLSurvey::survey-postgres-database`) against one resource. The action target name each survey expects (`postgresDatabase`, `fileToSurvey`, ...) is read from the survey type, so it doesn't need to be supplied. + - `Initiate Subscription`: take out a subscription to a digital product by running its subscription type (`ProvisioningActionProcess::::Create Subscription::`) with a `Subscription Requester` and `Destination Data Set`. This provisions the subscription, unlike `Create Digital Subscription`, which only records the element. + - `Cancel Subscription`: run the cancel process Egeria attached to the subscription when it was provisioned (found through its resource list). + - `Create Element`: the generic create-from-template command, moved here from Asset Maker. - **Schema Maker** (added 2026-09-11): The `pyegeria/omvs/schema_maker.py` surface — `Create`/`Update Schema Type` and `Create`/`Update Schema Attribute` (both upsert-capable, live-verified), `Create Schema Type From Template`/`Create Schema Attribute From Template`, 15 `Link`/`Detach` relationship command pairs (Nested Schema Attribute, Attribute for Schema, Foreign Key, External Schema Type, Map From/To Schema Type, Graph Edge, Query Target, Schema, Relational DB Schema, API Operations/Header/Request/Response, Schema Type Option — `Link Nested Schema Attribute` live-verified), and 3 `Add`/`Remove` classification pairs (Primary Key, Type Embedded Attribute, Calculated Value) on a schema attribute/column. Effectivity dates, Anchor ID, and Anchor Scope IDs are Advanced-level; everything else is Basic. #### `Create Report`'s two Dictionary attributes, worked examples diff --git a/md_processing/data/compact_commands/commands_action_author.json b/md_processing/data/compact_commands/commands_action_author.json index 973a11b3..80bc4adb 100644 --- a/md_processing/data/compact_commands/commands_action_author.json +++ b/md_processing/data/compact_commands/commands_action_author.json @@ -2272,7 +2272,7 @@ "default_value": "", "valid_values": [], "existing_element": "", - "description": "The governance action process to link.", + "description": "The governance action process, identified by its qualified name, display name or GUID.", "generated": false, "style": "Reference Name", "user_specified": true, @@ -2348,7 +2348,7 @@ "default_value": "", "valid_values": [], "existing_element": "", - "description": "Parameters to pass to the governance service when this step executes.", + "description": "Name: value parameters passed to the governance service(s) that run.", "generated": false, "style": "Dictionary", "user_specified": true, @@ -2386,7 +2386,7 @@ "default_value": "", "valid_values": [], "existing_element": "", - "description": "The governance action type to link to a governance engine executor.", + "description": "The governance action type, identified by its qualified name, display name or GUID.", "generated": false, "style": "Reference Name", "user_specified": true, @@ -2538,7 +2538,7 @@ "default_value": "", "valid_values": [], "existing_element": "", - "description": "The name to give this element when it is passed as an action target to the governance service.", + "description": "The name an element is given when it is passed as an action target to a governance service.", "generated": false, "style": "Simple", "user_specified": true, @@ -2721,7 +2721,7 @@ "default_value": "", "valid_values": [], "existing_element": "", - "description": "Elements that triggered/requested this engine action.", + "description": "Elements that caused or requested the action.", "generated": false, "style": "Reference Name List", "user_specified": true, diff --git a/md_processing/data/compact_commands/commands_asset_maker_compact.json b/md_processing/data/compact_commands/commands_asset_maker_compact.json index 1262bd41..3c222b48 100644 --- a/md_processing/data/compact_commands/commands_asset_maker_compact.json +++ b/md_processing/data/compact_commands/commands_asset_maker_compact.json @@ -566,338 +566,6 @@ "max_cardinality": 1, "level": "Basic", "Journal Entry": "Added 2026-09-11 -- Asset Maker family (Create Element from Automated Curation)." - }, - "Initial Status": { - "variable_name": "initial_status", - "inUpdate": false, - "attr_labels": "", - "examples": "", - "default_value": "ACTIVE", - "valid_values": [ - "ACTIVE", - "DRAFT", - "PREPARED", - "PROPOSED", - "APPROVED", - "REJECTED", - "DEPRECATED", - "OTHER" - ], - "existing_element": "", - "description": "The initial InstanceStatus of the new element.", - "generated": false, - "style": "Valid Value", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 0, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "Added 2026-09-11 -- Asset Maker family (Create Element from Automated Curation)." - }, - "Generic Initial Classifications": { - "variable_name": "initial_classifications", - "inUpdate": false, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "", - "description": "Map of classification name to classification properties to apply to the new element on creation.", - "generated": false, - "style": "Dictionary", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 0, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "Added 2026-09-11 -- Asset Maker family (Create Element from Automated Curation)." - }, - "Is Own Anchor": { - "variable_name": "is_own_anchor", - "inUpdate": true, - "attr_labels": "", - "examples": "", - "default_value": "true", - "valid_values": [], - "existing_element": "", - "description": "A flag indicating if the element is its own anchor or is anchored to a different element.", - "generated": false, - "style": "Bool", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 1, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "" - }, - "Effective From": { - "variable_name": "effective_from", - "inUpdate": true, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "", - "description": "The beginning of when an element is viewable.", - "generated": false, - "style": "Simple", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 1, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "" - }, - "Effective To": { - "variable_name": "effective_to", - "inUpdate": true, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "", - "description": "The ending time at which an element is visible.", - "generated": false, - "style": "Simple", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 1, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "" - }, - "Effective Time": { - "variable_name": "effective_time", - "inUpdate": true, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "", - "description": "The time at which an element must be effective in order to be returned by the request.", - "generated": false, - "style": "Simple", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 1, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "" - }, - "Template GUID": { - "variable_name": "template_guid", - "inUpdate": false, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "", - "description": "GUID of the catalog template to instantiate.", - "generated": false, - "style": "Simple", - "user_specified": true, - "unique": false, - "input_required": true, - "min_cardinality": 1, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "Added 2026-09-11 -- Asset Maker family (Create Element from Automated Curation)." - }, - "Template Properties": { - "variable_name": "template_properties", - "inUpdate": false, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "", - "description": "Overrides for specific properties defined by the template.", - "generated": false, - "style": "Dictionary", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 0, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "Added 2026-09-11 -- Asset Maker family (Create Element from Automated Curation)." - }, - "Placeholder Property Values": { - "variable_name": "placeholder_property_values", - "inUpdate": false, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "", - "description": "Map of placeholder name to value, substituted into the template.", - "generated": false, - "style": "Dictionary", - "user_specified": true, - "unique": false, - "input_required": true, - "min_cardinality": 1, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "Added 2026-09-11 -- Asset Maker family (Create Element from Automated Curation)." - }, - "Parent Relationship Type Name": { - "variable_name": "parent_relationship_type_name", - "inUpdate": true, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "", - "description": "The type of parent relationship.", - "generated": false, - "style": "Simple", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 0, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "" - }, - "Element Type Name": { - "variable_name": "type_name", - "inUpdate": false, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "", - "description": "The Open Metadata type name of the element to create (e.g. 'CSVFile').", - "generated": false, - "style": "Simple", - "user_specified": true, - "unique": false, - "input_required": true, - "min_cardinality": 1, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "Added 2026-09-11 -- Asset Maker family (Create Element from Automated Curation)." - }, - "Anchor ID": { - "variable_name": "anchor_id", - "inUpdate": true, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "Referenceable", - "description": "Name of the anchoring element.", - "generated": false, - "style": "Reference Name", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 0, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "" - }, - "Anchor Scope IDs": { - "variable_name": "anchor_scope_ids", - "inUpdate": true, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "", - "description": "A list of IDs that are anchor scopes for this element.", - "generated": false, - "style": "Reference Name List", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 0, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "" - }, - "Parent ID": { - "variable_name": "parent_id", - "inUpdate": true, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "Referenceable", - "description": "Name of the parent", - "generated": false, - "style": "Reference Name", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 0, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "" - }, - "Parent Relationship Attributes": { - "variable_name": "parent_relationship_attributes", - "inUpdate": true, - "attr_labels": "", - "examples": "", - "default_value": "", - "valid_values": [], - "existing_element": "", - "description": "A dictionary of relationship attributes to establish the parent relationship.", - "generated": false, - "style": "Dictionary", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 0, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "" - }, - "Parent at End1": { - "variable_name": "parent_at_end1", - "inUpdate": true, - "attr_labels": "", - "examples": "", - "default_value": "true", - "valid_values": [], - "existing_element": "", - "description": "A flag indicating if the parent is at end1 of the relationship", - "generated": false, - "style": "Bool", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 1, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "" - }, - "Deep Copy": { - "variable_name": "deep_copy", - "inUpdate": false, - "attr_labels": "", - "examples": "", - "default_value": "true", - "valid_values": [], - "existing_element": "", - "description": "If true (Egeria's default), the template's anchored attachments -- such as a connection and its endpoint -- are copied to the new element. Set to false to create only the top-level element.", - "generated": false, - "style": "Bool", - "user_specified": true, - "unique": false, - "input_required": false, - "min_cardinality": 0, - "max_cardinality": 1, - "level": "Advanced", - "Journal Entry": "2026-09-29 -- maps to TemplateRequestBody.deepCopy; pyegeria previously sent false by default." } }, "bundles": { @@ -907,43 +575,6 @@ } }, "commands": { - "Create Element": { - "display_name": "Element", - "qn_prefix": "Element", - "alternate_names": [], - "family": "Asset Maker", - "description": "Create a new metadata element by instantiating an Open Metadata catalog template (the generic, low-level mechanism behind every other Asset Maker command). Advanced use only -- prefer one of the specific 'Create Element' commands when the element type has one.", - "verb": "Create", - "upsert": false, - "attach": false, - "level": "Advanced", - "find_method": "MetadataExpert.find_metadata_elements_with_string", - "find_constraints": "", - "extra_find": "", - "extra_constraints": "", - "OM_TYPE": "", - "bundle": "Asset Maker Base", - "custom_attributes": [ - "Element Type Name", - "Template GUID", - "Placeholder Property Values", - "Template Properties", - "Initial Status", - "Generic Initial Classifications", - "Anchor ID", - "Is Own Anchor", - "Anchor Scope IDs", - "Effective From", - "Effective To", - "Effective Time", - "Parent ID", - "Parent Relationship Type Name", - "Parent Relationship Attributes", - "Parent at End1", - "Deep Copy" - ], - "Journal Entry": "Added 2026-09-11 -- Asset Maker family, wraps automated_curation.py's create-element-from-template methods. OM_TYPE is best-effort (not yet confirmed against a live server's type system); create-only (no Update) since the underlying OMVS methods have no update counterpart." - }, "Create Secrets Store Element": { "display_name": "Secrets Store Element", "qn_prefix": "SecretsStore", diff --git a/md_processing/data/compact_commands/commands_automation_compact.json b/md_processing/data/compact_commands/commands_automation_compact.json new file mode 100644 index 00000000..117facbd --- /dev/null +++ b/md_processing/data/compact_commands/commands_automation_compact.json @@ -0,0 +1,896 @@ +{ + "family": "Automation", + "exported": "", + "attribute_definitions": { + "Effective From": { + "variable_name": "effective_from", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "The beginning of when an element is viewable.", + "generated": false, + "style": "Simple", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "Effective Time": { + "variable_name": "effective_time", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "The time at which an element must be effective in order to be returned by the request.", + "generated": false, + "style": "Simple", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "Effective To": { + "variable_name": "effective_to", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "The ending time at which an element is visible.", + "generated": false, + "style": "Simple", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "Extended Properties": { + "variable_name": "extended_properties", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "A dictionary of properties that extend the properties of an entity type.", + "generated": false, + "style": "Dictionary", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Invisible", + "Journal Entry": "" + }, + "External Source GUID": { + "variable_name": "external_source_guid", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "The unique identifier of an external source.", + "generated": false, + "style": "GUID", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "External Source Name": { + "variable_name": "external_source_name", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "The name of an external source", + "generated": false, + "style": "Simple", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "For Duplicate Processing": { + "variable_name": "for_duplicate_processing", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "Flag indicating if the request is to support duplicate processing.", + "generated": false, + "style": "Bool", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "For Lineage": { + "variable_name": "for_lineage", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "Flag indicating if the request is to support lineage.", + "generated": false, + "style": "Bool", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "Journal Entry": { + "variable_name": "journal_entry", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "A text entry into a journal.", + "generated": false, + "style": "Simple", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Common", + "Journal Entry": "" + }, + "Request ID": { + "variable_name": "request_id", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "A user provided or system generated request id for a conversation.", + "generated": false, + "style": "Simple", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "Element Type Name": { + "variable_name": "type_name", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "The Open Metadata type name of the element to create (e.g. 'CSVFile').", + "generated": false, + "style": "Simple", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "Added 2026-09-11 -- Asset Maker family (Create Element from Automated Curation)." + }, + "Template GUID": { + "variable_name": "template_guid", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "GUID of the catalog template to instantiate.", + "generated": false, + "style": "Simple", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "Added 2026-09-11 -- Asset Maker family (Create Element from Automated Curation)." + }, + "Placeholder Property Values": { + "variable_name": "placeholder_property_values", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "Map of placeholder name to value, substituted into the template.", + "generated": false, + "style": "Dictionary", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "Added 2026-09-11 -- Asset Maker family (Create Element from Automated Curation)." + }, + "Template Properties": { + "variable_name": "template_properties", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "Overrides for specific properties defined by the template.", + "generated": false, + "style": "Dictionary", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "Added 2026-09-11 -- Asset Maker family (Create Element from Automated Curation)." + }, + "Initial Status": { + "variable_name": "initial_status", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "ACTIVE", + "valid_values": [ + "ACTIVE", + "DRAFT", + "PREPARED", + "PROPOSED", + "APPROVED", + "REJECTED", + "DEPRECATED", + "OTHER" + ], + "existing_element": "", + "description": "The initial InstanceStatus of the new element.", + "generated": false, + "style": "Valid Value", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "Added 2026-09-11 -- Asset Maker family (Create Element from Automated Curation)." + }, + "Generic Initial Classifications": { + "variable_name": "initial_classifications", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "Map of classification name to classification properties to apply to the new element on creation.", + "generated": false, + "style": "Dictionary", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "Added 2026-09-11 -- Asset Maker family (Create Element from Automated Curation)." + }, + "Anchor ID": { + "variable_name": "anchor_id", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "Referenceable", + "description": "Name of the anchoring element.", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "Is Own Anchor": { + "variable_name": "is_own_anchor", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "true", + "valid_values": [], + "existing_element": "", + "description": "A flag indicating if the element is its own anchor or is anchored to a different element.", + "generated": false, + "style": "Bool", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "Anchor Scope IDs": { + "variable_name": "anchor_scope_ids", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "A list of IDs that are anchor scopes for this element.", + "generated": false, + "style": "Reference Name List", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "Parent ID": { + "variable_name": "parent_id", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "Referenceable", + "description": "Name of the parent", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "Parent Relationship Type Name": { + "variable_name": "parent_relationship_type_name", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "The type of parent relationship.", + "generated": false, + "style": "Simple", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "Parent Relationship Attributes": { + "variable_name": "parent_relationship_attributes", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "A dictionary of relationship attributes to establish the parent relationship.", + "generated": false, + "style": "Dictionary", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "Parent at End1": { + "variable_name": "parent_at_end1", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "true", + "valid_values": [], + "existing_element": "", + "description": "A flag indicating if the parent is at end1 of the relationship", + "generated": false, + "style": "Bool", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "Deep Copy": { + "variable_name": "deep_copy", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "true", + "valid_values": [], + "existing_element": "", + "description": "If true (Egeria's default), the template's anchored attachments -- such as a connection and its endpoint -- are copied to the new element. Set to false to create only the top-level element.", + "generated": false, + "style": "Bool", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "2026-09-29 -- maps to TemplateRequestBody.deepCopy; pyegeria previously sent false by default." + }, + "Governance Action Process": { + "variable_name": "governance_action_process", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "The governance action process, identified by its qualified name, display name or GUID.", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Domain", + "Journal Entry": "" + }, + "Governance Action Type": { + "variable_name": "governance_action_type", + "inUpdate": true, + "attr_labels": "Action Type", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "The governance action type, identified by its qualified name, display name or GUID.", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Domain", + "Journal Entry": "" + }, + "Request Parameters": { + "variable_name": "request_parameters", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "Name: value parameters passed to the governance service(s) that run.", + "generated": false, + "style": "Dictionary", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Basic", + "Journal Entry": "" + }, + "Request Source Elements": { + "variable_name": "request_source_elements", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "Elements that caused or requested the action.", + "generated": false, + "style": "Reference Name List", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Advanced", + "Journal Entry": "" + }, + "Action Target Name": { + "variable_name": "action_target_name", + "inUpdate": true, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "The name an element is given when it is passed as an action target to a governance service.", + "generated": false, + "style": "Simple", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Basic", + "Journal Entry": "" + }, + "Action Targets": { + "variable_name": "action_targets", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "Elements passed to the governance service(s), one 'action target name: element' pair per line; each element is a qualified name, display name or GUID.", + "generated": false, + "style": "Dictionary", + "user_specified": true, + "unique": false, + "input_required": false, + "min_cardinality": 0, + "max_cardinality": 1, + "level": "Basic", + "Journal Entry": "Added 2026-10-02 -- Automation family." + }, + "Survey Type": { + "variable_name": "survey_type", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "GovernanceActionType", + "description": "The survey to run: the qualified name of its governance action type, e.g. PostgreSQLSurvey::survey-postgres-database or FileSurvey::survey-folder.", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Basic", + "Journal Entry": "Added 2026-10-02 -- Automation family." + }, + "Resource to Survey": { + "variable_name": "resource_to_survey", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "The element describing the resource to survey (a server, database, folder, file, ...).", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Basic", + "Journal Entry": "Added 2026-10-02 -- Automation family." + }, + "Subscription Type": { + "variable_name": "subscription_type", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "SubscribingActionProcess", + "description": "The subscription type to take out: a digital product's subscribing action process, ProvisioningActionProcess::::Create Subscription::.", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Basic", + "Journal Entry": "Added 2026-10-02 -- Automation family." + }, + "Subscription Requester": { + "variable_name": "subscription_requester", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "The actor (person, team, ...) requesting the subscription.", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Basic", + "Journal Entry": "Added 2026-10-02 -- Automation family." + }, + "Destination Data Set": { + "variable_name": "destination_data_set", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "", + "description": "The asset the subscribed data is delivered to.", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Basic", + "Journal Entry": "Added 2026-10-02 -- Automation family." + }, + "Digital Subscription": { + "variable_name": "digital_subscription", + "inUpdate": false, + "attr_labels": "", + "examples": "", + "default_value": "", + "valid_values": [], + "existing_element": "DigitalSubscription", + "description": "The digital subscription to cancel, identified by its qualified name, display name or GUID.", + "generated": false, + "style": "Reference Name", + "user_specified": true, + "unique": false, + "input_required": true, + "min_cardinality": 1, + "max_cardinality": 1, + "level": "Basic", + "Journal Entry": "Added 2026-10-02 -- Automation family." + } + }, + "bundles": { + "Request Base": { + "inherits": null, + "own_attributes": [ + "Effective From", + "Effective Time", + "Effective To", + "Extended Properties", + "External Source GUID", + "External Source Name", + "For Duplicate Processing", + "For Lineage", + "Journal Entry", + "Request ID" + ] + }, + "Automation Base": { + "inherits": null, + "own_attributes": [] + }, + "Initiate Process Base": { + "inherits": "Request Base", + "own_attributes": [ + "Governance Action Process", + "Action Targets", + "Request Parameters", + "Request Source Elements" + ] + }, + "Initiate Action Type Base": { + "inherits": "Request Base", + "own_attributes": [ + "Governance Action Type", + "Action Targets", + "Request Parameters", + "Request Source Elements" + ] + }, + "Initiate Survey Base": { + "inherits": "Request Base", + "own_attributes": [ + "Survey Type", + "Resource to Survey", + "Action Target Name", + "Request Parameters" + ] + }, + "Cancel Subscription Base": { + "inherits": "Request Base", + "own_attributes": [ + "Digital Subscription" + ] + }, + "Initiate Subscription Base": { + "inherits": "Request Base", + "own_attributes": [ + "Subscription Type", + "Subscription Requester", + "Destination Data Set", + "Request Parameters" + ] + } + }, + "commands": { + "Initiate Governance Action Process": { + "display_name": "initiate_governance_action_process", + "qn_prefix": "", + "alternate_names": [], + "family": "Automation", + "description": "Run a governance action process: Egeria uses the process as a template and starts its chain of engine actions. Action Targets and Request Parameters are passed to the first step.", + "verb": "Initiate", + "upsert": false, + "attach": false, + "level": "Basic", + "find_method": "", + "find_constraints": "", + "extra_find": "", + "extra_constraints": "", + "OM_TYPE": "GovernanceActionProcessInstance", + "bundle": "Initiate Process Base", + "custom_attributes": [], + "Journal Entry": "Added 2026-10-02 -- Automation family." + }, + "Initiate Governance Action Type": { + "display_name": "initiate_governance_action_type", + "qn_prefix": "", + "alternate_names": [], + "family": "Automation", + "description": "Run a single governance action type: Egeria starts one engine action for it, passing the Action Targets and Request Parameters to its governance service.", + "verb": "Initiate", + "upsert": false, + "attach": false, + "level": "Basic", + "find_method": "", + "find_constraints": "", + "extra_find": "", + "extra_constraints": "", + "OM_TYPE": "EngineAction", + "bundle": "Initiate Action Type Base", + "custom_attributes": [], + "Journal Entry": "Added 2026-10-02 -- Automation family." + }, + "Initiate Survey": { + "display_name": "initiate_survey", + "qn_prefix": "", + "alternate_names": [], + "family": "Automation", + "description": "Run a survey of a resource. The action target name the survey expects is read from the survey type; set Action Target Name only to override it.", + "verb": "Initiate", + "upsert": false, + "attach": false, + "level": "Basic", + "find_method": "", + "find_constraints": "", + "extra_find": "", + "extra_constraints": "", + "OM_TYPE": "EngineAction", + "bundle": "Initiate Survey Base", + "custom_attributes": [], + "Journal Entry": "Added 2026-10-02 -- Automation family." + }, + "Cancel Subscription": { + "display_name": "cancel_subscription", + "qn_prefix": "", + "alternate_names": [], + "family": "Automation", + "description": "Cancel a digital subscription by running the cancel process Egeria created for it when the subscription was provisioned.", + "verb": "Cancel", + "upsert": false, + "attach": false, + "level": "Basic", + "find_method": "", + "find_constraints": "", + "extra_find": "", + "extra_constraints": "", + "OM_TYPE": "GovernanceActionProcessInstance", + "bundle": "Cancel Subscription Base", + "custom_attributes": [], + "Journal Entry": "Added 2026-10-02 -- Automation family." + }, + "Create Element": { + "display_name": "Element", + "qn_prefix": "Element", + "alternate_names": [], + "family": "Automation", + "description": "Create a new metadata element by instantiating an Open Metadata catalog template (the generic, low-level mechanism behind every Asset Maker 'Create Element' command). Advanced use only -- prefer one of the specific 'Create Element' commands when the element type has one.", + "verb": "Create", + "upsert": false, + "attach": false, + "level": "Advanced", + "find_method": "MetadataExpert.find_metadata_elements_with_string", + "find_constraints": "", + "extra_find": "", + "extra_constraints": "", + "OM_TYPE": "", + "bundle": "Automation Base", + "custom_attributes": [ + "Element Type Name", + "Template GUID", + "Placeholder Property Values", + "Template Properties", + "Initial Status", + "Generic Initial Classifications", + "Anchor ID", + "Is Own Anchor", + "Anchor Scope IDs", + "Effective From", + "Effective To", + "Effective Time", + "Parent ID", + "Parent Relationship Type Name", + "Parent Relationship Attributes", + "Parent at End1", + "Deep Copy" + ], + "Journal Entry": "Added 2026-09-11 -- Asset Maker family, wraps automated_curation.py's create-element-from-template methods. OM_TYPE is best-effort (not yet confirmed against a live server's type system); create-only (no Update) since the underlying OMVS methods have no update counterpart. Moved to the Automation family 2026-10-02." + }, + "Initiate Subscription": { + "display_name": "initiate_subscription", + "qn_prefix": "", + "alternate_names": [], + "family": "Automation", + "description": "Take out a subscription to a digital product by running the product's subscription process for the chosen subscription type. The process creates the subscription, its license and the data delivery to the destination. Unlike Create Digital Subscription, which only records a subscription element, this provisions it.", + "verb": "Initiate", + "upsert": false, + "attach": false, + "level": "Basic", + "find_method": "", + "find_constraints": "", + "extra_find": "", + "extra_constraints": "", + "OM_TYPE": "GovernanceActionProcessInstance", + "bundle": "Initiate Subscription Base", + "custom_attributes": [], + "Journal Entry": "Added 2026-10-02 -- Automation family." + } + } +} diff --git a/md_processing/data/generated_format_sets.json b/md_processing/data/generated_format_sets.json index dfcf6958..c979ca79 100644 --- a/md_processing/data/generated_format_sets.json +++ b/md_processing/data/generated_format_sets.json @@ -23455,10 +23455,10 @@ "get_additional_props": null, "question_spec": null }, - "Element-DrE-Basic": { - "target_type": "Element", - "heading": "Element-DrE-Basic Attributes", - "description": "Auto-generated format for Element (Create, Basic).", + "Secrets-Store-Element-DrE-Basic": { + "target_type": "Secrets Store Element", + "heading": "Secrets-Store-Element-DrE-Basic Attributes", + "description": "Auto-generated format for Secrets Store Element (Create, Basic).", "aliases": [], "annotations": {}, "family": "Asset Maker", @@ -23469,81 +23469,64 @@ ], "attributes": [ { - "name": "Template GUID", - "key": "template_guid", + "name": "File Path Name", + "key": "file_path_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Placeholder Property Values", - "key": "placeholder_property_values", + "name": "File Name", + "key": "file_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Template Properties", - "key": "template_properties", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - } - ], - "columns": [ - { - "name": "Template GUID", - "key": "template_guid", + "name": "Description", + "key": "description", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Placeholder Property Values", - "key": "placeholder_property_values", + "name": "File System Name", + "key": "file_system_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Template Properties", - "key": "template_properties", + "name": "File Type", + "key": "file_type", "value": null, "format": false, "detail_spec": null, "valid_values": [] - } - ] - }, - { - "types": [ - "ALL" - ], - "attributes": [ + }, { - "name": "Template GUID", - "key": "template_guid", + "name": "File Extension", + "key": "file_extension", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Placeholder Property Values", - "key": "placeholder_property_values", + "name": "File Encoding", + "key": "file_encoding", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Template Properties", - "key": "template_properties", + "name": "Version Identifier", + "key": "version_identifier", "value": null, "format": false, "detail_spec": null, @@ -23552,467 +23535,205 @@ ], "columns": [ { - "name": "Template GUID", - "key": "template_guid", + "name": "File Path Name", + "key": "file_path_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Placeholder Property Values", - "key": "placeholder_property_values", + "name": "File Name", + "key": "file_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Template Properties", - "key": "template_properties", + "name": "Description", + "key": "description", "value": null, "format": false, "detail_spec": null, "valid_values": [] - } - ] - } - ], - "action": { - "function": "MetadataExpert.find_metadata_elements_with_string", - "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": {}, - "analytic_function": null, - "analytic_spec_params": {} - }, - "get_additional_props": null, - "question_spec": null - }, - "Element-DrE-Advanced": { - "target_type": "Element", - "heading": "Element-DrE-Advanced Attributes", - "description": "Auto-generated format for Element (Create, Advanced).", - "aliases": [], - "annotations": {}, - "family": "Asset Maker", - "formats": [ - { - "types": [ - "LIST" - ], - "attributes": [ + }, { - "name": "Element Type Name", - "key": "type_name", + "name": "File System Name", + "key": "file_system_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Template GUID", - "key": "template_guid", + "name": "File Type", + "key": "file_type", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Placeholder Property Values", - "key": "placeholder_property_values", + "name": "File Extension", + "key": "file_extension", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Template Properties", - "key": "template_properties", + "name": "File Encoding", + "key": "file_encoding", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Generic Initial Classifications", - "key": "initial_classifications", + "name": "Version Identifier", + "key": "version_identifier", "value": null, "format": false, "detail_spec": null, "valid_values": [] - }, + } + ] + }, + { + "types": [ + "ALL" + ], + "attributes": [ { - "name": "Is Own Anchor", - "key": "is_own_anchor", + "name": "File Path Name", + "key": "file_path_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Effective From", - "key": "effective_from", + "name": "File Name", + "key": "file_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Effective To", - "key": "effective_to", + "name": "Description", + "key": "description", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Effective Time", - "key": "effective_time", + "name": "Version Identifier", + "key": "version_identifier", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Deep Copy", - "key": "deep_copy", + "name": "File System Name", + "key": "file_system_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Initial Status", - "key": "initial_status", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [ - "ACTIVE", - "DRAFT", - "PREPARED", - "PROPOSED", - "APPROVED", - "REJECTED", - "DEPRECATED", - "OTHER" - ] - } - ], - "columns": [ - { - "name": "Element Type Name", - "key": "type_name", + "name": "File Type", + "key": "file_type", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Template GUID", - "key": "template_guid", + "name": "File Extension", + "key": "file_extension", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Placeholder Property Values", - "key": "placeholder_property_values", + "name": "File Encoding", + "key": "file_encoding", "value": null, "format": false, "detail_spec": null, "valid_values": [] - }, + } + ], + "columns": [ { - "name": "Template Properties", - "key": "template_properties", + "name": "File Path Name", + "key": "file_path_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Generic Initial Classifications", - "key": "initial_classifications", + "name": "File Name", + "key": "file_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Is Own Anchor", - "key": "is_own_anchor", + "name": "Description", + "key": "description", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Effective From", - "key": "effective_from", + "name": "Version Identifier", + "key": "version_identifier", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Effective To", - "key": "effective_to", + "name": "File System Name", + "key": "file_system_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Effective Time", - "key": "effective_time", + "name": "File Type", + "key": "file_type", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Deep Copy", - "key": "deep_copy", + "name": "File Extension", + "key": "file_extension", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Initial Status", - "key": "initial_status", + "name": "File Encoding", + "key": "file_encoding", "value": null, "format": false, "detail_spec": null, - "valid_values": [ - "ACTIVE", - "DRAFT", - "PREPARED", - "PROPOSED", - "APPROVED", - "REJECTED", - "DEPRECATED", - "OTHER" - ] - } - ] - }, - { - "types": [ - "ALL" - ], - "attributes": [ - { - "name": "Element Type Name", - "key": "type_name", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Template GUID", - "key": "template_guid", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Placeholder Property Values", - "key": "placeholder_property_values", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Template Properties", - "key": "template_properties", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Initial Status", - "key": "initial_status", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [ - "ACTIVE", - "DRAFT", - "PREPARED", - "PROPOSED", - "APPROVED", - "REJECTED", - "DEPRECATED", - "OTHER" - ] - }, - { - "name": "Generic Initial Classifications", - "key": "initial_classifications", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Is Own Anchor", - "key": "is_own_anchor", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Effective From", - "key": "effective_from", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Effective To", - "key": "effective_to", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Effective Time", - "key": "effective_time", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Deep Copy", - "key": "deep_copy", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - } - ], - "columns": [ - { - "name": "Element Type Name", - "key": "type_name", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Template GUID", - "key": "template_guid", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Placeholder Property Values", - "key": "placeholder_property_values", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Template Properties", - "key": "template_properties", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Initial Status", - "key": "initial_status", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [ - "ACTIVE", - "DRAFT", - "PREPARED", - "PROPOSED", - "APPROVED", - "REJECTED", - "DEPRECATED", - "OTHER" - ] - }, - { - "name": "Generic Initial Classifications", - "key": "initial_classifications", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Is Own Anchor", - "key": "is_own_anchor", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Effective From", - "key": "effective_from", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Effective To", - "key": "effective_to", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Effective Time", - "key": "effective_time", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Deep Copy", - "key": "deep_copy", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] + "valid_values": [] } ] } @@ -24041,10 +23762,10 @@ "get_additional_props": null, "question_spec": null }, - "Secrets-Store-Element-DrE-Basic": { + "Secrets-Store-Element-DrE-Advanced": { "target_type": "Secrets Store Element", - "heading": "Secrets-Store-Element-DrE-Basic Attributes", - "description": "Auto-generated format for Secrets Store Element (Create, Basic).", + "heading": "Secrets-Store-Element-DrE-Advanced Attributes", + "description": "Auto-generated format for Secrets Store Element (Create, Advanced).", "aliases": [], "annotations": {}, "family": "Asset Maker", @@ -24348,10 +24069,10 @@ "get_additional_props": null, "question_spec": null }, - "Secrets-Store-Element-DrE-Advanced": { - "target_type": "Secrets Store Element", - "heading": "Secrets-Store-Element-DrE-Advanced Attributes", - "description": "Auto-generated format for Secrets Store Element (Create, Advanced).", + "Kafka-Server-Element-DrE-Basic": { + "target_type": "Kafka Server Element", + "heading": "Kafka-Server-Element-DrE-Basic Attributes", + "description": "Auto-generated format for Kafka Server Element (Create, Basic).", "aliases": [], "annotations": {}, "family": "Asset Maker", @@ -24362,153 +24083,97 @@ ], "attributes": [ { - "name": "File Path Name", - "key": "file_path_name", + "name": "Kafka Server Name", + "key": "kafka_server", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "File Name", - "key": "file_name", + "name": "Host Name", + "key": "host_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Description", - "key": "description", + "name": "Port", + "key": "port", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "File System Name", - "key": "file_system_name", + "name": "Description", + "key": "description", "value": null, "format": false, "detail_spec": null, "valid_values": [] - }, + } + ], + "columns": [ { - "name": "File Type", - "key": "file_type", + "name": "Kafka Server Name", + "key": "kafka_server", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "File Extension", - "key": "file_extension", + "name": "Host Name", + "key": "host_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "File Encoding", - "key": "file_encoding", + "name": "Port", + "key": "port", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Version Identifier", - "key": "version_identifier", + "name": "Description", + "key": "description", "value": null, "format": false, "detail_spec": null, "valid_values": [] } + ] + }, + { + "types": [ + "ALL" ], - "columns": [ + "attributes": [ { - "name": "File Path Name", - "key": "file_path_name", + "name": "Kafka Server Name", + "key": "kafka_server", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "File Name", - "key": "file_name", + "name": "Host Name", + "key": "host_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Description", - "key": "description", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File System Name", - "key": "file_system_name", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Type", - "key": "file_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Extension", - "key": "file_extension", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Encoding", - "key": "file_encoding", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Version Identifier", - "key": "version_identifier", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - } - ] - }, - { - "types": [ - "ALL" - ], - "attributes": [ - { - "name": "File Path Name", - "key": "file_path_name", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Name", - "key": "file_name", + "name": "Port", + "key": "port", "value": null, "format": false, "detail_spec": null, @@ -24521,108 +24186,36 @@ "format": false, "detail_spec": null, "valid_values": [] - }, - { - "name": "Version Identifier", - "key": "version_identifier", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File System Name", - "key": "file_system_name", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Type", - "key": "file_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Extension", - "key": "file_extension", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Encoding", - "key": "file_encoding", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] } ], "columns": [ { - "name": "File Path Name", - "key": "file_path_name", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Name", - "key": "file_name", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Description", - "key": "description", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Version Identifier", - "key": "version_identifier", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File System Name", - "key": "file_system_name", + "name": "Kafka Server Name", + "key": "kafka_server", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "File Type", - "key": "file_type", + "name": "Host Name", + "key": "host_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "File Extension", - "key": "file_extension", + "name": "Port", + "key": "port", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "File Encoding", - "key": "file_encoding", + "name": "Description", + "key": "description", "value": null, "format": false, "detail_spec": null, @@ -24655,10 +24248,10 @@ "get_additional_props": null, "question_spec": null }, - "Kafka-Server-Element-DrE-Basic": { + "Kafka-Server-Element-DrE-Advanced": { "target_type": "Kafka Server Element", - "heading": "Kafka-Server-Element-DrE-Basic Attributes", - "description": "Auto-generated format for Kafka Server Element (Create, Basic).", + "heading": "Kafka-Server-Element-DrE-Advanced Attributes", + "description": "Auto-generated format for Kafka Server Element (Create, Advanced).", "aliases": [], "annotations": {}, "family": "Asset Maker", @@ -24834,10 +24427,10 @@ "get_additional_props": null, "question_spec": null }, - "Kafka-Server-Element-DrE-Advanced": { - "target_type": "Kafka Server Element", - "heading": "Kafka-Server-Element-DrE-Advanced Attributes", - "description": "Auto-generated format for Kafka Server Element (Create, Advanced).", + "CSV-Data-File-Element-DrE-Basic": { + "target_type": "CSV Data File Element", + "heading": "CSV-Data-File-Element-DrE-Basic Attributes", + "description": "Auto-generated format for CSV Data File Element (Create, Basic).", "aliases": [], "annotations": {}, "family": "Asset Maker", @@ -24848,309 +24441,130 @@ ], "attributes": [ { - "name": "Kafka Server Name", - "key": "kafka_server", + "name": "File Name", + "key": "file_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Host Name", - "key": "host_name", + "name": "File Type", + "key": "file_type", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Port", - "key": "port", + "name": "File Path Name", + "key": "file_path_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Description", - "key": "description", + "name": "File Encoding", + "key": "file_encoding", "value": null, "format": false, "detail_spec": null, "valid_values": [] - } - ], - "columns": [ + }, { - "name": "Kafka Server Name", - "key": "kafka_server", + "name": "File Extension", + "key": "file_extension", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Host Name", - "key": "host_name", + "name": "File System Name", + "key": "file_system_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Port", - "key": "port", + "name": "Description", + "key": "description", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Description", - "key": "description", + "name": "Version Identifier", + "key": "version_identifier", "value": null, "format": false, "detail_spec": null, "valid_values": [] } - ] - }, - { - "types": [ - "ALL" ], - "attributes": [ + "columns": [ { - "name": "Kafka Server Name", - "key": "kafka_server", + "name": "File Name", + "key": "file_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Host Name", - "key": "host_name", + "name": "File Type", + "key": "file_type", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Port", - "key": "port", + "name": "File Path Name", + "key": "file_path_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Description", - "key": "description", + "name": "File Encoding", + "key": "file_encoding", "value": null, "format": false, "detail_spec": null, "valid_values": [] - } - ], - "columns": [ + }, { - "name": "Kafka Server Name", - "key": "kafka_server", + "name": "File Extension", + "key": "file_extension", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Host Name", - "key": "host_name", + "name": "File System Name", + "key": "file_system_name", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Port", - "key": "port", + "name": "Description", + "key": "description", "value": null, "format": false, "detail_spec": null, "valid_values": [] }, { - "name": "Description", - "key": "description", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - } - ] - } - ], - "action": { - "function": "MetadataExpert.find_metadata_elements_with_string", - "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": {}, - "analytic_function": null, - "analytic_spec_params": {} - }, - "get_additional_props": null, - "question_spec": null - }, - "CSV-Data-File-Element-DrE-Basic": { - "target_type": "CSV Data File Element", - "heading": "CSV-Data-File-Element-DrE-Basic Attributes", - "description": "Auto-generated format for CSV Data File Element (Create, Basic).", - "aliases": [], - "annotations": {}, - "family": "Asset Maker", - "formats": [ - { - "types": [ - "LIST" - ], - "attributes": [ - { - "name": "File Name", - "key": "file_name", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Type", - "key": "file_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Path Name", - "key": "file_path_name", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Encoding", - "key": "file_encoding", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Extension", - "key": "file_extension", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File System Name", - "key": "file_system_name", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Description", - "key": "description", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Version Identifier", - "key": "version_identifier", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - } - ], - "columns": [ - { - "name": "File Name", - "key": "file_name", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Type", - "key": "file_type", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Path Name", - "key": "file_path_name", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Encoding", - "key": "file_encoding", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File Extension", - "key": "file_extension", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "File System Name", - "key": "file_system_name", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Description", - "key": "description", - "value": null, - "format": false, - "detail_spec": null, - "valid_values": [] - }, - { - "name": "Version Identifier", - "key": "version_identifier", + "name": "Version Identifier", + "key": "version_identifier", "value": null, "format": false, "detail_spec": null, @@ -30177,6 +29591,592 @@ "get_additional_props": null, "question_spec": null }, + "Element-DrE-Basic": { + "target_type": "Element", + "heading": "Element-DrE-Basic Attributes", + "description": "Auto-generated format for Element (Create, Basic).", + "aliases": [], + "annotations": {}, + "family": "Automation", + "formats": [ + { + "types": [ + "LIST" + ], + "attributes": [ + { + "name": "Template GUID", + "key": "template_guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Placeholder Property Values", + "key": "placeholder_property_values", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Template Properties", + "key": "template_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + } + ], + "columns": [ + { + "name": "Template GUID", + "key": "template_guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Placeholder Property Values", + "key": "placeholder_property_values", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Template Properties", + "key": "template_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + } + ] + }, + { + "types": [ + "ALL" + ], + "attributes": [ + { + "name": "Template GUID", + "key": "template_guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Placeholder Property Values", + "key": "placeholder_property_values", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Template Properties", + "key": "template_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + } + ], + "columns": [ + { + "name": "Template GUID", + "key": "template_guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Placeholder Property Values", + "key": "placeholder_property_values", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Template Properties", + "key": "template_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + } + ] + } + ], + "action": { + "function": "MetadataExpert.find_metadata_elements_with_string", + "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": {}, + "analytic_function": null, + "analytic_spec_params": {} + }, + "get_additional_props": null, + "question_spec": null + }, + "Element-DrE-Advanced": { + "target_type": "Element", + "heading": "Element-DrE-Advanced Attributes", + "description": "Auto-generated format for Element (Create, Advanced).", + "aliases": [], + "annotations": {}, + "family": "Automation", + "formats": [ + { + "types": [ + "LIST" + ], + "attributes": [ + { + "name": "Element Type Name", + "key": "type_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Template GUID", + "key": "template_guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Placeholder Property Values", + "key": "placeholder_property_values", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Template Properties", + "key": "template_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Generic Initial Classifications", + "key": "initial_classifications", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Is Own Anchor", + "key": "is_own_anchor", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective From", + "key": "effective_from", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective To", + "key": "effective_to", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective Time", + "key": "effective_time", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Deep Copy", + "key": "deep_copy", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Initial Status", + "key": "initial_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "ACTIVE", + "DRAFT", + "PREPARED", + "PROPOSED", + "APPROVED", + "REJECTED", + "DEPRECATED", + "OTHER" + ] + } + ], + "columns": [ + { + "name": "Element Type Name", + "key": "type_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Template GUID", + "key": "template_guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Placeholder Property Values", + "key": "placeholder_property_values", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Template Properties", + "key": "template_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Generic Initial Classifications", + "key": "initial_classifications", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Is Own Anchor", + "key": "is_own_anchor", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective From", + "key": "effective_from", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective To", + "key": "effective_to", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective Time", + "key": "effective_time", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Deep Copy", + "key": "deep_copy", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Initial Status", + "key": "initial_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "ACTIVE", + "DRAFT", + "PREPARED", + "PROPOSED", + "APPROVED", + "REJECTED", + "DEPRECATED", + "OTHER" + ] + } + ] + }, + { + "types": [ + "ALL" + ], + "attributes": [ + { + "name": "Element Type Name", + "key": "type_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Template GUID", + "key": "template_guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Placeholder Property Values", + "key": "placeholder_property_values", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Template Properties", + "key": "template_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Initial Status", + "key": "initial_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "ACTIVE", + "DRAFT", + "PREPARED", + "PROPOSED", + "APPROVED", + "REJECTED", + "DEPRECATED", + "OTHER" + ] + }, + { + "name": "Generic Initial Classifications", + "key": "initial_classifications", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Is Own Anchor", + "key": "is_own_anchor", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective From", + "key": "effective_from", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective To", + "key": "effective_to", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective Time", + "key": "effective_time", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Deep Copy", + "key": "deep_copy", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + } + ], + "columns": [ + { + "name": "Element Type Name", + "key": "type_name", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Template GUID", + "key": "template_guid", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Placeholder Property Values", + "key": "placeholder_property_values", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Template Properties", + "key": "template_properties", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Initial Status", + "key": "initial_status", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [ + "ACTIVE", + "DRAFT", + "PREPARED", + "PROPOSED", + "APPROVED", + "REJECTED", + "DEPRECATED", + "OTHER" + ] + }, + { + "name": "Generic Initial Classifications", + "key": "initial_classifications", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Is Own Anchor", + "key": "is_own_anchor", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective From", + "key": "effective_from", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective To", + "key": "effective_to", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Effective Time", + "key": "effective_time", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + }, + { + "name": "Deep Copy", + "key": "deep_copy", + "value": null, + "format": false, + "detail_spec": null, + "valid_values": [] + } + ] + } + ], + "action": { + "function": "MetadataExpert.find_metadata_elements_with_string", + "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": {}, + "analytic_function": null, + "analytic_spec_params": {} + }, + "get_additional_props": null, + "question_spec": null + }, "Collection-DrE-Basic": { "target_type": "Collection", "heading": "Collection-DrE-Basic Attributes", diff --git a/md_processing/dr_egeria.py b/md_processing/dr_egeria.py index ad74ebd4..3d0f785e 100644 --- a/md_processing/dr_egeria.py +++ b/md_processing/dr_egeria.py @@ -49,6 +49,8 @@ EmbeddedProcessProcessor, InitiateEngineActionProcessor, CancelEngineActionProcessor, LineageLinkProcessor, UpdateLineageRelationshipProcessor, AssetMakerProcessor, + InitiateGovernanceActionProcessProcessor, InitiateGovernanceActionTypeProcessor, InitiateSurveyProcessor, + InitiateSubscriptionProcessor, CancelSubscriptionProcessor, SchemaElementProcessor, SchemaTemplateProcessor, SchemaLinkProcessor, SchemaClassificationProcessor, ) @@ -405,8 +407,16 @@ def reg(base, cls): reg(f"Update {_lineage_type}", UpdateLineageRelationshipProcessor) reg("Unlink Lineage Relationship", LineageLinkProcessor) - # Asset Maker (Automated Curation's create-from-template surface) + # Automation (running governance engines; Create Element moved here from + # Asset Maker 2026-10-02 but still uses the generic create-from-template path) + reg("Initiate Governance Action Process", InitiateGovernanceActionProcessProcessor) + reg("Initiate Governance Action Type", InitiateGovernanceActionTypeProcessor) + reg("Initiate Survey", InitiateSurveyProcessor) + reg("Initiate Subscription", InitiateSubscriptionProcessor) + reg("Cancel Subscription", CancelSubscriptionProcessor) reg("Create Element", AssetMakerProcessor) + + # Asset Maker (Automated Curation's create-from-template surface) reg("Create Secrets Store Element", AssetMakerProcessor) reg("Create Kafka Server Element", AssetMakerProcessor) reg("Create CSV Data File Element", AssetMakerProcessor) diff --git a/md_processing/v2/__init__.py b/md_processing/v2/__init__.py index ac1f011b..68117b1a 100644 --- a/md_processing/v2/__init__.py +++ b/md_processing/v2/__init__.py @@ -43,4 +43,8 @@ from .engine_action import InitiateEngineActionProcessor, CancelEngineActionProcessor from .lineage_linker import LineageLinkProcessor, UpdateLineageRelationshipProcessor from .asset_maker import AssetMakerProcessor +from .automation import ( + InitiateGovernanceActionProcessProcessor, InitiateGovernanceActionTypeProcessor, InitiateSurveyProcessor, + InitiateSubscriptionProcessor, CancelSubscriptionProcessor, +) from .schema_maker import SchemaElementProcessor, SchemaTemplateProcessor, SchemaLinkProcessor, SchemaClassificationProcessor diff --git a/md_processing/v2/automation.py b/md_processing/v2/automation.py new file mode 100644 index 00000000..9d76860b --- /dev/null +++ b/md_processing/v2/automation.py @@ -0,0 +1,199 @@ +""" +Automation Processors for Dr.Egeria v2. + +Handles the "Automation" command family -- requests that set Egeria's +governance engines running, rather than create or change metadata directly: + +- Initiate Governance Action Process / Initiate Governance Action Type: run a + process (or a single action type) through AutomatedCuration's + initiate_gov_action_process / initiate_gov_action_type. +- Initiate Survey: run a survey governance action type against one resource. + The action target name each survey expects (e.g. "postgresDatabase", + "fileToSurvey") is read from the survey type's specification by + AutomatedCuration._async_initiate_survey, unless Action Target Name is set. +- Initiate Subscription: Egeria has no "create subscription" call -- a digital + product offers each subscription type as a SubscribingActionProcess + ("ProvisioningActionProcess::::Create Subscription::") that + already carries the product, its asset, license, service level objective and + notification type. Running it with the two remaining action targets + (digitalSubscriptionRequester, destinationDataSet) provisions the + subscription (see Egeria-api-automated-curation.http and the notification + manager's Egeria-baudot-*.http samples). +- Cancel Subscription: when a subscription is provisioned, Egeria creates a + dedicated DeletingActionProcess for cancelling it and links it to the + subscription through ResourceList with resourceUse "Cancel Subscription" + (CreateSubscriptionGovernanceActionConnector). Cancelling runs that process. + +Create Element (moved here from Asset Maker) keeps its AssetMakerProcessor. + +Every command here is an action, not a create-or-update of a named element, +so there is no existing element to look up and no Create<->Update rewrite +(same shape as InitiateEngineActionProcessor in engine_action.py). +""" +import json +from typing import Any, Dict, List, Optional + +from loguru import logger + +from pyegeria import PyegeriaException +from md_processing.v2.processors import AsyncBaseCommandProcessor + +CANCEL_SUBSCRIPTION_RESOURCE_USE = "Cancel Subscription" + + +def _v(attributes: Dict[str, Any], name: str, default=None): + return attributes.get(name, {}).get("value", default) + + +def _guid(attributes: Dict[str, Any], name: str) -> Optional[str]: + guid = attributes.get(name, {}).get("guid") + return None if not guid or str(guid).startswith("(Planned:") else guid + + +def _guid_list(attributes: Dict[str, Any], name: str) -> List[str]: + guid_list = attributes.get(name, {}).get("guid_list") + if isinstance(guid_list, list): + return [g for g in guid_list if g and not str(g).startswith("(Planned:")] + return [] + + +def _action_target(name: str, guid: str) -> Dict[str, str]: + return {"class": "NewActionTarget", "actionTargetName": name, "actionTargetGUID": guid} + + +def _initiated(guid: Any) -> bool: + return isinstance(guid, str) and bool(guid) and guid != "Action not initiated" + + +class AutomationProcessor(AsyncBaseCommandProcessor): + """Shared behaviour for the Automation family's action commands.""" + + def supports_target_element_lookup(self) -> bool: + # An action, not a named element: no as-is lookup, no upsert rewrite. + return False + + async def fetch_as_is(self) -> Optional[Dict[str, Any]]: + return None + + async def _get_element(self, guid: str) -> Dict[str, Any]: + client = self.client.classification_manager + url = (f"{client.platform_url}/servers/{client.view_server}/api/open-metadata/" + f"classification-explorer/elements/{guid}") + response = await client._async_make_request("POST", url, json.dumps({"class": "GetRequestBody"})) + return response.json().get("element") or {} + + async def _qualified_name(self, attributes: Dict[str, Any], attr_name: str) -> str: + """The qualified name of a Reference Name attribute's element -- the initiate + calls take qualified names, while the author may have given a display name or GUID.""" + guid = _guid(attributes, attr_name) + if not guid: + raise PyegeriaException(f"'{attr_name}' could not be resolved to an existing element.") + qualified_name = (await self._get_element(guid)).get("properties", {}).get("qualifiedName") + if not qualified_name: + raise PyegeriaException(f"'{attr_name}' ({guid}) has no qualified name.") + return qualified_name + + async def _action_targets(self, attributes: Dict[str, Any]) -> List[Dict[str, str]]: + """'Action Targets' Dictionary (name: element per line) -> NewActionTarget list.""" + targets = [] + for name, ref in (_v(attributes, "Action Targets") or {}).items(): + guid = await self.resolve_element_guid(str(ref)) + if not guid or str(guid).startswith("(Planned:"): + raise PyegeriaException(f"Action target '{name}': '{ref}' could not be resolved to an existing element.") + targets.append(_action_target(str(name), guid)) + return targets + + def _result(self, what: str, guid: str) -> str: + self.parsed_output["guid"] = guid + logger.success(f"{self.command.verb} {self.command.object_type}: {what} ({guid})") + return f"\n\n## {self.command.verb} {self.command.object_type}\n\n{what}: `{guid}`\n" + + +class InitiateGovernanceActionProcessProcessor(AutomationProcessor): + async def apply_changes(self) -> str: + attributes = self.parsed_output["attributes"] + process_qn = await self._qualified_name(attributes, "Governance Action Process") + guid = await self.client._async_initiate_gov_action_process( + process_qn, + request_source_guids=_guid_list(attributes, "Request Source Elements") or None, + action_targets=await self._action_targets(attributes) or None, + request_parameters=_v(attributes, "Request Parameters") or None, + ) + if not _initiated(guid): + raise PyegeriaException(f"Egeria did not start governance action process '{process_qn}'.") + return self._result(f"Started governance action process `{process_qn}`", guid) + + +class InitiateGovernanceActionTypeProcessor(AutomationProcessor): + async def apply_changes(self) -> str: + attributes = self.parsed_output["attributes"] + action_type_qn = await self._qualified_name(attributes, "Governance Action Type") + guid = await self.client._async_initiate_gov_action_type( + action_type_qn, + _guid_list(attributes, "Request Source Elements") or None, + await self._action_targets(attributes) or None, + request_parameters=_v(attributes, "Request Parameters") or None, + ) + if not _initiated(guid): + raise PyegeriaException(f"Egeria did not start governance action type '{action_type_qn}'.") + return self._result(f"Started engine action for `{action_type_qn}`", guid) + + +class InitiateSurveyProcessor(AutomationProcessor): + async def apply_changes(self) -> str: + attributes = self.parsed_output["attributes"] + survey_qn = await self._qualified_name(attributes, "Survey Type") + resource_guid = _guid(attributes, "Resource to Survey") + if not resource_guid: + raise PyegeriaException("'Resource to Survey' could not be resolved to an existing element.") + guid = await self.client._async_initiate_survey( + survey_qn, resource_guid, + request_parameters=_v(attributes, "Request Parameters") or None, + action_target_name=_v(attributes, "Action Target Name") or None, + ) + if not _initiated(guid): + raise PyegeriaException(f"Egeria did not start survey '{survey_qn}'.") + return self._result(f"Started survey `{survey_qn}`", guid) + + +class InitiateSubscriptionProcessor(AutomationProcessor): + async def apply_changes(self) -> str: + attributes = self.parsed_output["attributes"] + process_qn = await self._qualified_name(attributes, "Subscription Type") + requester = _guid(attributes, "Subscription Requester") + destination = _guid(attributes, "Destination Data Set") + if not requester or not destination: + raise PyegeriaException("Subscription Requester and Destination Data Set must both resolve to existing elements.") + guid = await self.client._async_initiate_gov_action_process( + process_qn, + action_targets=[_action_target("digitalSubscriptionRequester", requester), + _action_target("destinationDataSet", destination)], + request_parameters=_v(attributes, "Request Parameters") or None, + ) + if not _initiated(guid): + raise PyegeriaException(f"Egeria did not start subscription process '{process_qn}'.") + return self._result(f"Started subscription process `{process_qn}`", guid) + + +class CancelSubscriptionProcessor(AutomationProcessor): + async def apply_changes(self) -> str: + attributes = self.parsed_output["attributes"] + subscription_guid = _guid(attributes, "Digital Subscription") + if not subscription_guid: + raise PyegeriaException("'Digital Subscription' could not be resolved to an existing element.") + subscription = await self._get_element(subscription_guid) + cancel_qn = None + for entry in subscription.get("resourceList") or []: + use = ((entry.get("relationshipProperties") or {}).get("resourceUse") or "").strip() + if use.lower() == CANCEL_SUBSCRIPTION_RESOURCE_USE.lower(): + cancel_qn = ((entry.get("relatedElement") or {}).get("properties") or {}).get("qualifiedName") + break + if not cancel_qn: + raise PyegeriaException( + f"Subscription {subscription_guid} has no '{CANCEL_SUBSCRIPTION_RESOURCE_USE}' process in its " + f"resource list -- it was probably not created by a subscription process, so it cannot be " + f"cancelled this way.") + guid = await self.client._async_initiate_gov_action_process(cancel_qn) + if not _initiated(guid): + raise PyegeriaException(f"Egeria did not start cancel process '{cancel_qn}'.") + return self._result(f"Started cancel process `{cancel_qn}`", guid) diff --git a/pyegeria/omvs/automated_curation.py b/pyegeria/omvs/automated_curation.py index e2ee72b6..0d3f80d4 100644 --- a/pyegeria/omvs/automated_curation.py +++ b/pyegeria/omvs/automated_curation.py @@ -3244,12 +3244,15 @@ async def _async_initiate_gov_action_process( ) url = f"{self.ref_curation_command_base}/governance-action-processes/initiate" + # Field names per InitiateGovernanceActionProcessRequestBody (Egeria ignores + # unknown fields, so the previous "requestSourceGUIDs"/"startTime" were + # silently dropped -- the request sources and start time never applied). body = { - "class": "GovernanceActionProcessRequestBody", + "class": "InitiateGovernanceActionProcessRequestBody", "processQualifiedName": action_type_qualified_name, - "requestSourceGUIDs": request_source_guids, + "actionSourceGUIDs": request_source_guids, "actionTargets": action_targets, - "startTime": int(start_time.timestamp() * 1000), + "startDate": int(start_time.timestamp() * 1000), "requestParameters": request_parameters, "originatorServiceName": orig_service_name, "originatorEngineName": orig_engine_name, @@ -3361,7 +3364,9 @@ async def _async_initiate_gov_action_type( body = { "class": "InitiateGovernanceActionTypeRequestBody", "governanceActionTypeQualifiedName": action_type_qualified_name, - "requestSourceGUIDs": request_source_guids, + # InitiateGovernanceActionTypeRequestBody's field is actionSourceGUIDs; + # "requestSourceGUIDs" was silently ignored by Egeria. + "actionSourceGUIDs": request_source_guids, "actionTargets": action_targets, "startDate": start, "requestParameters": request_parameters, @@ -3424,11 +3429,28 @@ def initiate_gov_action_type( # Initiate surveys # + async def _async_get_supported_action_target_names(self, action_type_qualified_name: str) -> list[str]: + """Return the action target names a governance action type declares it accepts + (its specification's supportedActionTarget entries), or [] if they can't be read.""" + try: + guid = await self.__async_get_guid__(qualified_name=action_type_qualified_name) + if not guid or guid == NO_ELEMENTS_FOUND: + return [] + url = (f"{self.platform_url}/servers/{self.view_server}/api/open-metadata/" + f"classification-explorer/elements/{guid}") + response = await self._async_make_request("POST", url, {"class": "GetRequestBody"}) + spec = (response.json().get("element") or {}).get("specification") or {} + return [t.get("name") for t in spec.get("supportedActionTarget") or [] if t.get("name")] + except Exception as e: + logger.debug(f"Could not read supported action targets for {action_type_qualified_name}: {e}") + return [] + async def _async_initiate_survey( self, survey_name: str, resource_guid: str, request_parameters: dict = None, + action_target_name: Optional[str] = None, ) -> str: """Initiate a survey of a resource. @@ -3443,6 +3465,10 @@ async def _async_initiate_survey( request_parameters : dict, optional Survey-specific request parameters, e.g. `finalAnalysisStep`, `ignoreAnalysisSteps`, `analysisLevel`. + action_target_name : str, optional + The action target name the survey expects for the resource. If not given, it is read + from the survey type's declared supportedActionTarget (e.g. "postgresDatabase", + "fileToSurvey"); if that is missing or ambiguous, "serverToSurvey" is used. Returns ------- @@ -3459,6 +3485,13 @@ async def _async_initiate_survey( For more information see: https://egeria-project.org/concepts/survey-action-service """ + if not action_target_name: + # Each survey type expects its own target name; a single hardcoded name + # ("serverToSurvey") was wrong for e.g. database and folder surveys. + # "*" means the survey accepts any name (e.g. the Kafka server survey). + supported = [n for n in await self._async_get_supported_action_target_names(survey_name) if n != "*"] + action_target_name = supported[0] if len(supported) == 1 else "serverToSurvey" + url = f"{self.ref_curation_command_base}/governance-action-types/initiate" body = { @@ -3467,7 +3500,7 @@ async def _async_initiate_survey( "actionTargets": [ { "class": "NewActionTarget", - "actionTargetName": "serverToSurvey", + "actionTargetName": action_target_name, "actionTargetGUID": resource_guid.strip(), } ], diff --git a/pyegeria/view/base_report_formats.py b/pyegeria/view/base_report_formats.py index 14bb6ccf..3593f7ec 100644 --- a/pyegeria/view/base_report_formats.py +++ b/pyegeria/view/base_report_formats.py @@ -167,8 +167,8 @@ 'Digital-Product-DrE-Basic': FormatSet(target_type='Digital Product', heading='Digital-Product-DrE-Basic Attributes', description='Auto-generated format for Digital Product (Create, Basic).', family='Digital Product 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='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Current Version', key='current_version'), Column(name='Introduction Date', key='introduction_date'), Column(name='Maturity', key='maturity'), Column(name='Next Version Date', key='next_version_date'), Column(name='Product Name', key='product_name'), Column(name='Service Life', key='service_life'), Column(name='Withdrawal Date', key='withdrawal_date'), 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='Current Version', key='current_version'), Column(name='Introduction Date', key='introduction_date'), Column(name='Maturity', key='maturity'), Column(name='Next Version Date', key='next_version_date'), Column(name='Product Name', key='product_name'), Column(name='Service Life', key='service_life'), Column(name='Withdrawal Date', key='withdrawal_date')])], 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': 'DigitalProduct'})), 'Digital-Subscription-DrE-Advanced': FormatSet(target_type='Digital Subscription', heading='Digital-Subscription-DrE-Advanced Attributes', description='Auto-generated format for Digital Subscription (Create, Advanced).', family='Digital Product 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='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type'), Column(name='Support Level', key='support_level'), 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='Agreement Type', key='agreement_type'), Column(name='Support Level', key='support_level'), 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': 'DigitalSubscription'})), 'Digital-Subscription-DrE-Basic': FormatSet(target_type='Digital Subscription', heading='Digital-Subscription-DrE-Basic Attributes', description='Auto-generated format for Digital Subscription (Create, Basic).', family='Digital Product 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='Authors', key='authors'), Column(name='Purpose', key='purpose'), Column(name='Agreement Type', key='agreement_type'), Column(name='Support Level', key='support_level'), 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='Agreement Type', key='agreement_type'), Column(name='Support Level', key='support_level')])], 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': 'DigitalSubscription'})), - 'Element-DrE-Advanced': FormatSet(target_type='Element', heading='Element-DrE-Advanced Attributes', description='Auto-generated format for Element (Create, Advanced).', family='Asset Maker', formats=[Format(types=['LIST'], attributes=[Column(name='Element Type Name', key='type_name'), Column(name='Template GUID', key='template_guid'), Column(name='Placeholder Property Values', key='placeholder_property_values'), Column(name='Template Properties', key='template_properties'), Column(name='Generic Initial Classifications', key='initial_classifications'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Effective From', key='effective_from'), Column(name='Effective To', key='effective_to'), Column(name='Effective Time', key='effective_time'), Column(name='Deep Copy', key='deep_copy'), Column(name='Initial Status', key='initial_status', valid_values=['ACTIVE', 'DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'DEPRECATED', 'OTHER'])]), Format(types=['ALL'], attributes=[Column(name='Element Type Name', key='type_name'), Column(name='Template GUID', key='template_guid'), Column(name='Placeholder Property Values', key='placeholder_property_values'), Column(name='Template Properties', key='template_properties'), Column(name='Initial Status', key='initial_status', valid_values=['ACTIVE', 'DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'DEPRECATED', 'OTHER']), Column(name='Generic Initial Classifications', key='initial_classifications'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Effective From', key='effective_from'), Column(name='Effective To', key='effective_to'), Column(name='Effective Time', key='effective_time'), Column(name='Deep Copy', key='deep_copy')])], action=ActionParameter(function='MetadataExpert.find_metadata_elements_with_string', 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'])), - 'Element-DrE-Basic': FormatSet(target_type='Element', heading='Element-DrE-Basic Attributes', description='Auto-generated format for Element (Create, Basic).', family='Asset Maker', formats=[Format(types=['LIST'], attributes=[Column(name='Template GUID', key='template_guid'), Column(name='Placeholder Property Values', key='placeholder_property_values'), Column(name='Template Properties', key='template_properties')]), Format(types=['ALL'], attributes=[Column(name='Template GUID', key='template_guid'), Column(name='Placeholder Property Values', key='placeholder_property_values'), Column(name='Template Properties', key='template_properties')])], action=ActionParameter(function='MetadataExpert.find_metadata_elements_with_string', 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'])), + 'Element-DrE-Advanced': FormatSet(target_type='Element', heading='Element-DrE-Advanced Attributes', description='Auto-generated format for Element (Create, Advanced).', family='Automation', formats=[Format(types=['LIST'], attributes=[Column(name='Element Type Name', key='type_name'), Column(name='Template GUID', key='template_guid'), Column(name='Placeholder Property Values', key='placeholder_property_values'), Column(name='Template Properties', key='template_properties'), Column(name='Generic Initial Classifications', key='initial_classifications'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Effective From', key='effective_from'), Column(name='Effective To', key='effective_to'), Column(name='Effective Time', key='effective_time'), Column(name='Deep Copy', key='deep_copy'), Column(name='Initial Status', key='initial_status', valid_values=['ACTIVE', 'DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'DEPRECATED', 'OTHER'])]), Format(types=['ALL'], attributes=[Column(name='Element Type Name', key='type_name'), Column(name='Template GUID', key='template_guid'), Column(name='Placeholder Property Values', key='placeholder_property_values'), Column(name='Template Properties', key='template_properties'), Column(name='Initial Status', key='initial_status', valid_values=['ACTIVE', 'DRAFT', 'PREPARED', 'PROPOSED', 'APPROVED', 'REJECTED', 'DEPRECATED', 'OTHER']), Column(name='Generic Initial Classifications', key='initial_classifications'), Column(name='Is Own Anchor', key='is_own_anchor'), Column(name='Effective From', key='effective_from'), Column(name='Effective To', key='effective_to'), Column(name='Effective Time', key='effective_time'), Column(name='Deep Copy', key='deep_copy')])], action=ActionParameter(function='MetadataExpert.find_metadata_elements_with_string', 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'])), + 'Element-DrE-Basic': FormatSet(target_type='Element', heading='Element-DrE-Basic Attributes', description='Auto-generated format for Element (Create, Basic).', family='Automation', formats=[Format(types=['LIST'], attributes=[Column(name='Template GUID', key='template_guid'), Column(name='Placeholder Property Values', key='placeholder_property_values'), Column(name='Template Properties', key='template_properties')]), Format(types=['ALL'], attributes=[Column(name='Template GUID', key='template_guid'), Column(name='Placeholder Property Values', key='placeholder_property_values'), Column(name='Template Properties', key='template_properties')])], action=ActionParameter(function='MetadataExpert.find_metadata_elements_with_string', 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'])), 'Embedded-Process-DrE-Advanced': FormatSet(target_type='Embedded Process', heading='Embedded-Process-DrE-Advanced Attributes', description='Auto-generated format for Embedded Process (Create, Advanced).', family='Action Author', 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='Deployed Implementation Type', key='deployed_impl_type'), Column(name='Namespace Path', key='namespace_path'), Column(name='Resource Name', key='resource_name'), Column(name='Source', key='source'), Column(name='Formula', key='formula'), Column(name='Formula Type', key='formula_type'), Column(name='Expected Behaviour', key='expected_behaviour'), Column(name='Priority', key='priority'), 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='Deployed Implementation Type', key='deployed_impl_type'), Column(name='Namespace Path', key='namespace_path'), Column(name='Resource Name', key='resource_name'), Column(name='Source', key='source'), Column(name='Formula', key='formula'), Column(name='Formula Type', key='formula_type'), Column(name='Expected Behaviour', key='expected_behaviour'), Column(name='Priority', key='priority'), 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='MetadataExpert.find_metadata_elements_with_string', 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'])), 'Embedded-Process-DrE-Basic': FormatSet(target_type='Embedded Process', heading='Embedded-Process-DrE-Basic Attributes', description='Auto-generated format for Embedded Process (Create, Basic).', family='Action Author', 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='Deployed Implementation Type', key='deployed_impl_type'), Column(name='Namespace Path', key='namespace_path'), Column(name='Resource Name', key='resource_name'), Column(name='Priority', key='priority'), 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='Deployed Implementation Type', key='deployed_impl_type'), Column(name='Namespace Path', key='namespace_path'), Column(name='Resource Name', key='resource_name'), Column(name='Priority', key='priority')])], action=ActionParameter(function='MetadataExpert.find_metadata_elements_with_string', 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'])), 'Event-Set-DrE-Advanced': FormatSet(target_type='Event Set', heading='Event-Set-DrE-Advanced Attributes', description='Auto-generated format for Event Set (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': 'EventSet'})), diff --git a/sample-data/templates/advanced/Action Author/Initiate_Engine_Action.md b/sample-data/templates/advanced/Action Author/Initiate_Engine_Action.md index b7c6e756..5fac1ed3 100644 --- a/sample-data/templates/advanced/Action Author/Initiate_Engine_Action.md +++ b/sample-data/templates/advanced/Action Author/Initiate_Engine_Action.md @@ -124,7 +124,7 @@ ___ > **Attribute Type**: Dictionary -> **Description**: Parameters to pass to the governance service when this step executes. +> **Description**: Name: value parameters passed to the governance service(s) that run. > | Parameter Name | Parameter Value | > |---|---| @@ -404,7 +404,7 @@ ___ > **Attribute Type**: Reference Name List -> **Description**: Elements that triggered/requested this engine action. +> **Description**: Elements that caused or requested the action. ### Received Guards diff --git a/sample-data/templates/advanced/Action Author/Link_Action_to_Action_Executor.md b/sample-data/templates/advanced/Action Author/Link_Action_to_Action_Executor.md index 9bb831b7..57114c43 100644 --- a/sample-data/templates/advanced/Action Author/Link_Action_to_Action_Executor.md +++ b/sample-data/templates/advanced/Action Author/Link_Action_to_Action_Executor.md @@ -8,7 +8,7 @@ ___ > **Attribute Type**: Reference Name -> **Description**: The governance action type to link to a governance engine executor. +> **Description**: The governance action type, identified by its qualified name, display name or GUID. > **Alternative Labels**: Action Type @@ -60,7 +60,7 @@ ___ > **Attribute Type**: Dictionary -> **Description**: Parameters to pass to the governance service when this step executes. +> **Description**: Name: value parameters passed to the governance service(s) that run. > | Parameter Name | Parameter Value | > |---|---| diff --git a/sample-data/templates/advanced/Action Author/Link_Action_to_Target.md b/sample-data/templates/advanced/Action Author/Link_Action_to_Target.md index 04419b9a..4460cb9f 100644 --- a/sample-data/templates/advanced/Action Author/Link_Action_to_Target.md +++ b/sample-data/templates/advanced/Action Author/Link_Action_to_Target.md @@ -52,7 +52,7 @@ ___ > **Attribute Type**: Simple -> **Description**: The name to give this element when it is passed as an action target to the governance service. +> **Description**: The name an element is given when it is passed as an action target to a governance service. ### Effective From diff --git a/sample-data/templates/advanced/Action Author/Link_First_Process_Step.md b/sample-data/templates/advanced/Action Author/Link_First_Process_Step.md index f77b1e48..2afab70c 100644 --- a/sample-data/templates/advanced/Action Author/Link_First_Process_Step.md +++ b/sample-data/templates/advanced/Action Author/Link_First_Process_Step.md @@ -8,7 +8,7 @@ ___ > **Attribute Type**: Reference Name -> **Description**: The governance action process to link. +> **Description**: The governance action process, identified by its qualified name, display name or GUID. ### Governance Action Process Step @@ -58,7 +58,7 @@ ___ > **Attribute Type**: Dictionary -> **Description**: Parameters to pass to the governance service when this step executes. +> **Description**: Name: value parameters passed to the governance service(s) that run. > | Parameter Name | Parameter Value | > |---|---| diff --git a/sample-data/templates/advanced/Automation/Cancel_Subscription.md b/sample-data/templates/advanced/Automation/Cancel_Subscription.md new file mode 100644 index 00000000..f2d17ad1 --- /dev/null +++ b/sample-data/templates/advanced/Automation/Cancel_Subscription.md @@ -0,0 +1,86 @@ +___ + +## Cancel Subscription +> Cancel a digital subscription by running the cancel process Egeria created for it when the subscription was provisioned. + +### Digital Subscription +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The digital subscription to cancel, identified by its qualified name, display name or GUID. + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Effective From +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The beginning of when an element is viewable. + + +### Effective Time +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The time at which an element must be effective in order to be returned by the request. + + +### Effective To +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The ending time at which an element is visible. + + +### External Source GUID +> **Input Required**: False + +> **Attribute Type**: GUID + +> **Description**: The unique identifier of an external source. + + +### External Source Name +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The name of an external source + + +### For Duplicate Processing +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support duplicate processing. + + +### For Lineage +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support lineage. + + +### Request ID +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A user provided or system generated request id for a conversation. + + +___ diff --git a/sample-data/templates/advanced/Asset Maker/Create_Element.md b/sample-data/templates/advanced/Automation/Create_Element.md similarity index 97% rename from sample-data/templates/advanced/Asset Maker/Create_Element.md rename to sample-data/templates/advanced/Automation/Create_Element.md index 13fd3373..4384b9b3 100644 --- a/sample-data/templates/advanced/Asset Maker/Create_Element.md +++ b/sample-data/templates/advanced/Automation/Create_Element.md @@ -1,7 +1,7 @@ ___ ## Create Element -> Create a new metadata element by instantiating an Open Metadata catalog template (the generic, low-level mechanism behind every other Asset Maker command). Advanced use only -- prefer one of the specific 'Create Element' commands when the element type has one. +> Create a new metadata element by instantiating an Open Metadata catalog template (the generic, low-level mechanism behind every Asset Maker 'Create Element' command). Advanced use only -- prefer one of the specific 'Create Element' commands when the element type has one. ### Element Type Name > **Input Required**: True diff --git a/sample-data/templates/advanced/Automation/Initiate_Governance_Action_Process.md b/sample-data/templates/advanced/Automation/Initiate_Governance_Action_Process.md new file mode 100644 index 00000000..219056d6 --- /dev/null +++ b/sample-data/templates/advanced/Automation/Initiate_Governance_Action_Process.md @@ -0,0 +1,118 @@ +___ + +## Initiate Governance Action Process +> Run a governance action process: Egeria uses the process as a template and starts its chain of engine actions. Action Targets and Request Parameters are passed to the first step. + +### Governance Action Process +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The governance action process, identified by its qualified name, display name or GUID. + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Action Targets +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Elements passed to the governance service(s), one 'action target name: element' pair per line; each element is a qualified name, display name or GUID. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +### Request Parameters +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Name: value parameters passed to the governance service(s) that run. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +### Effective From +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The beginning of when an element is viewable. + + +### Effective Time +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The time at which an element must be effective in order to be returned by the request. + + +### Effective To +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The ending time at which an element is visible. + + +### External Source GUID +> **Input Required**: False + +> **Attribute Type**: GUID + +> **Description**: The unique identifier of an external source. + + +### External Source Name +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The name of an external source + + +### For Duplicate Processing +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support duplicate processing. + + +### For Lineage +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support lineage. + + +### Request ID +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A user provided or system generated request id for a conversation. + + +### Request Source Elements +> **Input Required**: False + +> **Attribute Type**: Reference Name List + +> **Description**: Elements that caused or requested the action. + + +___ diff --git a/sample-data/templates/advanced/Automation/Initiate_Governance_Action_Type.md b/sample-data/templates/advanced/Automation/Initiate_Governance_Action_Type.md new file mode 100644 index 00000000..9e0a05f4 --- /dev/null +++ b/sample-data/templates/advanced/Automation/Initiate_Governance_Action_Type.md @@ -0,0 +1,120 @@ +___ + +## Initiate Governance Action Type +> Run a single governance action type: Egeria starts one engine action for it, passing the Action Targets and Request Parameters to its governance service. + +### Governance Action Type +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The governance action type, identified by its qualified name, display name or GUID. + +> **Alternative Labels**: Action Type + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Action Targets +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Elements passed to the governance service(s), one 'action target name: element' pair per line; each element is a qualified name, display name or GUID. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +### Request Parameters +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Name: value parameters passed to the governance service(s) that run. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +### Effective From +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The beginning of when an element is viewable. + + +### Effective Time +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The time at which an element must be effective in order to be returned by the request. + + +### Effective To +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The ending time at which an element is visible. + + +### External Source GUID +> **Input Required**: False + +> **Attribute Type**: GUID + +> **Description**: The unique identifier of an external source. + + +### External Source Name +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The name of an external source + + +### For Duplicate Processing +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support duplicate processing. + + +### For Lineage +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support lineage. + + +### Request ID +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A user provided or system generated request id for a conversation. + + +### Request Source Elements +> **Input Required**: False + +> **Attribute Type**: Reference Name List + +> **Description**: Elements that caused or requested the action. + + +___ diff --git a/sample-data/templates/advanced/Automation/Initiate_Subscription.md b/sample-data/templates/advanced/Automation/Initiate_Subscription.md new file mode 100644 index 00000000..fed4cc10 --- /dev/null +++ b/sample-data/templates/advanced/Automation/Initiate_Subscription.md @@ -0,0 +1,114 @@ +___ + +## Initiate Subscription +> Take out a subscription to a digital product by running the product's subscription process for the chosen subscription type. The process creates the subscription, its license and the data delivery to the destination. Unlike Create Digital Subscription, which only records a subscription element, this provisions it. + +### Subscription Type +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The subscription type to take out: a digital product's subscribing action process, ProvisioningActionProcess::::Create Subscription::. + + +### Subscription Requester +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The actor (person, team, ...) requesting the subscription. + + +### Destination Data Set +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The asset the subscribed data is delivered to. + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Request Parameters +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Name: value parameters passed to the governance service(s) that run. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +### Effective From +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The beginning of when an element is viewable. + + +### Effective Time +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The time at which an element must be effective in order to be returned by the request. + + +### Effective To +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The ending time at which an element is visible. + + +### External Source GUID +> **Input Required**: False + +> **Attribute Type**: GUID + +> **Description**: The unique identifier of an external source. + + +### External Source Name +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The name of an external source + + +### For Duplicate Processing +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support duplicate processing. + + +### For Lineage +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support lineage. + + +### Request ID +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A user provided or system generated request id for a conversation. + + +___ diff --git a/sample-data/templates/advanced/Automation/Initiate_Survey.md b/sample-data/templates/advanced/Automation/Initiate_Survey.md new file mode 100644 index 00000000..724b1600 --- /dev/null +++ b/sample-data/templates/advanced/Automation/Initiate_Survey.md @@ -0,0 +1,114 @@ +___ + +## Initiate Survey +> Run a survey of a resource. The action target name the survey expects is read from the survey type; set Action Target Name only to override it. + +### Survey Type +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The survey to run: the qualified name of its governance action type, e.g. PostgreSQLSurvey::survey-postgres-database or FileSurvey::survey-folder. + + +### Resource to Survey +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The element describing the resource to survey (a server, database, folder, file, ...). + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Action Target Name +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The name an element is given when it is passed as an action target to a governance service. + + +### Request Parameters +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Name: value parameters passed to the governance service(s) that run. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +### Effective From +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The beginning of when an element is viewable. + + +### Effective Time +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The time at which an element must be effective in order to be returned by the request. + + +### Effective To +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The ending time at which an element is visible. + + +### External Source GUID +> **Input Required**: False + +> **Attribute Type**: GUID + +> **Description**: The unique identifier of an external source. + + +### External Source Name +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The name of an external source + + +### For Duplicate Processing +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support duplicate processing. + + +### For Lineage +> **Input Required**: False + +> **Attribute Type**: Bool + +> **Description**: Flag indicating if the request is to support lineage. + + +### Request ID +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A user provided or system generated request id for a conversation. + + +___ diff --git a/sample-data/templates/basic/Action Author/Link_Action_to_Action_Executor.md b/sample-data/templates/basic/Action Author/Link_Action_to_Action_Executor.md index 3a594e4b..fbea2023 100644 --- a/sample-data/templates/basic/Action Author/Link_Action_to_Action_Executor.md +++ b/sample-data/templates/basic/Action Author/Link_Action_to_Action_Executor.md @@ -8,7 +8,7 @@ ___ > **Attribute Type**: Reference Name -> **Description**: The governance action type to link to a governance engine executor. +> **Description**: The governance action type, identified by its qualified name, display name or GUID. > **Alternative Labels**: Action Type @@ -60,7 +60,7 @@ ___ > **Attribute Type**: Dictionary -> **Description**: Parameters to pass to the governance service when this step executes. +> **Description**: Name: value parameters passed to the governance service(s) that run. > | Parameter Name | Parameter Value | > |---|---| diff --git a/sample-data/templates/basic/Action Author/Link_Action_to_Target.md b/sample-data/templates/basic/Action Author/Link_Action_to_Target.md index 8ca781a9..3bae57d9 100644 --- a/sample-data/templates/basic/Action Author/Link_Action_to_Target.md +++ b/sample-data/templates/basic/Action Author/Link_Action_to_Target.md @@ -52,7 +52,7 @@ ___ > **Attribute Type**: Simple -> **Description**: The name to give this element when it is passed as an action target to the governance service. +> **Description**: The name an element is given when it is passed as an action target to a governance service. ___ diff --git a/sample-data/templates/basic/Action Author/Link_First_Process_Step.md b/sample-data/templates/basic/Action Author/Link_First_Process_Step.md index ee7c7d22..0d1752dc 100644 --- a/sample-data/templates/basic/Action Author/Link_First_Process_Step.md +++ b/sample-data/templates/basic/Action Author/Link_First_Process_Step.md @@ -8,7 +8,7 @@ ___ > **Attribute Type**: Reference Name -> **Description**: The governance action process to link. +> **Description**: The governance action process, identified by its qualified name, display name or GUID. ### Governance Action Process Step @@ -58,7 +58,7 @@ ___ > **Attribute Type**: Dictionary -> **Description**: Parameters to pass to the governance service when this step executes. +> **Description**: Name: value parameters passed to the governance service(s) that run. > | Parameter Name | Parameter Value | > |---|---| diff --git a/sample-data/templates/basic/Automation/Cancel_Subscription.md b/sample-data/templates/basic/Automation/Cancel_Subscription.md new file mode 100644 index 00000000..9c76d924 --- /dev/null +++ b/sample-data/templates/basic/Automation/Cancel_Subscription.md @@ -0,0 +1,22 @@ +___ + +## Cancel Subscription +> Cancel a digital subscription by running the cancel process Egeria created for it when the subscription was provisioned. + +### Digital Subscription +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The digital subscription to cancel, identified by its qualified name, display name or GUID. + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +___ diff --git a/sample-data/templates/basic/Automation/Initiate_Governance_Action_Process.md b/sample-data/templates/basic/Automation/Initiate_Governance_Action_Process.md new file mode 100644 index 00000000..b6cd4859 --- /dev/null +++ b/sample-data/templates/basic/Automation/Initiate_Governance_Action_Process.md @@ -0,0 +1,46 @@ +___ + +## Initiate Governance Action Process +> Run a governance action process: Egeria uses the process as a template and starts its chain of engine actions. Action Targets and Request Parameters are passed to the first step. + +### Governance Action Process +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The governance action process, identified by its qualified name, display name or GUID. + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Action Targets +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Elements passed to the governance service(s), one 'action target name: element' pair per line; each element is a qualified name, display name or GUID. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +### Request Parameters +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Name: value parameters passed to the governance service(s) that run. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +___ diff --git a/sample-data/templates/basic/Automation/Initiate_Governance_Action_Type.md b/sample-data/templates/basic/Automation/Initiate_Governance_Action_Type.md new file mode 100644 index 00000000..5483359a --- /dev/null +++ b/sample-data/templates/basic/Automation/Initiate_Governance_Action_Type.md @@ -0,0 +1,48 @@ +___ + +## Initiate Governance Action Type +> Run a single governance action type: Egeria starts one engine action for it, passing the Action Targets and Request Parameters to its governance service. + +### Governance Action Type +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The governance action type, identified by its qualified name, display name or GUID. + +> **Alternative Labels**: Action Type + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Action Targets +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Elements passed to the governance service(s), one 'action target name: element' pair per line; each element is a qualified name, display name or GUID. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +### Request Parameters +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Name: value parameters passed to the governance service(s) that run. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +___ diff --git a/sample-data/templates/basic/Automation/Initiate_Subscription.md b/sample-data/templates/basic/Automation/Initiate_Subscription.md new file mode 100644 index 00000000..ce15f243 --- /dev/null +++ b/sample-data/templates/basic/Automation/Initiate_Subscription.md @@ -0,0 +1,50 @@ +___ + +## Initiate Subscription +> Take out a subscription to a digital product by running the product's subscription process for the chosen subscription type. The process creates the subscription, its license and the data delivery to the destination. Unlike Create Digital Subscription, which only records a subscription element, this provisions it. + +### Subscription Type +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The subscription type to take out: a digital product's subscribing action process, ProvisioningActionProcess::::Create Subscription::. + + +### Subscription Requester +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The actor (person, team, ...) requesting the subscription. + + +### Destination Data Set +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The asset the subscribed data is delivered to. + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Request Parameters +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Name: value parameters passed to the governance service(s) that run. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +___ diff --git a/sample-data/templates/basic/Automation/Initiate_Survey.md b/sample-data/templates/basic/Automation/Initiate_Survey.md new file mode 100644 index 00000000..781ead7f --- /dev/null +++ b/sample-data/templates/basic/Automation/Initiate_Survey.md @@ -0,0 +1,50 @@ +___ + +## Initiate Survey +> Run a survey of a resource. The action target name the survey expects is read from the survey type; set Action Target Name only to override it. + +### Survey Type +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The survey to run: the qualified name of its governance action type, e.g. PostgreSQLSurvey::survey-postgres-database or FileSurvey::survey-folder. + + +### Resource to Survey +> **Input Required**: True + +> **Attribute Type**: Reference Name + +> **Description**: The element describing the resource to survey (a server, database, folder, file, ...). + + +### Journal Entry +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: A text entry into a journal. + + +### Action Target Name +> **Input Required**: False + +> **Attribute Type**: Simple + +> **Description**: The name an element is given when it is passed as an action target to a governance service. + + +### Request Parameters +> **Input Required**: False + +> **Attribute Type**: Dictionary + +> **Description**: Name: value parameters passed to the governance service(s) that run. + +> | Parameter Name | Parameter Value | +> |---|---| +> | example_key | example_value | + + +___ diff --git a/tests/micro-tests/test_automation_family.py b/tests/micro-tests/test_automation_family.py new file mode 100644 index 00000000..6340fb1a --- /dev/null +++ b/tests/micro-tests/test_automation_family.py @@ -0,0 +1,192 @@ +""" +Automation family (md_processing/v2/automation.py) through the real dispatcher +with a fake client, plus the AutomatedCuration request-body fixes it relies on. +""" +import json +from typing import Any, Dict, List + +import pytest + +from pyegeria import NO_ELEMENTS_FOUND +from pyegeria.omvs.automated_curation import AutomatedCuration + +from md_processing.dr_egeria import setup_dispatcher +from md_processing.v2.extraction import DrECommand + +ELEMENTS = { + # name -> (guid, element json) + "Egeria::DailyGovernanceActionProcess": ("gap-1", {"properties": {"qualifiedName": "Egeria::DailyGovernanceActionProcess"}}), + "PostgreSQLSurvey::survey-postgres-database": ("gat-1", {"properties": {"qualifiedName": "PostgreSQLSurvey::survey-postgres-database"}}), + "Sales Database": ("db-1", {"properties": {"qualifiedName": "PostgreSQLDatabase::sales"}}), + "Erin": ("person-1", {"properties": {"qualifiedName": "Person::Erin"}}), + "Landing Table": ("asset-1", {"properties": {"qualifiedName": "Table::landing"}}), + "ProvisioningActionProcess::Ref Data::Create Subscription::EVALUATION-SUBSCRIPTION": + ("sub-type-1", {"properties": {"qualifiedName": "ProvisioningActionProcess::Ref Data::Create Subscription::EVALUATION-SUBSCRIPTION"}}), + "Subscription::with-cancel": ("subscription-1", { + "properties": {"qualifiedName": "Subscription::with-cancel"}, + "resourceList": [ + {"relationshipProperties": {"resourceUse": "Other"}, + "relatedElement": {"properties": {"qualifiedName": "Something::else"}}}, + {"relationshipProperties": {"resourceUse": "Cancel Subscription"}, + "relatedElement": {"properties": {"qualifiedName": "DeletingActionProcess::cancellingGovernanceActionType::subscription-1"}}}, + ]}), + "Subscription::without-cancel": ("subscription-2", {"properties": {"qualifiedName": "Subscription::without-cancel"}}), +} +BY_GUID = {guid: element for guid, element in ELEMENTS.values()} + + +class _Response: + def __init__(self, body): + self._body = body + + def json(self): + return self._body + + +class _FakeClassificationManager: + platform_url = "https://egeria" + view_server = "view" + + async def _async_make_request(self, method, url, body=None): + return _Response({"element": BY_GUID[url.rsplit("/", 1)[-1]]}) + + +class _FakeClient: + def __init__(self): + self.calls: List[tuple] = [] + self.classification_manager = _FakeClassificationManager() + + async def __async_get_guid__(self, qualified_name=None, display_name=None, property_name="qualifiedName", + tech_type=None, **kwargs): + entry = ELEMENTS.get(qualified_name or display_name) + return entry[0] if entry else NO_ELEMENTS_FOUND + + async def _async_initiate_gov_action_process(self, *args, **kwargs): + self.calls.append(("process", args, kwargs)) + return "process-instance-1" + + async def _async_initiate_gov_action_type(self, *args, **kwargs): + self.calls.append(("type", args, kwargs)) + return "engine-action-1" + + async def _async_initiate_survey(self, *args, **kwargs): + self.calls.append(("survey", args, kwargs)) + return "engine-action-2" + + +def _cmd(verb: str, object_type: str, attributes: Dict[str, Any]) -> DrECommand: + raw = f"## {verb} {object_type}\n" + "".join(f"### {k}\n{v}\n" for k, v in attributes.items()) + return DrECommand(verb=verb, object_type=object_type, attributes=attributes, raw_block=raw) + + +async def _run(command: DrECommand): + client = _FakeClient() + results = await setup_dispatcher(client).dispatch_batch([command], {"directive": "process"}) + return results[0], client.calls + + +@pytest.mark.asyncio +async def test_initiate_governance_action_process_with_action_targets(): + result, calls = await _run(_cmd("Initiate", "Governance Action Process", { + "Governance Action Process": "Egeria::DailyGovernanceActionProcess", + "Action Targets": "databaseToCheck: Sales Database", + "Request Parameters": "mode: full", + })) + assert result["status"] == "success", result + [(kind, args, kwargs)] = calls + assert kind == "process" and args == ("Egeria::DailyGovernanceActionProcess",) + assert kwargs["action_targets"] == [{"class": "NewActionTarget", "actionTargetName": "databaseToCheck", "actionTargetGUID": "db-1"}] + assert kwargs["request_parameters"] == {"mode": "full"} + + +@pytest.mark.asyncio +async def test_initiate_survey_leaves_target_name_to_the_sdk(): + result, calls = await _run(_cmd("Initiate", "Survey", { + "Survey Type": "PostgreSQLSurvey::survey-postgres-database", + "Resource to Survey": "Sales Database", + })) + assert result["status"] == "success", result + [(kind, args, kwargs)] = calls + assert kind == "survey" and args == ("PostgreSQLSurvey::survey-postgres-database", "db-1") + assert kwargs["action_target_name"] is None + + +@pytest.mark.asyncio +async def test_initiate_subscription_runs_subscription_process(): + result, calls = await _run(_cmd("Initiate", "Subscription", { + "Subscription Type": "ProvisioningActionProcess::Ref Data::Create Subscription::EVALUATION-SUBSCRIPTION", + "Subscription Requester": "Erin", + "Destination Data Set": "Landing Table", + })) + assert result["status"] == "success", result + [(kind, args, kwargs)] = calls + assert kind == "process" + assert args == ("ProvisioningActionProcess::Ref Data::Create Subscription::EVALUATION-SUBSCRIPTION",) + assert {t["actionTargetName"]: t["actionTargetGUID"] for t in kwargs["action_targets"]} == { + "digitalSubscriptionRequester": "person-1", "destinationDataSet": "asset-1"} + + +@pytest.mark.asyncio +async def test_cancel_subscription_runs_its_cancel_process(): + result, calls = await _run(_cmd("Cancel", "Subscription", {"Digital Subscription": "Subscription::with-cancel"})) + assert result["status"] == "success", result + [(kind, args, _)] = calls + assert kind == "process" + assert args == ("DeletingActionProcess::cancellingGovernanceActionType::subscription-1",) + + +@pytest.mark.asyncio +async def test_cancel_subscription_without_cancel_process_fails_clearly(): + result, calls = await _run(_cmd("Cancel", "Subscription", {"Digital Subscription": "Subscription::without-cancel"})) + assert result["status"] != "success" + assert calls == [] + + +# ---------------------------------------------------------------- SDK request bodies + +def _curation(monkeypatch, supported: list) -> tuple: + monkeypatch.setattr(AutomatedCuration, "check_connection", lambda self: "test") + client = AutomatedCuration("view-server", "https://localhost:1", "user", "pwd") + sent: list = [] + + async def fake_make_request(method, url, body=None, *args, **kwargs): + sent.append(json.loads(body) if isinstance(body, str) else body) + return _Response({"guid": "g"}) + + async def fake_supported(qualified_name): + return supported + + client._async_make_request = fake_make_request + client._async_get_supported_action_target_names = fake_supported + return client, sent + + +@pytest.mark.asyncio +@pytest.mark.parametrize("supported, expected", [ + (["postgresDatabase"], "postgresDatabase"), # read from the survey type + (["*"], "serverToSurvey"), # any name accepted -> default + ([], "serverToSurvey"), # lookup failed -> default +]) +async def test_initiate_survey_action_target_name(monkeypatch, supported, expected): + client, sent = _curation(monkeypatch, supported) + await client._async_initiate_survey("PostgreSQLSurvey::survey-postgres-database", "db-1") + assert sent[0]["actionTargets"][0]["actionTargetName"] == expected + + +@pytest.mark.asyncio +async def test_initiate_survey_explicit_target_name_wins(monkeypatch): + client, sent = _curation(monkeypatch, ["postgresDatabase"]) + await client._async_initiate_survey("X::y", "db-1", action_target_name="custom") + assert sent[0]["actionTargets"][0]["actionTargetName"] == "custom" + + +@pytest.mark.asyncio +async def test_initiate_bodies_use_egeria_field_names(monkeypatch): + client, sent = _curation(monkeypatch, []) + await client._async_initiate_gov_action_process("P::q", request_source_guids=["s1"]) + await client._async_initiate_gov_action_type("T::q", ["s1"], []) + process_body, type_body = sent + assert process_body["class"] == "InitiateGovernanceActionProcessRequestBody" + assert process_body["actionSourceGUIDs"] == ["s1"] and "startDate" in process_body + assert "requestSourceGUIDs" not in process_body and "startTime" not in process_body + assert type_body["actionSourceGUIDs"] == ["s1"] and "requestSourceGUIDs" not in type_body