Apprise - Push Notifications that work with just about every platform!
This report presents the forensic synthetic code analysis of caronc/apprise, a Python project with 16,900 GitHub stars. SynthScan v2.0 examined 241,077 lines of code across 457 source files, recording 3812 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 29.0 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 3812 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| 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_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 |
| HIGH | apprise/plugins/bulksms.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/postmark.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/opsgenie.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/office365.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/nextcloudtalk.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/dbus.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/fluxer.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/ringcentral.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/ryver.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/mastodon.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/notificationapi.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| HIGH | apprise/plugins/telegram.py | 0 | returns the url built dynamically based on specified arguments. | STRING |
| 504 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 400 | def my_custom_notification_wrapper(body, title, notify_type, *args, **kwargs): | CODE |
| LOW | tests/test_plugin_smpp.py | 139 | def test_plugin_smpplib_import_error(): | CODE |
| LOW | tests/test_plugin_smpp.py | 170 | def test_plugin_smpp_edge_case(): | CODE |
| LOW | tests/test_plugin_rocket_chat.py | 328 | def test_plugin_rocket_chat_urls(): | CODE |
| LOW | tests/test_plugin_rocket_chat.py | 337 | def test_plugin_rocket_chat_edge_cases(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_rocket_chat.py | 438 | def test_plugin_rocket_chat_html_to_markdown_format(mock_post): | CODE |
| LOW⚡ | tests/test_plugin_wechat.py | 907 | def test_plugin_wechat_parse_native_url(): | CODE |
| LOW⚡ | tests/test_plugin_wechat.py | 915 | def test_plugin_wechat_error_codes(): | CODE |
| LOW⚡ | tests/test_plugin_wechat.py | 925 | def test_plugin_wechat_apprise_integration(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 304 | def test_plugin_wechat_url_round_trip(): | CODE |
| LOW | tests/test_plugin_wechat.py | 389 | def test_plugin_wechat_url_identifier(): | CODE |
| LOW | tests/test_plugin_wechat.py | 410 | def test_plugin_wechat_send_ok(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 443 | def test_plugin_wechat_send_cached_token(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 479 | def test_plugin_wechat_send_all_targets(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 519 | def test_plugin_wechat_send_markdown(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 556 | def test_plugin_wechat_send_no_targets(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 568 | def test_plugin_wechat_token_fetch_http_error(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 589 | def test_plugin_wechat_token_fetch_api_error(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 615 | def test_plugin_wechat_token_fetch_no_token_field(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 638 | def test_plugin_wechat_token_fetch_bad_json(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 657 | def test_plugin_wechat_token_fetch_request_exception(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 673 | def test_plugin_wechat_send_http_error(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 706 | def test_plugin_wechat_send_api_error(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 739 | def test_plugin_wechat_send_token_expiry_evicts_cache(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 775 | def test_plugin_wechat_send_token_expiry_all_codes(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 812 | def test_plugin_wechat_send_bad_json(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 848 | def test_plugin_wechat_send_request_exception(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 876 | def test_plugin_wechat_parse_url(): | CODE |
| LOW | tests/test_plugin_wechat.py | 952 | def test_plugin_wechat_send_unknown_api_error(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wechat.py | 985 | def test_plugin_wechat_token_unknown_api_error(mock_post, mock_get): | CODE |
| LOW | tests/test_plugin_wecombot.py | 110 | def test_plugin_wecombot_urls(): | CODE |
| LOW | tests/test_apprise_translations.py | 54 | def test_apprise_trans_gettext_init(): | CODE |
| LOW | tests/test_apprise_translations.py | 75 | def test_apprise_trans_gettext_translations( | CODE |
| LOW | tests/test_apprise_translations.py | 102 | def test_apprise_trans_gettext_lang_at(mock_getlocale): | CODE |
| LOW | tests/test_apprise_translations.py | 233 | def test_apprise_trans_windows_users_win(mock_getlocale): | CODE |
| LOW | tests/test_apprise_translations.py | 279 | def test_apprise_trans_windows_users_nux(mock_getlocale): | CODE |
| LOW | tests/test_apprise_translations.py | 331 | def test_detect_language_using_env(mock_getlocale): | CODE |
| LOW | tests/test_apprise_translations.py | 374 | def test_apprise_trans_gettext_missing(tmpdir): | CODE |
| LOW | tests/test_apprise_translations.py | 406 | def test_apprise_locale_add_existing_language(mock_translation): | CODE |
| LOW | tests/test_apprise_translations.py | 420 | def test_apprise_trans_successful_translation( | CODE |
| LOW | tests/test_plugin_nextcloud.py | 252 | def test_plugin_nextcloud_urls(): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 260 | def test_plugin_nextcloud_edge_cases(mock_post): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 287 | def test_plugin_nextcloud_url_prefix(mock_post): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 318 | def test_plugin_nextcloud_groups_and_all(mock_get, mock_post): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 390 | def test_plugin_nextcloud_persistent_storage(mock_get, mock_post, tmpdir): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 475 | def test_plugin_nextcloud_groups_errors_and_dedup(mock_get, mock_post): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 516 | def test_plugin_nextcloud_req_exception_and_empty_targets(mock_get, mock_post): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 549 | def test_plugin_nextcloud_json_empty_returns_empty(mock_get, mock_post): | CODE |
| LOW | tests/test_plugin_nextcloud.py | 592 | def test_plugin_nextcloud_caching_group_and_all(mock_get, mock_post): | CODE |
| LOW⚡ | tests/test_plugin_bluesky.py | 895 | def test_plugin_bluesky_did_web_and_plc_resolution( | CODE |
| LOW | tests/test_plugin_bluesky.py | 331 | def test_plugin_bluesky_general(mocker): | CODE |
| LOW | tests/test_plugin_bluesky.py | 473 | def test_plugin_bluesky_edge_cases(): | CODE |
| LOW | tests/test_plugin_bluesky.py | 482 | def test_plugin_bluesky_attachments_basic( | CODE |
| LOW | tests/test_plugin_bluesky.py | 543 | def test_plugin_bluesky_attachments_bad_message_response( | CODE |
| LOW | tests/test_plugin_bluesky.py | 598 | def test_plugin_bluesky_attachments_upload_fails( | CODE |
| LOW | tests/test_plugin_bluesky.py | 649 | def test_plugin_bluesky_attachments_invalid_attachment( | CODE |
| LOW | tests/test_plugin_bluesky.py | 698 | def test_plugin_bluesky_attachments_multiple_batch( | CODE |
| LOW | tests/test_plugin_bluesky.py | 857 | def test_plugin_bluesky_auth_failure( | CODE |
| LOW | tests/test_plugin_bluesky.py | 958 | def test_plugin_bluesky_pds_resolution_failures(mock_get): | CODE |
| LOW | tests/test_plugin_bluesky.py | 980 | def test_plugin_bluesky_missing_pds_endpoint(mock_get): | CODE |
| 1487 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_plugin_wechat.py | 130 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 132 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 140 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 142 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 150 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 152 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 162 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 164 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 172 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 174 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 182 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 184 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 192 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 194 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 202 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 204 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 214 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_plugin_wechat.py | 216 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 73 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 75 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 104 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 106 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 117 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 119 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 233 | # ---------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/test_plugin_wechat.py | 235 | # ---------------------------------------------------------------- | 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_pgp.py | 46 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 48 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 105 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 107 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 395 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 397 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 414 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 416 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 424 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 426 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 506 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 508 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 658 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 660 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 708 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 710 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 757 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 759 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 788 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 790 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 822 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_pgp.py | 824 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 41 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 43 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 52 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 54 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 118 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 120 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | tests/test_utils_wkd.py | 361 | # --------------------------------------------------------------------------- | COMMENT |
| 151 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | README.md | 281 | COMMENT | |
| LOW | README.md | 301 | # /etc/apprise/apprise.yaml | COMMENT |
| LOW | README.md | 401 | """My custom notification function that triggers on all foobar:// calls | COMMENT |
| LOW | README.md | 721 | # Prepare a location the persistent storage can write it's cached content to. | 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 | 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_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_attach_base.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_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_streamlabs.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/conftest.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_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_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_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 |
| LOW | tests/test_plugin_glib.py | 201 | # DBus interface. However, it is only meaningful in environments that: | COMMENT |
| LOW | tests/test_plugin_sogs.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_lametric.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_feishu.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_qq.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_config_base.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_sfr.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_jira.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_serverchan.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_octopush.py | 1 | # BSD 2-Clause License | COMMENT |
| LOW | tests/test_plugin_ringcentral.py | 1 | # BSD 2-Clause License | COMMENT |
| 637 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_attach_base.py | 71 | # Create an object with no mimetype over-ride | COMMENT |
| MEDIUM | tests/test_utils_pem.py | 64 | # Create a PEM Controller | COMMENT |
| MEDIUM | tests/test_utils_pem.py | 512 | # Create a PEM Controller | COMMENT |
| MEDIUM | tests/test_config_base.py | 1120 | # Define an Asset object if you wish (Optional) | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 234 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 278 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 324 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 370 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 405 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 451 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 540 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_sfr.py | 585 | # Create a mock response object | COMMENT |
| MEDIUM | tests/test_plugin_burstsms.py | 229 | # 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 | 1093 | # Create a config file we can source easily | COMMENT |
| MEDIUM | tests/test_apprise_cli.py | 1097 | # Define a second test URL that will | COMMENT |
| MEDIUM | tests/test_apprise_cli.py | 1342 | # Create a stale 8-char namespace on disk that belongs to a different | STRING |
| MEDIUM | tests/test_apprise_cli.py | 1639 | # Create a tmporary namespace | STRING |
| MEDIUM | tests/test_apprise_cli.py | 1971 | """This class is used to test various requirement configurations.""" | STRING |
| MEDIUM | tests/test_apprise_cli.py | 1994 | """This class is used to test various requirement configurations.""" | STRING |
| MEDIUM | tests/test_apprise_cli.py | 2021 | """This class is used to test various requirement configurations.""" | STRING |
| MEDIUM | tests/test_apprise_cli.py | 2044 | """This class is used to test a case where our requirements is fixed to | STRING |
| MEDIUM | tests/test_apprise_cli.py | 2062 | """This class is used to test a case where only packages_recommended is | STRING |
| MEDIUM | tests/test_apprise_cli.py | 2080 | """This class is used to test a pre-disabled state.""" | STRING |
| MEDIUM | tests/test_apprise_cli.py | 2100 | """This class is used to test a post-disabled state.""" | STRING |
| MEDIUM | tests/test_apprise_cli.py | 2124 | """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 | 89 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 320 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 553 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 1073 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 1675 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 2237 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 2686 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_base_formatting.py | 3159 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_twilio.py | 386 | # Initialize our object | COMMENT |
| MEDIUM | tests/test_apprise_utils.py | 3409 | # Create a directory insde one of our namespaces | COMMENT |
| MEDIUM | tests/test_plugin_email.py | 571 | # Create a mock SMTP Object | COMMENT |
| MEDIUM | tests/test_plugin_email.py | 836 | # Create an apprise object to work with as well | COMMENT |
| MEDIUM | tests/test_plugin_email.py | 2642 | # Create a mock SMTP Object | COMMENT |
| MEDIUM | tests/test_plugin_email.py | 3696 | # Create a fake matching keyfile to trigger discovery | COMMENT |
| MEDIUM | tests/test_decorator_notify.py | 60 | # Define a function here on the spot | COMMENT |
| MEDIUM | tests/test_decorator_notify.py | 278 | # Define a function here on the spot | COMMENT |
| MEDIUM | tests/test_decorator_notify.py | 308 | # Define a function here on the spot | COMMENT |
| MEDIUM | tests/test_decorator_notify.py | 543 | # Define a function here on the spot | COMMENT |
| MEDIUM⚡ | tests/test_plugin_xmpp.py | 4866 | # Create a client using the production factory | COMMENT |
| MEDIUM | tests/test_plugin_revolt.py | 461 | # Create an apprise instance | COMMENT |
| MEDIUM | tests/test_plugin_revolt.py | 496 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_matrix.py | 2510 | # Create a second account to act as recipient | COMMENT |
| MEDIUM | tests/test_plugin_discord.py | 890 | # Create a large body and title with random data | COMMENT |
| MEDIUM | tests/test_plugin_discord.py | 1441 | # Create the template so that add() succeeds during init | COMMENT |
| MEDIUM | tests/test_plugin_discord.py | 727 | # Create an apprise instance | STRING |
| MEDIUM | tests/test_plugin_discord.py | 810 | # Create an apprise instance | STRING |
| MEDIUM | tests/test_plugin_discord.py | 851 | # Create an apprise instance | STRING |
| MEDIUM | tests/test_plugin_voipms.py | 243 | # Initialize our object | COMMENT |
| 135 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_utils_pgp.py | 577 | # from_blob raise NameError (same as if the name were undefined) | COMMENT |
| HIGH | tests/test_plugin_workflows.py | 249 | "contentUrl": null, | CODE |
| HIGH | tests/test_plugin_workflows.py | 415 | "contentUrl": null, | CODE |
| HIGH | tests/test_plugin_workflows.py | 531 | "contentUrl": null, | CODE |
| HIGH | tests/test_plugin_workflows.py | 604 | "contentUrl": null, | CODE |
| HIGH | apprise/plugins/messagebird.py | 224 | # "reference": null, | COMMENT |
| HIGH | apprise/plugins/messagebird.py | 240 | # "validity": null, | COMMENT |
| HIGH | apprise/plugins/messagebird.py | 246 | # "scheduledDatetime": null, | COMMENT |
| HIGH | apprise/plugins/bulksms.py | 358 | # "body": null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 759 | # "in_reply_to_id":null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 760 | # "in_reply_to_account_id":null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 770 | # "edited_at":null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 777 | # "reblog":null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 815 | # "remote_url":null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 816 | # "preview_remote_url":null, | COMMENT |
| HIGH⚡ | apprise/plugins/mastodon.py | 817 | # "text_url":null, | COMMENT |
| HIGH | apprise/plugins/mastodon.py | 832 | # "description":null, | COMMENT |
| HIGH | apprise/plugins/mastodon.py | 845 | # "card":null, | COMMENT |
| HIGH | apprise/plugins/pushover.py | 471 | 3. Compute HMAC-SHA256 over (IV || ciphertext) with the same key | STRING |
| HIGH | apprise/plugins/pushover.py | 472 | 4. Return base64(IV || ciphertext || HMAC) | STRING |
| HIGH⚡ | apprise/plugins/twist.py | 309 | # "contact_info": null, | COMMENT |
| HIGH⚡ | apprise/plugins/twist.py | 310 | # "profession": null, | COMMENT |
| HIGH⚡ | apprise/plugins/twist.py | 312 | # "avatar_id": null, | COMMENT |
| HIGH⚡ | apprise/plugins/twist.py | 319 | # "snooze_dnd_end": null, | COMMENT |
| HIGH⚡ | apprise/plugins/twist.py | 322 | # "snooze_until": null, | COMMENT |
| HIGH⚡ | apprise/plugins/twist.py | 326 | # "away_mode": null, | COMMENT |
| HIGH | apprise/plugins/twist.py | 347 | # "snooze_dnd_start": null, | COMMENT |
| HIGH | apprise/plugins/sogs.py | 340 | SERVER_KEY || NONCE || TIMESTAMP || METHOD || PATH [|| HBODY] | STRING |
| HIGH⚡ | apprise/plugins/seven.py | 242 | # "label": null, | COMMENT |
| HIGH⚡ | apprise/plugins/seven.py | 244 | # "udh": null, | COMMENT |
| HIGH⚡ | apprise/plugins/seven.py | 248 | # "error": null, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_plugin_ses.py | 375 | "user@example.com", | CODE |
| LOW | tests/test_plugin_ses.py | 394 | "user@example.com", | CODE |
| LOW | tests/test_plugin_ses.py | 494 | "user@example.com", | CODE |
| LOW | tests/test_plugin_resend.py | 229 | NotifyResend(apikey=None, from_addr="user@example.com") | CODE |
| LOW | tests/test_plugin_resend.py | 241 | apikey="abcd", from_addr="user@example.com", targets="!invalid" | CODE |
| LOW⚡ | tests/test_plugin_mailersend.py | 230 | NotifyMailerSend(apikey=None, from_email="user@example.com") | CODE |
| LOW⚡ | tests/test_plugin_mailersend.py | 234 | NotifyMailerSend(apikey="bad+key*!", from_email="user@example.com") | CODE |
| LOW | tests/test_plugin_mailersend.py | 248 | from_email="user@example.com", | CODE |
| LOW | tests/test_plugin_mailersend.py | 255 | from_email="user@example.com", | CODE |
| LOW | tests/test_plugin_mailersend.py | 299 | from_email="user@example.com", | CODE |
| LOW | tests/test_plugin_mailersend.py | 310 | from_email="user@example.com", | CODE |
| LOW | tests/test_plugin_mailersend.py | 325 | from_email="user@example.com", | CODE |
| LOW | tests/test_plugin_mailersend.py | 346 | from_email="user@example.com", | CODE |
| LOW | tests/test_plugin_mailersend.py | 515 | 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 | 195 | result2 = ctrl._fetch_wkd_key("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 239 | result = ctrl._fetch_wkd_key("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 241 | mock_wkd.fetch.assert_called_once_with("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 296 | mock_wkd.fetch.return_value = b"fake-key-bytes" | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 300 | result = ctrl._fetch_wkd_key("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 461 | ctrl = ApprisePGPController(path=str(tmpdir), email="user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 797 | ctrl = ApprisePGPController(path=str(tmpdir), email="user@example.com") | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 801 | result = ctrl.public_key("user@example.com", autogen=False) | CODE |
| LOW⚡ | tests/test_utils_pgp.py | 816 | result = ctrl.public_key("user@example.com", autogen=False) | CODE |
| LOW | tests/test_utils_pgp.py | 213 | uid = pgpy.PGPUID.new("Fresh", email="user@example.com") | CODE |
| LOW | tests/test_utils_pgp.py | 317 | result = ctrl._fetch_wkd_key("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 125 | sub, direct = AppriseWKDController.wkd_urls("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 325 | result = ctrl.fetch("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 334 | key_bytes = b"\x99another-fake-key" | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 343 | result = ctrl.fetch("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 355 | result = ctrl.fetch("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 373 | result1 = ctrl.fetch("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 374 | result2 = ctrl.fetch("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 390 | result = ctrl.fetch("user@example.com") | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 405 | ctrl._cache["user@example.com"] = { | CODE |
| LOW⚡ | tests/test_utils_wkd.py | 410 | result = ctrl.fetch("user@example.com") | CODE |
| LOW | tests/test_utils_wkd.py | 147 | sub_lower, dir_lower = AppriseWKDController.wkd_urls("user@example.com") | CODE |
| LOW | tests/test_utils_wkd.py | 225 | for bad in (123, 12.5, object(), ["user@example.com"]): | CODE |
| LOW | tests/test_utils_wkd.py | 261 | sub, direct = AppriseWKDController.wkd_urls(BrokenStr("user@example.com")) | CODE |
| LOW | tests/test_utils_wkd.py | 446 | for bad in (123, 12.5, object(), ["user@example.com"]): | CODE |
| LOW | tests/test_plugin_office365.py | 72 | aid="user@example.com", | CODE |
| LOW | tests/test_plugin_office365.py | 242 | aid="user@example.com", | CODE |
| LOW | tests/test_plugin_office365.py | 259 | aid="user@example.com", | CODE |
| LOW | tests/test_plugin_office365.py | 277 | aid="user@example.com", | CODE |
| LOW | tests/test_plugin_office365.py | 292 | aid="user@example.com", | CODE |
| LOW | tests/test_plugin_office365.py | 306 | "?reply_to=reply@example.org".format( | CODE |
| LOW | tests/test_plugin_office365.py | 349 | "?reply_to=Reply+Person+reply@example.org".format( | CODE |
| LOW | tests/test_plugin_office365.py | 1132 | assert "reply@example.org" in obj.reply_to | CODE |
| LOW | tests/test_plugin_office365.py | 1145 | == "reply@example.org" | CODE |
| LOW | tests/test_plugin_office365.py | 1156 | "?reply_to=reply@example.org".format( | CODE |
| LOW | tests/test_plugin_office365.py | 1192 | "?reply_to=reply@example.org".format( | CODE |
| LOW | tests/test_plugin_office365.py | 1202 | assert "reply@example.org" in parsed["reply_to"] | CODE |
| LOW | tests/test_plugin_office365.py | 1263 | source="user@example.com", | CODE |
| LOW | tests/test_plugin_office365.py | 1486 | "address": "reply@example.org", | CODE |
| 81 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_config_base.py | 2490 | CODE | |
| LOW | tests/test_plugin_email.py | 546 | CODE | |
| LOW | tests/test_plugin_xmpp.py | 1971 | CODE | |
| LOW | tests/test_plugin_xmpp.py | 2823 | CODE | |
| LOW | tests/test_plugin_xmpp.py | 3472 | CODE | |
| LOW | tests/test_plugin_growl.py | 128 | CODE | |
| LOW | tests/test_api.py | 1835 | CODE | |
| LOW | tests/test_api.py | 2242 | CODE | |
| LOW | tests/helpers/rest.py | 338 | CODE | |
| LOW | tests/helpers/module.py | 58 | CODE | |
| LOW | apprise/asset.py | 242 | CODE | |
| LOW | apprise/persistent_store.py | 126 | CODE | |
| LOW | apprise/persistent_store.py | 930 | CODE | |
| LOW | apprise/persistent_store.py | 1015 | CODE | |
| LOW | apprise/persistent_store.py | 1409 | CODE | |
| LOW | apprise/persistent_store.py | 1714 | CODE | |
| LOW | apprise/conversion.py | 260 | CODE | |
| LOW | apprise/conversion.py | 1111 | CODE | |
| LOW | apprise/conversion.py | 1168 | CODE | |
| LOW | apprise/conversion.py | 1403 | CODE | |
| LOW | apprise/conversion.py | 1754 | CODE | |
| LOW | apprise/apprise.py | 268 | CODE | |
| LOW | apprise/apprise.py | 397 | CODE | |
| LOW | apprise/apprise.py | 421 | CODE | |
| LOW | apprise/apprise.py | 459 | CODE | |
| LOW | apprise/apprise.py | 616 | CODE | |
| LOW | apprise/apprise.py | 800 | CODE | |
| LOW | apprise/apprise.py | 928 | CODE | |
| LOW | apprise/apprise.py | 1088 | CODE | |
| LOW | apprise/apprise.py | 1451 | CODE | |
| LOW | apprise/apprise.py | 1546 | CODE | |
| LOW | apprise/apprise.py | 1591 | CODE | |
| LOW | apprise/url.py | 411 | CODE | |
| LOW | apprise/url.py | 1063 | CODE | |
| LOW | apprise/cli.py | 684 | CODE | |
| LOW | apprise/cli.py | 339 | CODE | |
| LOW | apprise/locale.py | 180 | CODE | |
| LOW | apprise/apprise_attachment.py | 129 | 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 | 146 | CODE | |
| LOW | apprise/config/base.py | 197 | CODE | |
| LOW | apprise/config/base.py | 641 | CODE | |
| LOW | apprise/config/base.py | 874 | CODE | |
| LOW | apprise/plugins/apprise_api.py | 255 | CODE | |
| LOW | apprise/plugins/ntfy.py | 435 | CODE | |
| LOW | apprise/plugins/ntfy.py | 510 | CODE | |
| LOW | apprise/plugins/one_signal.py | 366 | CODE | |
| LOW | apprise/plugins/groupme.py | 169 | CODE | |
| LOW | apprise/plugins/ses.py | 403 | CODE | |
| LOW | apprise/plugins/kook.py | 378 | CODE | |
| LOW | apprise/plugins/kavenegar.py | 196 | CODE | |
| LOW | apprise/plugins/whatsapp.py | 373 | CODE | |
| LOW | apprise/plugins/opsgenie.py | 326 | CODE | |
| LOW | apprise/plugins/opsgenie.py | 598 | CODE | |
| LOW | apprise/plugins/office365.py | 547 | CODE | |
| LOW | apprise/plugins/fluxer.py | 411 | CODE | |
| LOW | apprise/plugins/fluxer.py | 562 | CODE | |
| 74 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| 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 | 2307 | 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 | 30 | CODE | |
| LOW | tests/helpers/__init__.py | 31 | 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 | 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 | 75 | CODE | |
| LOW | apprise/__init__.py | 75 | CODE | |
| LOW | apprise/apprise.py | 28 | CODE | |
| LOW | apprise/apprise_config.py | 28 | CODE | |
| LOW | apprise/config/__init__.py | 30 | CODE | |
| LOW | apprise/config/base.py | 27 | CODE | |
| LOW | apprise/decorators/__init__.py | 28 | CODE | |
| LOW | apprise/plugins/fluxer.py | 44 | CODE | |
| LOW | apprise/plugins/notificationapi.py | 31 | CODE | |
| LOW | apprise/plugins/discord.py | 45 | CODE | |
| LOW | apprise/plugins/mattermost.py | 45 | CODE | |
| LOW | apprise/plugins/fortysixelks.py | 36 | CODE | |
| LOW | apprise/plugins/__init__.py | 31 | CODE | |
| LOW | apprise/plugins/__init__.py | 31 | CODE | |
| 30 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_plugin_glib.py | 341 | except Exception: | CODE |
| LOW⚡ | tests/test_plugin_email.py | 707 | except Exception: | CODE |
| LOW⚡ | tests/test_plugin_email.py | 715 | except Exception as e: | CODE |
| LOW⚡ | tests/test_plugin_email.py | 724 | except Exception as e: | CODE |
| LOW⚡ | tests/test_plugin_xmpp.py | 66 | except Exception: | CODE |
| LOW | tests/test_plugin_xmpp.py | 3514 | except Exception: | CODE |
| LOW⚡ | tests/test_plugin_growl.py | 364 | except Exception as e: | CODE |
| LOW⚡ | tests/test_plugin_growl.py | 372 | except Exception as e: | CODE |
| LOW | tests/helpers/rest.py | 204 | except Exception as e: | CODE |
| LOW | tests/helpers/rest.py | 722 | except Exception: | CODE |
| LOW | tests/helpers/rest.py | 730 | except Exception as e: | CODE |
| LOW | tests/helpers/rest.py | 770 | except Exception: | CODE |
| LOW | tests/helpers/rest.py | 778 | except Exception as e: | CODE |
| LOW | apprise/persistent_store.py | 529 | except Exception as e: | CODE |
| LOW | apprise/apprise.py | 228 | except Exception: | CODE |
| LOW | apprise/apprise.py | 788 | except Exception: | CODE |
| LOW | apprise/apprise.py | 1126 | except Exception: | CODE |
| LOW | apprise/apprise.py | 1230 | except Exception: | CODE |
| LOW | apprise/apprise.py | 1287 | except Exception: | CODE |
| LOW | apprise/apprise.py | 1342 | except Exception: | CODE |
| LOW | apprise/apprise_config.py | 435 | except Exception: | CODE |
| LOW | apprise/cli.py | 305 | except Exception: | CODE |
| LOW | apprise/apprise_attachment.py | 295 | except Exception: | CODE |
| LOW | apprise/config/base.py | 326 | except Exception as e: | CODE |
| LOW | apprise/config/base.py | 857 | except Exception as e: | CODE |
| LOW | apprise/config/base.py | 1549 | except Exception as e: | CODE |
| LOW | apprise/decorators/base.py | 188 | except Exception as e: | CODE |
| LOW | apprise/plugins/dbus.py | 355 | except Exception as e: | CODE |
| LOW | apprise/plugins/dbus.py | 386 | except Exception as e: | CODE |
| LOW | apprise/plugins/pushover.py | 505 | except Exception as err: | CODE |
| LOW | apprise/plugins/pushover.py | 600 | except Exception: | CODE |
| LOW | apprise/plugins/aprs.py | 357 | except Exception as e: | CODE |
| LOW | apprise/plugins/aprs.py | 494 | except Exception as e: | CODE |
| LOW | apprise/plugins/aprs.py | 545 | except Exception as e: | CODE |
| LOW | apprise/plugins/smpp.py | 271 | 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 | 312 | except Exception as e: | CODE |
| LOW | apprise/plugins/glib.py | 344 | except Exception as e: | CODE |
| LOW | apprise/plugins/streamlabs.py | 214 | except Exception as e: | CODE |
| LOW | apprise/plugins/streamlabs.py | 229 | except Exception as e: | CODE |
| LOW | apprise/plugins/windows.py | 198 | except Exception as e: | CODE |
| LOW | apprise/plugins/windows.py | 243 | except Exception as e: | CODE |
| LOW | apprise/plugins/dot.py | 403 | except Exception as e: | CODE |
| MEDIUM | apprise/plugins/xmpp/adapter.py | 523 | def _shutdown() -> None: | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 241 | except Exception: | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 262 | except Exception: | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 325 | except Exception: | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 471 | except Exception: | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 503 | except Exception: | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 664 | except Exception as e: | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 696 | except Exception as e: # pragma: no cover | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 725 | except Exception: | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 848 | except Exception as e: # pragma: no cover | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 908 | except Exception as e: | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 926 | except Exception: | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 968 | except Exception: | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 979 | except Exception as e: | CODE |
| LOW | apprise/plugins/xmpp/adapter.py | 1040 | except Exception as e: | CODE |
| LOW | apprise/plugins/xmpp/base.py | 313 | except Exception: | CODE |
| 15 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_config_base.py | 1116 | # completely optional field. It's a good idea to just add this line because it | COMMENT |
| LOW | tests/test_attach_http.py | 263 | # Test case where location is simply set to INACCESSIBLE | COMMENT |
| LOW | tests/test_attach_memory.py | 133 | # Test case where location is simply set to INACCESSIBLE | COMMENT |
| MEDIUM | tests/test_apprise_cli.py | 1669 | # 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 | 443 | # This is rather confusing, it may be easier to leverage the | COMMENT |
| MEDIUM | tests/test_plugin_sendpulse.py | 178 | # leverage all get params from URL | COMMENT |
| MEDIUM | tests/test_plugin_fcm.py | 833 | # Verify that not a single call to the web escaped the test harness. | COMMENT |
| LOW | tests/helpers/rest.py | 193 | # 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 | 1287 | # For the below, we just set both cases and set them up as an | COMMENT |
| LOW | apprise/apprise.py | 309 | # Go ahead and just add our plugin into our list | COMMENT |
| LOW | apprise/apprise.py | 322 | # Go ahead and just add our plugin into our list | COMMENT |
| LOW | apprise/apprise_config.py | 190 | # Go ahead and just add our configuration into our list | COMMENT |
| LOW | apprise/apprise_config.py | 208 | # Go ahead and just add our configuration into our list | COMMENT |
| LOW | apprise/plugins/ntfy.py | 688 | # We will just use the status we already have. | COMMENT |
| LOW | apprise/plugins/kavenegar.py | 272 | # We will just use the status we already have. | COMMENT |
| LOW | apprise/plugins/whatsapp.py | 526 | # We will just use the status we already have. | COMMENT |
| LOW | apprise/plugins/sinch.py | 369 | # We will just use the status we already have. | COMMENT |
| LOW | apprise/plugins/pushsafer.py | 305 | # at one time. When more are supported, just add their argument below | COMMENT |
| LOW | apprise/plugins/d7networks.py | 299 | # We will just use the status we already have. | COMMENT |
| LOW | apprise/plugins/twilio.py | 472 | # We will just use the status we already have. | COMMENT |
| LOW | apprise/plugins/rocketchat.py | 743 | # If no webhook is specified, then we just pass along as if nothing | COMMENT |
| LOW | apprise/plugins/matrix/base.py | 1664 | # 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 | 902 | # Step 1: Identity resolution response (public.api.bsky.app) | COMMENT |
| LOW⚡ | tests/test_plugin_bluesky.py | 905 | # Step 2: PLC Directory lookup | COMMENT |
| LOW⚡ | tests/test_plugin_bluesky.py | 917 | # Step 3: Auth session | COMMENT |
| LOW⚡ | tests/test_plugin_bluesky.py | 920 | # Step 4: Create post | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 72 | # Step 2: Inject into sys.modules | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 76 | # 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 | 48 | # Step 1: Fake gi and repository | COMMENT |
| LOW⚡ | apprise/conversion.py | 354 | # Step 1: strip CommonMark backslash escapes so we recover the raw URL | COMMENT |
| LOW⚡ | apprise/conversion.py | 374 | # Step 2: re-encode the characters that the <url|label> delimiter syntax | COMMENT |
| LOW | apprise/plugins/bluesky.py | 307 | # Step 1: Acquire DID from bsky.app | COMMENT |
| LOW | apprise/plugins/bluesky.py | 327 | # Step 2: Use DID to find the PDS | COMMENT |
| LOW | apprise/plugins/bluesky.py | 392 | # Step 3: Send to correct endpoint | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_plugin_bluesky.py | 902 | # Step 1: Identity resolution response (public.api.bsky.app) | COMMENT |
| LOW⚡ | tests/test_plugin_bluesky.py | 905 | # Step 2: PLC Directory lookup | COMMENT |
| LOW⚡ | tests/test_plugin_bluesky.py | 917 | # Step 3: Auth session | COMMENT |
| LOW⚡ | tests/test_plugin_bluesky.py | 920 | # Step 4: Create post | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 72 | # Step 2: Inject into sys.modules | COMMENT |
| LOW⚡ | tests/test_plugin_glib.py | 76 | # 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 | 48 | # Step 1: Fake gi and repository | COMMENT |
| LOW⚡ | apprise/conversion.py | 354 | # Step 1: strip CommonMark backslash escapes so we recover the raw URL | COMMENT |
| LOW⚡ | apprise/conversion.py | 374 | # Step 2: re-encode the characters that the <url|label> delimiter syntax | COMMENT |
| LOW | apprise/plugins/bluesky.py | 307 | # Step 1: Acquire DID from bsky.app | COMMENT |
| LOW | apprise/plugins/bluesky.py | 327 | # Step 2: Use DID to find the PDS | COMMENT |
| LOW | apprise/plugins/bluesky.py | 392 | # Step 3: Send to correct endpoint | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_plugin_bluesky.py | 295 | CODE | |
| LOW | tests/test_plugin_bluesky.py | 302 | CODE | |
| LOW | tests/test_plugin_twitter.py | 303 | CODE | |
| LOW | tests/test_plugin_twitter.py | 319 | CODE | |
| LOW | tests/test_plugin_twitter.py | 357 | CODE | |
| LOW | apprise/persistent_store.py | 748 | CODE | |
| LOW | apprise/plugins/ntfy.py | 317 | CODE | |
| LOW | apprise/plugins/one_signal.py | 204 | CODE | |
| LOW | apprise/plugins/opsgenie.py | 326 | CODE | |
| LOW | apprise/plugins/office365.py | 332 | CODE | |
| LOW | apprise/plugins/fluxer.py | 265 | CODE | |
| LOW | apprise/plugins/mastodon.py | 261 | CODE | |
| LOW | apprise/plugins/notificationapi.py | 261 | CODE | |
| LOW | apprise/plugins/pushover.py | 317 | CODE | |
| LOW | apprise/plugins/discord.py | 246 | CODE | |
| LOW | apprise/plugins/notifyre.py | 191 | CODE | |
| LOW | apprise/plugins/streamlabs.py | 178 | CODE | |
| LOW | apprise/plugins/bark.py | 224 | CODE | |
| LOW | apprise/plugins/jira.py | 328 | CODE | |
| LOW | apprise/plugins/dot.py | 209 | CODE | |
| LOW | apprise/plugins/pagerduty.py | 207 | CODE | |
| LOW | apprise/plugins/reddit.py | 233 | CODE | |
| LOW | apprise/plugins/lametric.py | 529 | CODE | |
| LOW | apprise/plugins/base.py | 735 | CODE | |
| LOW | apprise/plugins/slack.py | 534 | CODE | |
| LOW | apprise/plugins/irc/client.py | 70 | CODE | |
| LOW | apprise/plugins/xmpp/adapter.py | 168 | CODE | |
| LOW | apprise/plugins/xmpp/base.py | 183 | CODE | |
| LOW | apprise/plugins/fcm/__init__.py | 220 | CODE | |
| LOW | apprise/plugins/matrix/base.py | 371 | CODE | |
| LOW | apprise/plugins/email/base.py | 267 | CODE | |
| LOW | apprise/plugins/email/base.py | 1149 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_plugin_rsyslog.py | 103 | # Set length to include title (for test) | COMMENT |
| LOW | apprise/asset.py | 217 | # Set storage to auto | COMMENT |
| LOW | apprise/url.py | 342 | # Set time to 'now' and no need to throttle | COMMENT |
| LOW | apprise/plugins/sfr.py | 312 | # Check if the request was successfull | COMMENT |
| LOW | apprise/plugins/aprs.py | 389 | # Check if we are connected | COMMENT |
| LOW | apprise/plugins/aprs.py | 464 | # Check if we are connected | COMMENT |
| LOW | apprise/plugins/aprs.py | 517 | # Check if we are connected | COMMENT |
| LOW | apprise/plugins/__init__.py | 293 | # Check if the mapped reference is a list; if it is, then | COMMENT |
| LOW | apprise/plugins/twist.py | 178 | # Check if it is valid | COMMENT |
| LOW | apprise/plugins/threema.py | 177 | # Check if an email was defined | COMMENT |
| LOW | apprise/plugins/notifyre.py | 464 | # Read file content for base64 encoding | COMMENT |
| LOW | apprise/plugins/pushbullet.py | 250 | # Check if an email was defined | COMMENT |
| LOW | apprise/plugins/slack.py | 1776 | # Verify if our token is a bot token or part of a webhook: | COMMENT |
| LOW | apprise/plugins/vapid/subscription.py | 353 | # Verify if we're dealing with a single element: | COMMENT |
| LOW | apprise/plugins/matrix/base.py | 1449 | # Check if it's a room id... | COMMENT |
| LOW | apprise/plugins/matrix/base.py | 2777 | # Read file bytes | COMMENT |
| LOW | apprise/utils/cwe312.py | 76 | # Verify if it is a hostname or not | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_plugin_macosx.py | 231 | # of a plugin, make sure to reload it. | COMMENT |
| LOW⚡ | tests/test_plugin_macosx.py | 246 | # of a plugin, make sure to reload it. | COMMENT |
| LOW | tests/test_plugin_twitter.py | 679 | # 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 | 96 | # of a plugin, make sure to reload it. | COMMENT |
| LOW⚡ | tests/test_plugin_gnome.py | 378 | # of a plugin, make sure to reload it. | COMMENT |
| MEDIUM | apprise/config/base.py | 664 | # Or you can use this format (no tags associated) | STRING |
| MEDIUM | apprise/config/base.py | 667 | # you can also use the keyword 'include' and identify a | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/helpers/__init__.py | 33 | __all__ = [ | CODE |
| LOW | apprise/__init__.py | 80 | __all__ = [ | 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 |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_apprise_utils.py | 3215 | # In this example 'whence' isn't provided, so it isn't swapped | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | apprise/plugins/base.py | 1181 | Parses the URL and returns it broken apart into a dictionary. This is very specific and customized for Apprise. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/workflows/tests.yml | 61 | # Install tox for isolated environment and plugin test orchestration | COMMENT |