Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

Custom notification plugin not loading #1124

Open
danielaranki opened this issue May 13, 2024 · 15 comments
Open

Custom notification plugin not loading #1124

danielaranki opened this issue May 13, 2024 · 15 comments

Comments

@danielaranki
Copy link

danielaranki commented May 13, 2024

馃 Describe the bug

I'm trying to write a custom notification plugin, but apprise/apprise-api is unable to load it throwing an exception with the error: "No module named 'apprise.custom'". This is not specific to the plugin I wrote, as I was able to reproduce it with the sample plugin from https://github.com/caronc/apprise/wiki/DemoPlugin_Basic.

Here's a setup to reproduce the problem:

  • Docker image: caronc/apprise:latest (running apprise version 1.8.0)
  • The demo plugin NotifyDemo.py from https://github.com/caronc/apprise/wiki/DemoPlugin_Basic. This plugin is located in the container path: /plugin/NotifyDemo.py
  • Run apprise -vvvv -t 'sample title' -b 'body content' -P '/plugin' 'demo://' from within the container.

I'm sorry if this is better reported as an issue in https://github.com/caronc/apprise but my setup is using apprise-api so I thought the issue should be reported here. Happy to move the issue there if you prefer.

馃挕 Screenshots and Logs

root@4623d3d83fd2:/# apprise -vvvv -t 'sample title' -b 'body content' -P '/plugin' 'demo://'
2024-05-13 16:26:52,605 - DEBUG - Scanning for custom plugins in: /plugin
2024-05-13 16:26:52,605 - DEBUG - Module exception raised from /plugin/NotifyDemo.py (name=apprise.custom.module.962bf4bf7a9aa0a0ca843b86d2e1e593d3d9be7c) No module named 'apprise.custom'
2024-05-13 16:26:52,605 - WARNING - Failed to load custom module: /plugin

馃捇 Your System Details:

  • OS: Dockerized
  • Python Version: apprise container is running Python 3.11.9

馃敭 Additional context

Perhaps an unrelated bug, the -vvvv level of logging is throwing a bunch of logger errors, see below for a small example (it repeats many times, but not for all plugins).

These logger errors seem to have been introduced with the latest update from a couple of days ago, perhaps caronc/apprise-api#189? They didn't seem to happen before the latest update. For context, the custom plugin issue described above is not new, I noticed it before the latest update as well (which is why I think they're unrelated).

2024-05-13 16:26:52,645 - TRACE - Notification Plugin gnome loaded in 0.000133s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/google_chat.py')
2024-05-13 16:26:52,647 - TRACE - Notification Plugin google_chat loaded in 0.001869s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/gotify.py')
2024-05-13 16:26:52,647 - TRACE - Notification Plugin gotify loaded in 0.000355s

Your time and efforts are appreciated. Thanks in advance.

@danielaranki danielaranki changed the title Custom Notification Plugin not loading Custom notification plugin not loading May 13, 2024
@caronc
Copy link
Owner

caronc commented May 13, 2024

It seems to work fine for me:

# prepare our custom plugin
cat << __EOF > demo.py
# include the decorator
from apprise.decorators import notify

# This example maps foobar:// to your my_wrapper function
@notify(on="demo")
def my_wrapper(body, title, notify_type, *args, **kwargs):

   # A simple test - print to screen
    print("{}: {} - {}".format(notify_type, title, body))
__EOF

