coverage/code cleanup

pull/1407/head
Chris Caron 2025-09-10 21:45:26 -04:00
parent b1aded27d8
commit 67779d8072
2 changed files with 58 additions and 30 deletions

View File

@ -70,6 +70,14 @@ from ..utils.templates import TemplateType, apply_template
from .base import NotifyBase from .base import NotifyBase
class APIVersion:
"""
Define API Versions
"""
WORKFLOW = "2016-06-01"
POWER_AUTOMATE = "2022-03-01-preview"
class NotifyWorkflows(NotifyBase): class NotifyWorkflows(NotifyBase):
"""A wrapper for Microsoft Workflows (MS Teams) Notifications.""" """A wrapper for Microsoft Workflows (MS Teams) Notifications."""
@ -156,17 +164,17 @@ class NotifyWorkflows(NotifyBase):
"default": True, "default": True,
"map_to": "include_image", "map_to": "include_image",
}, },
"power_automate": { "pa": {
"name": _("Power Automate"), "name": _("Use Power Automate URL"),
"type": "bool", "type": "bool",
"default": False, "default": False,
"map_to": "power_automate", "map_to": "power_automate",
}, },
"powerautomate": {"alias_of": "pa"},
"wrap": { "wrap": {
"name": _("Wrap Text"), "name": _("Wrap Text"),
"type": "bool", "type": "bool",
"default": True, "default": True,
"map_to": "wrap",
}, },
"template": { "template": {
"name": _("Template Path"), "name": _("Template Path"),
@ -181,11 +189,9 @@ class NotifyWorkflows(NotifyBase):
"ver": { "ver": {
"name": _("API Version"), "name": _("API Version"),
"type": "string", "type": "string",
"default": "2016-06-01",
"pa_default": "2022-03-01-preview",
"map_to": "version", "map_to": "version",
}, },
"api-version": {"alias_of": "ver"}, "version": {"alias_of": "ver"},
}, },
) )
@ -239,7 +245,7 @@ class NotifyWorkflows(NotifyBase):
self.power_automate = bool( self.power_automate = bool(
power_automate power_automate
if power_automate is not None if power_automate is not None
else self.template_args["power_automate"]["default"] else self.template_args["pa"]["default"]
) )
# Wrap Text # Wrap Text
@ -257,11 +263,10 @@ class NotifyWorkflows(NotifyBase):
# Prepare Version # Prepare Version
# The default is taken from the template_args # The default is taken from the template_args
default_api_version = self.template_args["ver"]["default"] # - If using power_automate, the API version required is different.
default_api_version = (
# If using power_automate, the API version required is different. APIVersion.POWER_AUTOMATE
if self.power_automate: if self.power_automate else APIVersion.WORKFLOW)
default_api_version = self.template_args["ver"]["pa_default"]
self.api_version = ( self.api_version = (
version version
@ -509,7 +514,7 @@ class NotifyWorkflows(NotifyBase):
params = { params = {
"image": "yes" if self.include_image else "no", "image": "yes" if self.include_image else "no",
"wrap": "yes" if self.wrap else "no", "wrap": "yes" if self.wrap else "no",
"power_automate": "yes" if self.power_automate else "no", "pa": "yes" if self.power_automate else "no",
} }
if self.template: if self.template:
@ -518,9 +523,10 @@ class NotifyWorkflows(NotifyBase):
) )
# Store our version if it differs from default # Store our version if it differs from default
if (self.api_version != self.template_args["ver"]["default"]) and \ if (self.api_version != APIVersion.WORKFLOW
((not self.power_automate) or \ and not self.power_automate) or (
(self.api_version != self.template_args["ver"]["pa_default"])): self.api_version != APIVersion.POWER_AUTOMATE
and self.power_automate):
# But only do so if we're not using power automate with the # But only do so if we're not using power automate with the
# default version for that. # default version for that.
params["ver"] = self.api_version params["ver"] = self.api_version
@ -561,11 +567,14 @@ class NotifyWorkflows(NotifyBase):
) )
) )
# Support Power Automate? # Support Power Automate URL
results["power_automate"] = parse_bool( results["power_automate"] = parse_bool(
results["qsd"].get( results["qsd"].get(
"power_automate", "powerautomate",
NotifyWorkflows.template_args["power_automate"]["default"] results["qsd"].get(
"pa",
NotifyWorkflows.template_args["pa"]["default"]
)
) )
) )
@ -617,9 +626,9 @@ class NotifyWorkflows(NotifyBase):
) )
# Version # Version
if "api-version" in results["qsd"] and results["qsd"]["api-version"]: if "version" in results["qsd"] and results["qsd"]["version"]:
results["version"] = NotifyWorkflows.unquote( results["version"] = NotifyWorkflows.unquote(
results["qsd"]["api-version"] results["qsd"]["version"]
) )
elif "ver" in results["qsd"] and results["qsd"]["ver"]: elif "ver" in results["qsd"] and results["qsd"]["ver"]:
@ -636,7 +645,8 @@ class NotifyWorkflows(NotifyBase):
Support parsing the webhook straight out of workflows Support parsing the webhook straight out of workflows
https://HOST:443/workflows/WORKFLOWID/triggers/manual/paths/invoke https://HOST:443/workflows/WORKFLOWID/triggers/manual/paths/invoke
or or
https://HOST:443/powerautomate/automations/direct/workflows/WORKFLOWID/triggers/manual/paths/invoke https://HOST:443/powerautomate/automations/direct/workflows
/WORKFLOWID/triggers/manual/paths/invoke
""" """
# Match our workflows webhook URL and re-assemble # Match our workflows webhook URL and re-assemble
@ -656,14 +666,14 @@ class NotifyWorkflows(NotifyBase):
if result: if result:
# Determine if we're using power automate or not # Determine if we're using power automate or not
power_automate = ( power_automate = (
"&power_automate=yes" "&pa=yes"
if result.group("power_automate") if result.group("power_automate")
else "" else ""
) )
# Construct our URL # Construct our URL
return NotifyWorkflows.parse_url( return NotifyWorkflows.parse_url(
"{schema}://{host}{port}/{workflow}/{params}{power_automate}" "{schema}://{host}{port}/{workflow}/{params}{pa}"
.format( .format(
schema=NotifyWorkflows.secure_protocol[0], schema=NotifyWorkflows.secure_protocol[0],
host=result.group("host"), host=result.group("host"),
@ -674,7 +684,7 @@ class NotifyWorkflows(NotifyBase):
), ),
workflow=result.group("workflow"), workflow=result.group("workflow"),
params=result.group("params"), params=result.group("params"),
power_automate=power_automate, pa=power_automate,
) )
) )
return None return None

