AI Slop Code RIsk Monitor

caronc/apprise

Apprise - Push Notifications that work with just about every platform!

27.7 Elevated pattern signal View on GitHub

Maintenance and Governance Review

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.

27.7
Adjusted Signal
27.7
Raw Pattern Score
100%
Time Factor
2026-10-05
Last Push
17.6K
Stars
Python
Language
304.9K
Lines of Code
518
Files
5.3K
Pattern Hits
2026-10-12
Scan Date
1.32
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 46.5/100 · MEDIUM

Can maintainers explain intent, assumptions, and trade-offs? 4016 finding(s).

Hallucinated Dependency & Supply Chain Risk 9.0/100 · LOW

Are imports declared and package/API names verified? 364 finding(s).

Agent Over-Engineering Ratio 64.4/100 · HIGH

Are wrappers, guards, and repeated structures necessary? 3752 finding(s).

PR Review Velocity Impact 79.1/100 · CRITICAL

Which changes need focused human review? 5334 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

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.

Severity Breakdown

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.

CRITICAL 0HIGH 683MEDIUM 395LOW 4256

Directory Score Breakdown

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.

Pattern Findings

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.

Cross-File Repetition595 hits · 2975 pts
SeverityFileLineSnippetContext
HIGHtests/test_notification_manager.py0verify all native config plugins load without trace import errors.STRING
HIGHtests/test_apprise_attachments.py0verify all native config plugins load without trace import errors.STRING
HIGHtests/test_apprise_config.py0verify all native config plugins load without trace import errors.STRING
HIGHtests/test_plugin_jira.py0verify a region that isn't a string is rejected cleanly.STRING
HIGHtests/test_plugin_mailgun.py0verify a region that isn't a string is rejected cleanly.STRING
HIGHtests/test_plugin_opsgenie.py0verify a region that isn't a string is rejected cleanly.STRING
HIGHtests/test_plugin_evolution.py0bare-paren links and standalone autolinks convert safely.STRING
HIGHtests/test_plugin_slack.py0bare-paren links and standalone autolinks convert safely.STRING
HIGHtests/test_plugin_google_chat.py0bare-paren links and standalone autolinks convert safely.STRING
HIGHtests/test_plugin_evolution.py0keep the outer link when a nested angle link is invalid.STRING
HIGHtests/test_plugin_slack.py0keep the outer link when a nested angle link is invalid.STRING
HIGHtests/test_plugin_google_chat.py0keep the outer link when a nested angle link is invalid.STRING
HIGHtests/test_plugin_evolution.py0a "]" with no "(" must retire its "[" instead of leaving it pending for a later, unrelated link to reuse.STRING
HIGHtests/test_plugin_slack.py0a "]" with no "(" must retire its "[" instead of leaving it pending for a later, unrelated link to reuse.STRING
HIGHtests/test_plugin_google_chat.py0a "]" with no "(" must retire its "[" instead of leaving it pending for a later, unrelated link to reuse.STRING
HIGHtests/test_plugin_telegram.py0regression: attachmemory must be sendable without oserror.STRING
HIGHtests/test_plugin_discord.py0regression: attachmemory must be sendable without oserror.STRING
HIGHtests/test_plugin_pushover.py0regression: attachmemory must be sendable without oserror.STRING
HIGHtests/test_plugin_fluxer.py0regression: attachmemory must be sendable without oserror.STRING
HIGHtests/test_plugin_slack.py0regression: attachmemory must be sendable without oserror.STRING
HIGHtests/test_plugin_revolt.py0# heading @everyone and @admin, wake and meet our new user <@123>; <@&456>"STRING
HIGHtests/test_plugin_discord.py0# heading @everyone and @admin, wake and meet our new user <@123>; <@&456>"STRING
HIGHtests/test_plugin_fluxer.py0# heading @everyone and @admin, wake and meet our new user <@123>; <@&456>"STRING
HIGHapprise/apprise.py0allows the apprise object to be wrapped in an 'if statement'. true is returned if at least one service has been loaded.STRING
HIGHapprise/apprise_config.py0allows the apprise object to be wrapped in an 'if statement'. true is returned if at least one service has been loaded.STRING
HIGHapprise/apprise_attachment.py0allows the apprise object to be wrapped in an 'if statement'. true is returned if at least one service has been loaded.STRING
HIGHapprise/url.py0parses the url and returns it broken apart into a dictionary. this is very specific and customized for apprise. args: urSTRING
HIGHapprise/config/base.py0parses the url and returns it broken apart into a dictionary. this is very specific and customized for apprise. args: urSTRING
HIGHapprise/attachment/base.py0parses the url and returns it broken apart into a dictionary. this is very specific and customized for apprise. args: urSTRING
HIGHapprise/config/memory.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/config/file.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/config/http.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/apprise_api.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/sfr.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/humhub.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/revolt.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/enigma2.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/zulip.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/httpsms.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/prowl.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/voipms.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/clickatell.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/messagebird.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/pagertree.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/stackfield.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/ntfy.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/one_signal.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/groupme.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/dingtalk.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/kodi.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/eight00com.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/simplepush.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/ses.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/kook.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/smtp2go.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/kavenegar.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/whatsapp.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/synology.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/zoom.py0returns the url built dynamically based on specified arguments.STRING
HIGHapprise/plugins/kumulos.py0returns the url built dynamically based on specified arguments.STRING
535 more matches not shown…
Hyper-Verbose Identifiers2758 hits · 2211 pts
SeverityFileLineSnippetContext
LOWREADME.md493def my_custom_notification_wrapper(body, title, notify_type, *args, **kwargs):CODE
LOWtests/test_plugin_smpp.py140def test_plugin_smpplib_import_error():CODE
LOWtests/test_plugin_smpp.py171def test_plugin_smpp_edge_case():CODE
LOWtests/test_plugin_smpp.py221def test_plugin_smpp_retry_keeps_part_reference():CODE
LOWtests/test_plugin_rocket_chat.py329def test_plugin_rocket_chat_urls():CODE
LOWtests/test_plugin_rocket_chat.py338def test_plugin_rocket_chat_edge_cases(mock_post, mock_get):CODE
LOWtests/test_plugin_rocket_chat.py445def test_plugin_rocket_chat_html_to_markdown_format(mock_post):CODE
LOWtests/test_plugin_rocket_chat.py477def test_plugin_rocket_chat_retry(mock_post, mock_sleep):CODE
LOW⚡tests/test_plugin_wechat.py908def test_plugin_wechat_parse_native_url():CODE
LOW⚡tests/test_plugin_wechat.py916def test_plugin_wechat_error_codes():CODE
LOW⚡tests/test_plugin_wechat.py926def test_plugin_wechat_apprise_integration(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py305def test_plugin_wechat_url_round_trip():CODE
LOWtests/test_plugin_wechat.py390def test_plugin_wechat_url_identifier():CODE
LOWtests/test_plugin_wechat.py411def test_plugin_wechat_send_ok(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py444def test_plugin_wechat_send_cached_token(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py480def test_plugin_wechat_send_all_targets(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py520def test_plugin_wechat_send_markdown(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py557def test_plugin_wechat_send_no_targets(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py569def test_plugin_wechat_token_fetch_http_error(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py590def test_plugin_wechat_token_fetch_api_error(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py616def test_plugin_wechat_token_fetch_no_token_field(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py639def test_plugin_wechat_token_fetch_bad_json(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py658def test_plugin_wechat_token_fetch_request_exception(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py674def test_plugin_wechat_send_http_error(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py707def test_plugin_wechat_send_api_error(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py740def test_plugin_wechat_send_token_expiry_evicts_cache(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py776def test_plugin_wechat_send_token_expiry_all_codes(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py813def test_plugin_wechat_send_bad_json(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py849def test_plugin_wechat_send_request_exception(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py877def test_plugin_wechat_parse_url():CODE
LOWtests/test_plugin_wechat.py953def test_plugin_wechat_send_unknown_api_error(mock_post, mock_get):CODE
LOWtests/test_plugin_wechat.py986def test_plugin_wechat_token_unknown_api_error(mock_post, mock_get):CODE
LOWtests/test_plugin_wecombot.py111def test_plugin_wecombot_urls():CODE
LOWtests/test_apprise_translations.py69def test_apprise_trans_gettext_init():CODE
LOWtests/test_apprise_translations.py93def test_apprise_trans_gettext_translations(CODE
LOWtests/test_apprise_translations.py120def test_apprise_trans_gettext_lang_at(mock_getlocale):CODE
LOWtests/test_apprise_translations.py328def test_detect_language_precedence(mock_getlocale):CODE
LOWtests/test_apprise_translations.py422def test_lang_at_invalid_entries():CODE
LOWtests/test_apprise_translations.py440def test_lazy_translation_context(mock_translation):CODE
LOWtests/test_apprise_translations.py467def test_asset_language_honored(mock_translation):CODE
LOWtests/test_apprise_translations.py543def test_apprise_trans_windows_users_win(mock_getlocale):CODE
LOWtests/test_apprise_translations.py587def test_apprise_trans_windows_users_nux(mock_getlocale):CODE
LOWtests/test_apprise_translations.py637def test_detect_language_using_env(mock_getlocale):CODE
LOWtests/test_apprise_translations.py691def test_apprise_trans_gettext_missing(tmpdir):CODE
LOWtests/test_apprise_translations.py748def test_apprise_locale_add_existing_language(mock_translation):CODE
LOWtests/test_apprise_translations.py762def test_apprise_trans_successful_translation(CODE
LOWtests/test_plugin_nextcloud.py56def test_plugin_nextcloud_discovery_exception():CODE
LOWtests/test_plugin_nextcloud.py267def test_plugin_nextcloud_urls():CODE
LOWtests/test_plugin_nextcloud.py275def test_plugin_nextcloud_edge_cases(mock_post):CODE
LOWtests/test_plugin_nextcloud.py302def test_plugin_nextcloud_url_prefix(mock_post):CODE
LOWtests/test_plugin_nextcloud.py335def test_plugin_nextcloud_groups_and_all(mock_get, mock_post):CODE
LOWtests/test_plugin_nextcloud.py407def test_plugin_nextcloud_persistent_storage(mock_get, mock_post, tmpdir):CODE
LOWtests/test_plugin_nextcloud.py492def test_plugin_nextcloud_groups_errors_and_dedup(mock_get, mock_post):CODE
LOWtests/test_plugin_nextcloud.py533def test_plugin_nextcloud_req_exception_and_empty_targets(mock_get, mock_post):CODE
LOWtests/test_plugin_nextcloud.py566def test_plugin_nextcloud_json_empty_returns_empty(mock_get, mock_post):CODE
LOWtests/test_plugin_nextcloud.py609def test_plugin_nextcloud_caching_group_and_all(mock_get, mock_post):CODE
LOW⚡tests/test_plugin_bluesky.py929def test_plugin_bluesky_did_web_and_plc_resolution(CODE
LOWtests/test_plugin_bluesky.py346def test_plugin_bluesky_general(mocker):CODE
LOWtests/test_plugin_bluesky.py488def test_plugin_bluesky_edge_cases():CODE
LOWtests/test_plugin_bluesky.py497def test_plugin_bluesky_attachments_basic(CODE
2698 more matches not shown…
Over-Commented Block773 hits · 743 pts
SeverityFileLineSnippetContext
LOWREADME.md321# Also subdirectory handling allows you to leverage pluginsCOMMENT
LOWREADME.md501```COMMENT
LOWwin-requirements.txt1#COMMENT
LOWsetup.py1#!/usr/bin/env pythonCOMMENT
LOWsetup.py21# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ORCOMMENT
LOWdocker-compose.yml81#COMMENT
LOWpackaging/i18n_normalize.sh1#!/usr/bin/shCOMMENT
LOWpackaging/i18n_normalize.sh21# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, ORCOMMENT
LOWpackaging/verify_translations.py1# BSD 2-Clause LicenseCOMMENT
LOWpackaging/i18n_status.py1# BSD 2-Clause LicenseCOMMENT
LOWbin/build-rpm.sh1#!/bin/bashCOMMENT
LOWbin/checkdone.sh1#!/bin/bashCOMMENT
LOWbin/test.sh1#!/bin/bashCOMMENT
LOWbin/test.sh21# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BECOMMENT
LOWtests/test_plugin_smpp.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_rocket_chat.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_d7networks.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_wechat.py1#COMMENT
LOWtests/test_plugin_wechat.py21# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESSCOMMENT
LOWtests/test_plugin_wecombot.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_misskey.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_apprise_translations.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_nextcloud.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_bluesky.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_custom_xml.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_result.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_title_maxlen.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_macosx.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_windows.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_windows.py121 # module-level `from apprise.plugins.X import NotifyX` in otherCOMMENT
LOWtests/test_attach_base.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_utils_yaml.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_apprise_emojis.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_nextcloudtalk.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_notifiarr.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_delivery_tracking.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_signalgrid.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_ses.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_exotel.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_pinglet.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_streamlabs.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/conftest.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_matrix_sizing.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_notification_manager.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_pushjet.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_email_smtp.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_utils_pem.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_wxpusher.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_wpush.py1#COMMENT
LOWtests/test_plugin_homeassistant.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_apprise_jsonencoder.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_resend.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_deltachat.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_utils_http.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_freemobile.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_pushme.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_syslog.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_mailersend.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_utils_pgp.py1# BSD 2-Clause LicenseCOMMENT
LOWtests/test_plugin_glib.py1# BSD 2-Clause LicenseCOMMENT
713 more matches not shown…
Decorative Section Separators188 hits · 688 pts
SeverityFileLineSnippetContext
MEDIUM⚡tests/test_plugin_wechat.py131 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py133 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py141 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py143 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py151 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py153 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py163 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py165 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py173 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py175 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py183 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py185 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py193 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py195 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py203 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py205 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py215 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_wechat.py217 # ----------------------------------------------------------------COMMENT
MEDIUMtests/test_plugin_wechat.py74 # ----------------------------------------------------------------COMMENT
MEDIUMtests/test_plugin_wechat.py76 # ----------------------------------------------------------------COMMENT
MEDIUMtests/test_plugin_wechat.py105 # ----------------------------------------------------------------COMMENT
MEDIUMtests/test_plugin_wechat.py107 # ----------------------------------------------------------------COMMENT
MEDIUMtests/test_plugin_wechat.py118 # ----------------------------------------------------------------COMMENT
MEDIUMtests/test_plugin_wechat.py120 # ----------------------------------------------------------------COMMENT
MEDIUMtests/test_plugin_wechat.py234 # ----------------------------------------------------------------COMMENT
MEDIUMtests/test_plugin_wechat.py236 # ----------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_notification_manager.py754# ===========================================================================COMMENT
MEDIUM⚡tests/test_notification_manager.py756# ===========================================================================COMMENT
MEDIUMtests/test_notification_manager.py520# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_notification_manager.py493# ---------------------------------------------------------------------------STRING
MEDIUMtests/test_notification_manager.py495# ---------------------------------------------------------------------------STRING
MEDIUM⚡tests/test_utils_wkd.py42# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_utils_wkd.py44# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_utils_wkd.py53# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_utils_wkd.py55# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_utils_wkd.py119# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_utils_wkd.py121# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_utils_wkd.py362# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_utils_wkd.py364# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_utils_wkd.py417# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_utils_wkd.py419# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_utils_wkd.py659# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_utils_wkd.py661# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_utils_wkd.py288# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_utils_wkd.py290# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_utils_wkd.py462# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_utils_wkd.py464# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_utils_wkd.py691# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_utils_wkd.py693# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_evolution.py168# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_evolution.py170# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_evolution.py210# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_evolution.py212# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_plugin_evolution.py42# ---------------------------------------------------------------------------COMMENT
MEDIUMtests/test_plugin_evolution.py44# ---------------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_flowtriq.py187 # ------------------------------------------------------------------COMMENT
MEDIUM⚡tests/test_plugin_flowtriq.py189 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_plugin_flowtriq.py217 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_plugin_flowtriq.py219 # ------------------------------------------------------------------COMMENT
MEDIUMtests/test_plugin_flowtriq.py230 # ------------------------------------------------------------------COMMENT
128 more matches not shown…
Self-Referential Comments194 hits · 525 pts
SeverityFileLineSnippetContext
MEDIUMtests/test_attach_base.py72 # Create an object with no mimetype over-rideCOMMENT
MEDIUMtests/test_utils_pem.py62 # Create a PEM ControllerCOMMENT
MEDIUMtests/test_utils_pem.py510 # Create a PEM ControllerCOMMENT
MEDIUMtests/test_config_base.py1150# Define an Asset object if you wish (Optional)COMMENT
MEDIUMtests/test_plugin_sfr.py235 # Create a mock response objectCOMMENT
MEDIUMtests/test_plugin_sfr.py279 # Create a mock response objectCOMMENT
MEDIUMtests/test_plugin_sfr.py325 # Create a mock response objectCOMMENT
MEDIUMtests/test_plugin_sfr.py371 # Create a mock response objectCOMMENT
MEDIUMtests/test_plugin_sfr.py406 # Create a mock response objectCOMMENT
MEDIUMtests/test_plugin_sfr.py452 # Create a mock response objectCOMMENT
MEDIUMtests/test_plugin_sfr.py541 # Create a mock response objectCOMMENT
MEDIUMtests/test_plugin_sfr.py586 # Create a mock response objectCOMMENT
MEDIUMtests/test_plugin_burstsms.py230 # Initialize our objectCOMMENT
MEDIUMtests/test_config_file.py53 # Create an Apprise asset we can referenceCOMMENT
MEDIUMtests/test_config_file.py56 # Initialize our objectCOMMENT
MEDIUMtests/test_config_file.py113 # Initialize our objectCOMMENT
MEDIUMtests/test_apprise_attachments.py404 # Create a base area to work withinCOMMENT
MEDIUMtests/test_apprise_cli.py1114 # Create a config file we can source easilyCOMMENT
MEDIUMtests/test_apprise_cli.py1118 # Define a second test URL that willCOMMENT
MEDIUMtests/test_apprise_cli.py1363 # Create a stale 8-char namespace on disk that belongs to a differentSTRING
MEDIUMtests/test_apprise_cli.py1660 # Create a tmporary namespaceSTRING
MEDIUMtests/test_apprise_cli.py1992 """This class is used to test various requirement configurations."""STRING
MEDIUMtests/test_apprise_cli.py2015 """This class is used to test various requirement configurations."""STRING
MEDIUMtests/test_apprise_cli.py2042 """This class is used to test various requirement configurations."""STRING
MEDIUMtests/test_apprise_cli.py2064 """This class is used to test a case where our requirements is fixed toSTRING
MEDIUMtests/test_apprise_cli.py2082 """This class is used to test a case where only packages_recommended isSTRING
MEDIUMtests/test_apprise_cli.py2100 """This class is used to test a pre-disabled state."""STRING
MEDIUMtests/test_apprise_cli.py2120 """This class is used to test a post-disabled state."""STRING
MEDIUMtests/test_apprise_cli.py2144 """This class is just a simple enabled one."""STRING
MEDIUMtests/test_apprise_config.py916 # Create a temporary config fileCOMMENT
MEDIUMtests/test_apprise_config.py1003 # Create a base area to work withinCOMMENT
MEDIUMtests/test_apprise_config.py133 # Create a ConfigBase objectSTRING
MEDIUMtests/test_plugin_base_formatting.py91 # Create a large body and title with random dataCOMMENT
MEDIUMtests/test_plugin_base_formatting.py322 # Create a large body and title with random dataCOMMENT
MEDIUMtests/test_plugin_base_formatting.py555 # Create a large body and title with random dataCOMMENT
MEDIUMtests/test_plugin_base_formatting.py1075 # Create a large body and title with random dataCOMMENT
MEDIUMtests/test_plugin_base_formatting.py1677 # Create a large body and title with random dataCOMMENT
MEDIUMtests/test_plugin_base_formatting.py2239 # Create a large body and title with random dataCOMMENT
MEDIUMtests/test_plugin_base_formatting.py2688 # Create a large body and title with random dataCOMMENT
MEDIUMtests/test_plugin_base_formatting.py3161 # Create a large body and title with random dataCOMMENT
MEDIUMtests/test_plugin_twilio.py391 # Initialize our objectCOMMENT
MEDIUMtests/test_apprise_utils.py3689 # Create a directory insde one of our namespacesCOMMENT
MEDIUMtests/test_plugin_email.py561 # Create a mock SMTP ObjectCOMMENT
MEDIUMtests/test_plugin_email.py844 # Create an apprise object to work with as wellCOMMENT
MEDIUMtests/test_plugin_email.py2700 # Create a mock SMTP ObjectCOMMENT
MEDIUMtests/test_plugin_email.py4055 # Create a fake matching keyfile to trigger discoveryCOMMENT
MEDIUMtests/test_decorator_notify.py61 # Define a function here on the spotCOMMENT
MEDIUMtests/test_decorator_notify.py292 # Define a function here on the spotCOMMENT
MEDIUMtests/test_decorator_notify.py406 # Define a function here on the spotCOMMENT
MEDIUMtests/test_decorator_notify.py650 # Define a function here on the spotCOMMENT
MEDIUM⚡tests/test_plugin_xmpp.py4959 # Create a client using the production factoryCOMMENT
MEDIUMtests/test_plugin_revolt.py468 # Create an apprise instanceCOMMENT
MEDIUMtests/test_plugin_revolt.py503 # Create a large body and title with random dataCOMMENT
MEDIUMtests/test_plugin_matrix.py5178 # Create a second account to act as recipientCOMMENT
MEDIUMtests/test_plugin_discord.py910 # Create a large body and title with random dataCOMMENT
MEDIUMtests/test_plugin_discord.py1483 # Create the template so that add() succeeds during initCOMMENT
MEDIUMtests/test_plugin_discord.py737 # Create an apprise instanceSTRING
MEDIUMtests/test_plugin_discord.py826 # Create an apprise instanceSTRING
MEDIUMtests/test_plugin_discord.py871 # Create an apprise instanceSTRING
MEDIUMtests/test_plugin_voipms.py244 # Initialize our objectCOMMENT
134 more matches not shown…
Empty Error Handlers56 hits · 280 pts
SeverityFileLineSnippetContext
HIGHtests/test_delivery_tracking_retry.py366except ImportError:CODE
HIGHtests/test_delivery_tracking_retry.py383except ImportError:CODE
HIGHtests/test_plugin_growl.py47except ImportError:CODE
HIGHtests/test_plugin_fcm.py54except ImportError:CODE
HIGHapprise/persistent_store.py71except (FileNotFoundError, AttributeError):CODE
HIGHapprise/persistent_store.py472except (FileNotFoundError, exception.AppriseDiskIOError):CODE
HIGHapprise/persistent_store.py670except FileNotFoundError:CODE
HIGHapprise/persistent_store.py690except FileNotFoundError:CODE
HIGHapprise/persistent_store.py847except KeyError:CODE
HIGHapprise/persistent_store.py1090except FileNotFoundError:CODE
HIGHapprise/persistent_store.py1129except FileNotFoundError:CODE
HIGHapprise/persistent_store.py1148except FileNotFoundError:CODE
HIGHapprise/persistent_store.py1812except FileNotFoundError:CODE
HIGHapprise/persistent_store.py726except FileNotFoundError:CODE
HIGHapprise/persistent_store.py879except KeyError:CODE
HIGHapprise/persistent_store.py970except FileNotFoundError:CODE
HIGHapprise/persistent_store.py1579except OSError:CODE
HIGHapprise/locale.py53except ImportError:CODE
HIGHapprise/locale.py361except (TypeError, KeyError):CODE
HIGHapprise/plugins/humhub.py191except (ValueError, TypeError):CODE
HIGHapprise/plugins/revolt.py311except (TypeError, ValueError):CODE
HIGHapprise/plugins/dbus.py101except ImportError:CODE
HIGHapprise/plugins/dbus.py61except ImportError: # pragma: no coverCODE
HIGHapprise/plugins/dbus.py71except ImportError:CODE
HIGHapprise/plugins/dbus.py94except (ImportError, ValueError, AttributeError):CODE
HIGHapprise/plugins/mastodon.py1182except (TypeError, ValueError):CODE
HIGHapprise/plugins/discord.py890except (TypeError, ValueError):CODE
HIGHapprise/plugins/blink1.py48except ImportError:CODE
HIGHapprise/plugins/mqtt.py694except ImportError: # pragma: no coverCODE
HIGHapprise/plugins/sinch.py369except (AttributeError, TypeError, ValueError):CODE
HIGHapprise/plugins/gnome.py50except (ImportError, ValueError, AttributeError):CODE
HIGHapprise/plugins/twitter.py667except (TypeError, KeyError):CODE
HIGHapprise/plugins/twitter.py851except (TypeError, ValueError):CODE
HIGHapprise/plugins/glib.py75except ImportError:CODE
HIGHapprise/plugins/glib.py68except (ImportError, ValueError, AttributeError):CODE
HIGHapprise/plugins/growl.py43except ImportError:CODE
HIGHapprise/plugins/bluesky.py659except (TypeError, ValueError):CODE
HIGHapprise/plugins/windows.py48except ImportError:CODE
HIGHapprise/plugins/reddit.py737except (TypeError, ValueError):CODE
HIGHapprise/plugins/xmpp/adapter.py732except Exception:CODE
HIGHapprise/plugins/xmpp/base.py314except Exception:CODE
HIGHapprise/plugins/matrix/base.py1845except KeyError:CODE
HIGHapprise/plugins/matrix/base.py1780except KeyError:CODE
HIGHapprise/plugins/matrix/base.py2649except Exception:CODE
HIGHapprise/plugins/matrix/base.py2243except KeyError:CODE
HIGHapprise/attachment/base.py292except OSError:CODE
HIGHapprise/utils/time.py64except ZoneInfoNotFoundError:CODE
HIGHapprise/utils/pem.py366except OSError:CODE
HIGHapprise/utils/pem.py383except OSError:CODE
HIGHapprise/utils/pem.py390except OSError:CODE
HIGHapprise/utils/pgp.py246except OSError:CODE
HIGHapprise/utils/pgp.py261except OSError:CODE
HIGHapprise/utils/pgp.py268except OSError:CODE
HIGHapprise/utils/wkd.py355except (TypeError, ValueError):CODE
HIGHapprise/utils/parse.py788except IndexError:CODE
HIGHapprise/utils/socket.py554except (CODE
Cross-Language Confusion30 hits · 265 pts
SeverityFileLineSnippetContext
HIGHtests/test_utils_pgp.py1432 # from_blob raise NameError (same as if the name were undefined)COMMENT
HIGHtests/test_plugin_workflows.py250 "contentUrl": null,CODE
HIGHtests/test_plugin_workflows.py420 "contentUrl": null,CODE
HIGHtests/test_plugin_workflows.py544 "contentUrl": null,CODE
HIGHtests/test_plugin_workflows.py619 "contentUrl": null,CODE
HIGHapprise/plugins/messagebird.py230 # "reference": null,COMMENT
HIGHapprise/plugins/messagebird.py246 # "validity": null,COMMENT
HIGHapprise/plugins/messagebird.py252 # "scheduledDatetime": null,COMMENT
HIGHapprise/plugins/bulksms.py374 # "body": null,COMMENT
HIGH⚡apprise/plugins/mastodon.py813 # "in_reply_to_id":null,COMMENT
HIGH⚡apprise/plugins/mastodon.py814 # "in_reply_to_account_id":null,COMMENT
HIGH⚡apprise/plugins/mastodon.py824 # "edited_at":null,COMMENT
HIGH⚡apprise/plugins/mastodon.py831 # "reblog":null,COMMENT
HIGH⚡apprise/plugins/mastodon.py869 # "remote_url":null,COMMENT
HIGH⚡apprise/plugins/mastodon.py870 # "preview_remote_url":null,COMMENT
HIGH⚡apprise/plugins/mastodon.py871 # "text_url":null,COMMENT
HIGHapprise/plugins/mastodon.py886 # "description":null,COMMENT
HIGHapprise/plugins/mastodon.py899 # "card":null,COMMENT
HIGHapprise/plugins/pushover.py618 3. Compute HMAC-SHA256 over (IV || ciphertext) with the same keySTRING
HIGHapprise/plugins/pushover.py619 4. Return base64(IV || ciphertext || HMAC)STRING
HIGH⚡apprise/plugins/twist.py310 # "contact_info": null,COMMENT
HIGH⚡apprise/plugins/twist.py311 # "profession": null,COMMENT
HIGH⚡apprise/plugins/twist.py313 # "avatar_id": null,COMMENT
HIGH⚡apprise/plugins/twist.py320 # "snooze_dnd_end": null,COMMENT
HIGH⚡apprise/plugins/twist.py323 # "snooze_until": null,COMMENT
HIGH⚡apprise/plugins/twist.py327 # "away_mode": null,COMMENT
HIGHapprise/plugins/twist.py348 # "snooze_dnd_start": null,COMMENT
HIGH⚡apprise/plugins/seven.py249 # "label": null,COMMENT
HIGH⚡apprise/plugins/seven.py251 # "udh": null,COMMENT
HIGH⚡apprise/plugins/seven.py255 # "error": null,COMMENT
Fake / Example Data170 hits · 173 pts
SeverityFileLineSnippetContext
LOWtests/test_plugin_ses.py376 "user@example.com",CODE
LOWtests/test_plugin_ses.py395 "user@example.com",CODE
LOWtests/test_plugin_ses.py521 "user@example.com",CODE
LOWtests/test_plugin_ses.py716 from_addr="user@example.com",CODE
LOWtests/test_plugin_ses.py755 from_addr="user@example.com",CODE
LOWtests/test_plugin_ses.py775 assert obj3.names["jane@example.com"] == "Jane Doe"CODE
LOWtests/test_plugin_resend.py230 NotifyResend(apikey=None, from_addr="user@example.com")CODE
LOWtests/test_plugin_resend.py242 apikey="abcd", from_addr="user@example.com", targets="!invalid"CODE
LOW⚡tests/test_plugin_deltachat.py80 "friend1@example.org/friend2@example.org",CODE
LOW⚡tests/test_plugin_deltachat.py87 "deltachat://user:pass@smtp.example.com/friend1@example.org"CODE
LOW⚡tests/test_plugin_deltachat.py88 "?to=friend2@example.org",CODE
LOW⚡tests/test_plugin_deltachat.py95 "deltachat://user:pass@smtp.example.com/friend@example.org"CODE
LOW⚡tests/test_plugin_deltachat.py103 "deltachat://user:pass@smtp.example.com/friend@example.org"CODE
LOW⚡tests/test_plugin_deltachat.py111 "deltachat://user:pass@smtp.example.com/friend@example.org"CODE
LOW⚡tests/test_plugin_deltachat.py119 "deltachat://user:pass@smtp.example.com/friend@example.org"CODE
LOW⚡tests/test_plugin_deltachat.py128 "deltachat://user:pass@smtp.example.com/friend@example.org"CODE
LOW⚡tests/test_plugin_deltachat.py136 "deltachats://user:pass@smtp.example.com:2525/friend@example.org",CODE
LOW⚡tests/test_plugin_deltachat.py276 targets=["friend@example.org"],CODE
LOWtests/test_plugin_deltachat.py59 "deltachat://user:pass@smtp.example.com/friend@example.org",CODE
LOWtests/test_plugin_deltachat.py69 "deltachats://user:pass@smtp.example.com/friend@example.org",CODE
LOWtests/test_plugin_deltachat.py222 targets=["friend@example.org"],CODE
LOWtests/test_plugin_deltachat.py295 "deltachat://user:pass@smtp.example.com/friend@example.org",CODE
LOWtests/test_plugin_deltachat.py327 "deltachat://user:pass@smtp.example.com/friend@example.org"CODE
LOWtests/test_plugin_deltachat.py402 "deltachat://user:pass@smtp.example.com/friend@example.org"CODE
LOW⚡tests/test_plugin_mailersend.py231 NotifyMailerSend(apikey=None, from_email="user@example.com")CODE
LOW⚡tests/test_plugin_mailersend.py235 NotifyMailerSend(apikey="bad+key*!", from_email="user@example.com")CODE
LOWtests/test_plugin_mailersend.py249 from_email="user@example.com",CODE
LOWtests/test_plugin_mailersend.py256 from_email="user@example.com",CODE
LOWtests/test_plugin_mailersend.py300 from_email="user@example.com",CODE
LOWtests/test_plugin_mailersend.py311 from_email="user@example.com",CODE
LOWtests/test_plugin_mailersend.py326 from_email="user@example.com",CODE
LOWtests/test_plugin_mailersend.py347 from_email="user@example.com",CODE
LOWtests/test_plugin_mailersend.py528 from_email="user@example.com",CODE
LOW⚡tests/test_utils_pgp.py126 result = ctrl._fetch_wkd_key("user@example.com")CODE
LOW⚡tests/test_utils_pgp.py146 result = ctrl._fetch_wkd_key(None, "user@example.com")CODE
LOW⚡tests/test_utils_pgp.py149 mock_wkd.fetch.assert_called_once_with("user@example.com")CODE
LOW⚡tests/test_utils_pgp.py157 result = ctrl._fetch_wkd_key("user@example.com")CODE
LOW⚡tests/test_utils_pgp.py170 uid = pgpy.PGPUID.new("Test", email="user@example.com")CODE
LOW⚡tests/test_utils_pgp.py187 result = ctrl._fetch_wkd_key("user@example.com")CODE
LOW⚡tests/test_utils_pgp.py190 mock_wkd.fetch.assert_called_once_with("user@example.com")CODE
LOW⚡tests/test_utils_pgp.py194 result2 = ctrl._fetch_wkd_key("user@example.com")CODE
LOW⚡tests/test_utils_pgp.py238 result = ctrl._fetch_wkd_key("user@example.com")CODE
LOW⚡tests/test_utils_pgp.py240 mock_wkd.fetch.assert_called_once_with("user@example.com")CODE
LOW⚡tests/test_utils_pgp.py295 mock_wkd.fetch.return_value = b"fake-key-bytes"CODE
LOW⚡tests/test_utils_pgp.py299 result = ctrl._fetch_wkd_key("user@example.com")CODE
LOW⚡tests/test_utils_pgp.py1318 ctrl = ApprisePGPController(path=str(tmpdir), email="user@example.com")CODE
LOW⚡tests/test_utils_pgp.py1654 ctrl = ApprisePGPController(path=str(tmpdir), email="user@example.com")CODE
LOW⚡tests/test_utils_pgp.py1658 result = ctrl.public_key("user@example.com", autogen=False)CODE
LOW⚡tests/test_utils_pgp.py1673 result = ctrl.public_key("user@example.com", autogen=False)CODE
LOWtests/test_utils_pgp.py212 uid = pgpy.PGPUID.new("Fresh", email="user@example.com")CODE
LOWtests/test_utils_pgp.py316 result = ctrl._fetch_wkd_key("user@example.com")CODE
LOWtests/test_utils_pgp.py719 key.userids = ["user@example.com", "user@work.example.com"]CODE
LOWtests/test_utils_pgp.py745 key.userids = ["user@example.com"]CODE
LOW⚡tests/test_utils_wkd.py126 sub, direct = AppriseWKDController.wkd_urls("user@example.com")CODE
LOW⚡tests/test_utils_wkd.py326 result = ctrl.fetch("user@example.com")CODE
LOW⚡tests/test_utils_wkd.py335 key_bytes = b"\x99another-fake-key"CODE
LOW⚡tests/test_utils_wkd.py344 result = ctrl.fetch("user@example.com")CODE
LOW⚡tests/test_utils_wkd.py356 result = ctrl.fetch("user@example.com")CODE
LOW⚡tests/test_utils_wkd.py374 result1 = ctrl.fetch("user@example.com")CODE
LOW⚡tests/test_utils_wkd.py375 result2 = ctrl.fetch("user@example.com")CODE
110 more matches not shown…
Deep Nesting165 hits · 144 pts
SeverityFileLineSnippetContext
LOWpackaging/i18n_status.py138CODE
LOWtests/test_config_base.py2626CODE
LOWtests/test_delivery_tracking_structure.py92CODE
LOWtests/test_plugin_email.py534CODE
LOWtests/test_plugin_xmpp.py1532CODE
LOWtests/test_plugin_xmpp.py2056CODE
LOWtests/test_plugin_xmpp.py2908CODE
LOWtests/test_plugin_xmpp.py3552CODE
LOWtests/test_plugin_matrix.py4730CODE
LOWtests/test_plugin_matrix.py4781CODE
LOWtests/test_plugin_growl.py136CODE
LOWtests/test_api.py2358CODE
LOWtests/test_api.py2774CODE
LOWtests/helpers/rest.py354CODE
LOWtests/helpers/module.py58CODE
LOWapprise/asset.py280CODE
LOWapprise/persistent_store.py125CODE
LOWapprise/persistent_store.py919CODE
LOWapprise/persistent_store.py1004CODE
LOWapprise/persistent_store.py1398CODE
LOWapprise/persistent_store.py1693CODE
LOWapprise/dispatch.py857CODE
LOWapprise/logger.py277CODE
LOWapprise/logger.py535CODE
LOWapprise/apprise.py425CODE
LOWapprise/apprise.py517CODE
LOWapprise/apprise.py777CODE
LOWapprise/apprise.py1017CODE
LOWapprise/apprise.py1288CODE
LOWapprise/apprise.py1732CODE
LOWapprise/apprise.py1957CODE
LOWapprise/apprise.py2044CODE
LOWapprise/apprise.py2105CODE
LOWapprise/apprise.py2152CODE
LOWapprise/apprise.py1753CODE
LOWapprise/url.py412CODE
LOWapprise/url.py1064CODE
LOWapprise/cli.py822CODE
LOWapprise/cli.py361CODE
LOWapprise/locale.py299CODE
LOWapprise/apprise_attachment.py133CODE
LOWapprise/manager.py125CODE
LOWapprise/manager.py168CODE
LOWapprise/manager.py315CODE
LOWapprise/manager.py834CODE
LOWapprise/config/http.py147CODE
LOWapprise/config/base.py186CODE
LOWapprise/config/base.py638CODE
LOWapprise/config/base.py869CODE
LOWapprise/plugins/apprise_api.py323CODE
LOWapprise/plugins/humhub.py208CODE
LOWapprise/plugins/ntfy.py436CODE
LOWapprise/plugins/ntfy.py520CODE
LOWapprise/plugins/one_signal.py371CODE
LOWapprise/plugins/groupme.py170CODE
LOWapprise/plugins/simplepush.py675CODE
LOWapprise/plugins/ses.py404CODE
LOWapprise/plugins/kook.py399CODE
LOWapprise/plugins/kavenegar.py197CODE
LOWapprise/plugins/whatsapp.py374CODE
105 more matches not shown…
Unused Imports164 hits · 139 pts
SeverityFileLineSnippetContext
LOWpackaging/verify_translations.py41CODE
LOWpackaging/i18n_status.py40CODE
LOWtests/test_delivery_tracking_retry.py345CODE
LOWtests/test_delivery_tracking_retry.py370CODE
LOWtests/test_plugin_irc_state.py30CODE
LOWtests/test_utils_sanitize.py30CODE
LOWtests/test_plugin_irc.py30CODE
LOWtests/test_plugin_xmpp.py33CODE
LOWtests/test_plugin_matrix.py2745CODE
LOWtests/test_plugin_fluxer.py27CODE
LOWtests/test_compat_py39.py30CODE
LOWtests/helpers/__init__.py28CODE
LOWtests/helpers/__init__.py29CODE
LOWtests/helpers/__init__.py29CODE
LOWtests/helpers/__init__.py29CODE
LOWtests/helpers/__init__.py29CODE
LOWtests/helpers/__init__.py29CODE
LOWtests/helpers/__init__.py36CODE
LOWtests/helpers/__init__.py37CODE
LOWtests/helpers/__init__.py38CODE
LOWapprise/dispatch.py33CODE
LOWapprise/__init__.py39CODE
LOWapprise/__init__.py39CODE
LOWapprise/__init__.py40CODE
LOWapprise/__init__.py41CODE
LOWapprise/__init__.py42CODE
LOWapprise/__init__.py43CODE
LOWapprise/__init__.py44CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py45CODE
LOWapprise/__init__.py64CODE
LOWapprise/__init__.py65CODE
LOWapprise/__init__.py68CODE
LOWapprise/__init__.py68CODE
LOWapprise/__init__.py68CODE
LOWapprise/__init__.py68CODE
LOWapprise/__init__.py69CODE
LOWapprise/__init__.py70CODE
LOWapprise/__init__.py71CODE
LOWapprise/__init__.py72CODE
LOWapprise/__init__.py73CODE
LOWapprise/__init__.py74CODE
LOWapprise/__init__.py74CODE
LOWapprise/__init__.py74CODE
LOWapprise/__init__.py74CODE
104 more matches not shown…
Excessive Try-Catch Wrapping103 hits · 103 pts
SeverityFileLineSnippetContext
LOWtests/test_plugin_deltachat.py165 except Exception as e:CODE
LOWtests/test_plugin_glib.py340 except Exception:CODE
LOW⚡tests/test_plugin_email.py696 except Exception:CODE
LOW⚡tests/test_plugin_email.py704 except Exception as e:CODE
LOW⚡tests/test_plugin_email.py713 except Exception as e:CODE
LOW⚡tests/test_plugin_xmpp.py75except Exception:CODE
LOWtests/test_plugin_xmpp.py3594 except Exception:CODE
LOW⚡tests/test_plugin_growl.py372 except Exception as e:CODE
LOW⚡tests/test_plugin_growl.py380 except Exception as e:CODE
LOWtests/test_api.py2585 except Exception as e:CODE
LOWtests/helpers/rest.py220 except Exception as e:CODE
LOWtests/helpers/rest.py739 except Exception:CODE
LOWtests/helpers/rest.py747 except Exception as e:CODE
LOWtests/helpers/rest.py787 except Exception:CODE
LOWtests/helpers/rest.py795 except Exception as e:CODE
LOWapprise/persistent_store.py523 except Exception as e:CODE
LOWapprise/dispatch.py80 except Exception:CODE
LOW⚡apprise/dispatch.py100 except Exception:CODE
LOW⚡apprise/dispatch.py108 except Exception:CODE
LOW⚡apprise/dispatch.py116 except Exception:CODE
LOW⚡apprise/dispatch.py124 except Exception:CODE
LOWapprise/dispatch.py886 except Exception as e:CODE
LOWapprise/logger.py336 except Exception as e:CODE
LOWapprise/logger.py401 except Exception as e:CODE
LOWapprise/logger.py563 except Exception as e:CODE
LOWapprise/logger.py745 except Exception:CODE
LOWapprise/logger.py762 except Exception as e:CODE
LOWapprise/apprise.py387 except Exception:CODE
LOWapprise/apprise.py1120 except Exception as e:CODE
LOWapprise/apprise.py1140 except Exception as e:CODE
LOWapprise/apprise.py1163 except Exception as e:CODE
LOWapprise/apprise.py1188 except Exception as e:CODE
LOWapprise/apprise.py1218 except Exception as e:CODE
LOWapprise/apprise.py1239 except Exception as e:CODE
LOWapprise/apprise.py1493 except Exception as e:CODE
LOWapprise/apprise.py1593 except Exception as e:CODE
LOWapprise/apprise.py1721 except Exception as e:CODE
LOWapprise/apprise.py1781 except Exception as e:CODE
LOWapprise/apprise_config.py431 except Exception:CODE
LOWapprise/cli.py327 except Exception:CODE
LOWapprise/cli.py553 except Exception as e:CODE
LOWapprise/template.py162 except Exception:CODE
LOWapprise/template.py581 except Exception as e:CODE
LOWapprise/template.py612 except Exception as e:CODE
LOWapprise/apprise_attachment.py308 except Exception:CODE
LOWapprise/config/base.py323 except Exception as e:CODE
LOWapprise/config/base.py852 except Exception as e:CODE
LOWapprise/config/base.py1758 except Exception as e:CODE
LOWapprise/decorators/base.py210 except Exception as e:CODE
LOWapprise/plugins/dbus.py356 except Exception as e:CODE
LOWapprise/plugins/dbus.py387 except Exception as e:CODE
LOWapprise/plugins/pushover.py652 except Exception as err:CODE
LOWapprise/plugins/pushover.py773 except Exception:CODE
LOWapprise/plugins/aprs.py361 except Exception as e:CODE
LOWapprise/plugins/aprs.py498 except Exception as e:CODE
LOWapprise/plugins/aprs.py549 except Exception as e:CODE
LOWapprise/plugins/smpp.py301 except Exception as e:CODE
LOWapprise/plugins/gnome.py216 except Exception as e:CODE
LOWapprise/plugins/gnome.py225 except Exception as e:CODE
LOWapprise/plugins/glib.py313 except Exception as e:CODE
43 more matches not shown…
AI Slop Vocabulary24 hits · 43 pts
SeverityFileLineSnippetContext
LOWtests/test_config_base.py1146# completely optional field. It's a good idea to just add this line because itCOMMENT
LOWtests/test_attach_memory.py152 # Test case where location is simply set to INACCESSIBLECOMMENT
MEDIUMtests/test_apprise_cli.py1690 # Generates another listing but utilize the tagSTRING
LOWtests/test_attach_file.py153 # Test case where location is simply set to INACCESSIBLECOMMENT
MEDIUMtests/test_plugin_custom_json.py487 # This is rather confusing, it may be easier to leverage theCOMMENT
MEDIUMtests/test_plugin_sendpulse.py179 # leverage all get params from URLCOMMENT
MEDIUMtests/test_plugin_fcm.py835 # Verify that not a single call to the web escaped the test harness.COMMENT
LOWtests/helpers/rest.py209 # just add `pdb': True to the call that is failingCOMMENT
MEDIUMtests/helpers/module.py133 # if we get here, we have test_ files that utilize the Class we justCOMMENT
LOWapprise/persistent_store.py1276 # For the below, we just set both cases and set them up as anCOMMENT
LOWapprise/apprise.py473 # Go ahead and just add our plugin into our listCOMMENT
LOWapprise/apprise.py486 # Go ahead and just add our plugin into our listCOMMENT
LOWapprise/apprise_config.py183 # Go ahead and just add our configuration into our listCOMMENT
LOWapprise/apprise_config.py201 # Go ahead and just add our configuration into our listCOMMENT
LOWapprise/plugins/ntfy.py698 # We will just use the status we already have.COMMENT
LOWapprise/plugins/kavenegar.py278 # We will just use the status we already have.COMMENT
LOWapprise/plugins/whatsapp.py532 # We will just use the status we already have.COMMENT
LOWapprise/plugins/sinch.py375 # We will just use the status we already have.COMMENT
LOWapprise/plugins/pushsafer.py306# at one time. When more are supported, just add their argument belowCOMMENT
LOWapprise/plugins/d7networks.py305 # We will just use the status we already have.COMMENT
LOWapprise/plugins/twilio.py509 # We will just use the status we already have.COMMENT
LOWapprise/plugins/rocketchat.py773 # If no webhook is specified, then we just pass along as if nothingCOMMENT
LOWapprise/plugins/matrix/base.py1968 # not issue a redundant GET -- we just set the encryption state.COMMENT
MEDIUMapprise/utils/sanitize.py82 # How many recursive lists/sets/tuples/dicts to delve into beforeCOMMENT
AI Structural Patterns40 hits · 34 pts
SeverityFileLineSnippetContext
LOWtests/test_plugin_bluesky.py310CODE
LOWtests/test_plugin_bluesky.py317CODE
LOWtests/test_plugin_twitter.py305CODE
LOWtests/test_plugin_twitter.py321CODE
LOWtests/test_plugin_twitter.py359CODE
LOWapprise/asset.py280CODE
LOWapprise/persistent_store.py742CODE
LOWapprise/apprise.py1017CODE
LOWapprise/apprise.py1288CODE
LOWapprise/plugins/ntfy.py318CODE
LOWapprise/plugins/one_signal.py209CODE
LOWapprise/plugins/simplepush.py245CODE
LOWapprise/plugins/opsgenie.py327CODE
LOWapprise/plugins/office365.py333CODE
LOWapprise/plugins/fluxer.py302CODE
LOWapprise/plugins/mastodon.py270CODE
LOWapprise/plugins/telegram.py684CODE
LOWapprise/plugins/pushover.py464CODE
LOWapprise/plugins/discord.py257CODE
LOWapprise/plugins/youlmk.py237CODE
LOWapprise/plugins/notifyre.py192CODE
LOWapprise/plugins/streamlabs.py181CODE
LOWapprise/plugins/pingram.py270CODE
LOWapprise/plugins/bark.py251CODE
LOWapprise/plugins/jira.py329CODE
LOWapprise/plugins/dot.py209CODE
LOWapprise/plugins/pagerduty.py208CODE
LOWapprise/plugins/reddit.py236CODE
LOWapprise/plugins/lametric.py530CODE
LOWapprise/plugins/base.py1005CODE
LOWapprise/plugins/slack.py610CODE
LOWapprise/plugins/octopush.py199CODE
LOWapprise/plugins/irc/client.py70CODE
LOWapprise/plugins/xmpp/adapter.py175CODE
LOWapprise/plugins/xmpp/base.py184CODE
LOWapprise/plugins/fcm/__init__.py221CODE
LOWapprise/plugins/matrix/base.py419CODE
LOWapprise/plugins/matrix/base.py2063CODE
LOWapprise/plugins/email/base.py262CODE
LOWapprise/plugins/email/base.py1084CODE
Verbosity Indicators16 hits · 29 pts
SeverityFileLineSnippetContext
LOW⚡tests/test_plugin_bluesky.py936 # Step 1: Identity resolution response (public.api.bsky.app)COMMENT
LOW⚡tests/test_plugin_bluesky.py939 # Step 2: PLC Directory lookupCOMMENT
LOW⚡tests/test_plugin_bluesky.py951 # Step 3: Auth sessionCOMMENT
LOW⚡tests/test_plugin_bluesky.py954 # Step 4: Create postCOMMENT
LOW⚡tests/test_plugin_glib.py73 # Step 2: Inject into sys.modulesCOMMENT
LOW⚡tests/test_plugin_glib.py77 # Step 3: Reload plugin with all mocks in placeCOMMENT
LOW⚡tests/test_plugin_glib.py356 # Step 1: Mock GICOMMENT
LOW⚡tests/test_plugin_glib.py366 # Step 2: Patch into sys.modulesCOMMENT
LOW⚡tests/test_plugin_glib.py370 # Step 3: Reload plugin to trigger branchCOMMENT
LOW⚡tests/test_plugin_glib.py373 # Step 4: Confirm GdkPixbuf image support was not enabledCOMMENT
LOWtests/test_plugin_glib.py49 # Step 1: Fake gi and repositoryCOMMENT
LOWapprise/plugins/bluesky.py325 # Step 1: Acquire DID from bsky.appCOMMENT
LOWapprise/plugins/bluesky.py349 # Step 2: Use DID to find the PDSCOMMENT
LOWapprise/plugins/bluesky.py394 # Step 3: Send to correct endpointCOMMENT
LOW⚡apprise/conversion/commonmark.py1092 # Step 1: strip CommonMark backslash escapes so we recover the raw URLSTRING
LOW⚡apprise/conversion/commonmark.py1096 # Step 2: re-encode the characters that the <url|label> delimiter syntaxSTRING
Structural Annotation Overuse16 hits · 29 pts
SeverityFileLineSnippetContext
LOW⚡tests/test_plugin_bluesky.py936 # Step 1: Identity resolution response (public.api.bsky.app)COMMENT
LOW⚡tests/test_plugin_bluesky.py939 # Step 2: PLC Directory lookupCOMMENT
LOW⚡tests/test_plugin_bluesky.py951 # Step 3: Auth sessionCOMMENT
LOW⚡tests/test_plugin_bluesky.py954 # Step 4: Create postCOMMENT
LOW⚡tests/test_plugin_glib.py73 # Step 2: Inject into sys.modulesCOMMENT
LOW⚡tests/test_plugin_glib.py77 # Step 3: Reload plugin with all mocks in placeCOMMENT
LOW⚡tests/test_plugin_glib.py356 # Step 1: Mock GICOMMENT
LOW⚡tests/test_plugin_glib.py366 # Step 2: Patch into sys.modulesCOMMENT
LOW⚡tests/test_plugin_glib.py370 # Step 3: Reload plugin to trigger branchCOMMENT
LOW⚡tests/test_plugin_glib.py373 # Step 4: Confirm GdkPixbuf image support was not enabledCOMMENT
LOWtests/test_plugin_glib.py49 # Step 1: Fake gi and repositoryCOMMENT
LOWapprise/plugins/bluesky.py325 # Step 1: Acquire DID from bsky.appCOMMENT
LOWapprise/plugins/bluesky.py349 # Step 2: Use DID to find the PDSCOMMENT
LOWapprise/plugins/bluesky.py394 # Step 3: Send to correct endpointCOMMENT
LOW⚡apprise/conversion/commonmark.py1092 # Step 1: strip CommonMark backslash escapes so we recover the raw URLSTRING
LOW⚡apprise/conversion/commonmark.py1096 # Step 2: re-encode the characters that the <url|label> delimiter syntaxSTRING
Redundant / Tautological Comments17 hits · 26 pts
SeverityFileLineSnippetContext
LOWtests/test_plugin_rsyslog.py104 # Set length to include title (for test)COMMENT
LOWapprise/asset.py219 # Set storage to autoCOMMENT
LOWapprise/url.py343 # Set time to 'now' and no need to throttleCOMMENT
LOWapprise/plugins/sfr.py318 # Check if the request was successfullCOMMENT
LOWapprise/plugins/aprs.py393 # Check if we are connectedCOMMENT
LOWapprise/plugins/aprs.py468 # Check if we are connectedCOMMENT
LOWapprise/plugins/aprs.py521 # Check if we are connectedCOMMENT
LOWapprise/plugins/__init__.py297 # Check if the mapped reference is a list; if it is, thenCOMMENT
LOWapprise/plugins/twist.py179 # Check if it is validCOMMENT
LOWapprise/plugins/threema.py178 # Check if an email was definedCOMMENT
LOWapprise/plugins/notifyre.py465 # Read file content for base64 encodingCOMMENT
LOWapprise/plugins/pushbullet.py256 # Check if an email was definedCOMMENT
LOWapprise/plugins/slack.py1855 # Verify if our token is a bot token or part of a webhook:COMMENT
LOWapprise/plugins/vapid/subscription.py691 # Verify if we're dealing with a single element:COMMENT
LOWapprise/plugins/matrix/base.py1753 # Check if it's a room id...COMMENT
LOWapprise/plugins/matrix/base.py3210 # Read file bytesCOMMENT
LOWapprise/utils/cwe312.py81 # Verify if it is a hostname or notCOMMENT
Slop Phrases8 hits · 15 pts
SeverityFileLineSnippetContext
LOW⚡tests/test_plugin_macosx.py255 # of a plugin, make sure to reload it.COMMENT
LOW⚡tests/test_plugin_macosx.py270 # of a plugin, make sure to reload it.COMMENT
LOWtests/test_plugin_twitter.py683 # This test case submits two notifications, so make sure to provide twoCOMMENT
MEDIUMtests/test_apprise_utils.py666 # It's worth noting that the hostname is an empty string and is NEVER setCOMMENT
LOWtests/test_plugin_gnome.py98 # of a plugin, make sure to reload it.COMMENT
LOW⚡tests/test_plugin_gnome.py406 # of a plugin, make sure to reload it.COMMENT
MEDIUMapprise/config/base.py661 # Or you can use this format (no tags associated)STRING
MEDIUMapprise/config/base.py664 # you can also use the keyword 'include' and identify aSTRING
Modern Structural Boilerplate12 hits · 12 pts
SeverityFileLineSnippetContext
LOWtests/helpers/__init__.py40__all__ = [CODE
LOWapprise/__init__.py87__all__ = [CODE
LOWapprise/logger.py525 def _set_notice(self, message: str, log: bool = True) -> None:CODE
LOWapprise/config/__init__.py35__all__ = [CODE
LOWapprise/decorators/__init__.py30__all__ = ["notify"]CODE
LOWapprise/plugins/__init__.py49__all__ = [CODE
LOWapprise/plugins/irc/__init__.py32__all__ = [CODE
LOWapprise/plugins/xmpp/__init__.py32__all__ = [CODE
LOWapprise/plugins/matrix/__init__.py32__all__ = [CODE
LOWapprise/plugins/email/__init__.py43__all__ = [CODE
LOWapprise/attachment/__init__.py35__all__ = [CODE
LOWapprise/conversion/__init__.py73__all__ = [CODE
Modern AI Meta-Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMapprise/dispatch.py461 # Capture orchestration logs not owned by a service attempt.COMMENT
MEDIUMapprise/logger.py670 # Call-level orchestration messages use the shared logger.COMMENT
MEDIUM.github/workflows/tests.yml62 # Install tox for isolated environment and plugin test orchestrationCOMMENT
AI Response Leakage1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHtests/test_apprise_utils.py3422 # In this example 'whence' isn't provided, so it isn't swappedCOMMENT
Docstring Block Structure1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHapprise/plugins/base.py1638Parses the URL and returns it broken apart into a dictionary. This is very specific and customized for Apprise.STRING