Execute using it (added -vvv tracing for added logs)
```bash
apprise  -vvv -P ./demo.py 'demo://' -b "Test"
2024-05-13 19:54:17,768 - DEBUG - Notification Plugin 104(s) and 148 Schema(s) loaded in 0.1271s
2024-05-13 19:54:17,768 - DEBUG - Custom module ./delme.py - 1 schema(s) (name=8d8861d2d3ff3914173e8380d2d8a11efd7690a7) loaded in 0.128029s
2024-05-13 19:54:17,768 - INFO - Loaded custom notification: demo://
2024-05-13 19:54:17,768 - DEBUG - Language set to en
2024-05-13 19:54:17,769 - DEBUG - Loaded Custom - demo URL: demo://
info:  - Test
2024-05-13 19:54:17,769 - INFO - Sent Custom - demo notification.

In the above, you can see the loading of the module, and the last 2 lines show the printing (what i defined), and then the INFO letting you know the cutom message was executed correctly.

In your test, this line stands out to me as interesting...

Message: '(%s) import failed; no app_id defined in %s'

Are you over-riding the AppriseAsset() object by any chance? Also, can you share a bit more with me what your custom plugin looks like and/or how you're calling it. It's still possible i have a bug in how i handle things. Or it may just be something small you're doing on your end causing your issues.

@caronc caronc transferred this issue from caronc/apprise-api May 14, 2024
@danielaranki
Copy link
Author

danielaranki commented May 14, 2024

Thanks for the quick reply. I appreciate your help.

It seems to work fine for me:

I'm trying to write a full custom plugin (e.g., https://github.com/caronc/apprise/wiki/DemoPlugin_Basic), not a decorator notifier (e.g., https://github.com/caronc/apprise/wiki/decorator_notify). Sorry for the confusion. Perhaps I misunderstood the wiki/documentation, is it not possible for a full class-based notifier to be loaded in run-time from a custom plugins folder?

Your example works on my end as well (the decorator).

Are you over-riding the AppriseAsset() object by any chance?

I'm not overriding AppriseAsset().

Here's what I'm trying in full details:

# The following is verbatim from https://github.com/caronc/apprise/wiki/DemoPlugin_Basic
cat << __EOF > NotifyDemo.py
# -*- coding: utf-8 -*-
from .NotifyBase import NotifyBase
from ..AppriseLocale import gettext_lazy as _
from ..common import NotifyType


class NotifyDemo(NotifyBase):
    """
    A Sample/Demo Notifications
    """

    # The default descriptive name associated with the Notification
    # _() allows us to support future (language) translations
    service_name = _('Apprise Demo Notification')

    # The default protocol/schema
    # This will be what triggers your service to be activated when
    # protocol:// is specified (in example demo:// will activate
    # this service).
    protocol = 'demo'

    # A URL that takes you to the setup/help of the specific protocol
    # This is for new-comers who will want to learn how they can
    # use your service.  Ideally you should point to somewhere on
    # the 'https://github.com/caronc/apprise/wiki/
    setup_url = 'https://github.com/caronc/apprise/wiki/Notify_Demo'

    # This disables throttling by default for this simple plugin.
    request_rate_per_sec = 0

    #
    # Templating Section
    #
    # 1. templates: Identify the way you can use your plugin.
    #    This example is rather simple, so there isn't really much to do
    #    here.  Check out the other demo's to see where this gets a bit more
    #    advanced.
    #
    templates = (
        '{schema}://',
    )

    # For the reasons above, we only need to identify apikey here:
    def __init__(self, **kwargs):
        """
        Initialize Demo Object

        """
        # Always call super() so that parent clases can set up.  Make
        # sure to only pass in **kwargs
        super(NotifyDemo, self).__init__(**kwargs)

        #
        # Now you can write any initialization you want; if you have nothing to
        # initialize then you can skip the definition of the __init__()
        # function all together.
        #
        return

    def url(self, *args, **kwargs):
        """
        Returns the URL built dynamically based on specified arguments.
        """

        # Always call self.url_parameters() at some point.
        # This allows your Apprise URL to handle the common/global
        # parameters that are used by Apprise. This is for consistency
        # more than anything:
        params = self.url_parameters(*args, **kwargs)

        # Basically we need to write back a URL that looks exactly like
        # the one we parsed to build from scratch.

        # If we can parse a URL and rebuild it the way it once was,
        # Administrators who use Apprise don't need to pay attention to all
        # of your custom and unique tokens (from on service to another).
        # they only need to store Apprise URL's in their database.

        return '{schema}://?{params}'.format(
            schema=self.protocol,
            params=self.urlencode(params),
        )

    def send(self, body, title='', notify_type=NotifyType.INFO, **kwargs):
        """
        Perform Demo Notification
        """

        #
        # Always call throttle before any remote server i/o is made
        #
        self.throttle()

        # output to stdout:
        # Perform your notification here; in this example, we just send the
        print('{type} - {title} - {body}'.format(
            type=notify_type, title=title, body=body))

        return True

    @staticmethod
    def parse_url(url):
        """
        Parses the URL and returns enough arguments that can allow
        us to re-instantiate this object.

        """
        # If you're URL does not define what is considered a valid host after
        # your' schema/protocol such as this plugin example (demo://) where the
        # hostname isn't even required, then set the verify_host to False
        results = NotifyBase.parse_url(url, verify_host=False)
        if not results:
            # We're done early as we couldn't parse the URL
            return results

        # Handle any additional parsing here if you want
        # make sure to write all your changes/updates back into the results
        # dictionary

        # The contents of our results (a dictionary) will become
        # the arguments passed into the __init__() function we defined above.
        return results
__EOF

# Let's try it
apprise  -vvv -P ./NotifyDemo.py 'demo://' -b "Test"

results in:

2024-05-13 17:42:05,266 - DEBUG - Module exception raised from /plugin/NotifyDemo.py (name=apprise.custom.module.962bf4bf7a9aa0a0ca843b86d2e1e593d3d9be7c) No module named 'apprise.custom'
2024-05-13 17:42:05,266 - WARNING - Failed to load custom module: ./NotifyDemo.py
2024-05-13 17:42:05,266 - DEBUG - Language set to en
2024-05-13 17:42:05,330 - DEBUG - Notification Plugin 104(s) and 148 Schema(s) loaded in 0.0637s
2024-05-13 17:42:05,334 - ERROR - Unparseable URL demo://
2024-05-13 17:42:05,334 - ERROR - There are no service(s) to notify

In your test, this line stands out to me as interesting...
Message: '(%s) import failed; no app_id defined in %s'

This issue is there regardless of the custom notification. Here's a minimal example on my end (it shows when using 4 v verbose level, not 3).

apprise -vvvv -b "test message" -t "test title" apprise://placeholder/test

Produces the following full log.

2024-05-13 17:47:13,480 - TRACE - Loaded language en
2024-05-13 17:47:13,480 - DEBUG - Language set to en
2024-05-13 17:47:13,500 - TRACE - Notification Plugin apprise_api loaded in 0.017994s
2024-05-13 17:47:13,500 - TRACE - Notification Plugin aprs loaded in 0.000189s
2024-05-13 17:47:13,500 - TRACE - Notification Plugin bark loaded in 0.000128s
2024-05-13 17:47:13,500 - TRACE - Notification Plugin boxcar loaded in 0.000545s
2024-05-13 17:47:13,501 - TRACE - Notification Plugin bulksms loaded in 0.000392s
2024-05-13 17:47:13,501 - TRACE - Notification Plugin bulkvs loaded in 0.000120s
2024-05-13 17:47:13,501 - TRACE - Notification Plugin burstsms loaded in 0.000134s
2024-05-13 17:47:13,501 - TRACE - Notification Plugin chantify loaded in 0.000087s
2024-05-13 17:47:13,501 - TRACE - Notification Plugin clicksend loaded in 0.000100s
2024-05-13 17:47:13,502 - TRACE - Notification Plugin custom_form loaded in 0.000630s
2024-05-13 17:47:13,502 - TRACE - Notification Plugin custom_json loaded in 0.000151s
2024-05-13 17:47:13,502 - TRACE - Notification Plugin custom_xml loaded in 0.000133s
2024-05-13 17:47:13,503 - TRACE - Notification Plugin d7networks loaded in 0.000154s
2024-05-13 17:47:13,503 - TRACE - Notification Plugin dapnet loaded in 0.000119s
2024-05-13 17:47:13,503 - TRACE - Notification Plugin dbus loaded in 0.000151s
2024-05-13 17:47:13,503 - TRACE - Notification Plugin dingtalk loaded in 0.000110s
2024-05-13 17:47:13,503 - TRACE - Notification Plugin discord loaded in 0.000350s
2024-05-13 17:47:13,508 - TRACE - Notification Plugin email loaded in 0.004658s
2024-05-13 17:47:13,508 - TRACE - Notification Plugin emby loaded in 0.000152s
2024-05-13 17:47:13,508 - TRACE - Notification Plugin enigma2 loaded in 0.000131s
2024-05-13 17:47:13,516 - TRACE - Notification Plugin fcm loaded in 0.007581s
2024-05-13 17:47:13,516 - TRACE - Notification Plugin feishu loaded in 0.000108s
2024-05-13 17:47:13,517 - TRACE - Notification Plugin flock loaded in 0.000504s
2024-05-13 17:47:13,517 - TRACE - Notification Plugin freemobile loaded in 0.000089s
2024-05-13 17:47:13,517 - TRACE - Notification Plugin gnome loaded in 0.000120s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/google_chat.py')
2024-05-13 17:47:13,519 - TRACE - Notification Plugin google_chat loaded in 0.002441s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/gotify.py')
2024-05-13 17:47:13,520 - TRACE - Notification Plugin gotify loaded in 0.000360s
2024-05-13 17:47:13,522 - TRACE - Notification Plugin growl loaded in 0.001936s
2024-05-13 17:47:13,522 - TRACE - Notification Plugin guilded loaded in 0.000077s
2024-05-13 17:47:13,522 - TRACE - Notification Plugin home_assistant loaded in 0.000096s
2024-05-13 17:47:13,522 - TRACE - Notification Plugin httpsms loaded in 0.000092s
2024-05-13 17:47:13,523 - TRACE - Notification Plugin ifttt loaded in 0.000450s
2024-05-13 17:47:13,523 - TRACE - Notification Plugin join loaded in 0.000363s
2024-05-13 17:47:13,523 - TRACE - Notification Plugin kavenegar loaded in 0.000106s
2024-05-13 17:47:13,523 - TRACE - Notification Plugin kumulos loaded in 0.000084s
2024-05-13 17:47:13,524 - TRACE - Notification Plugin lametric loaded in 0.000552s
2024-05-13 17:47:13,524 - TRACE - Notification Plugin line loaded in 0.000128s
2024-05-13 17:47:13,524 - TRACE - Notification Plugin lunasea loaded in 0.000209s
2024-05-13 17:47:13,524 - TRACE - Notification Plugin macosx loaded in 0.000104s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/mailgun.py')
2024-05-13 17:47:13,525 - TRACE - Notification Plugin mailgun loaded in 0.000353s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/mastodon.py')
2024-05-13 17:47:13,526 - TRACE - Notification Plugin mastodon loaded in 0.000987s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/matrix.py')
2024-05-13 17:47:13,527 - TRACE - Notification Plugin matrix loaded in 0.001070s
2024-05-13 17:47:13,527 - TRACE - Notification Plugin mattermost loaded in 0.000124s
2024-05-13 17:47:13,527 - TRACE - Notification Plugin messagebird loaded in 0.000091s
2024-05-13 17:47:13,527 - TRACE - Notification Plugin misskey loaded in 0.000099s
2024-05-13 17:47:13,528 - TRACE - Notification Plugin mqtt loaded in 0.001327s
2024-05-13 17:47:13,529 - TRACE - Notification Plugin msg91 loaded in 0.000321s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/msteams.py')
2024-05-13 17:47:13,529 - TRACE - Notification Plugin msteams loaded in 0.000349s
2024-05-13 17:47:13,529 - TRACE - Notification Plugin nextcloud loaded in 0.000118s
2024-05-13 17:47:13,529 - TRACE - Notification Plugin nextcloudtalk loaded in 0.000106s
2024-05-13 17:47:13,529 - TRACE - Notification Plugin notica loaded in 0.000117s
2024-05-13 17:47:13,530 - TRACE - Notification Plugin notifiarr loaded in 0.000172s
2024-05-13 17:47:13,530 - TRACE - Notification Plugin notifico loaded in 0.000108s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/ntfy.py')
2024-05-13 17:47:13,530 - TRACE - Notification Plugin ntfy loaded in 0.000509s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/office365.py')
2024-05-13 17:47:13,531 - TRACE - Notification Plugin office365 loaded in 0.000383s
2024-05-13 17:47:13,531 - TRACE - Notification Plugin one_signal loaded in 0.000140s
2024-05-13 17:47:13,531 - TRACE - Notification Plugin opsgenie loaded in 0.000143s
2024-05-13 17:47:13,531 - TRACE - Notification Plugin pagerduty loaded in 0.000125s
2024-05-13 17:47:13,531 - TRACE - Notification Plugin pagertree loaded in 0.000140s
2024-05-13 17:47:13,531 - TRACE - Notification Plugin parseplatform loaded in 0.000098s
2024-05-13 17:47:13,532 - TRACE - Notification Plugin popcorn_notify loaded in 0.000086s
2024-05-13 17:47:13,532 - TRACE - Notification Plugin prowl loaded in 0.000141s
2024-05-13 17:47:13,532 - TRACE - Notification Plugin pushbullet loaded in 0.000103s
2024-05-13 17:47:13,532 - TRACE - Notification Plugin pushdeer loaded in 0.000087s
2024-05-13 17:47:13,532 - TRACE - Notification Plugin pushed loaded in 0.000179s
2024-05-13 17:47:13,532 - TRACE - Notification Plugin pushjet loaded in 0.000105s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/pushme.py')
2024-05-13 17:47:13,533 - TRACE - Notification Plugin pushme loaded in 0.000290s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/pushover.py')
2024-05-13 17:47:13,533 - TRACE - Notification Plugin pushover loaded in 0.000547s
2024-05-13 17:47:13,533 - TRACE - Notification Plugin pushsafer loaded in 0.000276s
2024-05-13 17:47:13,534 - TRACE - Notification Plugin pushy loaded in 0.000454s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/reddit.py')
2024-05-13 17:47:13,535 - TRACE - Notification Plugin reddit loaded in 0.000798s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/revolt.py')
2024-05-13 17:47:13,535 - TRACE - Notification Plugin revolt loaded in 0.000336s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/rocketchat.py')
2024-05-13 17:47:13,536 - TRACE - Notification Plugin rocketchat loaded in 0.000457s
2024-05-13 17:47:13,536 - TRACE - Notification Plugin rsyslog loaded in 0.000141s
2024-05-13 17:47:13,536 - TRACE - Notification Plugin ryver loaded in 0.000113s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/sendgrid.py')
2024-05-13 17:47:13,536 - TRACE - Notification Plugin sendgrid loaded in 0.000318s
2024-05-13 17:47:13,536 - TRACE - Notification Plugin serverchan loaded in 0.000100s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/ses.py')
2024-05-13 17:47:13,537 - TRACE - Notification Plugin ses loaded in 0.000698s
2024-05-13 17:47:13,537 - TRACE - Notification Plugin signal_api loaded in 0.000343s
2024-05-13 17:47:13,538 - TRACE - Notification Plugin simplepush loaded in 0.000281s
2024-05-13 17:47:13,538 - TRACE - Notification Plugin sinch loaded in 0.000117s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/slack.py')
2024-05-13 17:47:13,538 - TRACE - Notification Plugin slack loaded in 0.000573s
2024-05-13 17:47:13,539 - TRACE - Notification Plugin smseagle loaded in 0.000508s
2024-05-13 17:47:13,539 - TRACE - Notification Plugin smsmanager loaded in 0.000119s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/smtp2go.py')
2024-05-13 17:47:13,539 - TRACE - Notification Plugin smtp2go loaded in 0.000315s
2024-05-13 17:47:13,540 - TRACE - Notification Plugin sns loaded in 0.000253s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/sparkpost.py')
2024-05-13 17:47:13,540 - TRACE - Notification Plugin sparkpost loaded in 0.000359s
2024-05-13 17:47:13,540 - TRACE - Notification Plugin streamlabs loaded in 0.000123s
2024-05-13 17:47:13,540 - TRACE - Notification Plugin synology loaded in 0.000098s
2024-05-13 17:47:13,540 - TRACE - Notification Plugin syslog loaded in 0.000183s
2024-05-13 17:47:13,541 - TRACE - Notification Plugin techuluspush loaded in 0.000088s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/telegram.py')
2024-05-13 17:47:13,544 - TRACE - Notification Plugin telegram loaded in 0.003401s
2024-05-13 17:47:13,544 - TRACE - Notification Plugin threema loaded in 0.000132s
2024-05-13 17:47:13,544 - TRACE - Notification Plugin twilio loaded in 0.000116s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/twist.py')
2024-05-13 17:47:13,545 - TRACE - Notification Plugin twist loaded in 0.000443s
2024-05-13 17:47:13,550 - TRACE - Notification Plugin twitter loaded in 0.005189s
2024-05-13 17:47:13,550 - TRACE - Notification Plugin voipms loaded in 0.000121s
2024-05-13 17:47:13,550 - TRACE - Notification Plugin vonage loaded in 0.000109s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/webexteams.py')
2024-05-13 17:47:13,551 - TRACE - Notification Plugin webexteams loaded in 0.000310s
2024-05-13 17:47:13,551 - TRACE - Notification Plugin wecombot loaded in 0.000095s
2024-05-13 17:47:13,551 - TRACE - Notification Plugin whatsapp loaded in 0.000241s
2024-05-13 17:47:13,551 - TRACE - Notification Plugin windows loaded in 0.000127s
2024-05-13 17:47:13,551 - TRACE - Notification Plugin xbmc loaded in 0.000089s
2024-05-13 17:47:13,552 - TRACE - Notification Plugin zulip loaded in 0.000674s
2024-05-13 17:47:13,552 - DEBUG - Notification Plugin 104(s) and 148 Schema(s) loaded in 0.0704s
2024-05-13 17:47:13,552 - TRACE - Apprise API URL apprise://placeholder/test unpacked as:
user="None"
password="None"
port="None"
host="placeholder"
fullpath=""
path="/"
query="test"
schema="apprise"
url="apprise://placeholder/test"
qsd="{}"
qsd+="{}"
qsd-="{}"
qsd:="{}"
secure="False"
verify="True"
headers="{}"
token="test"
2024-05-13 17:47:13,552 - DEBUG - Loaded Apprise API URL: apprise://placeholder/t...t/?method=form&format=text&overflow=upstream&rto=30.0&cto=4.0&verify=yes
2024-05-13 17:47:13,552 - DEBUG - Apprise API POST URL: http://placeholder/notify/test (cert_verify=True)
2024-05-13 17:47:13,552 - DEBUG - Apprise API Payload: {'title': 'test title', 'body': 'test message', 'type': 'info', 'format': 'text'}
2024-05-13 17:47:13,570 - WARNING - A Connection error occurred sending Apprise API notification to placeholder.
2024-05-13 17:47:13,570 - DEBUG - Socket Exception: HTTPConnectionPool(host='placeholder', port=80): Max retries exceeded with url: /notify/test (Caused by NameResolutionError("<urllib3.connection.HTTPConnection object at 0x149f61ffea10>: Failed to resolve 'placeholder' ([Errno -2] Name does not resolve)"))

Please don't mind the apprise://placeholder/test service URI, it is just to produce the logger errors. You may ignore the Connection error in the last two lines of the output.

@caronc
Copy link
Owner

caronc commented May 14, 2024

So for custom stuff like your doing you need to use the @notify decorator. If you wish you write a full plugin, then it needs to sit in the Apprise core system (part of this repository). Alternatively you can try to locate where apprise installed itself and place your file there. Make sure not to call the ClassName the same as the Filename.py (i will update my docs to reflect this - this is a new change since Apprise v1.8.0)

@danielaranki
Copy link
Author

Thanks. I will try injecting the code in the core path. I think the documentation currently states

It's very important to save the apprise/plugins/NotifyServiceName.py to be exactly the name of the NotifyServiceName class you define within it. In this example, the class is NotifyDemo. This implies that the filename to activate this (and make it usable in Apprise) must be called apprise/plugins/NotifyDemo.py.

so,

Make sure not to call the ClassName the same as the Filename.py

So just to confirm, the filename needs to be different than the class name?

@caronc
Copy link
Owner

caronc commented May 14, 2024

Yeah, have a look at the new directory listings (as of a few weeks ago). This was due to an issue with how Python v3.11 handles file imports and unit testing (#1119).

@danielaranki
Copy link
Author

Thanks for confirming. I will try that.

Regarding the logger issue. Are you able to produce it on your end?

This should produce it:
apprise -vvvv -b "test message" -t "test title" apprise://placeholder/test

@caronc
Copy link
Owner

caronc commented May 14, 2024

That just sends an Apprise message to an Apprise API server. I'm confused how this fits with your demo:// plugin?

Honesty, your life would be so much easier if you just used the @notify decorator, then your original code would work. You'd oly have to write 1 single function (not an entire class with all of the Apprise dependencies). Just for food for thought. the -P switch only loads @notify decorator options (not class objects)

@danielaranki
Copy link
Author

danielaranki commented May 14, 2024

I understand re @notify.

The logger issue seems unrelated to custom notifications. That's why I provided a line that doesn't load a custom plugin or use any custom notification.

Do you prefer if I start a separate issue for this?

In any case, here's the short setup:

Issuing something like

apprise -vvvv -b "test message" -t "test title" apprise://placeholder/test

or any other URI for that matter, apprise://placeholder/test is just a placeholder, like:

apprise -vvvv -b "test message" -t "test title" signal://signal-url:9922/+phonenumber

produces a bunch of logger errors (here's just a small snippet, but this is repeated a dozen or so times):

--- Logging error ---
Traceback (most recent call last):
  File "/usr/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/lsiopy/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/lsiopy/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/lsiopy/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/lsiopy/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/lsiopy/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/lsiopy/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/lsiopy/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/lsiopy/lib/python3.11/site-packages/apprise/plugins/telegram.py')

This would repeat for many (built-in) plugins.

To see those errors, issue an apprise call with -vvvv (4 vs).

@caronc
Copy link
Owner

caronc commented May 14, 2024

There appears to be something wrong with your environment. Is your custom class you wrote perhaps in you're environment?

Maybe try uninstalling and reinstalling Apprise to reset it? How did you originally install it? Via pip?

@danielaranki
Copy link
Author

It's a dockerized setup (from https://hub.docker.com/r/caronc/apprise). Let me try a clean new container (fresh install) and report back to you.

Again, I appreciate your time.

@caronc
Copy link
Owner

caronc commented May 14, 2024

I'm about to go offline for a bit; bed time over here

@danielaranki
Copy link
Author

Of course, this is not pressing or urgent.

Thanks for the help, I'll report back and wait for your reply whenever you get to it.

@danielaranki
Copy link
Author

danielaranki commented May 14, 2024

The logging errors still persist in a fresh docker install.

Here's a setup from scratch (fyi, ./config is empty; also this is not specific to signal:// and can be reproduced with any other service):

docker run \
  -it \
  --rm \
  -p '8000:8000/tcp' \
  -v './config':'/config':'rw' \
  'caronc/apprise:latest' \
  apprise -vvvv -b "body" -t "title" signal://signal-url:9922/+phonenumber

Produces all the logger errors. Here's a truncated output with the first couple of logger errors only:

2024-05-14 02:25:34,229 - TRACE - Loaded language en
2024-05-14 02:25:34,229 - DEBUG - Language set to en
--- Logging error ---
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/usr/local/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/usr/local/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/usr/local/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/usr/local/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/usr/local/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/usr/local/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/usr/local/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/usr/local/lib/python3.11/site-packages/apprise/plugins/slack.py')
2024-05-14 02:25:34,296 - TRACE - Notification Plugin slack loaded in 0.064385s
2024-05-14 02:25:34,296 - TRACE - Notification Plugin pushsafer loaded in 0.000361s
2024-05-14 02:25:34,296 - TRACE - Notification Plugin nextcloudtalk loaded in 0.000190s
2024-05-14 02:25:34,296 - TRACE - Notification Plugin freemobile loaded in 0.000159s
2024-05-14 02:25:34,297 - TRACE - Notification Plugin ryver loaded in 0.000183s
2024-05-14 02:25:34,300 - TRACE - Notification Plugin dapnet loaded in 0.003664s
2024-05-14 02:25:34,303 - TRACE - Notification Plugin threema loaded in 0.000211s
2024-05-14 02:25:34,304 - TRACE - Notification Plugin discord loaded in 0.000398s
2024-05-14 02:25:34,307 - TRACE - Notification Plugin chantify loaded in 0.000179s
2024-05-14 02:25:34,307 - TRACE - Notification Plugin kavenegar loaded in 0.000187s
2024-05-14 02:25:34,308 - TRACE - Notification Plugin custom_xml loaded in 0.000209s
2024-05-14 02:25:34,308 - TRACE - Notification Plugin smseagle loaded in 0.000611s
2024-05-14 02:25:34,308 - TRACE - Notification Plugin messagebird loaded in 0.000170s
2024-05-14 02:25:34,309 - TRACE - Notification Plugin burstsms loaded in 0.000184s
2024-05-14 02:25:34,310 - TRACE - Notification Plugin pushy loaded in 0.001117s
2024-05-14 02:25:34,310 - TRACE - Notification Plugin macosx loaded in 0.000201s
--- Logging error ---
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/logging/__init__.py", line 1110, in emit
    msg = self.format(record)
          ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/logging/__init__.py", line 953, in format
    return fmt.format(record)
           ^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/logging/__init__.py", line 687, in format
    record.message = record.getMessage()
                     ^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/logging/__init__.py", line 377, in getMessage
    msg = msg % self.args
          ~~~~^~~~~~~~~~~
TypeError: not all arguments converted during string formatting
Call stack:
  File "/usr/local/bin/apprise", line 8, in <module>
    sys.exit(main())
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1078, in main
    rv = self.invoke(ctx)
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/usr/local/lib/python3.11/site-packages/apprise/cli.py", line 451, in main
    a.add(url)
  File "/usr/local/lib/python3.11/site-packages/apprise/apprise.py", line 288, in add
    instance = Apprise.instantiate(_server, asset=asset, tag=tag)
  File "/usr/local/lib/python3.11/site-packages/apprise/apprise.py", line 132, in instantiate
    results = plugins.url_to_dict(
  File "/usr/local/lib/python3.11/site-packages/apprise/plugins/__init__.py", line 450, in url_to_dict
    if schema not in N_MGR:
  File "/usr/local/lib/python3.11/site-packages/apprise/manager.py", line 634, in __contains__
    self.load_modules()
  File "/usr/local/lib/python3.11/site-packages/apprise/manager.py", line 225, in load_modules
    logger.trace(
  File "/usr/local/lib/python3.11/site-packages/apprise/logger.py", line 53, in trace
    self._log(logging.TRACE, message, args, **kwargs)
Message: '(%s) import failed; no app_id defined in %s'
Arguments: ('Notification Plugin', 'NotifyFormat', '/usr/local/lib/python3.11/site-packages/apprise/plugins/revolt.py')
2024-05-14 02:25:34,313 - TRACE - Notification Plugin revolt loaded in 0.002670s
2024-05-14 02:25:34,315 - TRACE - Notification Plugin signal_api loaded in 0.002217s

the output continues with a bunch more similar errors.

@danielaranki
Copy link
Author

For further context, I tried this on two different machines running different host OSs, with the same results.

@caronc
Copy link
Owner

caronc commented May 25, 2024

So here is the thing; i've finally had time to look this over. There are 2 types of custom plugins.

  1. One you dynamically set up and leverage with the -P or --plugin-path flag. This is through decorators; they're easy peasy... like this:

    cat << _EOF > my_apprise_plugin.py
    # include the decorator
    from apprise.decorators import notify
    
    # This example maps demo:// to your my_wrapper function
    @notify(on="demo")
    def my_wrapper(body, title, notify_type, *args, **kwargs):
    
       # A simple test - print to screen
        print("{}: {} - {}".format(notify_type, title, body))
    
    _EOF
    
    apprise -P ./my_apprise_plugin.py -b "body" -t "title" demo://
    
    # output is:
    info: title - body
  2. Another way (it seems the way you want to go) is to write an official plugin that is part of Apprise. For this you need to check out the code base and write you file in the plugins directory. To fix your example:

    # Clone a copy of the apprise repository
    git clone git@github.com:caronc/apprise.git apprise
    
    # Change into the directory we just cloned
    cd apprise

    Create your official Demo Plugin; paste this into the file `apprise/plugins/demo.py:

    # -*- coding: utf-8 -*-
    from .base import NotifyBase
    from ..locale import gettext_lazy as _
    from ..common import NotifyType
    
    
    class NotifyDemo(NotifyBase):
        """
        A Sample/Demo Notifications
        """
    
        # The default descriptive name associated with the Notification
        # _() allows us to support future (language) translations
        service_name = _('Apprise Demo Notification')
    
        # The default protocol/schema
        # This will be what triggers your service to be activated when
        # protocol:// is specified (in example demo:// will activate
        # this service).
        protocol = 'demo'
    
        # A URL that takes you to the setup/help of the specific protocol
        # This is for new-comers who will want to learn how they can
        # use your service.  Ideally you should point to somewhere on
        # the 'https://github.com/caronc/apprise/wiki/
        setup_url = 'https://github.com/caronc/apprise/wiki/Notify_Demo'
    
        # This disables throttling by default for this simple plugin.
        request_rate_per_sec = 0
    
        #
        # Templating Section
        #
        # 1. `templates`: Identify the way you can use your plugin.
        #    This example is rather simple, so there isn't really much to do
        #    here.  Check out the other demo's to see where this gets a bit more
        #    advanced.
        #
        templates = (
            '{schema}://',
        )
    
        # For the reasons above, we only need to identify apikey here:
        def __init__(self, **kwargs):
            """
            Initialize Demo Object
    
            """
            # Always call super() so that parent clases can set up.  Make
            # sure to only pass in **kwargs
            super(NotifyDemo, self).__init__(**kwargs)
    
            #
            # Now you can write any initialization you want; if you have nothing to
            # initialize then you can skip the definition of the __init__()
            # function all together.
            #
            return
    
        def url(self, *args, **kwargs):
            """
            Returns the URL built dynamically based on specified arguments.
            """
    
            # Always call self.url_parameters() at some point.
            # This allows your Apprise URL to handle the common/global
            # parameters that are used by Apprise. This is for consistency
            # more than anything:
            params = self.url_parameters(*args, **kwargs)
    
            # Basically we need to write back a URL that looks exactly like
            # the one we parsed to build from scratch.
    
            # If we can parse a URL and rebuild it the way it once was,
            # Administrators who use Apprise don't need to pay attention to all
            # of your custom and unique tokens (from on service to another).
            # they only need to store Apprise URL's in their database.
    
            return '{schema}://?{params}'.format(
                schema=self.protocol,
                params=self.urlencode(params),
            )
    
        def send(self, body, title='', notify_type=NotifyType.INFO, **kwargs):
            """
            Perform Demo Notification
            """
    
            #
            # Always call throttle before any remote server i/o is made
            #
            self.throttle()
    
            # Perform your notification here; in this example, we just send the
            # output to `stdout`:
            print('{type}: {title} - {body}'.format(
                type=notify_type, title=title, body=body))
    
            return True
    
        @staticmethod
        def parse_url(url):
            """
            Parses the URL and returns enough arguments that can allow
            us to re-instantiate this object.
    
            """
            # If you're URL does not define what is considered a valid host after
            # your' schema/protocol such as this plugin example (demo://) where the
            # hostname isn't even required, then set the verify_host to False
            results = NotifyBase.parse_url(url, verify_host=False)
            if not results:
                # We're done early as we couldn't parse the URL
                return results
    
            # Handle any additional parsing here if you want
            # make sure to write all your changes/updates back into the results
            # dictionary
    
            # The contents of our results (a dictionary) will become
            # the arguments passed into the __init__() function we defined above.
            return results

    Now you can access demo:// without a -P or --plugin-path because it's built straight into the application:

    # refence the local copy associated with your git branch to test:
    bin/apprise  -b "body" -t "title" demo://
    
    # output is:
    info: title - body

The big difference between 1 and 2, is 1 you can do anytime with your current copy of Apprise. Option 2 requires you to commit to the code base (which don't get me wrong: I love that; I certainly welcome a new plugin you may have to offer). You can also perform option to into your already installed copy of apprise on your OS, but the directory varies depending on the distribution and method you chose. For example pypi generally installs the modules in /usr/lib/python3.XX/site-packages/ where XX is the python version. This is a bit of a hacky approach, but it's an option.

I hope this helps

Finally thank you for pointing out https://github.com/caronc/apprise/wiki/DemoPlugin_Basic. I had forgotten about that wiki page and it is badly out of date. I've since updated the few mistakes that have also been reflected in the 2 working examples i have here.

@caronc caronc added the invalid label May 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants