diff options
author | morpheus65535 <[email protected]> | 2024-05-24 13:19:37 -0400 |
---|---|---|
committer | morpheus65535 <[email protected]> | 2024-05-24 13:19:37 -0400 |
commit | 5ca733eac0ec43ebd3ca68e867bfd6ef0fb30cc2 (patch) | |
tree | d1799076dea9254294609ea3d4ca9178d3e321f7 | |
parent | 3e929d8ef90fcb77bba0abeb4662d4d5e2882e6a (diff) | |
download | bazarr-5ca733eac0ec43ebd3ca68e867bfd6ef0fb30cc2.tar.gz bazarr-5ca733eac0ec43ebd3ca68e867bfd6ef0fb30cc2.zip |
Reverted to apprise 1.7.6 to fix an issue with the upgrade process first. 1.8.0 will get back in nightly shortly. #2497v1.4.3-beta.40
-rw-r--r-- | libs/apprise-1.7.6.dist-info/INSTALLER (renamed from libs/apprise-1.8.0.dist-info/INSTALLER) | 0 | ||||
-rw-r--r-- | libs/apprise-1.7.6.dist-info/LICENSE (renamed from libs/apprise-1.8.0.dist-info/LICENSE) | 0 | ||||
-rw-r--r-- | libs/apprise-1.7.6.dist-info/METADATA (renamed from libs/apprise-1.8.0.dist-info/METADATA) | 2 | ||||
-rw-r--r-- | libs/apprise-1.7.6.dist-info/RECORD | 183 | ||||
-rw-r--r-- | libs/apprise-1.7.6.dist-info/REQUESTED (renamed from libs/apprise-1.8.0.dist-info/REQUESTED) | 0 | ||||
-rw-r--r-- | libs/apprise-1.7.6.dist-info/WHEEL (renamed from libs/apprise-1.8.0.dist-info/WHEEL) | 0 | ||||
-rw-r--r-- | libs/apprise-1.7.6.dist-info/entry_points.txt (renamed from libs/apprise-1.8.0.dist-info/entry_points.txt) | 0 | ||||
-rw-r--r-- | libs/apprise-1.7.6.dist-info/top_level.txt (renamed from libs/apprise-1.8.0.dist-info/top_level.txt) | 0 | ||||
-rw-r--r-- | libs/apprise-1.8.0.dist-info/RECORD | 183 | ||||
-rw-r--r-- | libs/apprise/Apprise.py | 887 | ||||
-rw-r--r-- | libs/apprise/Apprise.pyi | 62 | ||||
-rw-r--r-- | libs/apprise/AppriseAsset.py (renamed from libs/apprise/asset.py) | 2 | ||||
-rw-r--r-- | libs/apprise/AppriseAsset.pyi (renamed from libs/apprise/asset.pyi) | 0 | ||||
-rw-r--r-- | libs/apprise/AppriseAttachment.py (renamed from libs/apprise/apprise_attachment.py) | 6 | ||||
-rw-r--r-- | libs/apprise/AppriseAttachment.pyi (renamed from libs/apprise/apprise_attachment.pyi) | 0 | ||||
-rw-r--r-- | libs/apprise/AppriseConfig.py (renamed from libs/apprise/apprise_config.py) | 4 | ||||
-rw-r--r-- | libs/apprise/AppriseConfig.pyi (renamed from libs/apprise/apprise_config.pyi) | 0 | ||||
-rw-r--r-- | libs/apprise/AppriseLocale.py (renamed from libs/apprise/locale.py) | 0 | ||||
-rw-r--r-- | libs/apprise/AttachmentManager.py (renamed from libs/apprise/manager_attachment.py) | 5 | ||||
-rw-r--r-- | libs/apprise/ConfigurationManager.py (renamed from libs/apprise/manager_config.py) | 5 | ||||
-rw-r--r-- | libs/apprise/NotificationManager.py (renamed from libs/apprise/manager_plugins.py) | 6 | ||||
-rw-r--r-- | libs/apprise/URLBase.py (renamed from libs/apprise/url.py) | 9 | ||||
-rw-r--r-- | libs/apprise/URLBase.pyi (renamed from libs/apprise/url.pyi) | 0 | ||||
-rw-r--r-- | libs/apprise/__init__.py | 23 | ||||
-rw-r--r-- | libs/apprise/attachment/AttachBase.py (renamed from libs/apprise/attachment/base.py) | 9 | ||||
-rw-r--r-- | libs/apprise/attachment/AttachBase.pyi (renamed from libs/apprise/attachment/base.pyi) | 0 | ||||
-rw-r--r-- | libs/apprise/attachment/AttachFile.py (renamed from libs/apprise/attachment/file.py) | 4 | ||||
-rw-r--r-- | libs/apprise/attachment/AttachHTTP.py (renamed from libs/apprise/attachment/http.py) | 12 | ||||
-rw-r--r-- | libs/apprise/attachment/__init__.py | 5 | ||||
-rw-r--r-- | libs/apprise/config/ConfigBase.py (renamed from libs/apprise/config/base.py) | 8 | ||||
-rw-r--r-- | libs/apprise/config/ConfigBase.pyi (renamed from libs/apprise/config/base.pyi) | 0 | ||||
-rw-r--r-- | libs/apprise/config/ConfigFile.py (renamed from libs/apprise/config/file.py) | 4 | ||||
-rw-r--r-- | libs/apprise/config/ConfigHTTP.py (renamed from libs/apprise/config/http.py) | 6 | ||||
-rw-r--r-- | libs/apprise/config/ConfigMemory.py (renamed from libs/apprise/config/memory.py) | 4 | ||||
-rw-r--r-- | libs/apprise/config/__init__.py | 5 | ||||
-rw-r--r-- | libs/apprise/conversion.py | 2 | ||||
-rw-r--r-- | libs/apprise/decorators/CustomNotifyPlugin.py (renamed from libs/apprise/decorators/base.py) | 7 | ||||
-rw-r--r-- | libs/apprise/decorators/notify.py | 2 | ||||
-rw-r--r-- | libs/apprise/i18n/en/LC_MESSAGES/apprise.mo | bin | 3959 -> 3959 bytes | |||
-rw-r--r-- | libs/apprise/manager.py | 83 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyAppriseAPI.py (renamed from libs/apprise/plugins/apprise_api.py) | 8 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyAprs.py (renamed from libs/apprise/plugins/aprs.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyBark.py (renamed from libs/apprise/plugins/bark.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyBase.py (renamed from libs/apprise/plugins/base.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyBase.pyi (renamed from libs/apprise/plugins/base.pyi) | 0 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyBoxcar.py (renamed from libs/apprise/plugins/boxcar.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyBulkSMS.py (renamed from libs/apprise/plugins/bulksms.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyBulkVS.py (renamed from libs/apprise/plugins/bulkvs.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyBurstSMS.py (renamed from libs/apprise/plugins/burstsms.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyChantify.py (renamed from libs/apprise/plugins/chantify.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyClickSend.py (renamed from libs/apprise/plugins/clicksend.py) | 27 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyD7Networks.py (renamed from libs/apprise/plugins/d7networks.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyDBus.py (renamed from libs/apprise/plugins/dbus.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyDapnet.py (renamed from libs/apprise/plugins/dapnet.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyDingTalk.py (renamed from libs/apprise/plugins/dingtalk.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyDiscord.py (renamed from libs/apprise/plugins/discord.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyEmail.py (renamed from libs/apprise/plugins/email.py) | 16 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyEmby.py (renamed from libs/apprise/plugins/emby.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyEnigma2.py (renamed from libs/apprise/plugins/enigma2.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyFCM/__init__.py (renamed from libs/apprise/plugins/fcm/__init__.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyFCM/color.py (renamed from libs/apprise/plugins/fcm/color.py) | 2 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyFCM/common.py (renamed from libs/apprise/plugins/fcm/common.py) | 0 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyFCM/oauth.py (renamed from libs/apprise/plugins/fcm/oauth.py) | 0 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyFCM/priority.py (renamed from libs/apprise/plugins/fcm/priority.py) | 0 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyFeishu.py (renamed from libs/apprise/plugins/feishu.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyFlock.py (renamed from libs/apprise/plugins/flock.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyForm.py (renamed from libs/apprise/plugins/custom_form.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyFreeMobile.py (renamed from libs/apprise/plugins/freemobile.py) | 5 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyGnome.py (renamed from libs/apprise/plugins/gnome.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyGoogleChat.py (renamed from libs/apprise/plugins/google_chat.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyGotify.py (renamed from libs/apprise/plugins/gotify.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyGrowl.py (renamed from libs/apprise/plugins/growl.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyGuilded.py (renamed from libs/apprise/plugins/guilded.py) | 5 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyHomeAssistant.py (renamed from libs/apprise/plugins/home_assistant.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyHttpSMS.py (renamed from libs/apprise/plugins/httpsms.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyIFTTT.py (renamed from libs/apprise/plugins/ifttt.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyJSON.py (renamed from libs/apprise/plugins/custom_json.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyJoin.py (renamed from libs/apprise/plugins/join.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyKavenegar.py (renamed from libs/apprise/plugins/kavenegar.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyKumulos.py (renamed from libs/apprise/plugins/kumulos.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyLametric.py (renamed from libs/apprise/plugins/lametric.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyLine.py (renamed from libs/apprise/plugins/line.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyLunaSea.py (renamed from libs/apprise/plugins/lunasea.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyMQTT.py (renamed from libs/apprise/plugins/mqtt.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyMSG91.py (renamed from libs/apprise/plugins/msg91.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyMSTeams.py (renamed from libs/apprise/plugins/msteams.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyMacOSX.py (renamed from libs/apprise/plugins/macosx.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyMailgun.py (renamed from libs/apprise/plugins/mailgun.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyMastodon.py (renamed from libs/apprise/plugins/mastodon.py) | 8 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyMatrix.py (renamed from libs/apprise/plugins/matrix.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyMattermost.py (renamed from libs/apprise/plugins/mattermost.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyMessageBird.py (renamed from libs/apprise/plugins/messagebird.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyMisskey.py (renamed from libs/apprise/plugins/misskey.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyNextcloud.py (renamed from libs/apprise/plugins/nextcloud.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyNextcloudTalk.py (renamed from libs/apprise/plugins/nextcloudtalk.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyNotica.py (renamed from libs/apprise/plugins/notica.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyNotifiarr.py (renamed from libs/apprise/plugins/notifiarr.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyNotifico.py (renamed from libs/apprise/plugins/notifico.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyNtfy.py (renamed from libs/apprise/plugins/ntfy.py) | 8 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyOffice365.py (renamed from libs/apprise/plugins/office365.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyOneSignal.py (renamed from libs/apprise/plugins/one_signal.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyOpsgenie.py (renamed from libs/apprise/plugins/opsgenie.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyPagerDuty.py (renamed from libs/apprise/plugins/pagerduty.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyPagerTree.py (renamed from libs/apprise/plugins/pagertree.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyParsePlatform.py (renamed from libs/apprise/plugins/parseplatform.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyPopcornNotify.py (renamed from libs/apprise/plugins/popcorn_notify.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyProwl.py (renamed from libs/apprise/plugins/prowl.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyPushBullet.py (renamed from libs/apprise/plugins/pushbullet.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyPushDeer.py (renamed from libs/apprise/plugins/pushdeer.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyPushMe.py (renamed from libs/apprise/plugins/pushme.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyPushSafer.py (renamed from libs/apprise/plugins/pushsafer.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyPushed.py (renamed from libs/apprise/plugins/pushed.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyPushjet.py (renamed from libs/apprise/plugins/pushjet.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyPushover.py (renamed from libs/apprise/plugins/pushover.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyPushy.py (renamed from libs/apprise/plugins/pushy.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyRSyslog.py (renamed from libs/apprise/plugins/rsyslog.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyReddit.py (renamed from libs/apprise/plugins/reddit.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyRevolt.py (renamed from libs/apprise/plugins/revolt.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyRocketChat.py (renamed from libs/apprise/plugins/rocketchat.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyRyver.py (renamed from libs/apprise/plugins/ryver.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifySES.py (renamed from libs/apprise/plugins/ses.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifySMSEagle.py (renamed from libs/apprise/plugins/smseagle.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifySMSManager.py (renamed from libs/apprise/plugins/smsmanager.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifySMTP2Go.py (renamed from libs/apprise/plugins/smtp2go.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifySNS.py (renamed from libs/apprise/plugins/sns.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifySendGrid.py (renamed from libs/apprise/plugins/sendgrid.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyServerChan.py (renamed from libs/apprise/plugins/serverchan.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifySignalAPI.py (renamed from libs/apprise/plugins/signal_api.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifySimplePush.py (renamed from libs/apprise/plugins/simplepush.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifySinch.py (renamed from libs/apprise/plugins/sinch.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifySlack.py (renamed from libs/apprise/plugins/slack.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifySparkPost.py (renamed from libs/apprise/plugins/sparkpost.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyStreamlabs.py (renamed from libs/apprise/plugins/streamlabs.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifySynology.py (renamed from libs/apprise/plugins/synology.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifySyslog.py (renamed from libs/apprise/plugins/syslog.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyTechulusPush.py (renamed from libs/apprise/plugins/techuluspush.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyTelegram.py (renamed from libs/apprise/plugins/telegram.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyThreema.py (renamed from libs/apprise/plugins/threema.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyTwilio.py (renamed from libs/apprise/plugins/twilio.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyTwist.py (renamed from libs/apprise/plugins/twist.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyTwitter.py (renamed from libs/apprise/plugins/twitter.py) | 8 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyVoipms.py (renamed from libs/apprise/plugins/voipms.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyVonage.py (renamed from libs/apprise/plugins/vonage.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyWeComBot.py (renamed from libs/apprise/plugins/wecombot.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyWebexTeams.py (renamed from libs/apprise/plugins/webexteams.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyWhatsApp.py (renamed from libs/apprise/plugins/whatsapp.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyWindows.py (renamed from libs/apprise/plugins/windows.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyXBMC.py (renamed from libs/apprise/plugins/xbmc.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyXML.py (renamed from libs/apprise/plugins/custom_xml.py) | 6 | ||||
-rw-r--r-- | libs/apprise/plugins/NotifyZulip.py (renamed from libs/apprise/plugins/zulip.py) | 4 | ||||
-rw-r--r-- | libs/apprise/plugins/__init__.py | 8 | ||||
-rw-r--r-- | libs/apprise/utils.py | 13 | ||||
-rw-r--r-- | libs/version.txt | 2 |
153 files changed, 1511 insertions, 609 deletions
diff --git a/libs/apprise-1.8.0.dist-info/INSTALLER b/libs/apprise-1.7.6.dist-info/INSTALLER index a1b589e38..a1b589e38 100644 --- a/libs/apprise-1.8.0.dist-info/INSTALLER +++ b/libs/apprise-1.7.6.dist-info/INSTALLER diff --git a/libs/apprise-1.8.0.dist-info/LICENSE b/libs/apprise-1.7.6.dist-info/LICENSE index f9154fefe..f9154fefe 100644 --- a/libs/apprise-1.8.0.dist-info/LICENSE +++ b/libs/apprise-1.7.6.dist-info/LICENSE diff --git a/libs/apprise-1.8.0.dist-info/METADATA b/libs/apprise-1.7.6.dist-info/METADATA index c01ef211a..ac7cb9aac 100644 --- a/libs/apprise-1.8.0.dist-info/METADATA +++ b/libs/apprise-1.7.6.dist-info/METADATA @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: apprise -Version: 1.8.0 +Version: 1.7.6 Summary: Push Notifications that work with just about every platform! Home-page: https://github.com/caronc/apprise Author: Chris Caron diff --git a/libs/apprise-1.7.6.dist-info/RECORD b/libs/apprise-1.7.6.dist-info/RECORD new file mode 100644 index 000000000..250648105 --- /dev/null +++ b/libs/apprise-1.7.6.dist-info/RECORD @@ -0,0 +1,183 @@ +../../bin/apprise,sha256=ZJ-e4qqxNLtdW_DAvpuPPX5iROIiQd8I6nvg7vtAv-g,233 +apprise-1.7.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 +apprise-1.7.6.dist-info/LICENSE,sha256=gt7qKBxRhVcdmXCYVtrWP6DtYjD0DzONet600dkU994,1343 +apprise-1.7.6.dist-info/METADATA,sha256=z_gaX2IdNJqw4T9q7AYQri9jcIs-OTGCo3t2EgEY-mw,44823 +apprise-1.7.6.dist-info/RECORD,, +apprise-1.7.6.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +apprise-1.7.6.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92 +apprise-1.7.6.dist-info/entry_points.txt,sha256=71YypBuNdjAKiaLsiMG40HEfLHxkU4Mi7o_S0s0d8wI,45 +apprise-1.7.6.dist-info/top_level.txt,sha256=JrCRn-_rXw5LMKXkIgMSE4E0t1Ks9TYrBH54Pflwjkk,8 +apprise/Apprise.py,sha256=Stm2NhJprWRaMwQfTiIQG_nR1bLpHi_zcdwEcsCpa-A,32865 +apprise/Apprise.pyi,sha256=_4TBKvT-QVj3s6PuTh3YX-BbQMeJTdBGdVpubLMY4_k,2203 +apprise/AppriseAsset.py,sha256=jRW8Y1EcAvjVA9h_mINmsjO4DM3S0aDl6INIFVMcUCs,11647 +apprise/AppriseAsset.pyi,sha256=NYLXXYbScgRkspP27XGpRRM_uliPu1OCdWdZBPPvLng,979 +apprise/AppriseAttachment.py,sha256=vhrktSrp8GLr32aK4KqV6BX83IpI1lxZe-pGo1wiSFM,12540 +apprise/AppriseAttachment.pyi,sha256=R9-0dVqWpeaFrVpcREwPhGy3qHWztG5jEjYIOsbE5dM,1145 +apprise/AppriseConfig.py,sha256=wfuR6Mb3ZLHvjvqWdFp9lVmjjDRWs65unY9qa92RkCg,16909 +apprise/AppriseConfig.pyi,sha256=_mUlCnncqAq8sL01WxQTgZjnb2ic9kZXvtqZmVl-fc8,1568 +apprise/AppriseLocale.py,sha256=4uSr4Nj_rz6ISMMAfRVRk58wZVLKOofJgk2x0_E8NkQ,8994 +apprise/AttachmentManager.py,sha256=EwlnjuKn3fv_pioWcmMCkyDTsO178t6vkEOD8AjAPsw,2053 +apprise/ConfigurationManager.py,sha256=MUmGajxjgnr6FGN7xb3q0nD0VVgdTdvapBBR7CsI-rc,2058 +apprise/NotificationManager.py,sha256=ZJgkiCgcJ7Bz_6bwQ47flrcxvLMbA4Vbw0HG_yTsGdE,2041 +apprise/URLBase.py,sha256=xRP0-blocp9UudYh04Hb3fIEmTZWJaTv_tzjrqaB9fg,29423 +apprise/URLBase.pyi,sha256=WLaRREH7FzZ5x3-qkDkupojWGFC4uFwJ1EDt02lVs8c,520 +apprise/__init__.py,sha256=ArtvoarAMnBcSfXF7L_hzq5CUJ9TUnHopiC7xafCe3c,3368 +apprise/assets/NotifyXML-1.0.xsd,sha256=292qQ_IUl5EWDhPyzm9UTT0C2rVvJkyGar8jiODkJs8,986 +apprise/assets/NotifyXML-1.1.xsd,sha256=bjR3CGG4AEXoJjYkGCbDttKHSkPP1FlIWO02E7G59g4,1758 +apprise/assets/themes/default/apprise-failure-128x128.ico,sha256=Mt0ptfHJaN3Wsv5UCNDn9_3lyEDHxVDv1JdaDEI_xCA,67646 +apprise/assets/themes/default/apprise-failure-128x128.png,sha256=66ps8TDPxVH3g9PlObJqF-0x952CjnqQyN3zvpRcOT8,16135 +apprise/assets/themes/default/apprise-failure-256x256.png,sha256=bQBsKKCsKfR9EqgYOZrcVcVa5y8qG58PN2mEqO5eNRI,41931 +apprise/assets/themes/default/apprise-failure-32x32.png,sha256=vH0pZffIDCvkejpr3fJHGXW__8Yc3R_p0bacX6t6l18,2437 +apprise/assets/themes/default/apprise-failure-72x72.png,sha256=EP5A8DHRDr9srgupFSwOoyQ308bNJ8aL192J_L4K-ec,7600 +apprise/assets/themes/default/apprise-info-128x128.ico,sha256=F5_CirmXueRCRI5Z_Crf6TS6jVIXTJlRD83zw1oJ66g,67646 +apprise/assets/themes/default/apprise-info-128x128.png,sha256=bBqRZAgQey-gkmJrnFhPbzjILSrljE59mRkgj3raMQo,16671 +apprise/assets/themes/default/apprise-info-256x256.png,sha256=B5r_O4d9MHCmSWZwfbqQgZSp-ZetTdiBSwKcMTF1aFA,43331 +apprise/assets/themes/default/apprise-info-32x32.png,sha256=lt3NZ95TzkiCNVNlurrB2fE2nriMa1wftl7nrNXmb6c,2485 +apprise/assets/themes/default/apprise-info-72x72.png,sha256=kDnsZpqNUZGqs9t1ECUup7FOfXUIL-rupnQCYJp9So4,7875 +apprise/assets/themes/default/apprise-logo.png,sha256=85ttALudKkLmiqilJT7mUQLUXRFmM1AK89rnwLm313s,160907 +apprise/assets/themes/default/apprise-success-128x128.ico,sha256=uCopPwdQjxgfohKazHaDzYs9y4oiaOpL048PYC6WRlg,67646 +apprise/assets/themes/default/apprise-success-128x128.png,sha256=nvDuU_QqhGlw6cMtdj7Mv-gPgqCEx-0DaaXn1KBLVYg,17446 +apprise/assets/themes/default/apprise-success-256x256.png,sha256=vXfKuxY3n0eeXHKdb9hTxICxOEn7HjAQ4IZpX0HSLzc,48729 +apprise/assets/themes/default/apprise-success-32x32.png,sha256=Jg9pFJh3YPI-LiPBebyJ7Z4Vt7BRecaE8AsRjQVIkME,2471 +apprise/assets/themes/default/apprise-success-72x72.png,sha256=FQbgvIhqKOhEK0yvrhaSpai0R7hrkTt_-GaC2KUgCCk,7858 +apprise/assets/themes/default/apprise-warning-128x128.ico,sha256=6XaQPOx0oWK_xbhr4Yhb7qNazCWwSs9lk2SYR2MHTrQ,67646 +apprise/assets/themes/default/apprise-warning-128x128.png,sha256=pf5c4Ph7jWH7gf39dJoieSj8TzAsY3TXI-sGISGVIW4,16784 +apprise/assets/themes/default/apprise-warning-256x256.png,sha256=SY-xlaiXaj420iEYKC2_fJxU-yj2SuaQg6xfPNi83bw,43708 +apprise/assets/themes/default/apprise-warning-32x32.png,sha256=97R2ywNvcwczhBoWEIgajVtWjgT8fLs4FCCz4wu0dwc,2472 +apprise/assets/themes/default/apprise-warning-72x72.png,sha256=L8moEInkO_OLxoOcuvN7rmrGZo64iJeH20o-24MQghE,7913 +apprise/attachment/AttachBase.py,sha256=T3WreGrTsqqGplXJO36jm-N14X7ymSc9xt7XdTYuXVE,13656 +apprise/attachment/AttachBase.pyi,sha256=w0XG_QKauiMLJ7eQ4S57IiLIURZHm_Snw7l6-ih9GP8,961 +apprise/attachment/AttachFile.py,sha256=MbHY_av0GeM_AIBKV02Hq7SHiZ9eCr1yTfvDMUgi2I4,4765 +apprise/attachment/AttachHTTP.py,sha256=_CMPp4QGLATfGO2-Nw57sxsQyed9z3ywgoB0vpK3KZk,13779 +apprise/attachment/__init__.py,sha256=xabgXpvV05X-YRuqIt3uGYMXwYNXjHyF6Dwd8HfZCFE,1658 +apprise/cli.py,sha256=h-pWSQPqQficH6J-OEp3MTGydWyt6vMYnDZvHCeAt4Y,20697 +apprise/common.py,sha256=I6wfrndggCL7l7KAl7Cm4uwAX9n0l3SN4-BVvTE0L0M,5593 +apprise/common.pyi,sha256=luF3QRiClDCk8Z23rI6FCGYsVmodOt_JYfYyzGogdNM,447 +apprise/config/ConfigBase.py,sha256=d1efIuQFCJr66WgpudV2DWtxY3-tuZAyMAhHXBzJ8p0,53194 +apprise/config/ConfigBase.pyi,sha256=cngfobwH6v2vxYbQrObDi5Z-t5wcquWF-wR0kBCr3Eg,54 +apprise/config/ConfigFile.py,sha256=u_SDaN3OHMyaAq2X7k_T4_PRKkVsDwleqBz9YIN5lbA,6138 +apprise/config/ConfigHTTP.py,sha256=Iy6Ji8_nX3xDjFgJGLrz4ftrMlMiyKiFGzYGJ7rMSMQ,9457 +apprise/config/ConfigMemory.py,sha256=epEAgNy-eJVWoQaUOvjivMWxXTofy6wAQ-NbCqYmuyE,2829 +apprise/config/__init__.py,sha256=lbsxrUpB1IYM2q7kjYhsXQGgPF-yZXJrKFE361tdIPY,1663 +apprise/conversion.py,sha256=0VZ0eCZfksN-97Vl0TjVjwnCTgus3XTRioceSFnP-gc,6277 +apprise/decorators/CustomNotifyPlugin.py,sha256=i4D-sgOsBWsxO5auWCN2bgXLLPuADaaLlJ1gUKLj2bU,7972 +apprise/decorators/__init__.py,sha256=e_PDAm0kQNzwDPx-NJZLPfLMd2VAABvNZtxx_iDviRM,1487 +apprise/decorators/notify.py,sha256=a2WupErNw1_SMAld7jPC273bskiChMpYy95BOog5A9w,5111 +apprise/emojis.py,sha256=ONF0t8dY9f2XlEkLUG79-ybKVAj2GqbPj2-Be97vAoI,87738 +apprise/i18n/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +apprise/i18n/en/LC_MESSAGES/apprise.mo,sha256=oUTuHREmLEYN07oqYqRMJ_kU71-o5o37NsF4RXlC5AU,3959 +apprise/logger.py,sha256=131hqhed8cUj9x_mfXDEvwA2YbcYDFAYiWVK1HgxRVY,6921 +apprise/manager.py,sha256=R9w8jxQRNy6Z_XDcobkt4JYbrC4jtj2OwRw9Zrib3CA,26857 +apprise/plugins/NotifyAppriseAPI.py,sha256=ISBE0brD3eQdyw3XrGXd4Uc4kSYvIuI3SSUVCt-bkdo,16654 +apprise/plugins/NotifyAprs.py,sha256=xdL_aIVgb4ggxRFeCdkZAbgHYZ8DWLw9pRpLZQ0rHoE,25523 +apprise/plugins/NotifyBark.py,sha256=bsDvKooRy4k1Gg7tvBjv3DIx7-WZiV_mbTrkTwMtd9Q,15698 +apprise/plugins/NotifyBase.py,sha256=G3xkF_a2BWqNSxsrnOW7NUgHjOqBCYC5zihCifWemo8,30360 +apprise/plugins/NotifyBase.pyi,sha256=aKlZXRYUgG8lz_ZgGkYYJ_GKhuf18youTmMU-FlG7z8,21 +apprise/plugins/NotifyBoxcar.py,sha256=vR00-WggHa1nHYWyb-f5P2V-G4f683fU_-GBlIeJvD0,12867 +apprise/plugins/NotifyBulkSMS.py,sha256=stPWAFCfhBP617zYK9Dgk6pNJBN_WcyJtODzo0jR1QQ,16005 +apprise/plugins/NotifyBulkVS.py,sha256=viLGeyUDiirRRM7CgRqqElHSLYFnMugDtWE6Ytjqfaw,13290 +apprise/plugins/NotifyBurstSMS.py,sha256=cN2kRETKIK5LhwpQEA8C68LKv8KEUPmXYe-nTSegGls,15550 +apprise/plugins/NotifyChantify.py,sha256=GJJOAtSnVoIfKbJF_W1DTu7WsvS_zHdjO4T1XTKT87g,6673 +apprise/plugins/NotifyClickSend.py,sha256=UfOJqsas6WLjQskojuJE7I_-lrb5QrkMiBZv-po_Q9c,11229 +apprise/plugins/NotifyD7Networks.py,sha256=4E6Fh0kQoDlMMwgZJDOXky7c7KrdMMvqprcfm29scWU,15043 +apprise/plugins/NotifyDBus.py,sha256=1eVJHIL3XkFjDePMqfcll35Ie1vxggJ1iBsVFAIaF00,14379 +apprise/plugins/NotifyDapnet.py,sha256=KuXjBU0ZrIYtoDei85NeLZ-IP810T4w5oFXH9sWiSh0,13624 +apprise/plugins/NotifyDingTalk.py,sha256=NJyETgN6QjtRqtxQjfBLFVuFpURyWykRftm6WpQJVbY,12009 +apprise/plugins/NotifyDiscord.py,sha256=M_qmTzB7NNL5_agjYDX38KBN1jRzDBp2EMSNwEF_9Tw,26072 +apprise/plugins/NotifyEmail.py,sha256=Y_ZOrdK6hTUKHLvogKpV5VqD8byzDyDSvwIVmfdsC2g,39789 +apprise/plugins/NotifyEmby.py,sha256=OMVO8XsVl_XCBYNNNQi8ni2lS4voLfU8Puk1xJOAvHs,24039 +apprise/plugins/NotifyEnigma2.py,sha256=Hj0Q9YOeljSwbfiuMKLqXTVX_1g_mjNUGEts7wfrwno,11498 +apprise/plugins/NotifyFCM/__init__.py,sha256=mBFtIgIJuLIFnMB5ndx5Makjs9orVMc2oLoD7LaVT48,21669 +apprise/plugins/NotifyFCM/color.py,sha256=8iqDtadloQh2TMxkFmIFwenHqKp1pHHn1bwyWOzZ6TY,4592 +apprise/plugins/NotifyFCM/common.py,sha256=978uBUoNdtopCtylipGiKQdsQ8FTONxkFBp7uJMZHc8,1718 +apprise/plugins/NotifyFCM/oauth.py,sha256=Vvbd0-rd5BPIjAneG3rILU153JIzfSZ0kaDov6hm96M,11197 +apprise/plugins/NotifyFCM/priority.py,sha256=0WuRW1y1HVnybgjlTeCZPHzt7j8SwWnC7faNcjioAOc,8163 +apprise/plugins/NotifyFeishu.py,sha256=IpcABdLZJ1vcQdZHlmASVbNOiOCIrmgKFhz1hbdskY4,7266 +apprise/plugins/NotifyFlock.py,sha256=0rUIa9nToGsO8BTUgixh8Z_qdVixJeH479UNYjcE4EM,12748 +apprise/plugins/NotifyForm.py,sha256=38nL-2m1cf4gEQFQ4NpvA4j9i5_nNUgelReWFSjyV5U,17905 +apprise/plugins/NotifyFreeMobile.py,sha256=XCkgZLc3KKGlx_9UdeoMJVcHpeQrOml9T93S-DGf4bs,6644 +apprise/plugins/NotifyGnome.py,sha256=8MXTa8gZg1wTgNJfLlmq7_fl3WaYK-SX6VR91u308C4,9059 +apprise/plugins/NotifyGoogleChat.py,sha256=lnoN17m6lZANaXcElDTP8lcuVWjIZEK8C6_iqJNAnw4,12622 +apprise/plugins/NotifyGotify.py,sha256=DNlOIHyuYitO5use9oa_REPm2Fant7y9QSaatrZFNI0,10551 +apprise/plugins/NotifyGrowl.py,sha256=M6ViUz967VhEHtXrE7lbCKF3aB4pIXNEzJLjjGAmvhM,14023 +apprise/plugins/NotifyGuilded.py,sha256=eCMCoFFuE0XNY8HlLM21zoxgBNgqEKQ8dwYj8LihfRU,3641 +apprise/plugins/NotifyHomeAssistant.py,sha256=zqWu7TtdXhTbGNuflC8WfydbHsCLiEBw4uBUcF7YZtw,10739 +apprise/plugins/NotifyHttpSMS.py,sha256=pDEUHCCB18IhOgDcVK3_FFDJdAcrdTIfPzj0jNnZZBo,11136 +apprise/plugins/NotifyIFTTT.py,sha256=oMvTQ0bEu2eJQgw9BwxAwTNOtbZ_ER-zleJvWpWTj7w,13425 +apprise/plugins/NotifyJSON.py,sha256=70ctjmArGzuvM1gHNt1bCiQVWE7Fp9vd2nWhSXwFvw0,13851 +apprise/plugins/NotifyJoin.py,sha256=B8FHp7cblZBkxTgfrka6mNnf6oQVBXVuGISgSau00z0,13581 +apprise/plugins/NotifyKavenegar.py,sha256=F5xTUdebM1lK6yGFbZJQB9Zgw2LTI0angeA-3Nu-89w,12620 +apprise/plugins/NotifyKumulos.py,sha256=eCEW2ZverZqETOLHVWMC4E8Ll6rEhhEWOSD73RD80SM,8214 +apprise/plugins/NotifyLametric.py,sha256=h8vZoX-Ll5NBZRprBlxTO2H9w0lOiMxglGvUgJtK4_8,37534 +apprise/plugins/NotifyLine.py,sha256=OVI0ozMJcq_-dI8dodVX52dzUzgENlAbOik-Kw4l-rI,10676 +apprise/plugins/NotifyLunaSea.py,sha256=woN8XdkwAjhgxAXp7Zj4XsWLybNL80l4W3Dx5BvobZg,14459 +apprise/plugins/NotifyMQTT.py,sha256=cnuG4f3bYYNPhEj9qDX8SLmnxLVT9G1b8J5w6-mQGKY,19545 +apprise/plugins/NotifyMSG91.py,sha256=P7JPyT1xmucnaEeCZPf_6aJfe1gS_STYYwEM7hJ7QBw,12677 +apprise/plugins/NotifyMSTeams.py,sha256=dFH575hoLL3zRddbBKfozlYjxvPJGbj3BKvfJSIkvD0,22976 +apprise/plugins/NotifyMacOSX.py,sha256=y2fGpSZXomFiNwKbWImrXQUMVM4JR4uPCnsWpnxQrFA,8271 +apprise/plugins/NotifyMailgun.py,sha256=FNS_QLOQWMo62yVO-mMZkpiXudUtSdbHOjfSrLC4oIo,25409 +apprise/plugins/NotifyMastodon.py,sha256=2ovjQIOOITHH8lOinC8QCFCJN2QA8foIM2pjdknbblc,35277 +apprise/plugins/NotifyMatrix.py,sha256=I8kdaZUZS-drew0JExBbChQVe7Ib4EwAjQd0xE30XT0,50049 +apprise/plugins/NotifyMattermost.py,sha256=JgEc-wC-43FBMItezDJ62zv1Nc9ROFjDiwD_8bt8rgM,12722 +apprise/plugins/NotifyMessageBird.py,sha256=EUPwhs1PHiPZpluIrLiNKQMUPcdlKnx1sdnllCtN_Ns,12248 +apprise/plugins/NotifyMisskey.py,sha256=zYZkBKv0p3jJpm_HLDBugUgKeGb0qpLoPqy0ffwwxVg,9600 +apprise/plugins/NotifyNextcloud.py,sha256=M3EyvUzBMHbTKU3gxW_7fPA6vmQUF5x8GTMZQ78sWCA,12759 +apprise/plugins/NotifyNextcloudTalk.py,sha256=dLl_g7Knq5PVcadbzDuQsxbGHTZlC4r-pQC8wzYnmAo,11011 +apprise/plugins/NotifyNotica.py,sha256=yHmk8HiNFjzoI4Gewo_nBRrx9liEmhT95k1d10wqhYg,12990 +apprise/plugins/NotifyNotifiarr.py,sha256=ADwLJO9eenfLkNa09tXMGSBTM4c3zTY0SEePvyB8WYA,15857 +apprise/plugins/NotifyNotifico.py,sha256=Qe9jMN_M3GL4XlYIWkAf-w_Hf65g9Hde4bVuytGhUW4,12035 +apprise/plugins/NotifyNtfy.py,sha256=AtJt2zH35mMQTwRDxKia93NPy6-4rtixplP53zIYV2M,27979 +apprise/plugins/NotifyOffice365.py,sha256=8TxsVsdbUghmNj0kceMlmoZzTOKQTgn3priI8JuRuHE,25190 +apprise/plugins/NotifyOneSignal.py,sha256=gsw7ckW7xLiJDRUb7eJHNe_4bvdBXmt6_YsB1u_ghjw,18153 +apprise/plugins/NotifyOpsgenie.py,sha256=zJWpknjoHq35Iv9w88ucR62odaeIN3nrGFPtYnhDdjA,20515 +apprise/plugins/NotifyPagerDuty.py,sha256=lu6oNdygrs6UezYm6xgiQxQDeDz8EVUtfP-xsArRvyw,17874 +apprise/plugins/NotifyPagerTree.py,sha256=mPl6ejdelNlWUWGVs46kZT0VV4uFZoeCdcv4VJ_f_XQ,13849 +apprise/plugins/NotifyParsePlatform.py,sha256=6oFOTpu-HMhesaYXRBvu5oaESYlFrKBNYTHE-ItCBRk,10291 +apprise/plugins/NotifyPopcornNotify.py,sha256=kRstzG0tWBdxSRfn2RN2J7FhvIj2qYWlwUyLxxZCbPc,10587 +apprise/plugins/NotifyProwl.py,sha256=EGOdmiZq8CFbjxTtWWKLQEdYiSvr4czZfE_8aCMEokw,9782 +apprise/plugins/NotifyPushBullet.py,sha256=JVd2GQH-DWmPaKjuGBpsE6DXNCcZEUDH7tA5zbM1qEU,15372 +apprise/plugins/NotifyPushDeer.py,sha256=cG1UFG06PfzbmI1RxtrMqmfaHK_Ojk_W-QMEdtkEuUI,6922 +apprise/plugins/NotifyPushMe.py,sha256=ioRzeXbd2X5miTd3h3m7AwCqkIIfbXNm4PjYk0OOXZ0,7134 +apprise/plugins/NotifyPushSafer.py,sha256=hIcYHwUZapmC-VDvaO_UkDY9RSPTxHgF7m2FL-6JBZw,26756 +apprise/plugins/NotifyPushed.py,sha256=NqLMXD9gvihXLfLUtCcMfz5oUAhPM7sKXECqKgD0v-U,12270 +apprise/plugins/NotifyPushjet.py,sha256=8qWpIqM4dKWjO-BjOrRJXZYtvtJBt_mikdBWRxfibnE,8952 +apprise/plugins/NotifyPushover.py,sha256=MJDquV4zl1cNrGZOC55hLlt6lOb6625WeUcgS5ceCbk,21213 +apprise/plugins/NotifyPushy.py,sha256=mmWcnu905Fvc8ihYXvZ7lVYErGZH5Q-GbBNS20v5r48,12496 +apprise/plugins/NotifyRSyslog.py,sha256=W42LT90X65-pNoU7KdhdX1PBcmsz9RyV376CDa_H3CI,11982 +apprise/plugins/NotifyReddit.py,sha256=E78OSyDQfUalBEcg71sdMsNBOwdj7cVBnELrhrZEAXY,25785 +apprise/plugins/NotifyRevolt.py,sha256=DRA9Xylwl6leVjVFuJcP4L1cG49CIBtnQdxh4BKnAZ4,14500 +apprise/plugins/NotifyRocketChat.py,sha256=Cb_nasX0-G3FoPMYvNk55RJ-tHuXUCTLUn2wTSi4IcI,25738 +apprise/plugins/NotifyRyver.py,sha256=yhHPMLGeJtcHwBKSPPk0OBfp59DgTvXio1R59JhrJu4,11823 +apprise/plugins/NotifySES.py,sha256=wtRmpAZkS5mQma6sdiaPT6U1xcgoj77CB9mNFvSEAw8,33545 +apprise/plugins/NotifySMSEagle.py,sha256=voFNqOewD9OC1eRctD0YdUB_ZSWsb06rjUwBfCcxPYA,24161 +apprise/plugins/NotifySMSManager.py,sha256=DbVc35qLfYkNL7eq43_rPD6k-PELL9apf3S09S6qvDA,14125 +apprise/plugins/NotifySMTP2Go.py,sha256=foQ7aMMmNc5Oree8YwrxZJgMnF6yVMFAfqShm_nLbx0,19711 +apprise/plugins/NotifySNS.py,sha256=ZEBWf0ZJ9w_ftzUikKEvQWJ2fkxrUbrLhPmTRD2DvRQ,24159 +apprise/plugins/NotifySendGrid.py,sha256=IBdYmZcthkvGCz1N_Fs8vDnImtHug6LpuKv1mWT_Cdo,16213 +apprise/plugins/NotifyServerChan.py,sha256=WsrClO9f0xi-KpnLZGTUHV7PxeU3l1D875gvMaZRG_M,5779 +apprise/plugins/NotifySignalAPI.py,sha256=OwJ7qjJ-ZJyS8GS-dBWAtgizHMnGegg76GuwFobyWkw,16733 +apprise/plugins/NotifySimplePush.py,sha256=dUC6O8IGuUIAz5z6_H7A7jdv5Gj1plytNm5QyKnHAYg,10876 +apprise/plugins/NotifySinch.py,sha256=tmHLwQa9lWHEI3EcRfigl4i7JU46A6gKAi_GbY0PrX4,16813 +apprise/plugins/NotifySlack.py,sha256=3VdjruU5FPr3jT_s3axwRJKMcBYXP0lvJnyuKedIlcE,42521 +apprise/plugins/NotifySparkPost.py,sha256=6dRTwnYU50Lvmp6AlwCyePe0TMbVEXaSwNeGkg__EYo,27878 +apprise/plugins/NotifyStreamlabs.py,sha256=lx3N8T2ufUWFYIZ-kU_rOv50YyGWBqLSCKk7xim2_Io,16023 +apprise/plugins/NotifySynology.py,sha256=_jTqfgWeOuSi_I8geMOraHBVFtDkvm9mempzymrmeAo,11105 +apprise/plugins/NotifySyslog.py,sha256=J9Kain2bb-PDNiG5Ydb0q678cYjNE_NjZFqMG9oEXM0,10617 +apprise/plugins/NotifyTechulusPush.py,sha256=m43_Qj1scPcgCRX5Dr2Ul7nxMbaiVxNzm_HRuNmfgoA,7253 +apprise/plugins/NotifyTelegram.py,sha256=XE7PC9LRzcrfE2bpLKyor5lO_7B9LS4Xw1UlUmA4a2A,37187 +apprise/plugins/NotifyThreema.py,sha256=C_C3j0fJWgeF2uB7ceJFXOdC6Lt0TFBInFMs5Xlg04M,11885 +apprise/plugins/NotifyTwilio.py,sha256=WCo8eTI9OF1rtg3ueHHRDXt4Lp45eZ6h3IdTZVf5HM8,15976 +apprise/plugins/NotifyTwist.py,sha256=nZA73CYVe-p0tkVMy5q3vFRyflLM4yjUo9LECvkUwgc,28841 +apprise/plugins/NotifyTwitter.py,sha256=qML0jlBkLZMHrkKRxBpVUnBwAz8MWGYyI3cvwi-hrgM,30152 +apprise/plugins/NotifyVoipms.py,sha256=msy_D32YhP8OP4_Mj_L3OYd4iablqQETN-DvilGZeVQ,12552 +apprise/plugins/NotifyVonage.py,sha256=xmzZgobFaGA_whpQ5fDuG2poUrK9W4T77yP7dusHcSo,13431 +apprise/plugins/NotifyWeComBot.py,sha256=5lkhXDgyJ1edzknemKsO1sJVv7miR9F_7xI40Ag7ICI,8789 +apprise/plugins/NotifyWebexTeams.py,sha256=gbbRlHiPuOvUIZexE5m2QNd1dN_5_x0OdT5m6NSrcso,9164 +apprise/plugins/NotifyWhatsApp.py,sha256=PtzW0ue3d2wZ8Pva_LG29jUcpRRP03TFxO5SME_8Juo,19924 +apprise/plugins/NotifyWindows.py,sha256=QgWJfJF8AE6RWr-L81YYVZNWrnImK9Qr3B991HWanqU,8563 +apprise/plugins/NotifyXBMC.py,sha256=5hDuOTP3Kwtp4NEMaokNjWyEKEkQcN_fSx-cUPJvhaU,12096 +apprise/plugins/NotifyXML.py,sha256=WJnmdvXseuTRgioVMRqpR8a09cDfTpPTfuFlTnT_TfI,16973 +apprise/plugins/NotifyZulip.py,sha256=M8cSL7nZvtBYyTX6045g34tyn2vyybltgD1CoI4Xa7A,13968 +apprise/plugins/__init__.py,sha256=jTfLmW47kZC_Wf5eFFta2NoD2J-7_E7JaPrrVMIECkU,18725 +apprise/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 +apprise/utils.py,sha256=SjRU2tb1UsVnTCTXPUyXVz3WpRbDWwAHH-d3ll38EHY,53185 diff --git a/libs/apprise-1.8.0.dist-info/REQUESTED b/libs/apprise-1.7.6.dist-info/REQUESTED index e69de29bb..e69de29bb 100644 --- a/libs/apprise-1.8.0.dist-info/REQUESTED +++ b/libs/apprise-1.7.6.dist-info/REQUESTED diff --git a/libs/apprise-1.8.0.dist-info/WHEEL b/libs/apprise-1.7.6.dist-info/WHEEL index ba48cbcf9..ba48cbcf9 100644 --- a/libs/apprise-1.8.0.dist-info/WHEEL +++ b/libs/apprise-1.7.6.dist-info/WHEEL diff --git a/libs/apprise-1.8.0.dist-info/entry_points.txt b/libs/apprise-1.7.6.dist-info/entry_points.txt index 7f20ac9a3..7f20ac9a3 100644 --- a/libs/apprise-1.8.0.dist-info/entry_points.txt +++ b/libs/apprise-1.7.6.dist-info/entry_points.txt diff --git a/libs/apprise-1.8.0.dist-info/top_level.txt b/libs/apprise-1.7.6.dist-info/top_level.txt index 9f8c12a76..9f8c12a76 100644 --- a/libs/apprise-1.8.0.dist-info/top_level.txt +++ b/libs/apprise-1.7.6.dist-info/top_level.txt diff --git a/libs/apprise-1.8.0.dist-info/RECORD b/libs/apprise-1.8.0.dist-info/RECORD deleted file mode 100644 index bcfa733bc..000000000 --- a/libs/apprise-1.8.0.dist-info/RECORD +++ /dev/null @@ -1,183 +0,0 @@ -../../bin/apprise,sha256=ZJ-e4qqxNLtdW_DAvpuPPX5iROIiQd8I6nvg7vtAv-g,233 -apprise-1.8.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 -apprise-1.8.0.dist-info/LICENSE,sha256=gt7qKBxRhVcdmXCYVtrWP6DtYjD0DzONet600dkU994,1343 -apprise-1.8.0.dist-info/METADATA,sha256=if2D6aZrIVQZAe9BKWyqKoKH89ZGnYOTvXGRfqcSf_g,44823 -apprise-1.8.0.dist-info/RECORD,, -apprise-1.8.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -apprise-1.8.0.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92 -apprise-1.8.0.dist-info/entry_points.txt,sha256=71YypBuNdjAKiaLsiMG40HEfLHxkU4Mi7o_S0s0d8wI,45 -apprise-1.8.0.dist-info/top_level.txt,sha256=JrCRn-_rXw5LMKXkIgMSE4E0t1Ks9TYrBH54Pflwjkk,8 -apprise/__init__.py,sha256=nBy2lkwvLxW1QTMEagOZZnM5AQWLM6CRUYt-Gr03X94,3388 -apprise/apprise.py,sha256=JWSqg5pYJOydubQyaIjR9gIPhb2okcrGe2mQ_NhPNS0,32837 -apprise/apprise.pyi,sha256=_4TBKvT-QVj3s6PuTh3YX-BbQMeJTdBGdVpubLMY4_k,2203 -apprise/apprise_attachment.py,sha256=eYVnNWTWQzlzKPDOgMCzGvVtXXDL6noMwtRKwwvyL8Q,12528 -apprise/apprise_attachment.pyi,sha256=R9-0dVqWpeaFrVpcREwPhGy3qHWztG5jEjYIOsbE5dM,1145 -apprise/apprise_config.py,sha256=qlNtd-OkldrY9rE9vT67fVPHINx9fkkbwQinhbBjQ_I,16896 -apprise/apprise_config.pyi,sha256=_mUlCnncqAq8sL01WxQTgZjnb2ic9kZXvtqZmVl-fc8,1568 -apprise/asset.py,sha256=ICXIjCi12Xq8E-WIR4mrVC7KcpPRiJDlKG8cHqoCll0,11643 -apprise/asset.pyi,sha256=NYLXXYbScgRkspP27XGpRRM_uliPu1OCdWdZBPPvLng,979 -apprise/assets/NotifyXML-1.0.xsd,sha256=292qQ_IUl5EWDhPyzm9UTT0C2rVvJkyGar8jiODkJs8,986 -apprise/assets/NotifyXML-1.1.xsd,sha256=bjR3CGG4AEXoJjYkGCbDttKHSkPP1FlIWO02E7G59g4,1758 -apprise/assets/themes/default/apprise-failure-128x128.ico,sha256=Mt0ptfHJaN3Wsv5UCNDn9_3lyEDHxVDv1JdaDEI_xCA,67646 -apprise/assets/themes/default/apprise-failure-128x128.png,sha256=66ps8TDPxVH3g9PlObJqF-0x952CjnqQyN3zvpRcOT8,16135 -apprise/assets/themes/default/apprise-failure-256x256.png,sha256=bQBsKKCsKfR9EqgYOZrcVcVa5y8qG58PN2mEqO5eNRI,41931 -apprise/assets/themes/default/apprise-failure-32x32.png,sha256=vH0pZffIDCvkejpr3fJHGXW__8Yc3R_p0bacX6t6l18,2437 -apprise/assets/themes/default/apprise-failure-72x72.png,sha256=EP5A8DHRDr9srgupFSwOoyQ308bNJ8aL192J_L4K-ec,7600 -apprise/assets/themes/default/apprise-info-128x128.ico,sha256=F5_CirmXueRCRI5Z_Crf6TS6jVIXTJlRD83zw1oJ66g,67646 -apprise/assets/themes/default/apprise-info-128x128.png,sha256=bBqRZAgQey-gkmJrnFhPbzjILSrljE59mRkgj3raMQo,16671 -apprise/assets/themes/default/apprise-info-256x256.png,sha256=B5r_O4d9MHCmSWZwfbqQgZSp-ZetTdiBSwKcMTF1aFA,43331 -apprise/assets/themes/default/apprise-info-32x32.png,sha256=lt3NZ95TzkiCNVNlurrB2fE2nriMa1wftl7nrNXmb6c,2485 -apprise/assets/themes/default/apprise-info-72x72.png,sha256=kDnsZpqNUZGqs9t1ECUup7FOfXUIL-rupnQCYJp9So4,7875 -apprise/assets/themes/default/apprise-logo.png,sha256=85ttALudKkLmiqilJT7mUQLUXRFmM1AK89rnwLm313s,160907 -apprise/assets/themes/default/apprise-success-128x128.ico,sha256=uCopPwdQjxgfohKazHaDzYs9y4oiaOpL048PYC6WRlg,67646 -apprise/assets/themes/default/apprise-success-128x128.png,sha256=nvDuU_QqhGlw6cMtdj7Mv-gPgqCEx-0DaaXn1KBLVYg,17446 -apprise/assets/themes/default/apprise-success-256x256.png,sha256=vXfKuxY3n0eeXHKdb9hTxICxOEn7HjAQ4IZpX0HSLzc,48729 -apprise/assets/themes/default/apprise-success-32x32.png,sha256=Jg9pFJh3YPI-LiPBebyJ7Z4Vt7BRecaE8AsRjQVIkME,2471 -apprise/assets/themes/default/apprise-success-72x72.png,sha256=FQbgvIhqKOhEK0yvrhaSpai0R7hrkTt_-GaC2KUgCCk,7858 -apprise/assets/themes/default/apprise-warning-128x128.ico,sha256=6XaQPOx0oWK_xbhr4Yhb7qNazCWwSs9lk2SYR2MHTrQ,67646 -apprise/assets/themes/default/apprise-warning-128x128.png,sha256=pf5c4Ph7jWH7gf39dJoieSj8TzAsY3TXI-sGISGVIW4,16784 -apprise/assets/themes/default/apprise-warning-256x256.png,sha256=SY-xlaiXaj420iEYKC2_fJxU-yj2SuaQg6xfPNi83bw,43708 -apprise/assets/themes/default/apprise-warning-32x32.png,sha256=97R2ywNvcwczhBoWEIgajVtWjgT8fLs4FCCz4wu0dwc,2472 -apprise/assets/themes/default/apprise-warning-72x72.png,sha256=L8moEInkO_OLxoOcuvN7rmrGZo64iJeH20o-24MQghE,7913 -apprise/attachment/__init__.py,sha256=9jSiGEbLllS-0Vbpgxo4MCpZfIJ-saezWWgQ1PofZ9I,1678 -apprise/attachment/base.py,sha256=phcM6C281j2eoEhtoH5FY0m5s_JvWiEm1AK9z9gyi0w,13692 -apprise/attachment/base.pyi,sha256=w0XG_QKauiMLJ7eQ4S57IiLIURZHm_Snw7l6-ih9GP8,961 -apprise/attachment/file.py,sha256=d9gpsunNIot-6h6w-WQmwWgFiCv7YLqk42zJr4LLqE4,4752 -apprise/attachment/http.py,sha256=C0L9zKmHi60wyzEZN-OJCF7LVoY-MMHYMqhXspFlLdU,13748 -apprise/cli.py,sha256=h-pWSQPqQficH6J-OEp3MTGydWyt6vMYnDZvHCeAt4Y,20697 -apprise/common.py,sha256=I6wfrndggCL7l7KAl7Cm4uwAX9n0l3SN4-BVvTE0L0M,5593 -apprise/common.pyi,sha256=luF3QRiClDCk8Z23rI6FCGYsVmodOt_JYfYyzGogdNM,447 -apprise/config/__init__.py,sha256=oDxdoqG2NEYu_bbpLsLaM3L9WKY3gNn5gjIwb2h3LU4,1679 -apprise/config/base.py,sha256=iWgrBk4-wm_SHtNbe7dCQOYnbkI3oKWP_b60qwjGSoU,53173 -apprise/config/base.pyi,sha256=cngfobwH6v2vxYbQrObDi5Z-t5wcquWF-wR0kBCr3Eg,54 -apprise/config/file.py,sha256=MB_H2X5lJZS-XAOahkMb3IsD2rgVebFjiEF76goITEg,6125 -apprise/config/http.py,sha256=CjQtv_OQJykMxD4ssiwbFI3P8CeQiPdYV_ZIiL_XqMw,9440 -apprise/config/memory.py,sha256=8VICU-WLux8KnW6i9sf9fgmns90J-MfVYI3pvTiyTno,2816 -apprise/conversion.py,sha256=fSn-pTE6-vNt9qVQCKib_NTMhZnCH88FoMt14x6co1M,6273 -apprise/decorators/__init__.py,sha256=e_PDAm0kQNzwDPx-NJZLPfLMd2VAABvNZtxx_iDviRM,1487 -apprise/decorators/base.py,sha256=KnRzhrTOxQxwm4KuJxfCfaYfX0MrFbqWTvXY1XuiNck,8019 -apprise/decorators/notify.py,sha256=FzIa7m-G5KnVVa__rjyn990zt2lqE8sdHW-XY79lbAU,5097 -apprise/emojis.py,sha256=ONF0t8dY9f2XlEkLUG79-ybKVAj2GqbPj2-Be97vAoI,87738 -apprise/i18n/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -apprise/i18n/en/LC_MESSAGES/apprise.mo,sha256=w-KW6RXYYMr14raaIvJzbop8tXU4qrsz50zm8rcCo3U,3959 -apprise/locale.py,sha256=4uSr4Nj_rz6ISMMAfRVRk58wZVLKOofJgk2x0_E8NkQ,8994 -apprise/logger.py,sha256=131hqhed8cUj9x_mfXDEvwA2YbcYDFAYiWVK1HgxRVY,6921 -apprise/manager.py,sha256=_LiMG1Upk6h6GcxOw3GjsPtVT8ZJLhLlQkC_xL_dm6A,27218 -apprise/manager_attachment.py,sha256=EkrcKtKjbxTXXyDaKyiu4XSfDu9wKFSdJD7TOTpyOUc,2200 -apprise/manager_config.py,sha256=sCIOlBTH13bQ1cuhQVpUq2vyKWBArA8YRyPnXIB1iWQ,2205 -apprise/manager_plugins.py,sha256=Xbg5-xr-06zMIDoWviz-zKcbzusHj0iBBMchKPpUOkg,2211 -apprise/plugins/__init__.py,sha256=Hm-vt-Xtxir5mgOdehqlGLhIlc45LA31zjqV42uRnB8,18701 -apprise/plugins/apprise_api.py,sha256=D93eUOlEQ1xPZYdagnEtIxkSuzZ4b9XreuhntQW97F8,16638 -apprise/plugins/aprs.py,sha256=fyzhdsESVwsqHMbfjnlRuGuAqAz2Pk_-MrmiMihs8qY,25506 -apprise/plugins/bark.py,sha256=oSz7Nr7vxnXxqA5dRaO6ze2IljkgEQavUPs-MUUDSX4,15681 -apprise/plugins/base.py,sha256=720L5OyMMLqlM3UdYSNMpA3m0rCudzGP3HwKgu73Ons,30350 -apprise/plugins/base.pyi,sha256=aKlZXRYUgG8lz_ZgGkYYJ_GKhuf18youTmMU-FlG7z8,21 -apprise/plugins/boxcar.py,sha256=8ImhsSsOK9o3eiYp4dZ6fO6p6AeI-jOPWoFJ8qvRAxY,12850 -apprise/plugins/bulksms.py,sha256=XuP8X4dL1wWQU7TkLYWPWRAro7TymnF7PlF2ESe7o0o,15988 -apprise/plugins/bulkvs.py,sha256=sLpiKbHs63Yu0UjMc9erW1VSgLceuu5wvPie5iyl03k,13273 -apprise/plugins/burstsms.py,sha256=7YmuhElVvT-0FIxMFBILHjo6Fir0J4qHTuqj8KfWBaI,15533 -apprise/plugins/chantify.py,sha256=hOvrmhH051Us28_kv0mKkuaJ2BN_8pSsslF8eMCgp-Q,6660 -apprise/plugins/clicksend.py,sha256=kKUJgk9FcTcfXqcIV57uMz0VxBtSQqkpxocRkgn0-3Q,11408 -apprise/plugins/custom_form.py,sha256=fMYwSQyEa_u8IEw5QSylDn-y32FnmymkL5ng-tGxDoc,17888 -apprise/plugins/custom_json.py,sha256=UCXaegE1nD8UrKlFrSKQbxfbcrX1BHUvZwBZY6a_aJc,13834 -apprise/plugins/custom_xml.py,sha256=lrPCRngPz8_oV2A8ZfiIY56BRQc1iv0PN0--2LOlxpA,16956 -apprise/plugins/d7networks.py,sha256=2o_wDgoak_S0sUJJa7HPtu0PPKLVmIOrq1rV9llOnHY,15030 -apprise/plugins/dapnet.py,sha256=fclGE69ggMejgpyvBpJqTwFNF3g2w7qpFySOMcc9vi0,13607 -apprise/plugins/dbus.py,sha256=lvHLmOkJYJAr4TjrigdIgP5bBlQXHrNCDR0k80LNsks,14366 -apprise/plugins/dingtalk.py,sha256=1twAGYUZzjhQepg2zhaR7u8QJuWvM5WymkbPQSUKBck,11992 -apprise/plugins/discord.py,sha256=kdR09bKU80-AosBIrTkMSxoOkAUHMXKwSr1P3H-M_f4,26053 -apprise/plugins/email.py,sha256=pVVWhEpT9Zi7qyUvpI2UxbjxkXYe6FoJj8E0NTw4P98,39912 -apprise/plugins/emby.py,sha256=HWYxlgHE99yAPKii4IE1XQQ-B1HViklWOkefjmq6SW4,24022 -apprise/plugins/enigma2.py,sha256=40Uo0m1JtLUcwRnfqKqdX_8ZR1-SvPfJ5470uijgdfw,11481 -apprise/plugins/fcm/__init__.py,sha256=eTjX-ahPHrPddX0v_Ix77qEr2G4NQ7reClCMzX3Nxwk,21657 -apprise/plugins/fcm/color.py,sha256=rQxVRL_CcRlgnNTQXkjB1Bfs0Xc933zOB1tURSdhi7Y,4585 -apprise/plugins/fcm/common.py,sha256=978uBUoNdtopCtylipGiKQdsQ8FTONxkFBp7uJMZHc8,1718 -apprise/plugins/fcm/oauth.py,sha256=Vvbd0-rd5BPIjAneG3rILU153JIzfSZ0kaDov6hm96M,11197 -apprise/plugins/fcm/priority.py,sha256=0WuRW1y1HVnybgjlTeCZPHzt7j8SwWnC7faNcjioAOc,8163 -apprise/plugins/feishu.py,sha256=buGBg1YlcwHjwUGzUfju4cdYbmEOFl3EHU_NzEBqtlM,7253 -apprise/plugins/flock.py,sha256=_bhH-ub0LbuU7k2p1ZwUPZ-TbC3kpD48GKNtLebUpoM,12735 -apprise/plugins/freemobile.py,sha256=NZf553UWkl1FVEVyWQKJN3ZD6opYSv3I-L6DRaKbiCw,6679 -apprise/plugins/gnome.py,sha256=UYtaiMKxILhTdsxe4aeLaJwjV6Af-8VhjVR3W3CyPPk,9046 -apprise/plugins/google_chat.py,sha256=f7F4gPxwwkmhDBlXMHzYoHRhPX3w8tyD7OimGBjmNxg,12609 -apprise/plugins/gotify.py,sha256=ISzmuQ4-Wd46OlaxGSAZBbWDTq9mHBUYO0R-7tAX_zc,10538 -apprise/plugins/growl.py,sha256=mlpN1QXGlEf2BA3BORnvkyT0oiTsWBev2y5gzpOm9r0,14006 -apprise/plugins/guilded.py,sha256=lhE6gK7laQNYEubD9lBGRemFK-IHis_u2tNekbUoGgM,3707 -apprise/plugins/home_assistant.py,sha256=Wstut0QaQL2dE66kH8MOqMANayhvGOq7CuxVz9O-T60,10722 -apprise/plugins/httpsms.py,sha256=2TtIlAFa4cjXwpMyrjfieCFHgaZl4H_YT6IoPIMDOcg,11123 -apprise/plugins/ifttt.py,sha256=ZHtu7pW9I0aHVEC4DshKi6XZCwqQ0A_XGLyFJujwdKY,13412 -apprise/plugins/join.py,sha256=mRop7thH24kQmvIEvtnh0HT0VyBrUXm2sS-P69c0iFE,13568 -apprise/plugins/kavenegar.py,sha256=1vdms7QBaLcTiLXeQGfprMU5rw9wgImRLtALIb78-ro,12607 -apprise/plugins/kumulos.py,sha256=6M_way1Qi5bELm8Csay86AVtVhzmRyv5hfxGrFvyzN4,8201 -apprise/plugins/lametric.py,sha256=JR0XjdxkEphT4VKvKfElNxpAoOpXZCb-40b2SJQP9XA,37521 -apprise/plugins/line.py,sha256=-xONdu4LFkS3sGgZeEGiPGbBIvBEd20lCbyxKLhQwAg,10659 -apprise/plugins/lunasea.py,sha256=WxJ-RIbFDiS1-5HjCs8XVdNv7nt2EHimsXGCDaK0sC0,14442 -apprise/plugins/macosx.py,sha256=4vIXz1xlsq_xlEyeu_rEvzJQZYcWq7pVmSn5VjF_dCY,8258 -apprise/plugins/mailgun.py,sha256=ad3jzdrbdgwWmOAAu4e_inLEAo-cii4z0OnIJQXoSIA,25396 -apprise/plugins/mastodon.py,sha256=X8CBxnuWORLo9JEOLCJcSafFNVrcEd778R38doyNWUo,35254 -apprise/plugins/matrix.py,sha256=zJPTLFqRT6mofXFVi421_poF0Qm7KaWSgNXTBKq3YoI,50032 -apprise/plugins/mattermost.py,sha256=KfHfqt3LO4XuMsY-qNV-i_OAAamF-35RgjHzxuq2deM,12709 -apprise/plugins/messagebird.py,sha256=3TJ_31Vc1liwQKKKwEiO_rP5e4jP4QkcU_wHyRGtf5Q,12235 -apprise/plugins/misskey.py,sha256=E5UrDrVryb7zV2D_qJCPsCyvpynF4-22JqRVco6PcgM,9587 -apprise/plugins/mqtt.py,sha256=3LcRhT44o2QoSH5rJs23xRbi2vob-po5FAPnnEU_cgs,19528 -apprise/plugins/msg91.py,sha256=V3PwdCS5r-LbVHNNTFZGUHt7GPwQOHnQC0mx8G90wGQ,12664 -apprise/plugins/msteams.py,sha256=4maXBIQFEVfH-IVzZW6t4jirsozmKwF4ySPP5h20cTQ,22964 -apprise/plugins/nextcloud.py,sha256=iYmKGH-xZ4Kj3HvXA_krQody7LRqJKzMRu39Ivk1ve4,12742 -apprise/plugins/nextcloudtalk.py,sha256=TTK8qhy0VPjG0N1yFUBJWTieV-1DqT9Jux9D5PRiYAE,10994 -apprise/plugins/notica.py,sha256=MzryA8x-dSt-oRk9g3dlTTrb1ul7mnbRNajbiwTx1Mc,12973 -apprise/plugins/notifiarr.py,sha256=ZI2mjXwKLWx7SXb6d3S-sk2JmCswJ23UTPj9jVNSN0U,15844 -apprise/plugins/notifico.py,sha256=IKkiXU8HdbRnEWzkQKPFo1g-ZnT8AIwFYer7jF2Yjac,12022 -apprise/plugins/ntfy.py,sha256=jOmPZETJByyNmYSzr-2F3k5jAXFVNldcd3wK-tQRpyE,27956 -apprise/plugins/office365.py,sha256=bCg53GDruS7A3_PQNCjiSERhfub_FHTOVCsRwjgbjXU,25173 -apprise/plugins/one_signal.py,sha256=0ljKuz6Wyn5K8Rxp3BT8aARzHWYff0q2TWA5f-ZLJSA,18140 -apprise/plugins/opsgenie.py,sha256=wWUREzEn8FDQmmVGhmTlN7kxsYlzNj1tK3wA5t8UbCA,20502 -apprise/plugins/pagerduty.py,sha256=1vQ2rfbDUKnM0XdkVMrvTnWIPK7lTxrm-Nslt3LW5Ng,17857 -apprise/plugins/pagertree.py,sha256=uhZL2SxIJr0cguMGhJP_RIJxJZLd86uoAcMhHsBOKm8,13836 -apprise/plugins/parseplatform.py,sha256=G99l6AnHZtaw11y7oBBVVvgdg7lSM8gWFm4tAWhJ8d4,10278 -apprise/plugins/popcorn_notify.py,sha256=ppOqxPrZrOPa-TFicO3Lo_jgwOOPCNEXMgmEo10DAZA,10574 -apprise/plugins/prowl.py,sha256=fYsv6s8xA6OC0yFajgLf3jgL6IwiaOTZaJKisW4eNyw,9769 -apprise/plugins/pushbullet.py,sha256=g-7_Y0N4x-a8YE2gqDqW5OIi74YY7rja_jQ8WVKc4FI,15353 -apprise/plugins/pushdeer.py,sha256=8StOcyK1jlx3pc_CnmFUSqdjfvuv0qa6bf--FHP2_KE,6909 -apprise/plugins/pushed.py,sha256=pm3T7JGExjYeqVWQVN8J8JHkn1XBMfix_sdmr1ItXY8,12253 -apprise/plugins/pushjet.py,sha256=Xk0hzx6l5bNHtGgL0M_znRY5JRPUJf4_PhleCyFbe0I,8935 -apprise/plugins/pushme.py,sha256=EswSmup0uL3QmANeJPDhDYyyeBwSrTnqdjMlfvWFnFA,7121 -apprise/plugins/pushover.py,sha256=I6u9C1SVAEVnsLUySFq5UyHi4cQQtew5za4r86aTK10,21194 -apprise/plugins/pushsafer.py,sha256=aGQ1ibggAWGpcBwpD4oQQYMUcKVcV_xsTlc5_wdjssY,26743 -apprise/plugins/pushy.py,sha256=Ai1tKhcus5IuwvhQgtaj--RMPahgtpleWrBbr_ZQJfM,12483 -apprise/plugins/reddit.py,sha256=z54HpGeJxkyS_LH38nqPa6rqW8mrJqSEGTNOh4Cf-78,25768 -apprise/plugins/revolt.py,sha256=kVrJvTb7mBFXFZd9GIVrX2jVIvaUc5D5via48nOXNSA,14487 -apprise/plugins/rocketchat.py,sha256=oSaFzQ7XjOzjhPIPhdS7r_LGa1IJXV6VK_3xNH9Gq9M,25721 -apprise/plugins/rsyslog.py,sha256=9NTg4sYNbbAzw_MnN51YKxVQpb2o6WZUMyKpRtgoupM,11969 -apprise/plugins/ryver.py,sha256=OM_AG-oiRnNYIua-70Wp8lUpZzIkZ7erIiDE6Fd4Q6s,11810 -apprise/plugins/sendgrid.py,sha256=PGSdbkhERhFSZZN2j7km6mdojdlo7sFxs28lmOeDpgQ,16200 -apprise/plugins/serverchan.py,sha256=fcnuindQTPaKZ5gbS-nAxvL31YqkEF-vi4w8g_h7dKc,5766 -apprise/plugins/ses.py,sha256=CF17VZOEZybwdgqqu00qSoombTP5z0M8P_XxPmyc2f4,33528 -apprise/plugins/signal_api.py,sha256=PeCB_1YJc4lZwDdArTgzHP-Vhe9iwCNIYe4WVW_HgUo,16716 -apprise/plugins/simplepush.py,sha256=bL0WiRUCp39ST9X_0FNAFJJ1BFtd1t5OD_JTRneUGFY,10859 -apprise/plugins/sinch.py,sha256=0-z_cNIWMJu4kdTca-6B3raAIRV-PG1E7fUtbxUDECo,16796 -apprise/plugins/slack.py,sha256=tLbJsr97Ddp8bq1ozSEp1ssLsh913uC0Y24Xm3TN4Bo,42508 -apprise/plugins/smseagle.py,sha256=WbULwfwnUEkPw_z-2cVp2TzrupS7fkPfcQgq779nG8k,24144 -apprise/plugins/smsmanager.py,sha256=aSSZcvpWjKEdDg-XPyD-9fTkaQ0FodvuuO7Hqg7N6Tk,14112 -apprise/plugins/smtp2go.py,sha256=D3C4rWGCJ-oqaZH8JgoMEV_3BYHCCHMd6M7cG0piIvA,19698 -apprise/plugins/sns.py,sha256=dA58nElGwKKnVAr--rh1deIa9BNPbZElK6cb5G1o3g8,24142 -apprise/plugins/sparkpost.py,sha256=ZR4866e1DefqOuuu3z_vBhS8C5YX0sj1G9WEhdWFMEk,27865 -apprise/plugins/streamlabs.py,sha256=Pyrz2xY2rDo8rnTgu4L5t2u1EPrZWVcIP37k8pE2SaE,16010 -apprise/plugins/synology.py,sha256=-g-Cesx8g-nG10shjUAnYtyLpMoGfUNDcTIGfi2UXDE,11088 -apprise/plugins/syslog.py,sha256=sNKh0iSNc3ARuMIO13uwRirMHzW2VxxTRwyZ-0UYL60,10604 -apprise/plugins/techuluspush.py,sha256=HV1m72pRsC3IfVN66zWK9joslDJsKRKYD6_uRfqjnHk,7240 -apprise/plugins/telegram.py,sha256=zsmCUJU-5INyJ-RDUYIHUEXpwnwShOISWc4Xf7Epanw,37168 -apprise/plugins/threema.py,sha256=aWvFfN5Ve0DZCDX7qJVlY8INT_C-AWh-jnYnPTd7Ufs,11868 -apprise/plugins/twilio.py,sha256=0iYa2ug_2_Rbz4N_lGVihtSSxxFaK2f7Sdr9oK_Wg18,15959 -apprise/plugins/twist.py,sha256=hLqabH_STcZiAwRCgFHO7n5qYx7eZgoDw4xT5Zl_y6Q,28824 -apprise/plugins/twitter.py,sha256=ZTHLuZYowQ6qSw9ujsRB5oNp9F9PyutU-iAKAUOkmT8,30129 -apprise/plugins/voipms.py,sha256=NVbrsY7fJG0MbF6eId--0wo9cRC2kehhg8L0sASQs2w,12539 -apprise/plugins/vonage.py,sha256=PRFMdjn0ARqOEhL8kXySz8pi9vsApl2fh9mZyLVySgo,13414 -apprise/plugins/webexteams.py,sha256=DErDmHhvnHfsAyp4L3mF6vSfq0WabL1lbbl-jDUKYTw,9151 -apprise/plugins/wecombot.py,sha256=o5CO0IyHN7wAXhf7es08QiPCmUl8shZCgN_nyJxycVA,8776 -apprise/plugins/whatsapp.py,sha256=9KObQEvUOtOclnudKhNj7qRrJ0uii7dhfxgwzuMHKxY,19911 -apprise/plugins/windows.py,sha256=88bDJQBnuuA0u7_xoTC-1Ppxt4tz39UMZseRY3EX_FE,8550 -apprise/plugins/xbmc.py,sha256=2ssX2AItDUy5FJFDY9r_JI4u7qc0CLGvG-hW0KtgWag,12079 -apprise/plugins/zulip.py,sha256=PJMB8RmV_ddP5waNAQ0Z29cpIut1WFY31DLFeg8-Nao,13955 -apprise/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 -apprise/url.py,sha256=QEoqmWzapzXPwBXe85SdJaPWq7B4gcv4QCeJtndN4_E,29455 -apprise/url.pyi,sha256=WLaRREH7FzZ5x3-qkDkupojWGFC4uFwJ1EDt02lVs8c,520 -apprise/utils.py,sha256=Sy0pVslC8FDKh5RY8o6eVB-sPHFxBXFTdbhKSVf4UDM,53461 diff --git a/libs/apprise/Apprise.py b/libs/apprise/Apprise.py new file mode 100644 index 000000000..9a3e8dfc7 --- /dev/null +++ b/libs/apprise/Apprise.py @@ -0,0 +1,887 @@ +# -*- coding: utf-8 -*- +# BSD 2-Clause License +# +# Apprise - Push Notification Library. +# Copyright (c) 2024, Chris Caron <[email protected]> +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# 1. Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +import asyncio +import concurrent.futures as cf +import os +from itertools import chain +from . import common +from .conversion import convert_between +from .utils import is_exclusive_match +from .NotificationManager import NotificationManager +from .utils import parse_list +from .utils import parse_urls +from .utils import cwe312_url +from .emojis import apply_emojis +from .logger import logger +from .AppriseAsset import AppriseAsset +from .AppriseConfig import AppriseConfig +from .AppriseAttachment import AppriseAttachment +from .AppriseLocale import AppriseLocale +from .config.ConfigBase import ConfigBase +from .plugins.NotifyBase import NotifyBase + +from . import plugins +from . import __version__ + +# Grant access to our Notification Manager Singleton +N_MGR = NotificationManager() + + +class Apprise: + """ + Our Notification Manager + + """ + + def __init__(self, servers=None, asset=None, location=None, debug=False): + """ + Loads a set of server urls while applying the Asset() module to each + if specified. + + If no asset is provided, then the default asset is used. + + Optionally specify a global ContentLocation for a more strict means + of handling Attachments. + """ + + # Initialize a server list of URLs + self.servers = list() + + # Assigns an central asset object that will be later passed into each + # notification plugin. Assets contain information such as the local + # directory images can be found in. It can also identify remote + # URL paths that contain the images you want to present to the end + # user. If no asset is specified, then the default one is used. + self.asset = \ + asset if isinstance(asset, AppriseAsset) else AppriseAsset() + + if servers: + self.add(servers) + + # Initialize our locale object + self.locale = AppriseLocale() + + # Set our debug flag + self.debug = debug + + # Store our hosting location for optional strict rule handling + # of Attachments. Setting this to None removes any attachment + # restrictions. + self.location = location + + @staticmethod + def instantiate(url, asset=None, tag=None, suppress_exceptions=True): + """ + Returns the instance of a instantiated plugin based on the provided + Server URL. If the url fails to be parsed, then None is returned. + + The specified url can be either a string (the URL itself) or a + dictionary containing all of the components needed to istantiate + the notification service. If identifying a dictionary, at the bare + minimum, one must specify the schema. + + An example of a url dictionary object might look like: + { + schema: 'mailto', + host: 'google.com', + user: 'myuser', + password: 'mypassword', + } + + Alternatively the string is much easier to specify: + mailto://user:[email protected] + + The dictionary works well for people who are calling details() to + extract the components they need to build the URL manually. + """ + + # Initialize our result set + results = None + + # Prepare our Asset Object + asset = asset if isinstance(asset, AppriseAsset) else AppriseAsset() + + if isinstance(url, str): + # Acquire our url tokens + results = plugins.url_to_dict( + url, secure_logging=asset.secure_logging) + + if results is None: + # Failed to parse the server URL; detailed logging handled + # inside url_to_dict - nothing to report here. + return None + + elif isinstance(url, dict): + # We already have our result set + results = url + + if results.get('schema') not in N_MGR: + # schema is a mandatory dictionary item as it is the only way + # we can index into our loaded plugins + logger.error('Dictionary does not include a "schema" entry.') + logger.trace( + 'Invalid dictionary unpacked as:{}{}'.format( + os.linesep, os.linesep.join( + ['{}="{}"'.format(k, v) + for k, v in results.items()]))) + return None + + logger.trace( + 'Dictionary unpacked as:{}{}'.format( + os.linesep, os.linesep.join( + ['{}="{}"'.format(k, v) for k, v in results.items()]))) + + # Otherwise we handle the invalid input specified + else: + logger.error( + 'An invalid URL type (%s) was specified for instantiation', + type(url)) + return None + + if not N_MGR[results['schema']].enabled: + # + # First Plugin Enable Check (Pre Initialization) + # + + # Plugin has been disabled at a global level + logger.error( + '%s:// is disabled on this system.', results['schema']) + return None + + # Build a list of tags to associate with the newly added notifications + results['tag'] = set(parse_list(tag)) + + # Set our Asset Object + results['asset'] = asset + + if suppress_exceptions: + try: + # Attempt to create an instance of our plugin using the parsed + # URL information + plugin = N_MGR[results['schema']](**results) + + # Create log entry of loaded URL + logger.debug( + 'Loaded {} URL: {}'.format( + N_MGR[results['schema']].service_name, + plugin.url(privacy=asset.secure_logging))) + + except Exception: + # CWE-312 (Secure Logging) Handling + loggable_url = url if not asset.secure_logging \ + else cwe312_url(url) + + # the arguments are invalid or can not be used. + logger.error( + 'Could not load {} URL: {}'.format( + N_MGR[results['schema']].service_name, + loggable_url)) + return None + + else: + # Attempt to create an instance of our plugin using the parsed + # URL information but don't wrap it in a try catch + plugin = N_MGR[results['schema']](**results) + + if not plugin.enabled: + # + # Second Plugin Enable Check (Post Initialization) + # + + # Service/Plugin is disabled (on a more local level). This is a + # case where the plugin was initially enabled but then after the + # __init__() was called under the hood something pre-determined + # that it could no longer be used. + + # The only downside to doing it this way is services are + # initialized prior to returning the details() if 3rd party tools + # are polling what is available. These services that become + # disabled thereafter are shown initially that they can be used. + logger.error( + '%s:// has become disabled on this system.', results['schema']) + return None + + return plugin + + def add(self, servers, asset=None, tag=None): + """ + Adds one or more server URLs into our list. + + You can override the global asset if you wish by including it with the + server(s) that you add. + + The tag allows you to associate 1 or more tag values to the server(s) + being added. tagging a service allows you to exclusively access them + when calling the notify() function. + """ + + # Initialize our return status + return_status = True + + if asset is None: + # prepare default asset + asset = self.asset + + if isinstance(servers, str): + # build our server list + servers = parse_urls(servers) + if len(servers) == 0: + return False + + elif isinstance(servers, dict): + # no problem, we support kwargs, convert it to a list + servers = [servers] + + elif isinstance(servers, (ConfigBase, NotifyBase, AppriseConfig)): + # Go ahead and just add our plugin into our list + self.servers.append(servers) + return True + + elif not isinstance(servers, (tuple, set, list)): + logger.error( + "An invalid notification (type={}) was specified.".format( + type(servers))) + return False + + for _server in servers: + + if isinstance(_server, (ConfigBase, NotifyBase, AppriseConfig)): + # Go ahead and just add our plugin into our list + self.servers.append(_server) + continue + + elif not isinstance(_server, (str, dict)): + logger.error( + "An invalid notification (type={}) was specified.".format( + type(_server))) + return_status = False + continue + + # Instantiate ourselves an object, this function throws or + # returns None if it fails + instance = Apprise.instantiate(_server, asset=asset, tag=tag) + if not isinstance(instance, NotifyBase): + # No logging is required as instantiate() handles failure + # and/or success reasons for us + return_status = False + continue + + # Add our initialized plugin to our server listings + self.servers.append(instance) + + # Return our status + return return_status + + def clear(self): + """ + Empties our server list + + """ + self.servers[:] = [] + + def find(self, tag=common.MATCH_ALL_TAG, match_always=True): + """ + Returns a list of all servers matching against the tag specified. + + """ + + # Build our tag setup + # - top level entries are treated as an 'or' + # - second level (or more) entries are treated as 'and' + # + # examples: + # tag="tagA, tagB" = tagA or tagB + # tag=['tagA', 'tagB'] = tagA or tagB + # tag=[('tagA', 'tagC'), 'tagB'] = (tagA and tagC) or tagB + # tag=[('tagB', 'tagC')] = tagB and tagC + + # A match_always flag allows us to pick up on our 'any' keyword + # and notify these services under all circumstances + match_always = common.MATCH_ALWAYS_TAG if match_always else None + + # Iterate over our loaded plugins + for entry in self.servers: + + if isinstance(entry, (ConfigBase, AppriseConfig)): + # load our servers + servers = entry.servers() + + else: + servers = [entry, ] + + for server in servers: + # Apply our tag matching based on our defined logic + if is_exclusive_match( + logic=tag, data=server.tags, + match_all=common.MATCH_ALL_TAG, + match_always=match_always): + yield server + return + + def notify(self, body, title='', notify_type=common.NotifyType.INFO, + body_format=None, tag=common.MATCH_ALL_TAG, match_always=True, + attach=None, interpret_escapes=None): + """ + Send a notification to all the plugins previously loaded. + + If the body_format specified is NotifyFormat.MARKDOWN, it will + be converted to HTML if the Notification type expects this. + + if the tag is specified (either a string or a set/list/tuple + of strings), then only the notifications flagged with that + tagged value are notified. By default, all added services + are notified (tag=MATCH_ALL_TAG) + + This function returns True if all notifications were successfully + sent, False if even just one of them fails, and None if no + notifications were sent at all as a result of tag filtering and/or + simply having empty configuration files that were read. + + Attach can contain a list of attachment URLs. attach can also be + represented by an AttachBase() (or list of) object(s). This + identifies the products you wish to notify + + Set interpret_escapes to True if you want to pre-escape a string + such as turning a \n into an actual new line, etc. + """ + + try: + # Process arguments and build synchronous and asynchronous calls + # (this step can throw internal errors). + sequential_calls, parallel_calls = self._create_notify_calls( + body, title, + notify_type=notify_type, body_format=body_format, + tag=tag, match_always=match_always, attach=attach, + interpret_escapes=interpret_escapes, + ) + + except TypeError: + # No notifications sent, and there was an internal error. + return False + + if not sequential_calls and not parallel_calls: + # Nothing to send + return None + + sequential_result = Apprise._notify_sequential(*sequential_calls) + parallel_result = Apprise._notify_parallel_threadpool(*parallel_calls) + return sequential_result and parallel_result + + async def async_notify(self, *args, **kwargs): + """ + Send a notification to all the plugins previously loaded, for + asynchronous callers. + + The arguments are identical to those of Apprise.notify(). + + """ + try: + # Process arguments and build synchronous and asynchronous calls + # (this step can throw internal errors). + sequential_calls, parallel_calls = self._create_notify_calls( + *args, **kwargs) + + except TypeError: + # No notifications sent, and there was an internal error. + return False + + if not sequential_calls and not parallel_calls: + # Nothing to send + return None + + sequential_result = Apprise._notify_sequential(*sequential_calls) + parallel_result = \ + await Apprise._notify_parallel_asyncio(*parallel_calls) + return sequential_result and parallel_result + + def _create_notify_calls(self, *args, **kwargs): + """ + Creates notifications for all the plugins loaded. + + Returns a list of (server, notify() kwargs) tuples for plugins with + parallelism disabled and another list for plugins with parallelism + enabled. + """ + + all_calls = list(self._create_notify_gen(*args, **kwargs)) + + # Split into sequential and parallel notify() calls. + sequential, parallel = [], [] + for (server, notify_kwargs) in all_calls: + if server.asset.async_mode: + parallel.append((server, notify_kwargs)) + else: + sequential.append((server, notify_kwargs)) + + return sequential, parallel + + def _create_notify_gen(self, body, title='', + notify_type=common.NotifyType.INFO, + body_format=None, tag=common.MATCH_ALL_TAG, + match_always=True, attach=None, + interpret_escapes=None): + """ + Internal generator function for _create_notify_calls(). + """ + + if len(self) == 0: + # Nothing to notify + msg = "There are no service(s) to notify" + logger.error(msg) + raise TypeError(msg) + + if not (title or body or attach): + msg = "No message content specified to deliver" + logger.error(msg) + raise TypeError(msg) + + try: + if title and isinstance(title, bytes): + title = title.decode(self.asset.encoding) + + if body and isinstance(body, bytes): + body = body.decode(self.asset.encoding) + + except UnicodeDecodeError: + msg = 'The content passed into Apprise was not of encoding ' \ + 'type: {}'.format(self.asset.encoding) + logger.error(msg) + raise TypeError(msg) + + # Tracks conversions + conversion_body_map = dict() + conversion_title_map = dict() + + # Prepare attachments if required + if attach is not None and not isinstance(attach, AppriseAttachment): + attach = AppriseAttachment( + attach, asset=self.asset, location=self.location) + + # Allow Asset default value + body_format = self.asset.body_format \ + if body_format is None else body_format + + # Allow Asset default value + interpret_escapes = self.asset.interpret_escapes \ + if interpret_escapes is None else interpret_escapes + + # Iterate over our loaded plugins + for server in self.find(tag, match_always=match_always): + # If our code reaches here, we either did not define a tag (it + # was set to None), or we did define a tag and the logic above + # determined we need to notify the service it's associated with + + # First we need to generate a key we will use to determine if we + # need to build our data out. Entries without are merged with + # the body at this stage. + key = server.notify_format if server.title_maxlen > 0\ + else f'_{server.notify_format}' + + if server.interpret_emojis: + # alter our key slightly to handle emojis since their value is + # pulled out of the notification + key += "-emojis" + + if key not in conversion_title_map: + + # Prepare our title + conversion_title_map[key] = '' if not title else title + + # Conversion of title only occurs for services where the title + # is blended with the body (title_maxlen <= 0) + if conversion_title_map[key] and server.title_maxlen <= 0: + conversion_title_map[key] = convert_between( + body_format, server.notify_format, + content=conversion_title_map[key]) + + # Our body is always converted no matter what + conversion_body_map[key] = \ + convert_between( + body_format, server.notify_format, content=body) + + if interpret_escapes: + # + # Escape our content + # + + try: + # Added overhead required due to Python 3 Encoding Bug + # identified here: https://bugs.python.org/issue21331 + conversion_body_map[key] = \ + conversion_body_map[key]\ + .encode('ascii', 'backslashreplace')\ + .decode('unicode-escape') + + conversion_title_map[key] = \ + conversion_title_map[key]\ + .encode('ascii', 'backslashreplace')\ + .decode('unicode-escape') + + except AttributeError: + # Must be of string type + msg = 'Failed to escape message body' + logger.error(msg) + raise TypeError(msg) + + if server.interpret_emojis: + # + # Convert our :emoji: definitions + # + + conversion_body_map[key] = \ + apply_emojis(conversion_body_map[key]) + conversion_title_map[key] = \ + apply_emojis(conversion_title_map[key]) + + kwargs = dict( + body=conversion_body_map[key], + title=conversion_title_map[key], + notify_type=notify_type, + attach=attach, + body_format=body_format + ) + yield (server, kwargs) + + @staticmethod + def _notify_sequential(*servers_kwargs): + """ + Process a list of notify() calls sequentially and synchronously. + """ + + success = True + + for (server, kwargs) in servers_kwargs: + try: + # Send notification + result = server.notify(**kwargs) + success = success and result + + except TypeError: + # These are our internally thrown notifications. + success = False + + except Exception: + # A catch all so we don't have to abort early + # just because one of our plugins has a bug in it. + logger.exception("Unhandled Notification Exception") + success = False + + return success + + @staticmethod + def _notify_parallel_threadpool(*servers_kwargs): + """ + Process a list of notify() calls in parallel and synchronously. + """ + + n_calls = len(servers_kwargs) + + # 0-length case + if n_calls == 0: + return True + + # There's no need to use a thread pool for just a single notification + if n_calls == 1: + return Apprise._notify_sequential(servers_kwargs[0]) + + # Create log entry + logger.info( + 'Notifying %d service(s) with threads.', len(servers_kwargs)) + + with cf.ThreadPoolExecutor() as executor: + success = True + futures = [executor.submit(server.notify, **kwargs) + for (server, kwargs) in servers_kwargs] + + for future in cf.as_completed(futures): + try: + result = future.result() + success = success and result + + except TypeError: + # These are our internally thrown notifications. + success = False + + except Exception: + # A catch all so we don't have to abort early + # just because one of our plugins has a bug in it. + logger.exception("Unhandled Notification Exception") + success = False + + return success + + @staticmethod + async def _notify_parallel_asyncio(*servers_kwargs): + """ + Process a list of async_notify() calls in parallel and asynchronously. + """ + + n_calls = len(servers_kwargs) + + # 0-length case + if n_calls == 0: + return True + + # (Unlike with the thread pool, we don't optimize for the single- + # notification case because asyncio can do useful work while waiting + # for that thread to complete) + + # Create log entry + logger.info( + 'Notifying %d service(s) asynchronously.', len(servers_kwargs)) + + async def do_call(server, kwargs): + return await server.async_notify(**kwargs) + + cors = (do_call(server, kwargs) for (server, kwargs) in servers_kwargs) + results = await asyncio.gather(*cors, return_exceptions=True) + + if any(isinstance(status, Exception) + and not isinstance(status, TypeError) for status in results): + # A catch all so we don't have to abort early just because + # one of our plugins has a bug in it. + logger.exception("Unhandled Notification Exception") + return False + + if any(isinstance(status, TypeError) for status in results): + # These are our internally thrown notifications. + return False + + return all(results) + + def details(self, lang=None, show_requirements=False, show_disabled=False): + """ + Returns the details associated with the Apprise object + + """ + + # general object returned + response = { + # Defines the current version of Apprise + 'version': __version__, + # Lists all of the currently supported Notifications + 'schemas': [], + # Includes the configured asset details + 'asset': self.asset.details(), + } + + for plugin in N_MGR.plugins(): + # Iterate over our hashed plugins and dynamically build details on + # their status: + + content = { + 'service_name': getattr(plugin, 'service_name', None), + 'service_url': getattr(plugin, 'service_url', None), + 'setup_url': getattr(plugin, 'setup_url', None), + # Placeholder - populated below + 'details': None, + + # Let upstream service know of the plugins that support + # attachments + 'attachment_support': getattr( + plugin, 'attachment_support', False), + + # Differentiat between what is a custom loaded plugin and + # which is native. + 'category': getattr(plugin, 'category', None) + } + + # Standard protocol(s) should be None or a tuple + enabled = getattr(plugin, 'enabled', True) + if not show_disabled and not enabled: + # Do not show inactive plugins + continue + + elif show_disabled: + # Add current state to response + content['enabled'] = enabled + + # Standard protocol(s) should be None or a tuple + protocols = getattr(plugin, 'protocol', None) + if isinstance(protocols, str): + protocols = (protocols, ) + + # Secure protocol(s) should be None or a tuple + secure_protocols = getattr(plugin, 'secure_protocol', None) + if isinstance(secure_protocols, str): + secure_protocols = (secure_protocols, ) + + # Add our protocol details to our content + content.update({ + 'protocols': protocols, + 'secure_protocols': secure_protocols, + }) + + if not lang: + # Simply return our results + content['details'] = plugins.details(plugin) + if show_requirements: + content['requirements'] = plugins.requirements(plugin) + + else: + # Emulate the specified language when returning our results + with self.locale.lang_at(lang): + content['details'] = plugins.details(plugin) + if show_requirements: + content['requirements'] = plugins.requirements(plugin) + + # Build our response object + response['schemas'].append(content) + + return response + + def urls(self, privacy=False): + """ + Returns all of the loaded URLs defined in this apprise object. + """ + return [x.url(privacy=privacy) for x in self.servers] + + def pop(self, index): + """ + Removes an indexed Notification Service from the stack and returns it. + + The thing is we can never pop AppriseConfig() entries, only what was + loaded within them. So pop needs to carefully iterate over our list + and only track actual entries. + """ + + # Tracking variables + prev_offset = -1 + offset = prev_offset + + for idx, s in enumerate(self.servers): + if isinstance(s, (ConfigBase, AppriseConfig)): + servers = s.servers() + if len(servers) > 0: + # Acquire a new maximum offset to work with + offset = prev_offset + len(servers) + + if offset >= index: + # we can pop an element from our config stack + fn = s.pop if isinstance(s, ConfigBase) \ + else s.server_pop + + return fn(index if prev_offset == -1 + else (index - prev_offset - 1)) + + else: + offset = prev_offset + 1 + if offset == index: + return self.servers.pop(idx) + + # Update our old offset + prev_offset = offset + + # If we reach here, then we indexed out of range + raise IndexError('list index out of range') + + def __getitem__(self, index): + """ + Returns the indexed server entry of a loaded notification server + """ + # Tracking variables + prev_offset = -1 + offset = prev_offset + + for idx, s in enumerate(self.servers): + if isinstance(s, (ConfigBase, AppriseConfig)): + # Get our list of servers associate with our config object + servers = s.servers() + if len(servers) > 0: + # Acquire a new maximum offset to work with + offset = prev_offset + len(servers) + + if offset >= index: + return servers[index if prev_offset == -1 + else (index - prev_offset - 1)] + + else: + offset = prev_offset + 1 + if offset == index: + return self.servers[idx] + + # Update our old offset + prev_offset = offset + + # If we reach here, then we indexed out of range + raise IndexError('list index out of range') + + def __getstate__(self): + """ + Pickle Support dumps() + """ + attributes = { + 'asset': self.asset, + # Prepare our URL list as we need to extract the associated tags + # and asset details associated with it + 'urls': [{ + 'url': server.url(privacy=False), + 'tag': server.tags if server.tags else None, + 'asset': server.asset} for server in self.servers], + 'locale': self.locale, + 'debug': self.debug, + 'location': self.location, + } + + return attributes + + def __setstate__(self, state): + """ + Pickle Support loads() + """ + self.servers = list() + self.asset = state['asset'] + self.locale = state['locale'] + self.location = state['location'] + for entry in state['urls']: + self.add(entry['url'], asset=entry['asset'], tag=entry['tag']) + + def __bool__(self): + """ + Allows the Apprise object to be wrapped in an 'if statement'. + True is returned if at least one service has been loaded. + """ + return len(self) > 0 + + def __iter__(self): + """ + Returns an iterator to each of our servers loaded. This includes those + found inside configuration. + """ + return chain(*[[s] if not isinstance(s, (ConfigBase, AppriseConfig)) + else iter(s.servers()) for s in self.servers]) + + def __len__(self): + """ + Returns the number of servers loaded; this includes those found within + loaded configuration. This funtion nnever actually counts the + Config entry themselves (if they exist), only what they contain. + """ + return sum([1 if not isinstance(s, (ConfigBase, AppriseConfig)) + else len(s.servers()) for s in self.servers]) diff --git a/libs/apprise/Apprise.pyi b/libs/apprise/Apprise.pyi new file mode 100644 index 000000000..5a34c9c65 --- /dev/null +++ b/libs/apprise/Apprise.pyi @@ -0,0 +1,62 @@ +from typing import Any, Dict, List, Iterable, Iterator, Optional + +from . import (AppriseAsset, AppriseAttachment, AppriseConfig, ConfigBase, + NotifyBase, NotifyFormat, NotifyType) +from .common import ContentLocation + +_Server = Union[str, ConfigBase, NotifyBase, AppriseConfig] +_Servers = Union[_Server, Dict[Any, _Server], Iterable[_Server]] +# Can't define this recursively as mypy doesn't support recursive types: +# https://github.com/python/mypy/issues/731 +_Tag = Union[str, Iterable[Union[str, Iterable[str]]]] + +class Apprise: + def __init__( + self, + servers: _Servers = ..., + asset: Optional[AppriseAsset] = ..., + location: Optional[ContentLocation] = ..., + debug: bool = ... + ) -> None: ... + @staticmethod + def instantiate( + url: Union[str, Dict[str, NotifyBase]], + asset: Optional[AppriseAsset] = ..., + tag: Optional[_Tag] = ..., + suppress_exceptions: bool = ... + ) -> NotifyBase: ... + def add( + self, + servers: _Servers = ..., + asset: Optional[AppriseAsset] = ..., + tag: Optional[_Tag] = ... + ) -> bool: ... + def clear(self) -> None: ... + def find(self, tag: str = ...) -> Iterator[Apprise]: ... + def notify( + self, + body: str, + title: str = ..., + notify_type: NotifyType = ..., + body_format: NotifyFormat = ..., + tag: _Tag = ..., + attach: Optional[AppriseAttachment] = ..., + interpret_escapes: Optional[bool] = ... + ) -> bool: ... + async def async_notify( + self, + body: str, + title: str = ..., + notify_type: NotifyType = ..., + body_format: NotifyFormat = ..., + tag: _Tag = ..., + attach: Optional[AppriseAttachment] = ..., + interpret_escapes: Optional[bool] = ... + ) -> bool: ... + def details(self, lang: Optional[str] = ...) -> Dict[str, Any]: ... + def urls(self, privacy: bool = ...) -> Iterable[str]: ... + def pop(self, index: int) -> ConfigBase: ... + def __getitem__(self, index: int) -> ConfigBase: ... + def __bool__(self) -> bool: ... + def __iter__(self) -> Iterator[ConfigBase]: ... + def __len__(self) -> int: ...
\ No newline at end of file diff --git a/libs/apprise/asset.py b/libs/apprise/AppriseAsset.py index 450303d0e..97a7bccfb 100644 --- a/libs/apprise/asset.py +++ b/libs/apprise/AppriseAsset.py @@ -33,7 +33,7 @@ from os.path import dirname from os.path import isfile from os.path import abspath from .common import NotifyType -from .manager_plugins import NotificationManager +from .NotificationManager import NotificationManager # Grant access to our Notification Manager Singleton diff --git a/libs/apprise/asset.pyi b/libs/apprise/AppriseAsset.pyi index 08303341b..08303341b 100644 --- a/libs/apprise/asset.pyi +++ b/libs/apprise/AppriseAsset.pyi diff --git a/libs/apprise/apprise_attachment.py b/libs/apprise/AppriseAttachment.py index 3c33f9e73..fcfed3af6 100644 --- a/libs/apprise/apprise_attachment.py +++ b/libs/apprise/AppriseAttachment.py @@ -27,9 +27,9 @@ # POSSIBILITY OF SUCH DAMAGE. from . import URLBase -from .attachment.base import AttachBase -from .asset import AppriseAsset -from .manager_attachment import AttachmentManager +from .attachment.AttachBase import AttachBase +from .AppriseAsset import AppriseAsset +from .AttachmentManager import AttachmentManager from .logger import logger from .common import ContentLocation from .common import CONTENT_LOCATIONS diff --git a/libs/apprise/apprise_attachment.pyi b/libs/apprise/AppriseAttachment.pyi index a28acb144..a28acb144 100644 --- a/libs/apprise/apprise_attachment.pyi +++ b/libs/apprise/AppriseAttachment.pyi diff --git a/libs/apprise/apprise_config.py b/libs/apprise/AppriseConfig.py index 080f70d30..7e5a9126f 100644 --- a/libs/apprise/apprise_config.py +++ b/libs/apprise/AppriseConfig.py @@ -28,9 +28,9 @@ from . import ConfigBase from . import CONFIG_FORMATS -from .manager_config import ConfigurationManager +from .ConfigurationManager import ConfigurationManager from . import URLBase -from .asset import AppriseAsset +from .AppriseAsset import AppriseAsset from . import common from .utils import GET_SCHEMA_RE from .utils import parse_list diff --git a/libs/apprise/apprise_config.pyi b/libs/apprise/AppriseConfig.pyi index 9ea819ac3..9ea819ac3 100644 --- a/libs/apprise/apprise_config.pyi +++ b/libs/apprise/AppriseConfig.pyi diff --git a/libs/apprise/locale.py b/libs/apprise/AppriseLocale.py index e900ce5bc..e900ce5bc 100644 --- a/libs/apprise/locale.py +++ b/libs/apprise/AppriseLocale.py diff --git a/libs/apprise/manager_attachment.py b/libs/apprise/AttachmentManager.py index d1288a943..d296a4996 100644 --- a/libs/apprise/manager_attachment.py +++ b/libs/apprise/AttachmentManager.py @@ -26,7 +26,6 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -import re from os.path import dirname from os.path import abspath from os.path import join @@ -53,7 +52,3 @@ class AttachmentManager(PluginManager): # The module path to scan module_path = join(abspath(dirname(__file__)), _id) - - # For filtering our result set - module_filter_re = re.compile( - r'^(?P<name>' + fname_prefix + r'(?!Base)[A-Za-z0-9]+)$') diff --git a/libs/apprise/manager_config.py b/libs/apprise/ConfigurationManager.py index 69a6bedb9..6696895b9 100644 --- a/libs/apprise/manager_config.py +++ b/libs/apprise/ConfigurationManager.py @@ -26,7 +26,6 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -import re from os.path import dirname from os.path import abspath from os.path import join @@ -53,7 +52,3 @@ class ConfigurationManager(PluginManager): # The module path to scan module_path = join(abspath(dirname(__file__)), _id) - - # For filtering our result set - module_filter_re = re.compile( - r'^(?P<name>' + fname_prefix + r'(?!Base)[A-Za-z0-9]+)$') diff --git a/libs/apprise/manager_plugins.py b/libs/apprise/NotificationManager.py index 74ed370ea..abbbdd203 100644 --- a/libs/apprise/manager_plugins.py +++ b/libs/apprise/NotificationManager.py @@ -26,7 +26,6 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -import re from os.path import dirname from os.path import abspath from os.path import join @@ -53,8 +52,3 @@ class NotificationManager(PluginManager): # The module path to scan module_path = join(abspath(dirname(__file__)), _id) - - # For filtering our result set - module_filter_re = re.compile( - r'^(?P<name>' + fname_prefix + - r'(?!Base|ImageSize|Type)[A-Za-z0-9]+)$') diff --git a/libs/apprise/url.py b/libs/apprise/URLBase.py index 39daec867..90ea85c66 100644 --- a/libs/apprise/url.py +++ b/libs/apprise/URLBase.py @@ -35,8 +35,8 @@ from xml.sax.saxutils import escape as sax_escape from urllib.parse import unquote as _unquote from urllib.parse import quote as _quote -from .locale import gettext_lazy as _ -from .asset import AppriseAsset +from .AppriseLocale import gettext_lazy as _ +from .AppriseAsset import AppriseAsset from .utils import urlencode from .utils import parse_url from .utils import parse_bool @@ -744,7 +744,7 @@ class URLBase: @staticmethod def parse_url(url, verify_host=True, plus_to_space=False, - strict_port=False, sanitize=True): + strict_port=False): """Parses the URL and returns it broken apart into a dictionary. This is very specific and customized for Apprise. @@ -765,8 +765,7 @@ class URLBase: results = parse_url( url, default_schema='unknown', verify_host=verify_host, - plus_to_space=plus_to_space, strict_port=strict_port, - sanitize=sanitize) + plus_to_space=plus_to_space, strict_port=strict_port) if not results: # We're done; we failed to parse our url diff --git a/libs/apprise/url.pyi b/libs/apprise/URLBase.pyi index 915885745..915885745 100644 --- a/libs/apprise/url.pyi +++ b/libs/apprise/URLBase.pyi diff --git a/libs/apprise/__init__.py b/libs/apprise/__init__.py index 457528594..81373c75b 100644 --- a/libs/apprise/__init__.py +++ b/libs/apprise/__init__.py @@ -27,7 +27,7 @@ # POSSIBILITY OF SUCH DAMAGE. __title__ = 'Apprise' -__version__ = '1.8.0' +__version__ = '1.7.6' __author__ = 'Chris Caron' __license__ = 'BSD' __copywrite__ = 'Copyright (C) 2024 Chris Caron <[email protected]>' @@ -49,17 +49,16 @@ from .common import CONTENT_INCLUDE_MODES from .common import ContentLocation from .common import CONTENT_LOCATIONS -from .url import URLBase -from .url import PrivacyMode -from .plugins.base import NotifyBase -from .config.base import ConfigBase -from .attachment.base import AttachBase +from .URLBase import URLBase +from .URLBase import PrivacyMode +from .plugins.NotifyBase import NotifyBase +from .config.ConfigBase import ConfigBase +from .attachment.AttachBase import AttachBase -from .apprise import Apprise -from .locale import AppriseLocale -from .asset import AppriseAsset -from .apprise_config import AppriseConfig -from .apprise_attachment import AppriseAttachment +from .Apprise import Apprise +from .AppriseAsset import AppriseAsset +from .AppriseConfig import AppriseConfig +from .AppriseAttachment import AppriseAttachment from . import decorators @@ -74,7 +73,7 @@ logging.getLogger(__name__).addHandler(logging.NullHandler()) __all__ = [ # Core 'Apprise', 'AppriseAsset', 'AppriseConfig', 'AppriseAttachment', 'URLBase', - 'NotifyBase', 'ConfigBase', 'AttachBase', 'AppriseLocale', + 'NotifyBase', 'ConfigBase', 'AttachBase', # Reference 'NotifyType', 'NotifyImageSize', 'NotifyFormat', 'OverflowMode', diff --git a/libs/apprise/attachment/base.py b/libs/apprise/attachment/AttachBase.py index 71e3a4d0d..8cb6bd5cb 100644 --- a/libs/apprise/attachment/base.py +++ b/libs/apprise/attachment/AttachBase.py @@ -29,10 +29,10 @@ import os import time import mimetypes -from ..url import URLBase +from ..URLBase import URLBase from ..utils import parse_bool from ..common import ContentLocation -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class AttachBase(URLBase): @@ -315,7 +315,7 @@ class AttachBase(URLBase): "download() is implimented by the child class.") @staticmethod - def parse_url(url, verify_host=True, mimetype_db=None, sanitize=True): + def parse_url(url, verify_host=True, mimetype_db=None): """Parses the URL and returns it broken apart into a dictionary. This is very specific and customized for Apprise. @@ -333,8 +333,7 @@ class AttachBase(URLBase): successful, otherwise None is returned. """ - results = URLBase.parse_url( - url, verify_host=verify_host, sanitize=sanitize) + results = URLBase.parse_url(url, verify_host=verify_host) if not results: # We're done; we failed to parse our url diff --git a/libs/apprise/attachment/base.pyi b/libs/apprise/attachment/AttachBase.pyi index 66b7179d3..66b7179d3 100644 --- a/libs/apprise/attachment/base.pyi +++ b/libs/apprise/attachment/AttachBase.pyi diff --git a/libs/apprise/attachment/file.py b/libs/apprise/attachment/AttachFile.py index c48a707ae..4c9c8f136 100644 --- a/libs/apprise/attachment/file.py +++ b/libs/apprise/attachment/AttachFile.py @@ -28,9 +28,9 @@ import re import os -from .base import AttachBase +from .AttachBase import AttachBase from ..common import ContentLocation -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class AttachFile(AttachBase): diff --git a/libs/apprise/attachment/http.py b/libs/apprise/attachment/AttachHTTP.py index aa075d671..5a3af9467 100644 --- a/libs/apprise/attachment/http.py +++ b/libs/apprise/attachment/AttachHTTP.py @@ -31,10 +31,10 @@ import os import requests import threading from tempfile import NamedTemporaryFile -from .base import AttachBase +from .AttachBase import AttachBase from ..common import ContentLocation -from ..url import PrivacyMode -from ..locale import gettext_lazy as _ +from ..URLBase import PrivacyMode +from ..AppriseLocale import gettext_lazy as _ class AttachHTTP(AttachBase): @@ -296,7 +296,8 @@ class AttachHTTP(AttachBase): """ Tidy memory if open """ - self.invalidate() + with self._lock: + self.invalidate() def url(self, privacy=False, *args, **kwargs): """ @@ -362,7 +363,8 @@ class AttachHTTP(AttachBase): us to re-instantiate this object. """ - results = AttachBase.parse_url(url, sanitize=False) + results = AttachBase.parse_url(url) + if not results: # We're done early as we couldn't load the results return results diff --git a/libs/apprise/attachment/__init__.py b/libs/apprise/attachment/__init__.py index c2aef1eec..0a88313d6 100644 --- a/libs/apprise/attachment/__init__.py +++ b/libs/apprise/attachment/__init__.py @@ -27,8 +27,8 @@ # POSSIBILITY OF SUCH DAMAGE. # Used for testing -from .base import AttachBase -from ..manager_attachment import AttachmentManager +from .AttachBase import AttachBase +from ..AttachmentManager import AttachmentManager # Initalize our Attachment Manager Singleton A_MGR = AttachmentManager() @@ -36,5 +36,4 @@ A_MGR = AttachmentManager() __all__ = [ # Reference 'AttachBase', - 'AttachmentManager', ] diff --git a/libs/apprise/config/base.py b/libs/apprise/config/ConfigBase.py index 953cee394..32e1bde34 100644 --- a/libs/apprise/config/base.py +++ b/libs/apprise/config/ConfigBase.py @@ -33,15 +33,15 @@ import time from .. import plugins from .. import common -from ..asset import AppriseAsset -from ..url import URLBase +from ..AppriseAsset import AppriseAsset +from ..URLBase import URLBase +from ..ConfigurationManager import ConfigurationManager from ..utils import GET_SCHEMA_RE from ..utils import parse_list from ..utils import parse_bool from ..utils import parse_urls from ..utils import cwe312_url -from ..manager_config import ConfigurationManager -from ..manager_plugins import NotificationManager +from ..NotificationManager import NotificationManager # Test whether token is valid or not VALID_TOKEN = re.compile( diff --git a/libs/apprise/config/base.pyi b/libs/apprise/config/ConfigBase.pyi index abff1204d..abff1204d 100644 --- a/libs/apprise/config/base.pyi +++ b/libs/apprise/config/ConfigBase.pyi diff --git a/libs/apprise/config/file.py b/libs/apprise/config/ConfigFile.py index 9f29ca20b..172d699f8 100644 --- a/libs/apprise/config/file.py +++ b/libs/apprise/config/ConfigFile.py @@ -28,10 +28,10 @@ import re import os -from .base import ConfigBase +from .ConfigBase import ConfigBase from ..common import ConfigFormat from ..common import ContentIncludeMode -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class ConfigFile(ConfigBase): diff --git a/libs/apprise/config/http.py b/libs/apprise/config/ConfigHTTP.py index 2e2ba299b..f6faba8d4 100644 --- a/libs/apprise/config/http.py +++ b/libs/apprise/config/ConfigHTTP.py @@ -28,11 +28,11 @@ import re import requests -from .base import ConfigBase +from .ConfigBase import ConfigBase from ..common import ConfigFormat from ..common import ContentIncludeMode -from ..url import PrivacyMode -from ..locale import gettext_lazy as _ +from ..URLBase import PrivacyMode +from ..AppriseLocale import gettext_lazy as _ # Support YAML formats # text/yaml diff --git a/libs/apprise/config/memory.py b/libs/apprise/config/ConfigMemory.py index 181d76236..413956dfc 100644 --- a/libs/apprise/config/memory.py +++ b/libs/apprise/config/ConfigMemory.py @@ -26,8 +26,8 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -from .base import ConfigBase -from ..locale import gettext_lazy as _ +from .ConfigBase import ConfigBase +from ..AppriseLocale import gettext_lazy as _ class ConfigMemory(ConfigBase): diff --git a/libs/apprise/config/__init__.py b/libs/apprise/config/__init__.py index 24957e88e..efbace687 100644 --- a/libs/apprise/config/__init__.py +++ b/libs/apprise/config/__init__.py @@ -27,8 +27,8 @@ # POSSIBILITY OF SUCH DAMAGE. # Used for testing -from .base import ConfigBase -from ..manager_config import ConfigurationManager +from .ConfigBase import ConfigBase +from ..ConfigurationManager import ConfigurationManager # Initalize our Config Manager Singleton C_MGR = ConfigurationManager() @@ -36,5 +36,4 @@ C_MGR = ConfigurationManager() __all__ = [ # Reference 'ConfigBase', - 'ConfigurationManager', ] diff --git a/libs/apprise/conversion.py b/libs/apprise/conversion.py index 5b6d1a941..4d5632f59 100644 --- a/libs/apprise/conversion.py +++ b/libs/apprise/conversion.py @@ -29,7 +29,7 @@ import re from markdown import markdown from .common import NotifyFormat -from .url import URLBase +from .URLBase import URLBase from html.parser import HTMLParser diff --git a/libs/apprise/decorators/base.py b/libs/apprise/decorators/CustomNotifyPlugin.py index 2661db0aa..eb5f17b78 100644 --- a/libs/apprise/decorators/base.py +++ b/libs/apprise/decorators/CustomNotifyPlugin.py @@ -27,8 +27,8 @@ # POSSIBILITY OF SUCH DAMAGE.USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -from ..plugins.base import NotifyBase -from ..manager_plugins import NotificationManager +from ..plugins.NotifyBase import NotifyBase +from ..NotificationManager import NotificationManager from ..utils import URL_DETAILS_RE from ..utils import parse_url from ..utils import url_assembly @@ -55,9 +55,6 @@ class CustomNotifyPlugin(NotifyBase): # should be treated differently. category = 'custom' - # Support Attachments - attachment_support = True - # Define object templates templates = ( '{schema}://', diff --git a/libs/apprise/decorators/notify.py b/libs/apprise/decorators/notify.py index 892c3adfe..2dd5f5099 100644 --- a/libs/apprise/decorators/notify.py +++ b/libs/apprise/decorators/notify.py @@ -26,7 +26,7 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -from .base import CustomNotifyPlugin +from .CustomNotifyPlugin import CustomNotifyPlugin def notify(on, name=None): diff --git a/libs/apprise/i18n/en/LC_MESSAGES/apprise.mo b/libs/apprise/i18n/en/LC_MESSAGES/apprise.mo Binary files differindex f108b538d..1d22b89a6 100644 --- a/libs/apprise/i18n/en/LC_MESSAGES/apprise.mo +++ b/libs/apprise/i18n/en/LC_MESSAGES/apprise.mo diff --git a/libs/apprise/manager.py b/libs/apprise/manager.py index 70dc10700..c2b715d4f 100644 --- a/libs/apprise/manager.py +++ b/libs/apprise/manager.py @@ -61,9 +61,6 @@ class PluginManager(metaclass=Singleton): # The module path to scan module_path = join(abspath(dirname(__file__)), _id) - # For filtering our result when scanning a module - module_filter_re = re.compile(r'^(?P<name>((?!_)[A-Za-z0-9]+))$') - # thread safe loading _lock = threading.Lock() @@ -180,7 +177,7 @@ class PluginManager(metaclass=Singleton): # The .py extension is optional as we support loading directories # too module_re = re.compile( - r'^(?P<name>(?!base|_)[a-z0-9_]+)(\.py)?$', + r'^(?P<name>' + self.fname_prefix + r'[a-z0-9]+)(\.py)?$', re.I) t_start = time.time() @@ -191,6 +188,10 @@ class PluginManager(metaclass=Singleton): # keep going continue + elif match.group('name') == f'{self.fname_prefix}Base': + # keep going + continue + # Store our notification/plugin name: module_name = match.group('name') module_pyname = '{}.{}'.format(module_name_prefix, module_name) @@ -215,47 +216,7 @@ class PluginManager(metaclass=Singleton): # logging found in import_module and not needed here continue - module_class = None - for m_class in [obj for obj in dir(module) - if self.module_filter_re.match(obj)]: - # Get our plugin - plugin = getattr(module, m_class) - if not hasattr(plugin, 'app_id'): - # Filter out non-notification modules - logger.trace( - "(%s) import failed; no app_id defined in %s", - self.name, m_class, os.path.join(module_path, f)) - continue - - # Add our plugin name to our module map - self._module_map[module_name] = { - 'plugin': set([plugin]), - 'module': module, - 'path': '{}.{}'.format( - module_name_prefix, module_name), - 'native': True, - } - - fn = getattr(plugin, 'schemas', None) - schemas = set([]) if not callable(fn) else fn(plugin) - - # map our schema to our plugin - for schema in schemas: - if schema in self._schema_map: - logger.error( - "{} schema ({}) mismatch detected - {} to {}" - .format(self.name, schema, self._schema_map, - plugin)) - continue - - # Assign plugin - self._schema_map[schema] = plugin - - # Store our class - module_class = m_class - break - - if not module_class: + if not hasattr(module, module_name): # Not a library we can load as it doesn't follow the simple # rule that the class must bear the same name as the # notification file itself. @@ -265,6 +226,38 @@ class PluginManager(metaclass=Singleton): self.name, module_name, os.path.join(module_path, f)) continue + # Get our plugin + plugin = getattr(module, module_name) + if not hasattr(plugin, 'app_id'): + # Filter out non-notification modules + logger.trace( + "(%s) import failed; no app_id defined in %s", + self.name, module_name, os.path.join(module_path, f)) + continue + + # Add our plugin name to our module map + self._module_map[module_name] = { + 'plugin': set([plugin]), + 'module': module, + 'path': '{}.{}'.format(module_name_prefix, module_name), + 'native': True, + } + + fn = getattr(plugin, 'schemas', None) + schemas = set([]) if not callable(fn) else fn(plugin) + + # map our schema to our plugin + for schema in schemas: + if schema in self._schema_map: + logger.error( + "{} schema ({}) mismatch detected - {} to {}" + .format(self.name, schema, self._schema_map, + plugin)) + continue + + # Assign plugin + self._schema_map[schema] = plugin + logger.trace( '{} {} loaded in {:.6f}s'.format( self.name, module_name, (time.time() - tl_start))) diff --git a/libs/apprise/plugins/apprise_api.py b/libs/apprise/plugins/NotifyAppriseAPI.py index fd71236b5..34c34a6d4 100644 --- a/libs/apprise/plugins/apprise_api.py +++ b/libs/apprise/plugins/NotifyAppriseAPI.py @@ -31,12 +31,12 @@ import requests from json import dumps import base64 -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import parse_list from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class AppriseAPIMethod: @@ -123,7 +123,7 @@ class NotifyAppriseAPI(NotifyBase): 'type': 'string', 'required': True, 'private': True, - 'regex': (r'^[A-Z0-9_-]{1,128}$', 'i'), + 'regex': (r'^[A-Z0-9_-]{1,32}$', 'i'), }, }) diff --git a/libs/apprise/plugins/aprs.py b/libs/apprise/plugins/NotifyAprs.py index b8adef5aa..5d8c3c100 100644 --- a/libs/apprise/plugins/aprs.py +++ b/libs/apprise/plugins/NotifyAprs.py @@ -70,9 +70,9 @@ import socket import sys from itertools import chain -from .base import NotifyBase -from ..locale import gettext_lazy as _ -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..AppriseLocale import gettext_lazy as _ +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import is_call_sign from ..utils import parse_call_sign diff --git a/libs/apprise/plugins/bark.py b/libs/apprise/plugins/NotifyBark.py index e2f5bbfb4..781a1515e 100644 --- a/libs/apprise/plugins/bark.py +++ b/libs/apprise/plugins/NotifyBark.py @@ -32,13 +32,13 @@ import requests import json -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyImageSize from ..common import NotifyType from ..utils import parse_list from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Sounds generated off of: https://github.com/Finb/Bark/tree/master/Sounds diff --git a/libs/apprise/plugins/base.py b/libs/apprise/plugins/NotifyBase.py index 1abc3410e..c29417c60 100644 --- a/libs/apprise/plugins/base.py +++ b/libs/apprise/plugins/NotifyBase.py @@ -30,7 +30,7 @@ import asyncio import re from functools import partial -from ..url import URLBase +from ..URLBase import URLBase from ..common import NotifyType from ..utils import parse_bool from ..common import NOTIFY_TYPES @@ -38,8 +38,8 @@ from ..common import NotifyFormat from ..common import NOTIFY_FORMATS from ..common import OverflowMode from ..common import OVERFLOW_MODES -from ..locale import gettext_lazy as _ -from ..apprise_attachment import AppriseAttachment +from ..AppriseLocale import gettext_lazy as _ +from ..AppriseAttachment import AppriseAttachment class NotifyBase(URLBase): diff --git a/libs/apprise/plugins/base.pyi b/libs/apprise/plugins/NotifyBase.pyi index 9cf3e404c..9cf3e404c 100644 --- a/libs/apprise/plugins/base.pyi +++ b/libs/apprise/plugins/NotifyBase.pyi diff --git a/libs/apprise/plugins/boxcar.py b/libs/apprise/plugins/NotifyBoxcar.py index 851cdd3d8..808920ed5 100644 --- a/libs/apprise/plugins/boxcar.py +++ b/libs/apprise/plugins/NotifyBoxcar.py @@ -35,14 +35,14 @@ from hashlib import sha1 from itertools import chain from urllib.parse import urlparse -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..utils import parse_bool from ..utils import parse_list from ..utils import validate_regex from ..common import NotifyType from ..common import NotifyImageSize -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Default to sending to all devices if nothing is specified DEFAULT_TAG = '@all' diff --git a/libs/apprise/plugins/bulksms.py b/libs/apprise/plugins/NotifyBulkSMS.py index 29c4d7fac..33664fb00 100644 --- a/libs/apprise/plugins/bulksms.py +++ b/libs/apprise/plugins/NotifyBulkSMS.py @@ -36,13 +36,13 @@ import re import requests import json from itertools import chain -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ IS_GROUP_RE = re.compile( diff --git a/libs/apprise/plugins/bulkvs.py b/libs/apprise/plugins/NotifyBulkVS.py index 53a363008..e912dff25 100644 --- a/libs/apprise/plugins/bulkvs.py +++ b/libs/apprise/plugins/NotifyBulkVS.py @@ -35,13 +35,13 @@ # Messaging/post_messageSend import requests import json -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyBulkVS(NotifyBase): diff --git a/libs/apprise/plugins/burstsms.py b/libs/apprise/plugins/NotifyBurstSMS.py index eb19df8e4..39606abba 100644 --- a/libs/apprise/plugins/burstsms.py +++ b/libs/apprise/plugins/NotifyBurstSMS.py @@ -33,14 +33,14 @@ # import requests -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import parse_bool from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class BurstSMSCountryCode: diff --git a/libs/apprise/plugins/chantify.py b/libs/apprise/plugins/NotifyChantify.py index d549a59fa..d912bd257 100644 --- a/libs/apprise/plugins/chantify.py +++ b/libs/apprise/plugins/NotifyChantify.py @@ -35,10 +35,10 @@ import requests -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyChantify(NotifyBase): diff --git a/libs/apprise/plugins/clicksend.py b/libs/apprise/plugins/NotifyClickSend.py index 9ade1055e..5e345fe10 100644 --- a/libs/apprise/plugins/clicksend.py +++ b/libs/apprise/plugins/NotifyClickSend.py @@ -41,14 +41,15 @@ # import requests from json import dumps +from base64 import b64encode -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Extend HTTP Error Messages CLICKSEND_HTTP_ERROR_MAP = { @@ -88,7 +89,7 @@ class NotifyClickSend(NotifyBase): # Define object templates templates = ( - '{schema}://{user}:{apikey}@{targets}', + '{schema}://{user}:{password}@{targets}', ) # Define our template tokens @@ -98,12 +99,11 @@ class NotifyClickSend(NotifyBase): 'type': 'string', 'required': True, }, - 'apikey': { - 'name': _('API Key'), + 'password': { + 'name': _('Password'), 'type': 'string', 'private': True, 'required': True, - 'map_to': 'password', }, 'target_phone': { 'name': _('Target Phone No'), @@ -124,9 +124,6 @@ class NotifyClickSend(NotifyBase): 'to': { 'alias_of': 'targets', }, - 'key': { - 'alias_of': 'apikey', - }, 'batch': { 'name': _('Batch Mode'), 'type': 'bool', @@ -177,6 +174,9 @@ class NotifyClickSend(NotifyBase): headers = { 'User-Agent': self.app_id, 'Content-Type': 'application/json; charset=utf-8', + 'Authorization': 'Basic {}'.format( + b64encode('{}:{}'.format( + self.user, self.password).encode('utf-8'))), } # error tracking (used for function return) @@ -208,7 +208,6 @@ class NotifyClickSend(NotifyBase): r = requests.post( self.notify_url, data=dumps(payload), - auth=(self.user, self.password), headers=headers, verify=self.verify_certificate, timeout=self.request_timeout, @@ -323,12 +322,6 @@ class NotifyClickSend(NotifyBase): results['batch'] = \ parse_bool(results['qsd'].get('batch', False)) - # API Key - if 'key' in results['qsd'] and len(results['qsd']['key']): - # Extract the API Key from an argument - results['password'] = \ - NotifyClickSend.unquote(results['qsd']['key']) - # Support the 'to' variable so that we can support rooms this way too # The 'to' makes it easier to use yaml configuration if 'to' in results['qsd'] and len(results['qsd']['to']): diff --git a/libs/apprise/plugins/d7networks.py b/libs/apprise/plugins/NotifyD7Networks.py index ad55e2197..906ec2fb9 100644 --- a/libs/apprise/plugins/d7networks.py +++ b/libs/apprise/plugins/NotifyD7Networks.py @@ -39,13 +39,13 @@ import requests from json import dumps from json import loads -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import validate_regex from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Extend HTTP Error Messages D7NETWORKS_HTTP_ERROR_MAP = { diff --git a/libs/apprise/plugins/dbus.py b/libs/apprise/plugins/NotifyDBus.py index f2361fd62..52e119813 100644 --- a/libs/apprise/plugins/dbus.py +++ b/libs/apprise/plugins/NotifyDBus.py @@ -27,11 +27,11 @@ # POSSIBILITY OF SUCH DAMAGE. import sys -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyImageSize from ..common import NotifyType from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Default our global support flag NOTIFY_DBUS_SUPPORT_ENABLED = False diff --git a/libs/apprise/plugins/dapnet.py b/libs/apprise/plugins/NotifyDapnet.py index 60a18acd4..ae7199c94 100644 --- a/libs/apprise/plugins/dapnet.py +++ b/libs/apprise/plugins/NotifyDapnet.py @@ -51,9 +51,9 @@ from json import dumps import requests from requests.auth import HTTPBasicAuth -from .base import NotifyBase -from ..locale import gettext_lazy as _ -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..AppriseLocale import gettext_lazy as _ +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import is_call_sign from ..utils import parse_call_sign diff --git a/libs/apprise/plugins/dingtalk.py b/libs/apprise/plugins/NotifyDingTalk.py index 2ca1bc55b..d4a492fc7 100644 --- a/libs/apprise/plugins/dingtalk.py +++ b/libs/apprise/plugins/NotifyDingTalk.py @@ -34,13 +34,13 @@ import base64 import requests from json import dumps -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyFormat from ..common import NotifyType from ..utils import parse_list from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Register at https://dingtalk.com # - Download their PC based software as it is the only way you can create diff --git a/libs/apprise/plugins/discord.py b/libs/apprise/plugins/NotifyDiscord.py index 14c6152ba..82d764f50 100644 --- a/libs/apprise/plugins/discord.py +++ b/libs/apprise/plugins/NotifyDiscord.py @@ -50,14 +50,14 @@ from datetime import timedelta from datetime import datetime from datetime import timezone -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyImageSize from ..common import NotifyFormat from ..common import NotifyType from ..utils import parse_bool from ..utils import validate_regex -from ..locale import gettext_lazy as _ -from ..attachment.base import AttachBase +from ..AppriseLocale import gettext_lazy as _ +from ..attachment.AttachBase import AttachBase # Used to detect user/role IDs diff --git a/libs/apprise/plugins/email.py b/libs/apprise/plugins/NotifyEmail.py index 142c93cfb..80f88bf61 100644 --- a/libs/apprise/plugins/email.py +++ b/libs/apprise/plugins/NotifyEmail.py @@ -41,12 +41,12 @@ from socket import error as SocketError from datetime import datetime from datetime import timezone -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyFormat, NotifyType from ..conversion import convert_between -from ..utils import is_ipaddr, is_email, parse_emails, is_hostname -from ..locale import gettext_lazy as _ +from ..utils import is_email, parse_emails, is_hostname +from ..AppriseLocale import gettext_lazy as _ from ..logger import logger # Globally Default encoding mode set to Quoted Printable. @@ -1053,12 +1053,8 @@ class NotifyEmail(NotifyBase): # Prepare our target lists results['targets'] = [] - if is_ipaddr(results['host']): - # Silently move on and do not disrupt any configuration - pass - - elif not is_hostname(results['host'], ipv4=False, ipv6=False, - underscore=False): + if not is_hostname(results['host'], ipv4=False, ipv6=False, + underscore=False): if is_email(NotifyEmail.unquote(results['host'])): # Don't lose defined email addresses diff --git a/libs/apprise/plugins/emby.py b/libs/apprise/plugins/NotifyEmby.py index 5e4e0b89f..ce96553a2 100644 --- a/libs/apprise/plugins/emby.py +++ b/libs/apprise/plugins/NotifyEmby.py @@ -34,12 +34,12 @@ import hashlib from json import dumps from json import loads -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..utils import parse_bool from ..common import NotifyType from .. import __version__ as VERSION -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyEmby(NotifyBase): diff --git a/libs/apprise/plugins/enigma2.py b/libs/apprise/plugins/NotifyEnigma2.py index 8b1fff687..313149993 100644 --- a/libs/apprise/plugins/enigma2.py +++ b/libs/apprise/plugins/NotifyEnigma2.py @@ -37,10 +37,10 @@ import requests from json import loads -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class Enigma2MessageType: diff --git a/libs/apprise/plugins/fcm/__init__.py b/libs/apprise/plugins/NotifyFCM/__init__.py index 9dc0679f1..54b6c9cc7 100644 --- a/libs/apprise/plugins/fcm/__init__.py +++ b/libs/apprise/plugins/NotifyFCM/__init__.py @@ -50,15 +50,15 @@ # You will need this in order to send an apprise messag import requests from json import dumps -from ..base import NotifyBase +from ..NotifyBase import NotifyBase from ...common import NotifyType from ...utils import validate_regex from ...utils import parse_list from ...utils import parse_bool from ...utils import dict_full_update from ...common import NotifyImageSize -from ...apprise_attachment import AppriseAttachment -from ...locale import gettext_lazy as _ +from ...AppriseAttachment import AppriseAttachment +from ...AppriseLocale import gettext_lazy as _ from .common import (FCMMode, FCM_MODES) from .priority import (FCM_PRIORITIES, FCMPriorityManager) from .color import FCMColorManager diff --git a/libs/apprise/plugins/fcm/color.py b/libs/apprise/plugins/NotifyFCM/color.py index 20149eedd..c7da209a7 100644 --- a/libs/apprise/plugins/fcm/color.py +++ b/libs/apprise/plugins/NotifyFCM/color.py @@ -36,7 +36,7 @@ import re from ...utils import parse_bool from ...common import NotifyType -from ...asset import AppriseAsset +from ...AppriseAsset import AppriseAsset class FCMColorManager: diff --git a/libs/apprise/plugins/fcm/common.py b/libs/apprise/plugins/NotifyFCM/common.py index 9f139226a..9f139226a 100644 --- a/libs/apprise/plugins/fcm/common.py +++ b/libs/apprise/plugins/NotifyFCM/common.py diff --git a/libs/apprise/plugins/fcm/oauth.py b/libs/apprise/plugins/NotifyFCM/oauth.py index fbde3ccf7..fbde3ccf7 100644 --- a/libs/apprise/plugins/fcm/oauth.py +++ b/libs/apprise/plugins/NotifyFCM/oauth.py diff --git a/libs/apprise/plugins/fcm/priority.py b/libs/apprise/plugins/NotifyFCM/priority.py index 8564d3460..8564d3460 100644 --- a/libs/apprise/plugins/fcm/priority.py +++ b/libs/apprise/plugins/NotifyFCM/priority.py diff --git a/libs/apprise/plugins/feishu.py b/libs/apprise/plugins/NotifyFeishu.py index 961523bab..e6988333c 100644 --- a/libs/apprise/plugins/feishu.py +++ b/libs/apprise/plugins/NotifyFeishu.py @@ -36,10 +36,10 @@ import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyFeishu(NotifyBase): diff --git a/libs/apprise/plugins/flock.py b/libs/apprise/plugins/NotifyFlock.py index bf2cd131d..f1d12067e 100644 --- a/libs/apprise/plugins/flock.py +++ b/libs/apprise/plugins/NotifyFlock.py @@ -44,14 +44,14 @@ import re import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..common import NotifyFormat from ..common import NotifyImageSize from ..utils import parse_list from ..utils import parse_bool from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Extend HTTP Error Messages diff --git a/libs/apprise/plugins/custom_form.py b/libs/apprise/plugins/NotifyForm.py index 0f36643f7..9690cd4f5 100644 --- a/libs/apprise/plugins/custom_form.py +++ b/libs/apprise/plugins/NotifyForm.py @@ -29,11 +29,11 @@ import re import requests -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyImageSize from ..common import NotifyType -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class FORMPayloadField: diff --git a/libs/apprise/plugins/freemobile.py b/libs/apprise/plugins/NotifyFreeMobile.py index 4ff3d4822..4aad8db3d 100644 --- a/libs/apprise/plugins/freemobile.py +++ b/libs/apprise/plugins/NotifyFreeMobile.py @@ -36,9 +36,9 @@ import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyFreeMobile(NotifyBase): @@ -126,7 +126,6 @@ class NotifyFreeMobile(NotifyBase): # prepare our headers headers = { 'User-Agent': self.app_id, - 'Content-Type': 'application/json', } # Prepare our payload diff --git a/libs/apprise/plugins/gnome.py b/libs/apprise/plugins/NotifyGnome.py index b64b51304..67129216d 100644 --- a/libs/apprise/plugins/gnome.py +++ b/libs/apprise/plugins/NotifyGnome.py @@ -26,11 +26,11 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyImageSize from ..common import NotifyType from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Default our global support flag NOTIFY_GNOME_SUPPORT_ENABLED = False diff --git a/libs/apprise/plugins/google_chat.py b/libs/apprise/plugins/NotifyGoogleChat.py index f30cdae49..d2a6cc8a8 100644 --- a/libs/apprise/plugins/google_chat.py +++ b/libs/apprise/plugins/NotifyGoogleChat.py @@ -58,11 +58,11 @@ import re import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyFormat from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyGoogleChat(NotifyBase): diff --git a/libs/apprise/plugins/gotify.py b/libs/apprise/plugins/NotifyGotify.py index bf6c1b281..3f4ce132d 100644 --- a/libs/apprise/plugins/gotify.py +++ b/libs/apprise/plugins/NotifyGotify.py @@ -34,10 +34,10 @@ import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType, NotifyFormat from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Priorities diff --git a/libs/apprise/plugins/growl.py b/libs/apprise/plugins/NotifyGrowl.py index 0b3672188..0b42e3bec 100644 --- a/libs/apprise/plugins/growl.py +++ b/libs/apprise/plugins/NotifyGrowl.py @@ -26,12 +26,12 @@ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyImageSize from ..common import NotifyType from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Default our global support flag NOTIFY_GROWL_SUPPORT_ENABLED = False diff --git a/libs/apprise/plugins/guilded.py b/libs/apprise/plugins/NotifyGuilded.py index 0ee07018e..0ea36d9f8 100644 --- a/libs/apprise/plugins/guilded.py +++ b/libs/apprise/plugins/NotifyGuilded.py @@ -45,11 +45,10 @@ # import re -# Import namespace so the class won't conflict with the actual Notify object -from . import discord +from .NotifyDiscord import NotifyDiscord -class NotifyGuilded(discord.NotifyDiscord): +class NotifyGuilded(NotifyDiscord): """ A wrapper to Guilded Notifications diff --git a/libs/apprise/plugins/home_assistant.py b/libs/apprise/plugins/NotifyHomeAssistant.py index b0ffcaa64..0829381b9 100644 --- a/libs/apprise/plugins/home_assistant.py +++ b/libs/apprise/plugins/NotifyHomeAssistant.py @@ -34,11 +34,11 @@ from json import dumps from uuid import uuid4 -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyHomeAssistant(NotifyBase): diff --git a/libs/apprise/plugins/httpsms.py b/libs/apprise/plugins/NotifyHttpSMS.py index b36e286d7..647100949 100644 --- a/libs/apprise/plugins/httpsms.py +++ b/libs/apprise/plugins/NotifyHttpSMS.py @@ -31,12 +31,12 @@ # https://httpsms.com import requests import json -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyHttpSMS(NotifyBase): diff --git a/libs/apprise/plugins/ifttt.py b/libs/apprise/plugins/NotifyIFTTT.py index 9d89b1464..9174640d0 100644 --- a/libs/apprise/plugins/ifttt.py +++ b/libs/apprise/plugins/NotifyIFTTT.py @@ -44,11 +44,11 @@ import re import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import parse_list from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyIFTTT(NotifyBase): diff --git a/libs/apprise/plugins/custom_json.py b/libs/apprise/plugins/NotifyJSON.py index e0d7a6753..182ff77cf 100644 --- a/libs/apprise/plugins/custom_json.py +++ b/libs/apprise/plugins/NotifyJSON.py @@ -30,11 +30,11 @@ import requests import base64 from json import dumps -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyImageSize from ..common import NotifyType -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class JSONPayloadField: diff --git a/libs/apprise/plugins/join.py b/libs/apprise/plugins/NotifyJoin.py index b92bb37a3..c6b0d91e9 100644 --- a/libs/apprise/plugins/join.py +++ b/libs/apprise/plugins/NotifyJoin.py @@ -39,13 +39,13 @@ import re import requests -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyImageSize from ..common import NotifyType from ..utils import parse_list from ..utils import parse_bool from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Extend HTTP Error Messages JOIN_HTTP_ERROR_MAP = { diff --git a/libs/apprise/plugins/kavenegar.py b/libs/apprise/plugins/NotifyKavenegar.py index e4963f409..2a9c169d7 100644 --- a/libs/apprise/plugins/kavenegar.py +++ b/libs/apprise/plugins/NotifyKavenegar.py @@ -38,12 +38,12 @@ import requests from json import loads -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Extend HTTP Error Messages # Based on https://kavenegar.com/rest.html diff --git a/libs/apprise/plugins/kumulos.py b/libs/apprise/plugins/NotifyKumulos.py index 504dcc379..da372e773 100644 --- a/libs/apprise/plugins/kumulos.py +++ b/libs/apprise/plugins/NotifyKumulos.py @@ -39,10 +39,10 @@ import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Extend HTTP Error Messages KUMULOS_HTTP_ERROR_MAP = { diff --git a/libs/apprise/plugins/lametric.py b/libs/apprise/plugins/NotifyLametric.py index 411b9ea21..5825d9176 100644 --- a/libs/apprise/plugins/lametric.py +++ b/libs/apprise/plugins/NotifyLametric.py @@ -90,10 +90,10 @@ import re import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ from ..utils import is_hostname from ..utils import is_ipaddr diff --git a/libs/apprise/plugins/line.py b/libs/apprise/plugins/NotifyLine.py index 07a01e769..61e4f3703 100644 --- a/libs/apprise/plugins/line.py +++ b/libs/apprise/plugins/NotifyLine.py @@ -33,14 +33,14 @@ import requests import re from json import dumps -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..common import NotifyImageSize from ..utils import validate_regex from ..utils import parse_list from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Used to break path apart into list of streams diff --git a/libs/apprise/plugins/lunasea.py b/libs/apprise/plugins/NotifyLunaSea.py index 2af519179..51d820915 100644 --- a/libs/apprise/plugins/lunasea.py +++ b/libs/apprise/plugins/NotifyLunaSea.py @@ -33,15 +33,15 @@ import re import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..common import NotifyImageSize from ..utils import parse_list from ..utils import is_hostname from ..utils import is_ipaddr from ..utils import parse_bool -from ..locale import gettext_lazy as _ -from ..url import PrivacyMode +from ..AppriseLocale import gettext_lazy as _ +from ..URLBase import PrivacyMode class LunaSeaMode: diff --git a/libs/apprise/plugins/mqtt.py b/libs/apprise/plugins/NotifyMQTT.py index 1e09cd147..49380d330 100644 --- a/libs/apprise/plugins/mqtt.py +++ b/libs/apprise/plugins/NotifyMQTT.py @@ -38,12 +38,12 @@ import re from time import sleep from datetime import datetime from os.path import isfile -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import parse_list from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Default our global support flag NOTIFY_MQTT_SUPPORT_ENABLED = False diff --git a/libs/apprise/plugins/msg91.py b/libs/apprise/plugins/NotifyMSG91.py index 28a5bf183..a7bd9c473 100644 --- a/libs/apprise/plugins/msg91.py +++ b/libs/apprise/plugins/NotifyMSG91.py @@ -38,12 +38,12 @@ import re import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no, parse_bool from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class MSG91PayloadField: diff --git a/libs/apprise/plugins/msteams.py b/libs/apprise/plugins/NotifyMSTeams.py index 2e0957f32..06572c3e6 100644 --- a/libs/apprise/plugins/msteams.py +++ b/libs/apprise/plugins/NotifyMSTeams.py @@ -81,7 +81,7 @@ import requests import json from json.decoder import JSONDecodeError -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyImageSize from ..common import NotifyType from ..common import NotifyFormat @@ -89,8 +89,8 @@ from ..utils import parse_bool from ..utils import validate_regex from ..utils import apply_template from ..utils import TemplateType -from ..apprise_attachment import AppriseAttachment -from ..locale import gettext_lazy as _ +from ..AppriseAttachment import AppriseAttachment +from ..AppriseLocale import gettext_lazy as _ class NotifyMSTeams(NotifyBase): diff --git a/libs/apprise/plugins/macosx.py b/libs/apprise/plugins/NotifyMacOSX.py index 31b7101bd..dd53369fe 100644 --- a/libs/apprise/plugins/macosx.py +++ b/libs/apprise/plugins/NotifyMacOSX.py @@ -30,11 +30,11 @@ import platform import subprocess import os -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyImageSize from ..common import NotifyType from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Default our global support flag NOTIFY_MACOSX_SUPPORT_ENABLED = False diff --git a/libs/apprise/plugins/mailgun.py b/libs/apprise/plugins/NotifyMailgun.py index 69ab72dda..82cf970bf 100644 --- a/libs/apprise/plugins/mailgun.py +++ b/libs/apprise/plugins/NotifyMailgun.py @@ -56,7 +56,7 @@ # import requests from email.utils import formataddr -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..common import NotifyFormat from ..utils import parse_emails @@ -64,7 +64,7 @@ from ..utils import parse_bool from ..utils import is_email from ..utils import validate_regex from ..logger import logger -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Provide some known codes Mailgun uses and what they translate to: # Based on https://documentation.mailgun.com/en/latest/api-intro.html#errors diff --git a/libs/apprise/plugins/mastodon.py b/libs/apprise/plugins/NotifyMastodon.py index b6e451ad1..0d2f27df3 100644 --- a/libs/apprise/plugins/mastodon.py +++ b/libs/apprise/plugins/NotifyMastodon.py @@ -33,16 +33,16 @@ from json import dumps, loads from datetime import datetime from datetime import timezone -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyImageSize from ..common import NotifyFormat from ..common import NotifyType from ..utils import parse_list from ..utils import parse_bool from ..utils import validate_regex -from ..locale import gettext_lazy as _ -from ..attachment.base import AttachBase +from ..AppriseLocale import gettext_lazy as _ +from ..attachment.AttachBase import AttachBase # Accept: # - @username diff --git a/libs/apprise/plugins/matrix.py b/libs/apprise/plugins/NotifyMatrix.py index c1401f238..594274761 100644 --- a/libs/apprise/plugins/matrix.py +++ b/libs/apprise/plugins/NotifyMatrix.py @@ -37,8 +37,8 @@ from json import dumps from json import loads from time import time -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..common import NotifyImageSize from ..common import NotifyFormat @@ -46,7 +46,7 @@ from ..utils import parse_bool from ..utils import parse_list from ..utils import is_hostname from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Define default path MATRIX_V1_WEBHOOK_PATH = '/api/v1/matrix/hook' diff --git a/libs/apprise/plugins/mattermost.py b/libs/apprise/plugins/NotifyMattermost.py index 481a9b852..dbb5f0dd3 100644 --- a/libs/apprise/plugins/mattermost.py +++ b/libs/apprise/plugins/NotifyMattermost.py @@ -39,13 +39,13 @@ import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyImageSize from ..common import NotifyType from ..utils import parse_bool from ..utils import parse_list from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Some Reference Locations: # - https://docs.mattermost.com/developer/webhooks-incoming.html diff --git a/libs/apprise/plugins/messagebird.py b/libs/apprise/plugins/NotifyMessageBird.py index c496d347e..42d880acd 100644 --- a/libs/apprise/plugins/messagebird.py +++ b/libs/apprise/plugins/NotifyMessageBird.py @@ -34,12 +34,12 @@ import requests -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyMessageBird(NotifyBase): diff --git a/libs/apprise/plugins/misskey.py b/libs/apprise/plugins/NotifyMisskey.py index 73b8f7c6e..8965a0f7b 100644 --- a/libs/apprise/plugins/misskey.py +++ b/libs/apprise/plugins/NotifyMisskey.py @@ -47,10 +47,10 @@ import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class MisskeyVisibility: diff --git a/libs/apprise/plugins/nextcloud.py b/libs/apprise/plugins/NotifyNextcloud.py index 9acfc43d5..fd471d9eb 100644 --- a/libs/apprise/plugins/nextcloud.py +++ b/libs/apprise/plugins/NotifyNextcloud.py @@ -28,11 +28,11 @@ import requests -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import parse_list -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyNextcloud(NotifyBase): diff --git a/libs/apprise/plugins/nextcloudtalk.py b/libs/apprise/plugins/NotifyNextcloudTalk.py index b1b014770..4bfced282 100644 --- a/libs/apprise/plugins/nextcloudtalk.py +++ b/libs/apprise/plugins/NotifyNextcloudTalk.py @@ -29,11 +29,11 @@ import requests from json import dumps -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import parse_list -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyNextcloudTalk(NotifyBase): diff --git a/libs/apprise/plugins/notica.py b/libs/apprise/plugins/NotifyNotica.py index 661fde1d1..33a94fc96 100644 --- a/libs/apprise/plugins/notica.py +++ b/libs/apprise/plugins/NotifyNotica.py @@ -43,11 +43,11 @@ import re import requests -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NoticaMode: diff --git a/libs/apprise/plugins/notifiarr.py b/libs/apprise/plugins/NotifyNotifiarr.py index cc13e1a56..e195cbd32 100644 --- a/libs/apprise/plugins/notifiarr.py +++ b/libs/apprise/plugins/NotifyNotifiarr.py @@ -31,9 +31,9 @@ import requests from json import dumps from itertools import chain -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ from ..common import NotifyImageSize from ..utils import parse_list, parse_bool from ..utils import validate_regex diff --git a/libs/apprise/plugins/notifico.py b/libs/apprise/plugins/NotifyNotifico.py index 5cb0d666e..27ce29a6e 100644 --- a/libs/apprise/plugins/notifico.py +++ b/libs/apprise/plugins/NotifyNotifico.py @@ -44,11 +44,11 @@ import re import requests -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import parse_bool from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotificoFormat: diff --git a/libs/apprise/plugins/ntfy.py b/libs/apprise/plugins/NotifyNtfy.py index 805b87260..40834eece 100644 --- a/libs/apprise/plugins/ntfy.py +++ b/libs/apprise/plugins/NotifyNtfy.py @@ -41,18 +41,18 @@ from json import loads from json import dumps from os.path import basename -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyFormat from ..common import NotifyType from ..common import NotifyImageSize -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ from ..utils import parse_list from ..utils import parse_bool from ..utils import is_hostname from ..utils import is_ipaddr from ..utils import validate_regex -from ..url import PrivacyMode -from ..attachment.base import AttachBase +from ..URLBase import PrivacyMode +from ..attachment.AttachBase import AttachBase class NtfyMode: diff --git a/libs/apprise/plugins/office365.py b/libs/apprise/plugins/NotifyOffice365.py index b04f7a037..0c62279f9 100644 --- a/libs/apprise/plugins/office365.py +++ b/libs/apprise/plugins/NotifyOffice365.py @@ -64,14 +64,14 @@ from datetime import datetime from datetime import timedelta from json import loads from json import dumps -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyFormat from ..common import NotifyType from ..utils import is_email from ..utils import parse_emails from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyOffice365(NotifyBase): diff --git a/libs/apprise/plugins/one_signal.py b/libs/apprise/plugins/NotifyOneSignal.py index 76ec212f4..eb1e10f7a 100644 --- a/libs/apprise/plugins/one_signal.py +++ b/libs/apprise/plugins/NotifyOneSignal.py @@ -37,14 +37,14 @@ import requests from json import dumps from itertools import chain -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..common import NotifyImageSize from ..utils import validate_regex from ..utils import parse_list from ..utils import parse_bool from ..utils import is_email -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class OneSignalCategory: diff --git a/libs/apprise/plugins/opsgenie.py b/libs/apprise/plugins/NotifyOpsgenie.py index 5327ec803..c2dfed232 100644 --- a/libs/apprise/plugins/opsgenie.py +++ b/libs/apprise/plugins/NotifyOpsgenie.py @@ -49,13 +49,13 @@ import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import validate_regex from ..utils import is_uuid from ..utils import parse_list from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class OpsgenieCategory(NotifyBase): diff --git a/libs/apprise/plugins/pagerduty.py b/libs/apprise/plugins/NotifyPagerDuty.py index c9d555527..0896b41b1 100644 --- a/libs/apprise/plugins/pagerduty.py +++ b/libs/apprise/plugins/NotifyPagerDuty.py @@ -34,13 +34,13 @@ import requests from json import dumps -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..common import NotifyImageSize from ..utils import validate_regex from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class PagerDutySeverity: diff --git a/libs/apprise/plugins/pagertree.py b/libs/apprise/plugins/NotifyPagerTree.py index 8a041a358..c9290f2f7 100644 --- a/libs/apprise/plugins/pagertree.py +++ b/libs/apprise/plugins/NotifyPagerTree.py @@ -31,11 +31,11 @@ from json import dumps from uuid import uuid4 -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import parse_list from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Actions diff --git a/libs/apprise/plugins/parseplatform.py b/libs/apprise/plugins/NotifyParsePlatform.py index cd59d0575..2a182ed31 100644 --- a/libs/apprise/plugins/parseplatform.py +++ b/libs/apprise/plugins/NotifyParsePlatform.py @@ -30,10 +30,10 @@ import re import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Used to break path apart into list of targets TARGET_LIST_DELIM = re.compile(r'[ \t\r\n,\\/]+') diff --git a/libs/apprise/plugins/popcorn_notify.py b/libs/apprise/plugins/NotifyPopcornNotify.py index 388aa2199..0ecd8af68 100644 --- a/libs/apprise/plugins/popcorn_notify.py +++ b/libs/apprise/plugins/NotifyPopcornNotify.py @@ -28,14 +28,14 @@ import requests -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import is_email from ..utils import is_phone_no from ..utils import parse_list from ..utils import parse_bool from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyPopcornNotify(NotifyBase): diff --git a/libs/apprise/plugins/prowl.py b/libs/apprise/plugins/NotifyProwl.py index c174615c0..e5c07bf4e 100644 --- a/libs/apprise/plugins/prowl.py +++ b/libs/apprise/plugins/NotifyProwl.py @@ -28,10 +28,10 @@ import requests -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Priorities diff --git a/libs/apprise/plugins/pushbullet.py b/libs/apprise/plugins/NotifyPushBullet.py index 8e006db1d..5e9c43fbf 100644 --- a/libs/apprise/plugins/pushbullet.py +++ b/libs/apprise/plugins/NotifyPushBullet.py @@ -30,13 +30,13 @@ import requests from json import dumps from json import loads -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..utils import is_email from ..common import NotifyType from ..utils import parse_list from ..utils import validate_regex -from ..locale import gettext_lazy as _ -from ..attachment.base import AttachBase +from ..AppriseLocale import gettext_lazy as _ +from ..attachment.AttachBase import AttachBase # Flag used as a placeholder to sending to all devices PUSHBULLET_SEND_TO_ALL = 'ALL_DEVICES' diff --git a/libs/apprise/plugins/pushdeer.py b/libs/apprise/plugins/NotifyPushDeer.py index fa888b159..6766dc7ff 100644 --- a/libs/apprise/plugins/pushdeer.py +++ b/libs/apprise/plugins/NotifyPushDeer.py @@ -29,9 +29,9 @@ import requests from ..common import NotifyType -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Syntax: # schan://{key}/ diff --git a/libs/apprise/plugins/pushme.py b/libs/apprise/plugins/NotifyPushMe.py index abbed7944..30889f868 100644 --- a/libs/apprise/plugins/pushme.py +++ b/libs/apprise/plugins/NotifyPushMe.py @@ -28,12 +28,12 @@ import requests -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..common import NotifyFormat from ..utils import validate_regex from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyPushMe(NotifyBase): diff --git a/libs/apprise/plugins/pushsafer.py b/libs/apprise/plugins/NotifyPushSafer.py index 7bdca7a69..32cfa82fe 100644 --- a/libs/apprise/plugins/pushsafer.py +++ b/libs/apprise/plugins/NotifyPushSafer.py @@ -30,11 +30,11 @@ import base64 import requests from json import loads -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import parse_list from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class PushSaferSound: diff --git a/libs/apprise/plugins/pushed.py b/libs/apprise/plugins/NotifyPushed.py index 1ed83b9e4..a50970f99 100644 --- a/libs/apprise/plugins/pushed.py +++ b/libs/apprise/plugins/NotifyPushed.py @@ -31,12 +31,12 @@ import requests from json import dumps from itertools import chain -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import parse_list from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Used to detect and parse channels IS_CHANNEL = re.compile(r'^#?(?P<name>[A-Za-z0-9]+)$') diff --git a/libs/apprise/plugins/pushjet.py b/libs/apprise/plugins/NotifyPushjet.py index f8dcfdf31..253ac6818 100644 --- a/libs/apprise/plugins/pushjet.py +++ b/libs/apprise/plugins/NotifyPushjet.py @@ -29,11 +29,11 @@ import requests from json import dumps -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyPushjet(NotifyBase): diff --git a/libs/apprise/plugins/pushover.py b/libs/apprise/plugins/NotifyPushover.py index 954e7dd0f..be6ada289 100644 --- a/libs/apprise/plugins/pushover.py +++ b/libs/apprise/plugins/NotifyPushover.py @@ -30,14 +30,14 @@ import re import requests from itertools import chain -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..common import NotifyFormat from ..conversion import convert_between from ..utils import parse_list from ..utils import validate_regex -from ..locale import gettext_lazy as _ -from ..attachment.base import AttachBase +from ..AppriseLocale import gettext_lazy as _ +from ..attachment.AttachBase import AttachBase # Flag used as a placeholder to sending to all devices PUSHOVER_SEND_TO_ALL = 'ALL_DEVICES' diff --git a/libs/apprise/plugins/pushy.py b/libs/apprise/plugins/NotifyPushy.py index bb2a24ecd..097017dac 100644 --- a/libs/apprise/plugins/pushy.py +++ b/libs/apprise/plugins/NotifyPushy.py @@ -32,11 +32,11 @@ import requests from itertools import chain from json import dumps, loads -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import parse_list from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Used to detect a Device and Topic VALIDATE_DEVICE = re.compile(r'^@(?P<device>[a-z0-9]+)$', re.I) diff --git a/libs/apprise/plugins/rsyslog.py b/libs/apprise/plugins/NotifyRSyslog.py index 9631c72fd..e39744627 100644 --- a/libs/apprise/plugins/rsyslog.py +++ b/libs/apprise/plugins/NotifyRSyslog.py @@ -29,10 +29,10 @@ import os import socket -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class syslog: diff --git a/libs/apprise/plugins/reddit.py b/libs/apprise/plugins/NotifyReddit.py index 3a60b5e03..022a0a50d 100644 --- a/libs/apprise/plugins/reddit.py +++ b/libs/apprise/plugins/NotifyReddit.py @@ -53,14 +53,14 @@ from datetime import timedelta from datetime import datetime from datetime import timezone -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyFormat from ..common import NotifyType from ..utils import parse_list from ..utils import parse_bool from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ from .. import __title__, __version__ # Extend HTTP Error Messages diff --git a/libs/apprise/plugins/revolt.py b/libs/apprise/plugins/NotifyRevolt.py index 1f518540b..ae0a43b10 100644 --- a/libs/apprise/plugins/revolt.py +++ b/libs/apprise/plugins/NotifyRevolt.py @@ -42,13 +42,13 @@ from datetime import timedelta from datetime import datetime from datetime import timezone -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyImageSize from ..common import NotifyFormat from ..common import NotifyType from ..utils import validate_regex from ..utils import parse_list -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyRevolt(NotifyBase): diff --git a/libs/apprise/plugins/rocketchat.py b/libs/apprise/plugins/NotifyRocketChat.py index 973651e30..9011a5e71 100644 --- a/libs/apprise/plugins/rocketchat.py +++ b/libs/apprise/plugins/NotifyRocketChat.py @@ -32,14 +32,14 @@ from json import loads from json import dumps from itertools import chain -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyImageSize from ..common import NotifyFormat from ..common import NotifyType from ..utils import parse_list from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ IS_CHANNEL = re.compile(r'^#(?P<name>[A-Za-z0-9_-]+)$') IS_USER = re.compile(r'^@(?P<name>[A-Za-z0-9._-]+)$') diff --git a/libs/apprise/plugins/ryver.py b/libs/apprise/plugins/NotifyRyver.py index 114dc6a0c..0872f3e52 100644 --- a/libs/apprise/plugins/ryver.py +++ b/libs/apprise/plugins/NotifyRyver.py @@ -38,12 +38,12 @@ import re import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyImageSize from ..common import NotifyType from ..utils import parse_bool from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class RyverWebhookMode: diff --git a/libs/apprise/plugins/ses.py b/libs/apprise/plugins/NotifySES.py index 5a2c047a7..b580b14d6 100644 --- a/libs/apprise/plugins/ses.py +++ b/libs/apprise/plugins/NotifySES.py @@ -95,13 +95,13 @@ from email.utils import formataddr from email.header import Header from urllib.parse import quote -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyFormat from ..common import NotifyType from ..utils import parse_emails from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ from ..utils import is_email # Our Regin Identifier diff --git a/libs/apprise/plugins/smseagle.py b/libs/apprise/plugins/NotifySMSEagle.py index 8eddca588..33b4af752 100644 --- a/libs/apprise/plugins/smseagle.py +++ b/libs/apprise/plugins/NotifySMSEagle.py @@ -32,14 +32,14 @@ from json import dumps, loads import base64 from itertools import chain -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import validate_regex from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import parse_bool -from ..url import PrivacyMode -from ..locale import gettext_lazy as _ +from ..URLBase import PrivacyMode +from ..AppriseLocale import gettext_lazy as _ GROUP_REGEX = re.compile( diff --git a/libs/apprise/plugins/smsmanager.py b/libs/apprise/plugins/NotifySMSManager.py index 1d352daf2..efc158b62 100644 --- a/libs/apprise/plugins/smsmanager.py +++ b/libs/apprise/plugins/NotifySMSManager.py @@ -35,13 +35,13 @@ # 2. Generate an API key in web administration. import requests -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import parse_bool from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class SMSManagerGateway(object): diff --git a/libs/apprise/plugins/smtp2go.py b/libs/apprise/plugins/NotifySMTP2Go.py index 017da8111..a34492d05 100644 --- a/libs/apprise/plugins/smtp2go.py +++ b/libs/apprise/plugins/NotifySMTP2Go.py @@ -49,14 +49,14 @@ import base64 import requests from json import dumps from email.utils import formataddr -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..common import NotifyFormat from ..utils import parse_emails from ..utils import parse_bool from ..utils import is_email from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ SMTP2GO_HTTP_ERROR_MAP = { 429: 'To many requests.', diff --git a/libs/apprise/plugins/sns.py b/libs/apprise/plugins/NotifySNS.py index cc6e83076..5a287e37e 100644 --- a/libs/apprise/plugins/sns.py +++ b/libs/apprise/plugins/NotifySNS.py @@ -36,13 +36,13 @@ from collections import OrderedDict from xml.etree import ElementTree from itertools import chain -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_list from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Topic Detection # Summary: 256 Characters max, only alpha/numeric plus underscore (_) and diff --git a/libs/apprise/plugins/sendgrid.py b/libs/apprise/plugins/NotifySendGrid.py index d50839f17..b82e3e60d 100644 --- a/libs/apprise/plugins/sendgrid.py +++ b/libs/apprise/plugins/NotifySendGrid.py @@ -49,13 +49,13 @@ import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyFormat from ..common import NotifyType from ..utils import parse_list from ..utils import is_email from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Extend HTTP Error Messages SENDGRID_HTTP_ERROR_MAP = { diff --git a/libs/apprise/plugins/serverchan.py b/libs/apprise/plugins/NotifyServerChan.py index e3abaa354..cf250cf5b 100644 --- a/libs/apprise/plugins/serverchan.py +++ b/libs/apprise/plugins/NotifyServerChan.py @@ -30,9 +30,9 @@ import re import requests from ..common import NotifyType -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Register at https://sct.ftqq.com/ diff --git a/libs/apprise/plugins/signal_api.py b/libs/apprise/plugins/NotifySignalAPI.py index 7e557133c..b35b4989e 100644 --- a/libs/apprise/plugins/signal_api.py +++ b/libs/apprise/plugins/NotifySignalAPI.py @@ -31,13 +31,13 @@ import requests from json import dumps import base64 -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import parse_bool -from ..url import PrivacyMode -from ..locale import gettext_lazy as _ +from ..URLBase import PrivacyMode +from ..AppriseLocale import gettext_lazy as _ GROUP_REGEX = re.compile( diff --git a/libs/apprise/plugins/simplepush.py b/libs/apprise/plugins/NotifySimplePush.py index 10b01b0f8..3851e1e3c 100644 --- a/libs/apprise/plugins/simplepush.py +++ b/libs/apprise/plugins/NotifySimplePush.py @@ -30,11 +30,11 @@ from os import urandom from json import loads import requests -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ from base64 import urlsafe_b64encode import hashlib diff --git a/libs/apprise/plugins/sinch.py b/libs/apprise/plugins/NotifySinch.py index 06bd5b1e7..74b3c452a 100644 --- a/libs/apprise/plugins/sinch.py +++ b/libs/apprise/plugins/NotifySinch.py @@ -39,13 +39,13 @@ import requests import json -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class SinchRegion: diff --git a/libs/apprise/plugins/slack.py b/libs/apprise/plugins/NotifySlack.py index b929dfb46..b66fe99f4 100644 --- a/libs/apprise/plugins/slack.py +++ b/libs/apprise/plugins/NotifySlack.py @@ -78,7 +78,7 @@ from json import dumps from json import loads from time import time -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyImageSize from ..common import NotifyType from ..common import NotifyFormat @@ -86,7 +86,7 @@ from ..utils import is_email from ..utils import parse_bool from ..utils import parse_list from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Extend HTTP Error Messages SLACK_HTTP_ERROR_MAP = { diff --git a/libs/apprise/plugins/sparkpost.py b/libs/apprise/plugins/NotifySparkPost.py index b873d6b0e..255db0709 100644 --- a/libs/apprise/plugins/sparkpost.py +++ b/libs/apprise/plugins/NotifySparkPost.py @@ -58,7 +58,7 @@ import requests import base64 from json import loads from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..common import NotifyFormat from ..utils import is_email @@ -66,7 +66,7 @@ from email.utils import formataddr from ..utils import validate_regex from ..utils import parse_emails from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Provide some known codes SparkPost uses and what they translate to: # Based on https://www.sparkpost.com/docs/tech-resources/extended-error-codes/ diff --git a/libs/apprise/plugins/streamlabs.py b/libs/apprise/plugins/NotifyStreamlabs.py index c534f1ba6..d1e4186a6 100644 --- a/libs/apprise/plugins/streamlabs.py +++ b/libs/apprise/plugins/NotifyStreamlabs.py @@ -38,10 +38,10 @@ # import requests -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # calls diff --git a/libs/apprise/plugins/synology.py b/libs/apprise/plugins/NotifySynology.py index ed85f80c0..be58c0643 100644 --- a/libs/apprise/plugins/synology.py +++ b/libs/apprise/plugins/NotifySynology.py @@ -29,10 +29,10 @@ import requests from json import dumps -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # For API Details see: # https://kb.synology.com/en-au/DSM/help/Chat/chat_integration diff --git a/libs/apprise/plugins/syslog.py b/libs/apprise/plugins/NotifySyslog.py index 935111eea..5540fc758 100644 --- a/libs/apprise/plugins/syslog.py +++ b/libs/apprise/plugins/NotifySyslog.py @@ -28,10 +28,10 @@ import syslog -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class SyslogFacility: diff --git a/libs/apprise/plugins/techuluspush.py b/libs/apprise/plugins/NotifyTechulusPush.py index 682bf088e..4d0b99348 100644 --- a/libs/apprise/plugins/techuluspush.py +++ b/libs/apprise/plugins/NotifyTechulusPush.py @@ -53,10 +53,10 @@ import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Token required as part of the API request # Used to prepare our UUID regex matching diff --git a/libs/apprise/plugins/telegram.py b/libs/apprise/plugins/NotifyTelegram.py index 6b997f574..cce8af625 100644 --- a/libs/apprise/plugins/telegram.py +++ b/libs/apprise/plugins/NotifyTelegram.py @@ -59,15 +59,15 @@ import os from json import loads from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..common import NotifyImageSize from ..common import NotifyFormat from ..utils import parse_bool from ..utils import parse_list from ..utils import validate_regex -from ..locale import gettext_lazy as _ -from ..attachment.base import AttachBase +from ..AppriseLocale import gettext_lazy as _ +from ..attachment.AttachBase import AttachBase TELEGRAM_IMAGE_XY = NotifyImageSize.XY_256 diff --git a/libs/apprise/plugins/threema.py b/libs/apprise/plugins/NotifyThreema.py index 423c23124..c2ad82e2e 100644 --- a/libs/apprise/plugins/threema.py +++ b/libs/apprise/plugins/NotifyThreema.py @@ -35,14 +35,14 @@ import requests from itertools import chain -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import is_phone_no from ..utils import validate_regex from ..utils import is_email -from ..url import PrivacyMode +from ..URLBase import PrivacyMode from ..utils import parse_list -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class ThreemaRecipientTypes: diff --git a/libs/apprise/plugins/twilio.py b/libs/apprise/plugins/NotifyTwilio.py index 4205e37f0..863b09a94 100644 --- a/libs/apprise/plugins/twilio.py +++ b/libs/apprise/plugins/NotifyTwilio.py @@ -46,13 +46,13 @@ import requests from json import loads -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyTwilio(NotifyBase): diff --git a/libs/apprise/plugins/twist.py b/libs/apprise/plugins/NotifyTwist.py index 62d729f4f..fa26feb84 100644 --- a/libs/apprise/plugins/twist.py +++ b/libs/apprise/plugins/NotifyTwist.py @@ -35,13 +35,13 @@ import requests from json import loads from itertools import chain -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyFormat from ..common import NotifyType from ..utils import parse_list from ..utils import is_email -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # A workspace can also be interpreted as a team name too! diff --git a/libs/apprise/plugins/twitter.py b/libs/apprise/plugins/NotifyTwitter.py index 8000a8151..7a0813c1f 100644 --- a/libs/apprise/plugins/twitter.py +++ b/libs/apprise/plugins/NotifyTwitter.py @@ -36,14 +36,14 @@ from datetime import timezone from requests_oauthlib import OAuth1 from json import dumps from json import loads -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import parse_list from ..utils import parse_bool from ..utils import validate_regex -from ..locale import gettext_lazy as _ -from ..attachment.base import AttachBase +from ..AppriseLocale import gettext_lazy as _ +from ..attachment.AttachBase import AttachBase IS_USER = re.compile(r'^\s*@?(?P<user>[A-Z0-9_]+)$', re.I) diff --git a/libs/apprise/plugins/voipms.py b/libs/apprise/plugins/NotifyVoipms.py index 3a4e6d25f..a023589a7 100644 --- a/libs/apprise/plugins/voipms.py +++ b/libs/apprise/plugins/NotifyVoipms.py @@ -37,12 +37,12 @@ import requests from json import loads -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import is_phone_no from ..utils import is_email from ..utils import parse_phone_no -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyVoipms(NotifyBase): diff --git a/libs/apprise/plugins/vonage.py b/libs/apprise/plugins/NotifyVonage.py index 441a6ba6b..e9b1422ad 100644 --- a/libs/apprise/plugins/vonage.py +++ b/libs/apprise/plugins/NotifyVonage.py @@ -33,13 +33,13 @@ # import requests -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyVonage(NotifyBase): diff --git a/libs/apprise/plugins/wecombot.py b/libs/apprise/plugins/NotifyWeComBot.py index ab6341718..4289b39e9 100644 --- a/libs/apprise/plugins/wecombot.py +++ b/libs/apprise/plugins/NotifyWeComBot.py @@ -59,10 +59,10 @@ import re import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyWeComBot(NotifyBase): diff --git a/libs/apprise/plugins/webexteams.py b/libs/apprise/plugins/NotifyWebexTeams.py index bd0bdb577..c91864bad 100644 --- a/libs/apprise/plugins/webexteams.py +++ b/libs/apprise/plugins/NotifyWebexTeams.py @@ -63,11 +63,11 @@ import re import requests from json import dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..common import NotifyFormat from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Extend HTTP Error Messages # Based on: https://developer.webex.com/docs/api/basics/rate-limiting diff --git a/libs/apprise/plugins/whatsapp.py b/libs/apprise/plugins/NotifyWhatsApp.py index 7120d736c..4ccbcbdaf 100644 --- a/libs/apprise/plugins/whatsapp.py +++ b/libs/apprise/plugins/NotifyWhatsApp.py @@ -44,12 +44,12 @@ import re import requests from json import loads, dumps -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import is_phone_no from ..utils import parse_phone_no from ..utils import validate_regex -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyWhatsApp(NotifyBase): diff --git a/libs/apprise/plugins/windows.py b/libs/apprise/plugins/NotifyWindows.py index 746fcd1dd..207e0f221 100644 --- a/libs/apprise/plugins/windows.py +++ b/libs/apprise/plugins/NotifyWindows.py @@ -28,11 +28,11 @@ from time import sleep -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyImageSize from ..common import NotifyType from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # Default our global support flag NOTIFY_WINDOWS_SUPPORT_ENABLED = False diff --git a/libs/apprise/plugins/xbmc.py b/libs/apprise/plugins/NotifyXBMC.py index 8006e1005..7d4462e41 100644 --- a/libs/apprise/plugins/xbmc.py +++ b/libs/apprise/plugins/NotifyXBMC.py @@ -29,12 +29,12 @@ import requests from json import dumps -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyType from ..common import NotifyImageSize from ..utils import parse_bool -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class NotifyXBMC(NotifyBase): diff --git a/libs/apprise/plugins/custom_xml.py b/libs/apprise/plugins/NotifyXML.py index b7928fceb..21ccb79d3 100644 --- a/libs/apprise/plugins/custom_xml.py +++ b/libs/apprise/plugins/NotifyXML.py @@ -30,11 +30,11 @@ import re import requests import base64 -from .base import NotifyBase -from ..url import PrivacyMode +from .NotifyBase import NotifyBase +from ..URLBase import PrivacyMode from ..common import NotifyImageSize from ..common import NotifyType -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ class XMLPayloadField: diff --git a/libs/apprise/plugins/zulip.py b/libs/apprise/plugins/NotifyZulip.py index e829e6f6d..54fe2d062 100644 --- a/libs/apprise/plugins/zulip.py +++ b/libs/apprise/plugins/NotifyZulip.py @@ -61,13 +61,13 @@ import re import requests -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyType from ..utils import parse_list from ..utils import validate_regex from ..utils import is_email from ..utils import remove_suffix -from ..locale import gettext_lazy as _ +from ..AppriseLocale import gettext_lazy as _ # A Valid Bot Name VALIDATE_BOTNAME = re.compile(r'(?P<name>[A-Z0-9_-]{1,32})', re.I) diff --git a/libs/apprise/plugins/__init__.py b/libs/apprise/plugins/__init__.py index bfce14371..72cb08fbf 100644 --- a/libs/apprise/plugins/__init__.py +++ b/libs/apprise/plugins/__init__.py @@ -30,7 +30,7 @@ import os import copy # Used for testing -from .base import NotifyBase +from .NotifyBase import NotifyBase from ..common import NotifyImageSize from ..common import NOTIFY_IMAGE_SIZES @@ -40,9 +40,9 @@ from ..utils import parse_list from ..utils import cwe312_url from ..utils import GET_SCHEMA_RE from ..logger import logger -from ..locale import gettext_lazy as _ -from ..locale import LazyTranslation -from ..manager_plugins import NotificationManager +from ..AppriseLocale import gettext_lazy as _ +from ..AppriseLocale import LazyTranslation +from ..NotificationManager import NotificationManager # Grant access to our Notification Manager Singleton diff --git a/libs/apprise/utils.py b/libs/apprise/utils.py index b33ec0749..e1881f314 100644 --- a/libs/apprise/utils.py +++ b/libs/apprise/utils.py @@ -541,7 +541,7 @@ def tidy_path(path): return path -def parse_qsd(qs, simple=False, plus_to_space=False, sanitize=True): +def parse_qsd(qs, simple=False, plus_to_space=False): """ Query String Dictionary Builder @@ -568,8 +568,6 @@ def parse_qsd(qs, simple=False, plus_to_space=False, sanitize=True): per normal URL Encoded defininition. Normal URL parsing applies this, but `+` is very actively used character with passwords, api keys, tokens, etc. So Apprise does not do this by default. - - if sanitize is set to False, then kwargs are not placed into lowercase """ # Our return result set: @@ -610,7 +608,7 @@ def parse_qsd(qs, simple=False, plus_to_space=False, sanitize=True): # Always Query String Dictionary (qsd) for every entry we have # content is always made lowercase for easy indexing - result['qsd'][key.lower().strip() if sanitize else key] = val + result['qsd'][key.lower().strip()] = val if simple: # move along @@ -638,7 +636,7 @@ def parse_qsd(qs, simple=False, plus_to_space=False, sanitize=True): def parse_url(url, default_schema='http', verify_host=True, strict_port=False, - simple=False, plus_to_space=False, sanitize=True): + simple=False, plus_to_space=False): """A function that greatly simplifies the parsing of a url specified by the end user. @@ -693,8 +691,6 @@ def parse_url(url, default_schema='http', verify_host=True, strict_port=False, If the URL can't be parsed then None is returned - If sanitize is set to False, then kwargs are not placed in lowercase - and wrapping whitespace is not removed """ if not isinstance(url, str): @@ -754,8 +750,7 @@ def parse_url(url, default_schema='http', verify_host=True, strict_port=False, # while ensuring that all keys are lowercase if qsdata: result.update(parse_qsd( - qsdata, simple=simple, plus_to_space=plus_to_space, - sanitize=sanitize)) + qsdata, simple=simple, plus_to_space=plus_to_space)) # Now do a proper extraction of data; http:// is just substitued in place # to allow urlparse() to function as expected, we'll swap this back to the diff --git a/libs/version.txt b/libs/version.txt index 8ac12d74d..ccabf65cc 100644 --- a/libs/version.txt +++ b/libs/version.txt @@ -2,7 +2,7 @@ alembic==1.13.1 aniso8601==9.0.1 argparse==1.4.0 -apprise==1.8.0 +apprise==1.7.6 apscheduler<=3.10.4 attrs==23.2.0 blinker==1.7.0 |