"""
Autogenerated state module using `pop-create-idem <https://gitlab.com/saltstack/pop/pop-create-idem>`__

hub.exec.boto3.client.sagemaker.create_action
hub.exec.boto3.client.sagemaker.delete_action
hub.exec.boto3.client.sagemaker.describe_action
hub.exec.boto3.client.sagemaker.list_actions
hub.exec.boto3.client.sagemaker.update_action
"""



from typing import *
import dict_tools.differ as differ
async def present(hub, ctx, name: Text, action_name: Text, source: Dict, action_type: Text, description: Text = None, status: Text = None, properties: Dict = None, metadata_properties: Dict = None, tags: List = None)  -> Dict[str, Any]:
    r'''
    **Autogenerated function**
    
    Creates an action. An action is a lineage tracking entity that represents an action or activity. For example, a
    model deployment or an HPO job. Generally, an action involves at least one input or output artifact. For more
    information, see Amazon SageMaker ML Lineage Tracking.   CreateAction can only be invoked from within an
    SageMaker managed environment. This includes SageMaker training jobs, processing jobs, transform jobs, and
    SageMaker notebooks. A call to CreateAction from outside one of these environments results in an error.

    Args:
        name(Text): A name, ID, or JMES search path to identify the resource.
        action_name(Text): The name of the action. Must be unique to your account in an Amazon Web Services Region.
        source(Dict): The source type, ID, and URI.
        action_type(Text): The action type.
        description(Text, optional): The description of the action. Defaults to None.
        status(Text, optional): The status of the action. Defaults to None.
        properties(Dict, optional): A list of properties to add to the action. Defaults to None.
        metadata_properties(Dict, optional): Metadata properties of the tracking entity, trial, or trial component. Defaults to None.
        tags(List, optional): A list of tags to apply to the action. Defaults to None.

    Returns:
        Dict[str, Any]

    Examples:

        .. code-block:: sls

            resource_is_present:
              aws_auto.sagemaker.action.present:
                - name: value
                - action_name: value
                - source: value
                - action_type: value
    '''
    
    result = dict(comment="", changes= None, name=name, result=True)
    ret = await hub.exec.boto3.client.sagemaker.action.id(
        ctx,
        jmes_path=name
    )
    if ret["status"]:
        # name is now the first id that matched the JMES search path
        name = ret["ret"]
    

    
    before = await hub.exec.boto3.client.sagemaker.describe_action(name)

    if before:
        result["comment"] = f"'{name}' already exists"
    else:
        try:
            ret = await hub.exec.boto3.client.sagemaker.create_action(
                ctx,
                
                
                **{"ActionName": action_name, "Source": source, "ActionType": action_type, "Description": description, "Status": status, "Properties": properties, "MetadataProperties": metadata_properties, "Tags": tags}
            )
            result["result"] = ret["status"]
            if not result["result"]:
                result["comment"] = ret["comment"]
                return result
            ret["comment"] = f"Created '{name}'"
        except hub.tool.boto3.exception.ClientError as e:
            result["comment"] = f"{e.__class__.__name__}: {e}"

    
    # TODO perform other modifications as needed here
    ...

    after = await hub.exec.boto3.client.sagemaker.describe_action(name)
    result["changes"] = differ.deep_diff(before, after)
    return result

async def absent(hub, ctx, name: Text, action_name: Text)  -> Dict[str, Any]:
    r'''
    **Autogenerated function**
    
    Deletes an action.

    Args:
        name(Text): A name, ID, or JMES search path to identify the resource.
        action_name(Text): The name of the action to delete.

    Returns:
        Dict[str, Any]

    Examples:

        .. code-block:: sls

            resource_is_absent:
              aws_auto.sagemaker.action.absent:
                - name: value
                - action_name: value
    '''
    
    result = dict(comment="", changes= None, name=name, result=True)
    ret = await hub.exec.boto3.client.sagemaker.action.id(
        ctx,
        jmes_path=name
    )
    if ret["status"]:
        # name is now the first id that matched the JMES search path
        name = ret["ret"]
    

    

    before = await hub.exec.boto3.client.sagemaker.describe_action(name)

    if not before:
        result["comment"] = f"'{name}' already absent"
    else:
        try:
            ret = await hub.exec.boto3.client.sagemaker.delete_action(
                ctx,
                
                
                **{"ActionName": action_name}
            )
            result["result"] = ret["status"]
            if not result["result"]:
                result["comment"] = ret["comment"]
                return result
            result["comment"] = f"Deleted '{name}'"
        except hub.tool.boto3.exception.ClientError as e:
            result["comment"] = f"{e.__class__.__name__}: {e}"

    

    after = await hub.exec.boto3.client.sagemaker.describe_action(name)
    result["changes"] = differ.deep_diff(before, after)
    return result

