Module pypowerautomate.connections.connections
Expand source code
from . import connectors
import re
import json
uuid4_pattern = r"-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}"
def truncate_string(input_str, max_length=20):
if len(input_str) > max_length:
return input_str[:max_length]
else:
return input_str
class Connections:
"""
Manages information about APIs connected through PowerAutomate.
This class is especially useful when creating new workflows with the CreateFlowAction.
It expects connection strings to be added in the following formats:
Example connection strings:
- "shared-flowmanagemen-282bc0cf-2475-4655-8262-a6938ff6b179"
- "ce9f7496f45f46649d94019c8f65693f"
"""
def __init__(self):
"""
Initializes the Connections class with an empty list of connections.
"""
self.connections = []
def set_connections_from_dict(self, data: dict) -> int:
"""
Populates the connections list from a dictionary containing API connection data.
Args:
data (dict): A dictionary containing 'value' as a key, which is a list of
connection information dictionaries, each containing 'properties'
and 'apiId'.
Returns:
int: The number of connections added to the list.
"""
self.connections = []
if "value" not in data.keys():
return 0
user_id = ""
for item in data["value"]:
id = item["properties"]["apiId"]
if "shared_flowmanagement" in id:
user_id = item["properties"]["createdBy"]["id"]
break
for item in data["value"]:
connection = {}
connection["connectionName"] = item["name"]
connection["id"] = item["properties"]["apiId"]
creator_id = item["properties"]["createdBy"]["id"]
properties = item.get("properties", {})
if properties:
statuses = properties.get("statuses", [])
if statuses:
status = statuses[0].get("status", "Error")
if status == "Connected" and creator_id == user_id:
self.connections.append(connection)
return len(self.connections)
def set_connections_from_json_file(self, path: str) -> int:
"""
Loads connection data from a JSON file and uses it to populate the connections list.
Args:
path (str): The file path to a JSON file containing connection data.
Returns:
int: The number of connections added to the list.
"""
data = {}
with open(path, "r") as f:
data = json.load(f)
return self.set_connections_from_dict(data)
def add_connection(self, connection_name: str, id: str = None):
"""
Adds a single connection to the list using the specified connection name and optional ID.
Args:
connection_name (str): The name of the connection.
id (str, optional): The unique identifier for the API. If not provided,
the API name is used to look up the ID from a predefined list.
Raises:
ValueError: If the API name is not found and no ID is provided.
"""
d = {}
apiname = re.sub(uuid4_pattern, "", connection_name)
apiname = truncate_string(apiname).replace("-", "_")
d["connectionName"] = connection_name
if not id:
if apiname not in connectors.CONNECTORS:
raise ValueError("API not found. Set id name to add_connection().")
d["id"] = connectors.CONNECTORS[apiname]
else:
d["id"] = id
self.connections.append(d)
def export(self):
"""
Exports the current list of connections.
Returns:
list: A list of dictionaries, each representing a connection.
"""
return self.connections
Functions
def truncate_string(input_str, max_length=20)
-
Expand source code
def truncate_string(input_str, max_length=20): if len(input_str) > max_length: return input_str[:max_length] else: return input_str
Classes
class Connections
-
Manages information about APIs connected through PowerAutomate. This class is especially useful when creating new workflows with the CreateFlowAction. It expects connection strings to be added in the following formats:
Example connection strings: - "shared-flowmanagemen-282bc0cf-2475-4655-8262-a6938ff6b179" - "ce9f7496f45f46649d94019c8f65693f"
Initializes the Connections class with an empty list of connections.
Expand source code
class Connections: """ Manages information about APIs connected through PowerAutomate. This class is especially useful when creating new workflows with the CreateFlowAction. It expects connection strings to be added in the following formats: Example connection strings: - "shared-flowmanagemen-282bc0cf-2475-4655-8262-a6938ff6b179" - "ce9f7496f45f46649d94019c8f65693f" """ def __init__(self): """ Initializes the Connections class with an empty list of connections. """ self.connections = [] def set_connections_from_dict(self, data: dict) -> int: """ Populates the connections list from a dictionary containing API connection data. Args: data (dict): A dictionary containing 'value' as a key, which is a list of connection information dictionaries, each containing 'properties' and 'apiId'. Returns: int: The number of connections added to the list. """ self.connections = [] if "value" not in data.keys(): return 0 user_id = "" for item in data["value"]: id = item["properties"]["apiId"] if "shared_flowmanagement" in id: user_id = item["properties"]["createdBy"]["id"] break for item in data["value"]: connection = {} connection["connectionName"] = item["name"] connection["id"] = item["properties"]["apiId"] creator_id = item["properties"]["createdBy"]["id"] properties = item.get("properties", {}) if properties: statuses = properties.get("statuses", []) if statuses: status = statuses[0].get("status", "Error") if status == "Connected" and creator_id == user_id: self.connections.append(connection) return len(self.connections) def set_connections_from_json_file(self, path: str) -> int: """ Loads connection data from a JSON file and uses it to populate the connections list. Args: path (str): The file path to a JSON file containing connection data. Returns: int: The number of connections added to the list. """ data = {} with open(path, "r") as f: data = json.load(f) return self.set_connections_from_dict(data) def add_connection(self, connection_name: str, id: str = None): """ Adds a single connection to the list using the specified connection name and optional ID. Args: connection_name (str): The name of the connection. id (str, optional): The unique identifier for the API. If not provided, the API name is used to look up the ID from a predefined list. Raises: ValueError: If the API name is not found and no ID is provided. """ d = {} apiname = re.sub(uuid4_pattern, "", connection_name) apiname = truncate_string(apiname).replace("-", "_") d["connectionName"] = connection_name if not id: if apiname not in connectors.CONNECTORS: raise ValueError("API not found. Set id name to add_connection().") d["id"] = connectors.CONNECTORS[apiname] else: d["id"] = id self.connections.append(d) def export(self): """ Exports the current list of connections. Returns: list: A list of dictionaries, each representing a connection. """ return self.connections
Methods
def add_connection(self, connection_name: str, id: str = None)
-
Adds a single connection to the list using the specified connection name and optional ID.
Args
connection_name
:str
- The name of the connection.
id
:str
, optional- The unique identifier for the API. If not provided, the API name is used to look up the ID from a predefined list.
Raises
ValueError
- If the API name is not found and no ID is provided.
Expand source code
def add_connection(self, connection_name: str, id: str = None): """ Adds a single connection to the list using the specified connection name and optional ID. Args: connection_name (str): The name of the connection. id (str, optional): The unique identifier for the API. If not provided, the API name is used to look up the ID from a predefined list. Raises: ValueError: If the API name is not found and no ID is provided. """ d = {} apiname = re.sub(uuid4_pattern, "", connection_name) apiname = truncate_string(apiname).replace("-", "_") d["connectionName"] = connection_name if not id: if apiname not in connectors.CONNECTORS: raise ValueError("API not found. Set id name to add_connection().") d["id"] = connectors.CONNECTORS[apiname] else: d["id"] = id self.connections.append(d)
def export(self)
-
Exports the current list of connections.
Returns
list
- A list of dictionaries, each representing a connection.
Expand source code
def export(self): """ Exports the current list of connections. Returns: list: A list of dictionaries, each representing a connection. """ return self.connections
def set_connections_from_dict(self, data: dict) ‑> int
-
Populates the connections list from a dictionary containing API connection data.
Args
data
:dict
- A dictionary containing 'value' as a key, which is a list of connection information dictionaries, each containing 'properties' and 'apiId'.
Returns
int
- The number of connections added to the list.
Expand source code
def set_connections_from_dict(self, data: dict) -> int: """ Populates the connections list from a dictionary containing API connection data. Args: data (dict): A dictionary containing 'value' as a key, which is a list of connection information dictionaries, each containing 'properties' and 'apiId'. Returns: int: The number of connections added to the list. """ self.connections = [] if "value" not in data.keys(): return 0 user_id = "" for item in data["value"]: id = item["properties"]["apiId"] if "shared_flowmanagement" in id: user_id = item["properties"]["createdBy"]["id"] break for item in data["value"]: connection = {} connection["connectionName"] = item["name"] connection["id"] = item["properties"]["apiId"] creator_id = item["properties"]["createdBy"]["id"] properties = item.get("properties", {}) if properties: statuses = properties.get("statuses", []) if statuses: status = statuses[0].get("status", "Error") if status == "Connected" and creator_id == user_id: self.connections.append(connection) return len(self.connections)
def set_connections_from_json_file(self, path: str) ‑> int
-
Loads connection data from a JSON file and uses it to populate the connections list.
Args
path
:str
- The file path to a JSON file containing connection data.
Returns
int
- The number of connections added to the list.
Expand source code
def set_connections_from_json_file(self, path: str) -> int: """ Loads connection data from a JSON file and uses it to populate the connections list. Args: path (str): The file path to a JSON file containing connection data. Returns: int: The number of connections added to the list. """ data = {} with open(path, "r") as f: data = json.load(f) return self.set_connections_from_dict(data)