Module pypowerautomate.flow.flow

Expand source code
import json
from ..actions import BaseAction, Actions
from ..triggers import BaseTrigger, Triggers

DEFAULT_PARAMETER = {
    "$connections": {
        "defaultValue": {},
        "type": "Object"
    },
    "$authentication": {
        "defaultValue": {},
        "type": "SecureObject"
    }
}

DEFAULT_SCHEMA = "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#"
DEFAULT_VERSION = "1.0.0.0"


class Flow:
    """
    Manages a PowerAutomate Flow, including its components like triggers and actions.
    This class allows for configuring and manipulating the structure of a workflow.
    
    Attributes:
        schema (str): The default schema for the flow.
        contentVersion (str): The version of the content used in the flow.
        parameters (dict): Default parameters for the flow.
    """
    schema: str = DEFAULT_SCHEMA
    contentVersion: str = DEFAULT_VERSION
    parameters: dict = DEFAULT_PARAMETER

    def __init__(self):
        """
        Initializes the Flow with default triggers and actions.
        """
        self.triggers: BaseTrigger = Triggers()
        self.root_actions: Actions = Actions(True)

    def set_trigger(self, trigger: BaseTrigger):
        """
        Sets the main trigger for the flow.
        
        Args:
            trigger (BaseTrigger): An instance of BaseTrigger to be set as the flow's main trigger.
        """
        self.triggers.append(trigger)

    def append_action(self, action: BaseAction, prev_action: BaseAction = None, force_exec: bool = False, exec_if_failed: bool = False):
        """
        Appends an action to the flow, optionally specifying a previous action to link it after.
        
        Args:
            action (BaseAction): The action to append.
            prev_action (BaseAction, optional): The action after which the new action should be placed.
            force_exec (bool, optional): If True, the action will execute even if the previous action fails.
            exec_if_failed (bool, optional): If True, the action will execute only if the previous action fails.
        """
        if prev_action:
            self.root_actions.add_after(action, prev_action, force_exec, exec_if_failed)
        else:
            self.root_actions.append(action, force_exec, exec_if_failed)

    def add_top_action(self, action: BaseAction):
        """
        Adds an action at the top of the actions list.
        
        Args:
            action (BaseAction): The action to be added at the top of the action sequence.
        """
        self.root_actions.add_top(action)

    def export(self):
        """
        Exports the flow configuration as a dictionary.
        
        Returns:
            dict: A dictionary representing the complete flow configuration.
        """
        d = {}
        d["$schema"] = Flow.schema
        d["contentVersion"] = Flow.contentVersion
        d["parameters"] = Flow.parameters
        d["triggers"] = self.triggers.export()
        d["actions"] = self.root_actions.export()
        return d

    def export_json(self, xor_key=None):
        """
        Exports the flow configuration as a JSON string, optionally encoding it with an XOR key.
        
        Args:
            xor_key (str, optional): A comma-separated string of integers used as the key for XOR encryption.
        
        Returns:
            str: A JSON string representation of the flow, potentially XOR encrypted.
        """
        json_str = json.dumps(self.export())
        if xor_key:
            xor_key = [int(x) for x in xor_key.split(",")]
            json_str = ",".join(
                [str(ord(json_str[i]) ^ xor_key[i % len(xor_key)]) for i in range(len(json_str))])

        return json_str

Classes

class Flow

Manages a PowerAutomate Flow, including its components like triggers and actions. This class allows for configuring and manipulating the structure of a workflow.

Attributes

schema : str
The default schema for the flow.
contentVersion : str
The version of the content used in the flow.
parameters : dict
Default parameters for the flow.

Initializes the Flow with default triggers and actions.

Expand source code
class Flow:
    """
    Manages a PowerAutomate Flow, including its components like triggers and actions.
    This class allows for configuring and manipulating the structure of a workflow.
    
    Attributes:
        schema (str): The default schema for the flow.
        contentVersion (str): The version of the content used in the flow.
        parameters (dict): Default parameters for the flow.
    """
    schema: str = DEFAULT_SCHEMA
    contentVersion: str = DEFAULT_VERSION
    parameters: dict = DEFAULT_PARAMETER

    def __init__(self):
        """
        Initializes the Flow with default triggers and actions.
        """
        self.triggers: BaseTrigger = Triggers()
        self.root_actions: Actions = Actions(True)

    def set_trigger(self, trigger: BaseTrigger):
        """
        Sets the main trigger for the flow.
        
        Args:
            trigger (BaseTrigger): An instance of BaseTrigger to be set as the flow's main trigger.
        """
        self.triggers.append(trigger)

    def append_action(self, action: BaseAction, prev_action: BaseAction = None, force_exec: bool = False, exec_if_failed: bool = False):
        """
        Appends an action to the flow, optionally specifying a previous action to link it after.
        
        Args:
            action (BaseAction): The action to append.
            prev_action (BaseAction, optional): The action after which the new action should be placed.
            force_exec (bool, optional): If True, the action will execute even if the previous action fails.
            exec_if_failed (bool, optional): If True, the action will execute only if the previous action fails.
        """
        if prev_action:
            self.root_actions.add_after(action, prev_action, force_exec, exec_if_failed)
        else:
            self.root_actions.append(action, force_exec, exec_if_failed)

    def add_top_action(self, action: BaseAction):
        """
        Adds an action at the top of the actions list.
        
        Args:
            action (BaseAction): The action to be added at the top of the action sequence.
        """
        self.root_actions.add_top(action)

    def export(self):
        """
        Exports the flow configuration as a dictionary.
        
        Returns:
            dict: A dictionary representing the complete flow configuration.
        """
        d = {}
        d["$schema"] = Flow.schema
        d["contentVersion"] = Flow.contentVersion
        d["parameters"] = Flow.parameters
        d["triggers"] = self.triggers.export()
        d["actions"] = self.root_actions.export()
        return d

    def export_json(self, xor_key=None):
        """
        Exports the flow configuration as a JSON string, optionally encoding it with an XOR key.
        
        Args:
            xor_key (str, optional): A comma-separated string of integers used as the key for XOR encryption.
        
        Returns:
            str: A JSON string representation of the flow, potentially XOR encrypted.
        """
        json_str = json.dumps(self.export())
        if xor_key:
            xor_key = [int(x) for x in xor_key.split(",")]
            json_str = ",".join(
                [str(ord(json_str[i]) ^ xor_key[i % len(xor_key)]) for i in range(len(json_str))])

        return json_str

Class variables

var contentVersion : str
var parameters : dict
var schema : str

Methods

def add_top_action(self, action: BaseAction)

Adds an action at the top of the actions list.

Args

action : BaseAction
The action to be added at the top of the action sequence.
Expand source code
def add_top_action(self, action: BaseAction):
    """
    Adds an action at the top of the actions list.
    
    Args:
        action (BaseAction): The action to be added at the top of the action sequence.
    """
    self.root_actions.add_top(action)
def append_action(self, action: BaseAction, prev_action: BaseAction = None, force_exec: bool = False, exec_if_failed: bool = False)

Appends an action to the flow, optionally specifying a previous action to link it after.

Args

action : BaseAction
The action to append.
prev_action : BaseAction, optional
The action after which the new action should be placed.
force_exec : bool, optional
If True, the action will execute even if the previous action fails.
exec_if_failed : bool, optional
If True, the action will execute only if the previous action fails.
Expand source code
def append_action(self, action: BaseAction, prev_action: BaseAction = None, force_exec: bool = False, exec_if_failed: bool = False):
    """
    Appends an action to the flow, optionally specifying a previous action to link it after.
    
    Args:
        action (BaseAction): The action to append.
        prev_action (BaseAction, optional): The action after which the new action should be placed.
        force_exec (bool, optional): If True, the action will execute even if the previous action fails.
        exec_if_failed (bool, optional): If True, the action will execute only if the previous action fails.
    """
    if prev_action:
        self.root_actions.add_after(action, prev_action, force_exec, exec_if_failed)
    else:
        self.root_actions.append(action, force_exec, exec_if_failed)
def export(self)

Exports the flow configuration as a dictionary.

Returns

dict
A dictionary representing the complete flow configuration.
Expand source code
def export(self):
    """
    Exports the flow configuration as a dictionary.
    
    Returns:
        dict: A dictionary representing the complete flow configuration.
    """
    d = {}
    d["$schema"] = Flow.schema
    d["contentVersion"] = Flow.contentVersion
    d["parameters"] = Flow.parameters
    d["triggers"] = self.triggers.export()
    d["actions"] = self.root_actions.export()
    return d
def export_json(self, xor_key=None)

Exports the flow configuration as a JSON string, optionally encoding it with an XOR key.

Args

xor_key : str, optional
A comma-separated string of integers used as the key for XOR encryption.

Returns

str
A JSON string representation of the flow, potentially XOR encrypted.
Expand source code
def export_json(self, xor_key=None):
    """
    Exports the flow configuration as a JSON string, optionally encoding it with an XOR key.
    
    Args:
        xor_key (str, optional): A comma-separated string of integers used as the key for XOR encryption.
    
    Returns:
        str: A JSON string representation of the flow, potentially XOR encrypted.
    """
    json_str = json.dumps(self.export())
    if xor_key:
        xor_key = [int(x) for x in xor_key.split(",")]
        json_str = ",".join(
            [str(ord(json_str[i]) ^ xor_key[i % len(xor_key)]) for i in range(len(json_str))])

    return json_str
def set_trigger(self, trigger: BaseTrigger)

Sets the main trigger for the flow.

Args

trigger : BaseTrigger
An instance of BaseTrigger to be set as the flow's main trigger.
Expand source code
def set_trigger(self, trigger: BaseTrigger):
    """
    Sets the main trigger for the flow.
    
    Args:
        trigger (BaseTrigger): An instance of BaseTrigger to be set as the flow's main trigger.
    """
    self.triggers.append(trigger)