Apprise - Push Notifications that work with just about every platform!
This report summarizes scanner evidence for caronc/apprise, a Python project with 17,560 GitHub stars. SynthScan examined 304,909 lines of code across 518 source files, recording 5334 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 27.7 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 4016 finding(s).
Are imports declared and package/API names verified? 364 finding(s).
Are wrappers, guards, and repeated structures necessary? 3752 finding(s).
Which changes need focused human review? 5334 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 5334 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_notification_manager.py | 0 | verify all native config plugins load without trace import errors. | STRING |
| HIGH | tests/test_apprise_attachments.py | 0 | verify all native config plugins load without trace import errors. | STRING |
| HIGH | tests/test_apprise_config.py | 0 | verify all native config plugins load without trace import errors. | STRING |
| HIGH | tests/test_plugin_jira.py | 0 | verify a region that isn't a string is rejected cleanly. | STRING |
| HIGH | tests/test_plugin_mailgun.py | 0 | verify a region that isn't a string is rejected cleanly. | STRING |
| HIGH | tests/test_plugin_opsgenie.py | 0 | verify a region that isn't a string is rejected cleanly. | STRING |
| HIGH | tests/test_plugin_evolution.py | 0 | bare-paren links and standalone autolinks convert safely. | STRING |
| HIGH | tests/test_plugin_slack.py | 0 | bare-paren links and standalone autolinks convert safely. | STRING |
| HIGH | tests/test_plugin_google_chat.py | 0 | bare-paren links and standalone autolinks convert safely. | STRING |
| HIGH | tests/test_plugin_evolution.py | 0 | keep the outer link when a nested angle link is invalid. | STRING |
| HIGH | tests/test_plugin_slack.py | 0 | keep the outer link when a nested angle link is invalid. | STRING |
| HIGH | tests/test_plugin_google_chat.py | 0 | keep the outer link when a nested angle link is invalid. | STRING |
| HIGH | tests/test_plugin_evolution.py | 0 | a "]" with no "(" must retire its "[" instead of leaving it pending for a later, unrelated link to reuse. | STRING |
| HIGH | tests/test_plugin_slack.py | 0 | a "]" with no "(" must retire its "[" instead of leaving it pending for a later, unrelated link to reuse. | STRING |
| HIGH | tests/test_plugin_google_chat.py | 0 | a "]" with no "(" must retire its "[" instead of leaving it pending for a later, unrelated link to reuse. | STRING |
| HIGH | tests/test_plugin_telegram.py | 0 | regression: attachmemory must be sendable without oserror. | STRING |
| HIGH | tests/test_plugin_discord.py | 0 | regression: attachmemory must be sendable without oserror. | STRING |
| HIGH | tests/test_plugin_pushover.py | 0 | regression: attachmemory must be sendable without oserror. | STRING |
| HIGH | tests/test_plugin_fluxer.py | 0 | regression: attachmemory must be sendable without oserror. | STRING |
| HIGH | tests/test_plugin_slack.py | 0 | regression: attachmemory must be sendable without oserror. | STRING |
| HIGH | tests/test_plugin_revolt.py | 0 | # heading @everyone and @admin, wake and meet our new user <@123>; <@&456>" | STRING |
| HIGH | tests/test_plugin_discord.py | 0 | # heading @everyone and @admin, wake and meet our new user <@123>; <@&456>" | STRING |
| HIGH | tests/test_plugin_fluxer.py | 0 | # heading @everyone and @admin, wake and meet our new user <@123>; <@&456>" | STRING |
| HIGH | apprise/apprise.py | 0 | allows the apprise object to be wrapped in an 'if statement'. true is returned if at least one service has been loaded. | STRING |
| HIGH | apprise/apprise_config.py | 0 | allows the apprise object to be wrapped in an 'if statement'. true is returned if at least one service has been loaded. | STRING |
| HIGH | apprise/apprise_attachment.py | 0 | allows the apprise object to be wrapped in an 'if statement'. true is returned if at least one service has been loaded. | STRING |
| HIGH | apprise/url.py | 0 | parses the url and returns it broken apart into a dictionary. this is very specific and customized for apprise. args: ur | STRING |
| HIGH | apprise/config/base.py | 0 | parses the url and returns it broken apart into a dictionary. this is very specific and customized for apprise. args: ur | STRING |
| HIGH | apprise/attachment/base.py | 0 | parses the url and returns it broken apart into a dictionary. this is very specific and customized for apprise. args: ur | STRING |
| HIGH | apprise/config/memory.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/config/file.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/config/http.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/apprise_api.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/sfr.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/humhub.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/revolt.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/enigma2.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/zulip.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/httpsms.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/prowl.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/voipms.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/clickatell.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/messagebird.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/pagertree.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/stackfield.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/ntfy.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/one_signal.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/groupme.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/dingtalk.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/kodi.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/eight00com.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/simplepush.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/ses.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/kook.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/smtp2go.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/kavenegar.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/whatsapp.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/synology.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/zoom.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/kumulos.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| 535 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 493 | def my_custom_notification_wrapper(body, title, notify_type, *args, **kwargs): | CODE |
| LOW | tests/test_plugin_smpp.py | 140 | def test_plugin_smpplib_import_error(): | CODE |
| LOW | tests/test_plugin_smpp.py | 171 | def test_plugin_smpp_edge_case(): | CODE |
| LOW | tests/test_plugin_smpp.py | 221 | def test_plugin_smpp_retry_keeps_part_reference(): | CODE |
| LOW | tests/test_plugin_rocket_chat.py | 329 | def test_plugin_rocket_chat_urls(): | CODE |
| LOW | tests/test_plugin_rocket_chat.py | 338 | def test_plugin_rocket_chat_edge_cases(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_rocket_chat.py | 445 | def test_plugin_rocket_chat_html_to_markdown_format(mock_post): | CODE |
| LOW | tests/test_plugin_rocket_chat.py | 477 | def test_plugin_rocket_chat_retry(mock_post, mock_sleep): | CODE |
| LOW⚡ | tests/test_plugin_wechat.py | 908 | def test_plugin_wechat_parse_native_url(): | CODE |
| LOW⚡ | tests/test_plugin_wechat.py | 916 | def test_plugin_wechat_error_codes(): | CODE |
| LOW⚡ | tests/test_plugin_wechat.py | 926 | def test_plugin_wechat_apprise_integration(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 305 | def test_plugin_wechat_url_round_trip(): | CODE |
| LOW | tests/test_plugin_wechat.py | 390 | def test_plugin_wechat_url_identifier(): | CODE |
| LOW | tests/test_plugin_wechat.py | 411 | def test_plugin_wechat_send_ok(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 444 | def test_plugin_wechat_send_cached_token(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 480 | def test_plugin_wechat_send_all_targets(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 520 | def test_plugin_wechat_send_markdown(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 557 | def test_plugin_wechat_send_no_targets(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 569 | def test_plugin_wechat_token_fetch_http_error(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 590 | def test_plugin_wechat_token_fetch_api_error(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 616 | def test_plugin_wechat_token_fetch_no_token_field(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 639 | def test_plugin_wechat_token_fetch_bad_json(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 658 | def test_plugin_wechat_token_fetch_request_exception(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 674 | def test_plugin_wechat_send_http_error(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 707 | def test_plugin_wechat_send_api_error(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 740 | def test_plugin_wechat_send_token_expiry_evicts_cache(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 776 | def test_plugin_wechat_send_token_expiry_all_codes(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 813 | def test_plugin_wechat_send_bad_json(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 849 | def test_plugin_wechat_send_request_exception(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 877 | def test_plugin_wechat_parse_url(): | CODE |
| LOW | tests/test_plugin_wechat.py | 953 | def test_plugin_wechat_send_unknown_api_error(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 986 | def test_plugin_wechat_token_unknown_api_error(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wecombot.py | 111 | def test_plugin_wecombot_urls(): | CODE |
| LOW | tests/test_apprise_translations.py | 69 | def test_apprise_trans_gettext_init(): | CODE |
| LOW | tests/test_apprise_translations.py | 93 | def test_apprise_trans_gettext_translations( | CODE |
| LOW | tests/test_apprise_translations.py | 120 | def test_apprise_trans_gettext_lang_at(mock_getlocale): | CODE |
| LOW | tests/test_apprise_translations.py | 328 | def test_detect_language_precedence(mock_getlocale): | CODE |
| LOW | tests/test_apprise_translations.py | 422 | def test_lang_at_invalid_entries(): | CODE |
| LOW | tests/test_apprise_translations.py | 440 | def test_lazy_translation_context(mock_translation): | CODE |
| LOW | tests/test_apprise_translations.py | 467 | def test_asset_language_honored(mock_translation): | CODE |
| LOW | tests/test_apprise_translations.py | 543 | def test_apprise_trans_windows_users_win(mock_getlocale): | CODE |
| LOW | tests/test_apprise_translations.py | 587 | def test_apprise_trans_windows_users_nux(mock_getlocale): | CODE |
| LOW | tests/test_apprise_translations.py | 637 | def test_detect_language_using_env(mock_getlocale): | CODE |
| LOW | tests/test_apprise_translations.py | 691 | def test_apprise_trans_gettext_missing(tmpdir): | CODE |
| LOW | tests/test_apprise_translations.py | 748 | def test_apprise_locale_add_existing_language(mock_translation): | CODE |
| LOW | tests/test_apprise_translations.py | 762 | def test_apprise_trans_successful_translation( | CODE |
| LOW | tests/test_plugin_nextcloud.py | 56 | def test_plugin_nextcloud_discovery_exception(): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 267 | def test_plugin_nextcloud_urls(): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 275 | def test_plugin_nextcloud_edge_cases(mock_post): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 302 | def test_plugin_nextcloud_url_prefix(mock_post): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 335 | def test_plugin_nextcloud_groups_and_all(mock_get, mock_post): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 407 | def test_plugin_nextcloud_persistent_storage(mock_get, mock_post, tmpdir): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 492 | def test_plugin_nextcloud_groups_errors_and_dedup(mock_get, mock_post): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 533 | def test_plugin_nextcloud_req_exception_and_empty_targets(mock_get, mock_post): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 566 | def test_plugin_nextcloud_json_empty_returns_empty(mock_get, mock_post): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 609 | def test_plugin_nextcloud_caching_group_and_all(mock_get, mock_post): | CODE |
| LOW⚡ | tests/test_plugin_bluesky.py | 929 | def test_plugin_bluesky_did_web_and_plc_resolution( | CODE |
| LOW | tests/test_plugin_bluesky.py | 346 | def test_plugin_bluesky_general(mocker): | CODE |
| LOW | tests/test_plugin_bluesky.py | 488 | def test_plugin_bluesky_edge_cases(): | CODE |
| LOW | tests/test_plugin_bluesky.py | 497 | def test_plugin_bluesky_attachments_basic( | CODE |
| 2698 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 321 | # Also subdirectory handling allows you to leverage plugins | COMMENT |
| LOW | README.md | 501 | ``` | COMMENT |
| LOW | win-requirements.txt | 1 | # | COMMENT |
| LOW | setup.py | 1 | #!/usr/bin/env python | COMMENT |
| LOW | setup.py | 21 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | COMMENT |
| LOW | docker-compose.yml | 81 | # | COMMENT |
| LOW | packaging/i18n_normalize.sh | 1 | #!/usr/bin/sh | COMMENT |
| LOW | packaging/i18n_normalize.sh | 21 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | COMMENT |
| LOW | packaging/verify_translations.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | packaging/i18n_status.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | bin/build-rpm.sh | 1 | #!/bin/bash | COMMENT |
| LOW | bin/checkdone.sh | 1 | #!/bin/bash | COMMENT |
| LOW | bin/test.sh | 1 | #!/bin/bash | COMMENT |
| LOW | bin/test.sh | 21 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE | COMMENT |
| LOW | tests/test_plugin_smpp.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_rocket_chat.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_d7networks.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_wechat.py | 1 | # | COMMENT |
| LOW | tests/test_plugin_wechat.py | 21 | # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS | COMMENT |
| LOW | tests/test_plugin_wecombot.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_misskey.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_apprise_translations.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_nextcloud.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_bluesky.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_custom_xml.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_result.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_title_maxlen.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_macosx.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_windows.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_windows.py | 121 | # module-level `from apprise.plugins.X import NotifyX` in other | COMMENT |
| LOW | tests/test_attach_base.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_utils_yaml.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_apprise_emojis.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_nextcloudtalk.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_notifiarr.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_delivery_tracking.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_signalgrid.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_ses.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_exotel.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_pinglet.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_streamlabs.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/conftest.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_matrix_sizing.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_notification_manager.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_pushjet.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_email_smtp.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_utils_pem.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_wxpusher.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_wpush.py | 1 | # | COMMENT |
| LOW | tests/test_plugin_homeassistant.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_apprise_jsonencoder.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_resend.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_deltachat.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_utils_http.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_freemobile.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_pushme.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_syslog.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_mailersend.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_utils_pgp.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_glib.py | 1 | # BSD 2-Clause License | COMMENT |
| 713 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_plugin_wechat.py | 131 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 133 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 141 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 143 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 151 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 153 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 163 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 165 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 173 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 175 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 183 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 185 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 193 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 195 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 203 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 205 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 215 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 217 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 74 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 76 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 105 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 107 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 118 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 120 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 234 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 236 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_notification_manager.py | 754 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | tests/test_notification_manager.py | 756 | # =========================================================================== | COMMENT |
| MEDIUM | tests/test_notification_manager.py | 520 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_notification_manager.py | 493 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | tests/test_notification_manager.py | 495 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | tests/test_utils_wkd.py | 42 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 44 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 53 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 55 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 119 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 121 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 362 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 364 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 417 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 419 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 659 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 661 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_utils_wkd.py | 288 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_utils_wkd.py | 290 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_utils_wkd.py | 462 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_utils_wkd.py | 464 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_utils_wkd.py | 691 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_utils_wkd.py | 693 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_evolution.py | 168 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_evolution.py | 170 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_evolution.py | 210 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_evolution.py | 212 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_evolution.py | 42 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_evolution.py | 44 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_flowtriq.py | 187 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | tests/test_plugin_flowtriq.py | 189 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | tests/test_plugin_flowtriq.py | 217 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | tests/test_plugin_flowtriq.py | 219 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM | tests/test_plugin_flowtriq.py | 230 | # ------------------------------------------------------------------ | COMMENT |
| 128 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_attach_base.py | 72 | # Create an object with no mimetype over-ride | COMMENT |
| MEDIUM | tests/test_utils_pem.py | 62 | # Create a PEM Controller | COMMENT |
| MEDIUM | tests/test_utils_pem.py | 510 | # Create a PEM Controller | COMMENT |
| MEDIUM | tests/test_config_base.py | 1150 | # Define an Asset object if you wish (Optional) | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 235 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 279 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 325 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 371 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 406 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 452 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 541 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 586 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_burstsms.py | 230 | # Initialize our object | COMMENT |
| MEDIUM | tests/test_config_file.py | 53 | # Create an Apprise asset we can reference | COMMENT |
| MEDIUM | tests/test_config_file.py | 56 | # Initialize our object | COMMENT |
| MEDIUM | tests/test_config_file.py | 113 | # Initialize our object | COMMENT |
| MEDIUM | tests/test_apprise_attachments.py | 404 | # Create a base area to work within | COMMENT |
| MEDIUM | tests/test_apprise_cli.py | 1114 | # Create a config file we can source easily | COMMENT |
| MEDIUM | tests/test_apprise_cli.py | 1118 | # Define a second test URL that will | COMMENT |
| MEDIUM | tests/test_apprise_cli.py | 1363 | # Create a stale 8-char namespace on disk that belongs to a different | STRING |
| MEDIUM | tests/test_apprise_cli.py | 1660 | # Create a tmporary namespace | STRING |
| MEDIUM | tests/test_apprise_cli.py | 1992 | """This class is used to test various requirement configurations.""" | STRING |
| MEDIUM | tests/test_apprise_cli.py | 2015 | """This class is used to test various requirement configurations.""" | STRING |
| MEDIUM | tests/test_apprise_cli.py | 2042 | """This class is used to test various requirement configurations.""" | STRING |
| MEDIUM | tests/test_apprise_cli.py | 2064 | """This class is used to test a case where our requirements is fixed to | STRING |
| MEDIUM | tests/test_apprise_cli.py | 2082 | """This class is used to test a case where only packages_recommended is | STRING |
| MEDIUM | tests/test_apprise_cli.py | 2100 | """This class is used to test a pre-disabled state.""" | STRING |
| MEDIUM | tests/test_apprise_cli.py | 2120 | """This class is used to test a post-disabled state.""" | STRING |
| MEDIUM | tests/test_apprise_cli.py | 2144 | """This class is just a simple enabled one.""" | STRING |
| MEDIUM | tests/test_apprise_config.py | 916 | # Create a temporary config file | COMMENT |
| MEDIUM | tests/test_apprise_config.py | 1003 | # Create a base area to work within | COMMENT |
| MEDIUM | tests/test_apprise_config.py | 133 | # Create a ConfigBase object | STRING |
| MEDIUM | tests/test_plugin_base_formatting.py | 91 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 322 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 555 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 1075 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 1677 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 2239 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 2688 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 3161 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_twilio.py | 391 | # Initialize our object | COMMENT |
| MEDIUM | tests/test_apprise_utils.py | 3689 | # Create a directory insde one of our namespaces | COMMENT |
| MEDIUM | tests/test_plugin_email.py | 561 | # Create a mock SMTP Object | COMMENT |
| MEDIUM | tests/test_plugin_email.py | 844 | # Create an apprise object to work with as well | COMMENT |
| MEDIUM | tests/test_plugin_email.py | 2700 | # Create a mock SMTP Object | COMMENT |
| MEDIUM | tests/test_plugin_email.py | 4055 | # Create a fake matching keyfile to trigger discovery | COMMENT |
| MEDIUM | tests/test_decorator_notify.py | 61 | # Define a function here on the spot | COMMENT |
| MEDIUM | tests/test_decorator_notify.py | 292 | # Define a function here on the spot | COMMENT |
| MEDIUM | tests/test_decorator_notify.py | 406 | # Define a function here on the spot | COMMENT |
| MEDIUM | tests/test_decorator_notify.py | 650 | # Define a function here on the spot | COMMENT |
| MEDIUM⚡ | tests/test_plugin_xmpp.py | 4959 | # Create a client using the production factory | COMMENT |
| MEDIUM | tests/test_plugin_revolt.py | 468 | # Create an apprise instance | COMMENT |
| MEDIUM | tests/test_plugin_revolt.py | 503 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_matrix.py | 5178 | # Create a second account to act as recipient | COMMENT |
| MEDIUM | tests/test_plugin_discord.py | 910 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_discord.py | 1483 | # Create the template so that add() succeeds during init | COMMENT |
| MEDIUM | tests/test_plugin_discord.py | 737 | # Create an apprise instance | STRING |
| MEDIUM | tests/test_plugin_discord.py | 826 | # Create an apprise instance | STRING |
| MEDIUM | tests/test_plugin_discord.py | 871 | # Create an apprise instance | STRING |
| MEDIUM | tests/test_plugin_voipms.py | 244 | # Initialize our object | COMMENT |
| 134 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_delivery_tracking_retry.py | 366 | except ImportError: | CODE |
| HIGH | tests/test_delivery_tracking_retry.py | 383 | except ImportError: | CODE |
| HIGH | tests/test_plugin_growl.py | 47 | except ImportError: | CODE |
| HIGH | tests/test_plugin_fcm.py | 54 | except ImportError: | CODE |
| HIGH | apprise/persistent_store.py | 71 | except (FileNotFoundError, AttributeError): | CODE |
| HIGH | apprise/persistent_store.py | 472 | except (FileNotFoundError, exception.AppriseDiskIOError): | CODE |
| HIGH | apprise/persistent_store.py | 670 | except FileNotFoundError: | CODE |
| HIGH | apprise/persistent_store.py | 690 | except FileNotFoundError: | CODE |
| HIGH | apprise/persistent_store.py | 847 | except KeyError: | CODE |
| HIGH | apprise/persistent_store.py | 1090 | except FileNotFoundError: | CODE |
| HIGH | apprise/persistent_store.py | 1129 | except FileNotFoundError: | CODE |
| HIGH | apprise/persistent_store.py | 1148 | except FileNotFoundError: | CODE |
| HIGH | apprise/persistent_store.py | 1812 | except FileNotFoundError: | CODE |
| HIGH | apprise/persistent_store.py | 726 | except FileNotFoundError: | CODE |
| HIGH | apprise/persistent_store.py | 879 | except KeyError: | CODE |
| HIGH | apprise/persistent_store.py | 970 | except FileNotFoundError: | CODE |
| HIGH | apprise/persistent_store.py | 1579 | except OSError: | CODE |
| HIGH | apprise/locale.py | 53 | except ImportError: | CODE |
| HIGH | apprise/locale.py | 361 | except (TypeError, KeyError): | CODE |
| HIGH | apprise/plugins/humhub.py | 191 | except (ValueError, TypeError): | CODE |
| HIGH | apprise/plugins/revolt.py | 311 | except (TypeError, ValueError): | CODE |
| HIGH | apprise/plugins/dbus.py | 101 | except ImportError: | CODE |
| HIGH | apprise/plugins/dbus.py | 61 | except ImportError: # pragma: no cover | CODE |
| HIGH | apprise/plugins/dbus.py | 71 | except ImportError: | CODE |
| HIGH | apprise/plugins/dbus.py | 94 | except (ImportError, ValueError, AttributeError): | CODE |
| HIGH | apprise/plugins/mastodon.py | 1182 | except (TypeError, ValueError): | CODE |
| HIGH | apprise/plugins/discord.py | 890 | except (TypeError, ValueError): | CODE |
| HIGH | apprise/plugins/blink1.py | 48 | except ImportError: | CODE |
| HIGH | apprise/plugins/mqtt.py | 694 | except ImportError: # pragma: no cover | CODE |
| HIGH | apprise/plugins/sinch.py | 369 | except (AttributeError, TypeError, ValueError): | CODE |
| HIGH | apprise/plugins/gnome.py | 50 | except (ImportError, ValueError, AttributeError): | CODE |
| HIGH | apprise/plugins/twitter.py | 667 | except (TypeError, KeyError): | CODE |
| HIGH | apprise/plugins/twitter.py | 851 | except (TypeError, ValueError): | CODE |
| HIGH | apprise/plugins/glib.py | 75 | except ImportError: | CODE |
| HIGH | apprise/plugins/glib.py | 68 | except (ImportError, ValueError, AttributeError): | CODE |
| HIGH | apprise/plugins/growl.py | 43 | except ImportError: | CODE |
| HIGH | apprise/plugins/bluesky.py | 659 | except (TypeError, ValueError): | CODE |
| HIGH | apprise/plugins/windows.py | 48 | except ImportError: | CODE |
| HIGH | apprise/plugins/reddit.py | 737 | except (TypeError, ValueError): | CODE |
| HIGH | apprise/plugins/xmpp/adapter.py | 732 | except Exception: | CODE |
| HIGH | apprise/plugins/xmpp/base.py | 314 | except Exception: | CODE |
| HIGH | apprise/plugins/matrix/base.py | 1845 | except KeyError: | CODE |
| HIGH | apprise/plugins/matrix/base.py | 1780 | except KeyError: | CODE |
| HIGH | apprise/plugins/matrix/base.py | 2649 | except Exception: | CODE |
| HIGH | apprise/plugins/matrix/base.py | 2243 | except KeyError: | CODE |
| HIGH | apprise/attachment/base.py | 292 | except OSError: | CODE |
| HIGH | apprise/utils/time.py | 64 | except ZoneInfoNotFoundError: | CODE |
| HIGH | apprise/utils/pem.py | 366 | except OSError: | CODE |
| HIGH | apprise/utils/pem.py | 383 | except OSError: | CODE |
| HIGH | apprise/utils/pem.py | 390 | except OSError: | CODE |
| HIGH | apprise/utils/pgp.py | 246 | except OSError: | CODE |
| HIGH | apprise/utils/pgp.py | 261 | except OSError: | CODE |
| HIGH | apprise/utils/pgp.py | 268 | except OSError: | CODE |
| HIGH | apprise/utils/wkd.py | 355 | except (TypeError, ValueError): | CODE |
| HIGH | apprise/utils/parse.py | 788 | except IndexError: | CODE |
| HIGH | apprise/utils/socket.py | 554 | except ( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_utils_pgp.py | 1432 | # from_blob raise NameError (same as if the name were undefined) | COMMENT |
| HIGH | tests/test_plugin_workflows.py | 250 | "contentUrl": null, | CODE |
| HIGH | tests/test_plugin_workflows.py | 420 | "contentUrl": null, | CODE |
| HIGH | tests/test_plugin_workflows.py | 544 | "contentUrl": null, | CODE |
| HIGH | tests/test_plugin_workflows.py | 619 | "contentUrl": null, | CODE |
| HIGH | apprise/plugins/messagebird.py | 230 | # "reference": null, | COMMENT |
| HIGH | apprise/plugins/messagebird.py | 246 | # "validity": null, | COMMENT |
| HIGH | apprise/plugins/messagebird.py | 252 | # "scheduledDatetime": null, | COMMENT |
| HIGH | apprise/plugins/bulksms.py | 374 | # "body": null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 813 | # "in_reply_to_id":null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 814 | # "in_reply_to_account_id":null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 824 | # "edited_at":null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 831 | # "reblog":null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 869 | # "remote_url":null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 870 | # "preview_remote_url":null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 871 | # "text_url":null, | COMMENT |
| HIGH | apprise/plugins/mastodon.py | 886 | # "description":null, | COMMENT |
| HIGH | apprise/plugins/mastodon.py | 899 | # "card":null, | COMMENT |
| HIGH | apprise/plugins/pushover.py | 618 | 3. Compute HMAC-SHA256 over (IV || ciphertext) with the same key | STRING |
| HIGH | apprise/plugins/pushover.py | 619 | 4. Return base64(IV || ciphertext || HMAC) | STRING |
| HIGH⚡ | apprise/plugins/twist.py | 310 | # "contact_info": null, | COMMENT |
| HIGH⚡ | apprise/plugins/twist.py | 311 | # "profession": null, | COMMENT |
| HIGH⚡ | apprise/plugins/twist.py | 313 | # "avatar_id": null, | COMMENT |
| HIGH⚡ | apprise/plugins/twist.py | 320 | # "snooze_dnd_end": null, | COMMENT |
| HIGH⚡ | apprise/plugins/twist.py | 323 | # "snooze_until": null, | COMMENT |
| HIGH⚡ | apprise/plugins/twist.py | 327 | # "away_mode": null, | COMMENT |
| HIGH | apprise/plugins/twist.py | 348 | # "snooze_dnd_start": null, | COMMENT |
| HIGH⚡ | apprise/plugins/seven.py | 249 | # "label": null, | COMMENT |
| HIGH⚡ | apprise/plugins/seven.py | 251 | # "udh": null, | COMMENT |
| HIGH⚡ | apprise/plugins/seven.py | 255 | # "error": null, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_plugin_ses.py | 376 | "user@example.com", | CODE |
| LOW | tests/test_plugin_ses.py | 395 | "user@example.com", | CODE |
| LOW | tests/test_plugin_ses.py | 521 | "user@example.com", | CODE |
| LOW | tests/test_plugin_ses.py | 716 | from_addr="user@example.com", | CODE |
| LOW | tests/test_plugin_ses.py | 755 | from_addr="user@example.com", | CODE |
| LOW | tests/test_plugin_ses.py | 775 | assert obj3.names["jane@example.com"] == "Jane Doe" | CODE |
| LOW | tests/test_plugin_resend.py | 230 | NotifyResend(apikey=None, from_addr="user@example.com") | CODE |
| LOW | tests/test_plugin_resend.py | 242 | apikey="abcd", from_addr="user@example.com", targets="!invalid" | CODE |
| LOW⚡ | tests/test_plugin_deltachat.py | 80 | "friend1@example.org/friend2@example.org", | CODE |
| LOW⚡ | tests/test_plugin_deltachat.py | 87 | "deltachat://user:pass@smtp.example.com/friend1@example.org" | CODE |
| LOW⚡ | tests/test_plugin_deltachat.py | 88 | "?to=friend2@example.org", | CODE |
| LOW⚡ | tests/test_plugin_deltachat.py | 95 | "deltachat://user:pass@smtp.example.com/friend@example.org" | CODE |
| LOW⚡ | tests/test_plugin_deltachat.py | 103 | "deltachat://user:pass@smtp.example.com/friend@example.org" | CODE |
| LOW⚡ | tests/test_plugin_deltachat.py | 111 | "deltachat://user:pass@smtp.example.com/friend@example.org" | CODE |
| LOW⚡ | tests/test_plugin_deltachat.py | 119 | "deltachat://user:pass@smtp.example.com/friend@example.org" | CODE |
| LOW⚡ | tests/test_plugin_deltachat.py | 128 | "deltachat://user:pass@smtp.example.com/friend@example.org" | CODE |
| LOW⚡ | tests/test_plugin_deltachat.py | 136 | "deltachats://user:pass@smtp.example.com:2525/friend@example.org", | CODE |
| LOW⚡ | tests/test_plugin_deltachat.py | 276 | targets=["friend@example.org"], | CODE |
| LOW | tests/test_plugin_deltachat.py | 59 | "deltachat://user:pass@smtp.example.com/friend@example.org", | CODE |
| LOW | tests/test_plugin_deltachat.py | 69 | "deltachats://user:pass@smtp.example.com/friend@example.org", | CODE |
| LOW | tests/test_plugin_deltachat.py | 222 | targets=["friend@example.org"], | CODE |
| LOW | tests/test_plugin_deltachat.py | 295 | "deltachat://user:pass@smtp.example.com/friend@example.org", | CODE |
| LOW | tests/test_plugin_deltachat.py | 327 | "deltachat://user:pass@smtp.example.com/friend@example.org" | CODE |
| LOW | tests/test_plugin_deltachat.py | 402 | "deltachat://user:pass@smtp.example.com/friend@example.org" | CODE |
| LOW⚡ | tests/test_plugin_mailersend.py | 231 | NotifyMailerSend(apikey=None, from_email="user@example.com") | CODE |
| LOW⚡ | tests/test_plugin_mailersend.py | 235 | NotifyMailerSend(apikey="bad+key*!", from_email="user@example.com") | CODE |
| LOW | tests/test_plugin_mailersend.py | 249 | from_email="user@example.com", | CODE |
| LOW | tests/test_plugin_mailersend.py | 256 | from_email="user@example.com", | CODE |
| LOW | tests/test_plugin_mailersend.py | 300 | from_email="user@example.com", | CODE |
| LOW | tests/test_plugin_mailersend.py | 311 | from_email="user@example.com", | CODE |
| LOW | tests/test_plugin_mailersend.py | 326 | from_email="user@example.com", | CODE |
| LOW | tests/test_plugin_mailersend.py | 347 | from_email="user@example.com", | CODE |
| LOW | tests/test_plugin_mailersend.py | 528 | from_email="user@example.com", | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 126 | result = ctrl._fetch_wkd_key("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 146 | result = ctrl._fetch_wkd_key(None, "user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 149 | mock_wkd.fetch.assert_called_once_with("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 157 | result = ctrl._fetch_wkd_key("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 170 | uid = pgpy.PGPUID.new("Test", email="user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 187 | result = ctrl._fetch_wkd_key("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 190 | mock_wkd.fetch.assert_called_once_with("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 194 | result2 = ctrl._fetch_wkd_key("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 238 | result = ctrl._fetch_wkd_key("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 240 | mock_wkd.fetch.assert_called_once_with("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 295 | mock_wkd.fetch.return_value = b"fake-key-bytes" | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 299 | result = ctrl._fetch_wkd_key("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 1318 | ctrl = ApprisePGPController(path=str(tmpdir), email="user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 1654 | ctrl = ApprisePGPController(path=str(tmpdir), email="user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 1658 | result = ctrl.public_key("user@example.com", autogen=False) | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 1673 | result = ctrl.public_key("user@example.com", autogen=False) | CODE |
| LOW | tests/test_utils_pgp.py | 212 | uid = pgpy.PGPUID.new("Fresh", email="user@example.com") | CODE |
| LOW | tests/test_utils_pgp.py | 316 | result = ctrl._fetch_wkd_key("user@example.com") | CODE |
| LOW | tests/test_utils_pgp.py | 719 | key.userids = ["user@example.com", "user@work.example.com"] | CODE |
| LOW | tests/test_utils_pgp.py | 745 | key.userids = ["user@example.com"] | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 126 | sub, direct = AppriseWKDController.wkd_urls("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 326 | result = ctrl.fetch("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 335 | key_bytes = b"\x99another-fake-key" | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 344 | result = ctrl.fetch("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 356 | result = ctrl.fetch("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 374 | result1 = ctrl.fetch("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 375 | result2 = ctrl.fetch("user@example.com") | CODE |
| 110 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packaging/i18n_status.py | 138 | CODE | |
| LOW | tests/test_config_base.py | 2626 | CODE | |
| LOW | tests/test_delivery_tracking_structure.py | 92 | CODE | |
| LOW | tests/test_plugin_email.py | 534 | CODE | |
| LOW | tests/test_plugin_xmpp.py | 1532 | CODE | |
| LOW | tests/test_plugin_xmpp.py | 2056 | CODE | |
| LOW | tests/test_plugin_xmpp.py | 2908 | CODE | |
| LOW | tests/test_plugin_xmpp.py | 3552 | CODE | |
| LOW | tests/test_plugin_matrix.py | 4730 | CODE | |
| LOW | tests/test_plugin_matrix.py | 4781 | CODE | |
| LOW | tests/test_plugin_growl.py | 136 | CODE | |
| LOW | tests/test_api.py | 2358 | CODE | |
| LOW | tests/test_api.py | 2774 | CODE | |
| LOW | tests/helpers/rest.py | 354 | CODE | |
| LOW | tests/helpers/module.py | 58 | CODE | |
| LOW | apprise/asset.py | 280 | CODE | |
| LOW | apprise/persistent_store.py | 125 | CODE | |
| LOW | apprise/persistent_store.py | 919 | CODE | |
| LOW | apprise/persistent_store.py | 1004 | CODE | |
| LOW | apprise/persistent_store.py | 1398 | CODE | |
| LOW | apprise/persistent_store.py | 1693 | CODE | |
| LOW | apprise/dispatch.py | 857 | CODE | |
| LOW | apprise/logger.py | 277 | CODE | |
| LOW | apprise/logger.py | 535 | CODE | |
| LOW | apprise/apprise.py | 425 | CODE | |
| LOW | apprise/apprise.py | 517 | CODE | |
| LOW | apprise/apprise.py | 777 | CODE | |
| LOW | apprise/apprise.py | 1017 | CODE | |
| LOW | apprise/apprise.py | 1288 | CODE | |
| LOW | apprise/apprise.py | 1732 | CODE | |
| LOW | apprise/apprise.py | 1957 | CODE | |
| LOW | apprise/apprise.py | 2044 | CODE | |
| LOW | apprise/apprise.py | 2105 | CODE | |
| LOW | apprise/apprise.py | 2152 | CODE | |
| LOW | apprise/apprise.py | 1753 | CODE | |
| LOW | apprise/url.py | 412 | CODE | |
| LOW | apprise/url.py | 1064 | CODE | |
| LOW | apprise/cli.py | 822 | CODE | |
| LOW | apprise/cli.py | 361 | CODE | |
| LOW | apprise/locale.py | 299 | CODE | |
| LOW | apprise/apprise_attachment.py | 133 | CODE | |
| LOW | apprise/manager.py | 125 | CODE | |
| LOW | apprise/manager.py | 168 | CODE | |
| LOW | apprise/manager.py | 315 | CODE | |
| LOW | apprise/manager.py | 834 | CODE | |
| LOW | apprise/config/http.py | 147 | CODE | |
| LOW | apprise/config/base.py | 186 | CODE | |
| LOW | apprise/config/base.py | 638 | CODE | |
| LOW | apprise/config/base.py | 869 | CODE | |
| LOW | apprise/plugins/apprise_api.py | 323 | CODE | |
| LOW | apprise/plugins/humhub.py | 208 | CODE | |
| LOW | apprise/plugins/ntfy.py | 436 | CODE | |
| LOW | apprise/plugins/ntfy.py | 520 | CODE | |
| LOW | apprise/plugins/one_signal.py | 371 | CODE | |
| LOW | apprise/plugins/groupme.py | 170 | CODE | |
| LOW | apprise/plugins/simplepush.py | 675 | CODE | |
| LOW | apprise/plugins/ses.py | 404 | CODE | |
| LOW | apprise/plugins/kook.py | 399 | CODE | |
| LOW | apprise/plugins/kavenegar.py | 197 | CODE | |
| LOW | apprise/plugins/whatsapp.py | 374 | CODE | |
| 105 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packaging/verify_translations.py | 41 | CODE | |
| LOW | packaging/i18n_status.py | 40 | CODE | |
| LOW | tests/test_delivery_tracking_retry.py | 345 | CODE | |
| LOW | tests/test_delivery_tracking_retry.py | 370 | CODE | |
| LOW | tests/test_plugin_irc_state.py | 30 | CODE | |
| LOW | tests/test_utils_sanitize.py | 30 | CODE | |
| LOW | tests/test_plugin_irc.py | 30 | CODE | |
| LOW | tests/test_plugin_xmpp.py | 33 | CODE | |
| LOW | tests/test_plugin_matrix.py | 2745 | CODE | |
| LOW | tests/test_plugin_fluxer.py | 27 | CODE | |
| LOW | tests/test_compat_py39.py | 30 | CODE | |
| LOW | tests/helpers/__init__.py | 28 | CODE | |
| LOW | tests/helpers/__init__.py | 29 | CODE | |
| LOW | tests/helpers/__init__.py | 29 | CODE | |
| LOW | tests/helpers/__init__.py | 29 | CODE | |
| LOW | tests/helpers/__init__.py | 29 | CODE | |
| LOW | tests/helpers/__init__.py | 29 | CODE | |
| LOW | tests/helpers/__init__.py | 36 | CODE | |
| LOW | tests/helpers/__init__.py | 37 | CODE | |
| LOW | tests/helpers/__init__.py | 38 | CODE | |
| LOW | apprise/dispatch.py | 33 | CODE | |
| LOW | apprise/__init__.py | 39 | CODE | |
| LOW | apprise/__init__.py | 39 | CODE | |
| LOW | apprise/__init__.py | 40 | CODE | |
| LOW | apprise/__init__.py | 41 | CODE | |
| LOW | apprise/__init__.py | 42 | CODE | |
| LOW | apprise/__init__.py | 43 | CODE | |
| LOW | apprise/__init__.py | 44 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 45 | CODE | |
| LOW | apprise/__init__.py | 64 | CODE | |
| LOW | apprise/__init__.py | 65 | CODE | |
| LOW | apprise/__init__.py | 68 | CODE | |
| LOW | apprise/__init__.py | 68 | CODE | |
| LOW | apprise/__init__.py | 68 | CODE | |
| LOW | apprise/__init__.py | 68 | CODE | |
| LOW | apprise/__init__.py | 69 | CODE | |
| LOW | apprise/__init__.py | 70 | CODE | |
| LOW | apprise/__init__.py | 71 | CODE | |
| LOW | apprise/__init__.py | 72 | CODE | |
| LOW | apprise/__init__.py | 73 | CODE | |
| LOW | apprise/__init__.py | 74 | CODE | |
| LOW | apprise/__init__.py | 74 | CODE | |
| LOW | apprise/__init__.py | 74 | CODE | |
| LOW | apprise/__init__.py | 74 | CODE | |
| 104 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_plugin_deltachat.py | 165 | except Exception as e: | CODE |
| LOW | tests/test_plugin_glib.py | 340 | except Exception: | CODE |
| LOW⚡ | tests/test_plugin_email.py | 696 | except Exception: | CODE |
| LOW⚡ | tests/test_plugin_email.py | 704 | except Exception as e: | CODE |
| LOW⚡ | tests/test_plugin_email.py | 713 | except Exception as e: | CODE |
| LOW⚡ | tests/test_plugin_xmpp.py | 75 | except Exception: | CODE |
| LOW | tests/test_plugin_xmpp.py | 3594 | except Exception: | CODE |
| LOW⚡ | tests/test_plugin_growl.py | 372 | except Exception as e: | CODE |
| LOW⚡ | tests/test_plugin_growl.py | 380 | except Exception as e: | CODE |
| LOW | tests/test_api.py | 2585 | except Exception as e: | CODE |
| LOW | tests/helpers/rest.py | 220 | except Exception as e: | CODE |
| LOW | tests/helpers/rest.py | 739 | except Exception: | CODE |
| LOW | tests/helpers/rest.py | 747 | except Exception as e: | CODE |
| LOW | tests/helpers/rest.py | 787 | except Exception: | CODE |
| LOW | tests/helpers/rest.py | 795 | except Exception as e: | CODE |
| LOW | apprise/persistent_store.py | 523 | except Exception as e: | CODE |
| LOW | apprise/dispatch.py | 80 | except Exception: | CODE |
| LOW⚡ | apprise/dispatch.py | 100 | except Exception: | CODE |
| LOW⚡ | apprise/dispatch.py | 108 | except Exception: | CODE |
| LOW⚡ | apprise/dispatch.py | 116 | except Exception: | CODE |
| LOW⚡ | apprise/dispatch.py | 124 | except Exception: | CODE |
| LOW | apprise/dispatch.py | 886 | except Exception as e: | CODE |
| LOW | apprise/logger.py | 336 | except Exception as e: | CODE |
| LOW | apprise/logger.py | 401 | except Exception as e: | CODE |
| LOW | apprise/logger.py | 563 | except Exception as e: | CODE |
| LOW | apprise/logger.py | 745 | except Exception: | CODE |
| LOW | apprise/logger.py | 762 | except Exception as e: | CODE |
| LOW | apprise/apprise.py | 387 | except Exception: | CODE |
| LOW | apprise/apprise.py | 1120 | except Exception as e: | CODE |
| LOW | apprise/apprise.py | 1140 | except Exception as e: | CODE |
| LOW | apprise/apprise.py | 1163 | except Exception as e: | CODE |
| LOW | apprise/apprise.py | 1188 | except Exception as e: | CODE |
| LOW | apprise/apprise.py | 1218 | except Exception as e: | CODE |
| LOW | apprise/apprise.py | 1239 | except Exception as e: | CODE |
| LOW | apprise/apprise.py | 1493 | except Exception as e: | CODE |
| LOW | apprise/apprise.py | 1593 | except Exception as e: | CODE |
| LOW | apprise/apprise.py | 1721 | except Exception as e: | CODE |
| LOW | apprise/apprise.py | 1781 | except Exception as e: | CODE |
| LOW | apprise/apprise_config.py | 431 | except Exception: | CODE |
| LOW | apprise/cli.py | 327 | except Exception: | CODE |
| LOW | apprise/cli.py | 553 | except Exception as e: | CODE |
| LOW | apprise/template.py | 162 | except Exception: | CODE |
| LOW | apprise/template.py | 581 | except Exception as e: | CODE |
| LOW | apprise/template.py | 612 | except Exception as e: | CODE |
| LOW | apprise/apprise_attachment.py | 308 | except Exception: | CODE |
| LOW | apprise/config/base.py | 323 | except Exception as e: | CODE |
| LOW | apprise/config/base.py | 852 | except Exception as e: | CODE |
| LOW | apprise/config/base.py | 1758 | except Exception as e: | CODE |
| LOW | apprise/decorators/base.py | 210 | except Exception as e: | CODE |
| LOW | apprise/plugins/dbus.py | 356 | except Exception as e: | CODE |
| LOW | apprise/plugins/dbus.py | 387 | except Exception as e: | CODE |
| LOW | apprise/plugins/pushover.py | 652 | except Exception as err: | CODE |
| LOW | apprise/plugins/pushover.py | 773 | except Exception: | CODE |
| LOW | apprise/plugins/aprs.py | 361 | except Exception as e: | CODE |
| LOW | apprise/plugins/aprs.py | 498 | except Exception as e: | CODE |
| LOW | apprise/plugins/aprs.py | 549 | except Exception as e: | CODE |
| LOW | apprise/plugins/smpp.py | 301 | except Exception as e: | CODE |
| LOW | apprise/plugins/gnome.py | 216 | except Exception as e: | CODE |
| LOW | apprise/plugins/gnome.py | 225 | except Exception as e: | CODE |
| LOW | apprise/plugins/glib.py | 313 | except Exception as e: | CODE |
| 43 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_config_base.py | 1146 | # completely optional field. It's a good idea to just add this line because it | COMMENT |
| LOW | tests/test_attach_memory.py | 152 | # Test case where location is simply set to INACCESSIBLE | COMMENT |
| MEDIUM | tests/test_apprise_cli.py | 1690 | # Generates another listing but utilize the tag | STRING |
| LOW | tests/test_attach_file.py | 153 | # Test case where location is simply set to INACCESSIBLE | COMMENT |
| MEDIUM | tests/test_plugin_custom_json.py | 487 | # This is rather confusing, it may be easier to leverage the | COMMENT |
| MEDIUM | tests/test_plugin_sendpulse.py | 179 | # leverage all get params from URL | COMMENT |
| MEDIUM | tests/test_plugin_fcm.py | 835 | # Verify that not a single call to the web escaped the test harness. | COMMENT |
| LOW | tests/helpers/rest.py | 209 | # just add `pdb': True to the call that is failing | COMMENT |
| MEDIUM | tests/helpers/module.py | 133 | # if we get here, we have test_ files that utilize the Class we just | COMMENT |
| LOW | apprise/persistent_store.py | 1276 | # For the below, we just set both cases and set them up as an | COMMENT |
| LOW | apprise/apprise.py | 473 | # Go ahead and just add our plugin into our list | COMMENT |
| LOW | apprise/apprise.py | 486 | # Go ahead and just add our plugin into our list | COMMENT |
| LOW | apprise/apprise_config.py | 183 | # Go ahead and just add our configuration into our list | COMMENT |
| LOW | apprise/apprise_config.py | 201 | # Go ahead and just add our configuration into our list | COMMENT |
| LOW | apprise/plugins/ntfy.py | 698 | # We will just use the status we already have. | COMMENT |
| LOW | apprise/plugins/kavenegar.py | 278 | # We will just use the status we already have. | COMMENT |
| LOW | apprise/plugins/whatsapp.py | 532 | # We will just use the status we already have. | COMMENT |
| LOW | apprise/plugins/sinch.py | 375 | # We will just use the status we already have. | COMMENT |
| LOW | apprise/plugins/pushsafer.py | 306 | # at one time. When more are supported, just add their argument below | COMMENT |
| LOW | apprise/plugins/d7networks.py | 305 | # We will just use the status we already have. | COMMENT |
| LOW | apprise/plugins/twilio.py | 509 | # We will just use the status we already have. | COMMENT |
| LOW | apprise/plugins/rocketchat.py | 773 | # If no webhook is specified, then we just pass along as if nothing | COMMENT |
| LOW | apprise/plugins/matrix/base.py | 1968 | # not issue a redundant GET -- we just set the encryption state. | COMMENT |
| MEDIUM | apprise/utils/sanitize.py | 82 | # How many recursive lists/sets/tuples/dicts to delve into before | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_plugin_bluesky.py | 310 | CODE | |
| LOW | tests/test_plugin_bluesky.py | 317 | CODE | |
| LOW | tests/test_plugin_twitter.py | 305 | CODE | |
| LOW | tests/test_plugin_twitter.py | 321 | CODE | |
| LOW | tests/test_plugin_twitter.py | 359 | CODE | |
| LOW | apprise/asset.py | 280 | CODE | |
| LOW | apprise/persistent_store.py | 742 | CODE | |
| LOW | apprise/apprise.py | 1017 | CODE | |
| LOW | apprise/apprise.py | 1288 | CODE | |
| LOW | apprise/plugins/ntfy.py | 318 | CODE | |
| LOW | apprise/plugins/one_signal.py | 209 | CODE | |
| LOW | apprise/plugins/simplepush.py | 245 | CODE | |
| LOW | apprise/plugins/opsgenie.py | 327 | CODE | |
| LOW | apprise/plugins/office365.py | 333 | CODE | |
| LOW | apprise/plugins/fluxer.py | 302 | CODE | |
| LOW | apprise/plugins/mastodon.py | 270 | CODE | |
| LOW | apprise/plugins/telegram.py | 684 | CODE | |
| LOW | apprise/plugins/pushover.py | 464 | CODE | |
| LOW | apprise/plugins/discord.py | 257 | CODE | |
| LOW | apprise/plugins/youlmk.py | 237 | CODE | |
| LOW | apprise/plugins/notifyre.py | 192 | CODE | |
| LOW | apprise/plugins/streamlabs.py | 181 | CODE | |
| LOW | apprise/plugins/pingram.py | 270 | CODE | |
| LOW | apprise/plugins/bark.py | 251 | CODE | |
| LOW | apprise/plugins/jira.py | 329 | CODE | |
| LOW | apprise/plugins/dot.py | 209 | CODE | |
| LOW | apprise/plugins/pagerduty.py | 208 | CODE | |
| LOW | apprise/plugins/reddit.py | 236 | CODE | |
| LOW | apprise/plugins/lametric.py | 530 | CODE | |
| LOW | apprise/plugins/base.py | 1005 | CODE | |
| LOW | apprise/plugins/slack.py | 610 | CODE | |
| LOW | apprise/plugins/octopush.py | 199 | CODE | |
| LOW | apprise/plugins/irc/client.py | 70 | CODE | |
| LOW | apprise/plugins/xmpp/adapter.py | 175 | CODE | |
| LOW | apprise/plugins/xmpp/base.py | 184 | CODE | |
| LOW | apprise/plugins/fcm/__init__.py | 221 | CODE | |
| LOW | apprise/plugins/matrix/base.py | 419 | CODE | |
| LOW | apprise/plugins/matrix/base.py | 2063 | CODE | |
| LOW | apprise/plugins/email/base.py | 262 | CODE | |
| LOW | apprise/plugins/email/base.py | 1084 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_plugin_bluesky.py | 936 | # Step 1: Identity resolution response (public.api.bsky.app) | COMMENT |
| LOW⚡ | tests/test_plugin_bluesky.py | 939 | # Step 2: PLC Directory lookup | COMMENT |
| LOW⚡ | tests/test_plugin_bluesky.py | 951 | # Step 3: Auth session | COMMENT |
| LOW⚡ | tests/test_plugin_bluesky.py | 954 | # Step 4: Create post | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 73 | # Step 2: Inject into sys.modules | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 77 | # Step 3: Reload plugin with all mocks in place | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 356 | # Step 1: Mock GI | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 366 | # Step 2: Patch into sys.modules | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 370 | # Step 3: Reload plugin to trigger branch | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 373 | # Step 4: Confirm GdkPixbuf image support was not enabled | COMMENT |
| LOW | tests/test_plugin_glib.py | 49 | # Step 1: Fake gi and repository | COMMENT |
| LOW | apprise/plugins/bluesky.py | 325 | # Step 1: Acquire DID from bsky.app | COMMENT |
| LOW | apprise/plugins/bluesky.py | 349 | # Step 2: Use DID to find the PDS | COMMENT |
| LOW | apprise/plugins/bluesky.py | 394 | # Step 3: Send to correct endpoint | COMMENT |
| LOW⚡ | apprise/conversion/commonmark.py | 1092 | # Step 1: strip CommonMark backslash escapes so we recover the raw URL | STRING |
| LOW⚡ | apprise/conversion/commonmark.py | 1096 | # Step 2: re-encode the characters that the <url|label> delimiter syntax | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_plugin_bluesky.py | 936 | # Step 1: Identity resolution response (public.api.bsky.app) | COMMENT |
| LOW⚡ | tests/test_plugin_bluesky.py | 939 | # Step 2: PLC Directory lookup | COMMENT |
| LOW⚡ | tests/test_plugin_bluesky.py | 951 | # Step 3: Auth session | COMMENT |
| LOW⚡ | tests/test_plugin_bluesky.py | 954 | # Step 4: Create post | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 73 | # Step 2: Inject into sys.modules | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 77 | # Step 3: Reload plugin with all mocks in place | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 356 | # Step 1: Mock GI | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 366 | # Step 2: Patch into sys.modules | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 370 | # Step 3: Reload plugin to trigger branch | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 373 | # Step 4: Confirm GdkPixbuf image support was not enabled | COMMENT |
| LOW | tests/test_plugin_glib.py | 49 | # Step 1: Fake gi and repository | COMMENT |
| LOW | apprise/plugins/bluesky.py | 325 | # Step 1: Acquire DID from bsky.app | COMMENT |
| LOW | apprise/plugins/bluesky.py | 349 | # Step 2: Use DID to find the PDS | COMMENT |
| LOW | apprise/plugins/bluesky.py | 394 | # Step 3: Send to correct endpoint | COMMENT |
| LOW⚡ | apprise/conversion/commonmark.py | 1092 | # Step 1: strip CommonMark backslash escapes so we recover the raw URL | STRING |
| LOW⚡ | apprise/conversion/commonmark.py | 1096 | # Step 2: re-encode the characters that the <url|label> delimiter syntax | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_plugin_rsyslog.py | 104 | # Set length to include title (for test) | COMMENT |
| LOW | apprise/asset.py | 219 | # Set storage to auto | COMMENT |
| LOW | apprise/url.py | 343 | # Set time to 'now' and no need to throttle | COMMENT |
| LOW | apprise/plugins/sfr.py | 318 | # Check if the request was successfull | COMMENT |
| LOW | apprise/plugins/aprs.py | 393 | # Check if we are connected | COMMENT |
| LOW | apprise/plugins/aprs.py | 468 | # Check if we are connected | COMMENT |
| LOW | apprise/plugins/aprs.py | 521 | # Check if we are connected | COMMENT |
| LOW | apprise/plugins/__init__.py | 297 | # Check if the mapped reference is a list; if it is, then | COMMENT |
| LOW | apprise/plugins/twist.py | 179 | # Check if it is valid | COMMENT |
| LOW | apprise/plugins/threema.py | 178 | # Check if an email was defined | COMMENT |
| LOW | apprise/plugins/notifyre.py | 465 | # Read file content for base64 encoding | COMMENT |
| LOW | apprise/plugins/pushbullet.py | 256 | # Check if an email was defined | COMMENT |
| LOW | apprise/plugins/slack.py | 1855 | # Verify if our token is a bot token or part of a webhook: | COMMENT |
| LOW | apprise/plugins/vapid/subscription.py | 691 | # Verify if we're dealing with a single element: | COMMENT |
| LOW | apprise/plugins/matrix/base.py | 1753 | # Check if it's a room id... | COMMENT |
| LOW | apprise/plugins/matrix/base.py | 3210 | # Read file bytes | COMMENT |
| LOW | apprise/utils/cwe312.py | 81 | # Verify if it is a hostname or not | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_plugin_macosx.py | 255 | # of a plugin, make sure to reload it. | COMMENT |
| LOW⚡ | tests/test_plugin_macosx.py | 270 | # of a plugin, make sure to reload it. | COMMENT |
| LOW | tests/test_plugin_twitter.py | 683 | # This test case submits two notifications, so make sure to provide two | COMMENT |
| MEDIUM | tests/test_apprise_utils.py | 666 | # It's worth noting that the hostname is an empty string and is NEVER set | COMMENT |
| LOW | tests/test_plugin_gnome.py | 98 | # of a plugin, make sure to reload it. | COMMENT |
| LOW⚡ | tests/test_plugin_gnome.py | 406 | # of a plugin, make sure to reload it. | COMMENT |
| MEDIUM | apprise/config/base.py | 661 | # Or you can use this format (no tags associated) | STRING |
| MEDIUM | apprise/config/base.py | 664 | # you can also use the keyword 'include' and identify a | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/helpers/__init__.py | 40 | __all__ = [ | CODE |
| LOW | apprise/__init__.py | 87 | __all__ = [ | CODE |
| LOW | apprise/logger.py | 525 | def _set_notice(self, message: str, log: bool = True) -> None: | CODE |
| LOW | apprise/config/__init__.py | 35 | __all__ = [ | CODE |
| LOW | apprise/decorators/__init__.py | 30 | __all__ = ["notify"] | CODE |
| LOW | apprise/plugins/__init__.py | 49 | __all__ = [ | CODE |
| LOW | apprise/plugins/irc/__init__.py | 32 | __all__ = [ | CODE |
| LOW | apprise/plugins/xmpp/__init__.py | 32 | __all__ = [ | CODE |
| LOW | apprise/plugins/matrix/__init__.py | 32 | __all__ = [ | CODE |
| LOW | apprise/plugins/email/__init__.py | 43 | __all__ = [ | CODE |
| LOW | apprise/attachment/__init__.py | 35 | __all__ = [ | CODE |
| LOW | apprise/conversion/__init__.py | 73 | __all__ = [ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | apprise/dispatch.py | 461 | # Capture orchestration logs not owned by a service attempt. | COMMENT |
| MEDIUM | apprise/logger.py | 670 | # Call-level orchestration messages use the shared logger. | COMMENT |
| MEDIUM | .github/workflows/tests.yml | 62 | # Install tox for isolated environment and plugin test orchestration | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_apprise_utils.py | 3422 | # In this example 'whence' isn't provided, so it isn't swapped | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | apprise/plugins/base.py | 1638 | Parses the URL and returns it broken apart into a dictionary. This is very specific and customized for Apprise. | STRING |