caronc / apprise

Apprise - Push Notifications that work with just about every platform!
https://hub.docker.com/r/caronc/apprise
BSD 2-Clause "Simplified" License
10.91k stars 384 forks source link

Support Asynchronous Dynamic Module Loading #1071

Closed caronc closed 4 months ago

caronc commented 4 months ago

Description:

Related issue (if applicable): #1020

This is in efforts to address a racing condition that happens in Home Assistant Core/110242

Effectively what this patch does is adds a mutex around the (notification) plugin loading. In addition to this, a flag is tracked when loading has been completed allowing threaded or asynchronous instances of Apprise to work correctly.

Previously (before this patch), the Apprise library would start loading it's (notification) plugins dynamically after first being instantiated. However second instances would not recognize that the first instance hadn't completed loading all the libraries. The second instance would however detect that plugins were loaded (it really depends on how far the first instance got during it's startup) and assumed it was okay to start processing URLs it was fed. If your notification URL referenced a plugin that simply hadn't loaded yet (it's a timing thing), it would flat out fail.

Checklist

Testing

Anyone can help test this source code as follows:

# Create a virtual environment to work in as follows:
python3 -m venv apprise

# Change into our new directory
cd apprise

# Activate our virtual environment
source bin/activate

# Install the branch
pip install git+https://github.com/caronc/apprise.git@1020-async-module-loading-fix

# Test out the changes with the following command:
apprise -t "Test Title" -b "Test Message" \
  <apprise url related to ticket>
codecov-commenter commented 4 months ago

Codecov Report

All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 99.27%. Comparing base (52aa7f4) to head (519dec9).

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.

Additional details and impacted files ```diff @@ Coverage Diff @@ ## master #1071 +/- ## ======================================= Coverage 99.27% 99.27% ======================================= Files 136 136 Lines 17739 17753 +14 Branches 3618 3623 +5 ======================================= + Hits 17611 17625 +14 Misses 119 119 Partials 9 9 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.