View File

@ -136,12 +136,32 @@ apprise_url_tests = (
}, },
), ),
( (
"workflows://host:443/workflow1e/signature/?power_automate=yes", "workflows://host:443/workflow1e/signature/?powerautomate=yes",
{
# support power_automate flag
"instance": NotifyWorkflows,
},
),
(
"workflows://host:443/workflow1e/signature/?pa=yes&ver=1995-01-01",
{
# support power_automate flag with ver flag
"instance": NotifyWorkflows,
},
),
(
"workflows://host:443/workflow1e/signature/?pa=yes&version=1995-01-01",
{
# support power_automate flag with version flag
"instance": NotifyWorkflows,
},
),
(
"workflows://host:443/workflow1e/signature/?pa=yes",
{ {
# support power_automate flag # support power_automate flag
"instance": NotifyWorkflows, "instance": NotifyWorkflows,
# Our expected power_automate flag (defaults to False)
"self": {"power_automate": True},
}, },
), ),
# Support native URLs # Support native URLs
@ -171,8 +191,6 @@ apprise_url_tests = (
{ {
# Power-Automate alternative URL - All tokens provided - we're good # Power-Automate alternative URL - All tokens provided - we're good
"instance": NotifyWorkflows, "instance": NotifyWorkflows,
# Our expected power_automate flag (defaults to False)
"self": {"power_automate": True},
}, },
), ),
( (