Low code web framework for real world applications, in Python and Javascript
This report summarizes scanner evidence for frappe/frappe, a Python project with 10,913 GitHub stars. SynthScan examined 617,422 lines of code across 4032 source files, recording 6664 pattern matches distributed across 24 syntactic categories. The legacy adjusted pattern signal is 12.7 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 5273 finding(s).
Are imports declared and package/API names verified? 671 finding(s).
Are wrappers, guards, and repeated structures necessary? 5217 finding(s).
Which changes need focused human review? 6664 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 6664 distinct pattern matches across 24 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ui/vite/island/index.js | 363 | function assertSheetScannedTheBundle(context, bundle, plugin) { | CODE |
| LOW | ui/vite/island/tailwind.js | 27 | export function writeIslandTailwindConfig(context, sources) { | CODE |
| LOW | ui/src/components/ActivityTimeline/grouping.ts | 184 | export function groupAssignmentActivities(activities: Activity[]): Activity[] { | CODE |
| LOW | ui/src/components/ConditionBuilder/internal/context.ts | 230 | export function useConditionBuilderContext(): ConditionBuilderContext { | CODE |
| LOW | ui/src/components/ColumnSettings/columns.ts | 150 | export function dropOrphanedSyntheticColumns( | CODE |
| LOW | ui/src/components/Onboarding/onboarding.ts | 142 | function updateUserOnboardingStatus(steps: StoredStep[]) { | CODE |
| LOW | frappe/auth.py | 308 | def force_user_to_reset_password(self): | CODE |
| LOW | frappe/auth.py | 517 | def get_login_attempt_tracker(key: str, raise_locked_exception: bool = True): | CODE |
| LOW | frappe/auth.py | 740 | def validate_auth_via_api_keys(authorization_header): | CODE |
| LOW | frappe/bundler.py | 146 | def page_island_build_command(production: bool = False, watch: bool = False) -> str: | CODE |
| LOW | frappe/bundler.py | 216 | def get_safe_max_old_space_size(): | CODE |
| LOW | frappe/sessions.py | 406 | def get_session_data_from_cache(self): | CODE |
| LOW | frappe/sessions.py | 539 | def get_expiry_period_for_query(): | CODE |
| LOW | frappe/runner.py | 316 | def dequeue_job_and_maintain_ttl(self, timeout, max_idle_time=None): | CODE |
| LOW | frappe/translate.py | 185 | def get_translations_from_apps(lang, apps=None): | CODE |
| LOW | frappe/translate.py | 203 | def get_translations_from_csv(lang, app): | CODE |
| LOW | frappe/translate.py | 209 | def get_translation_dict_from_file(path, lang, app, throw=False) -> dict[str, str]: | CODE |
| LOW | frappe/translate.py | 269 | def change_translation_version(): | CODE |
| LOW | frappe/translate.py | 341 | def get_messages_from_doctype(name): | CODE |
| LOW | frappe/translate.py | 387 | def get_messages_from_workflow(doctype=None, app_name=None): | CODE |
| LOW | frappe/translate.py | 457 | def get_messages_from_custom_fields(app_name): | CODE |
| LOW | frappe/translate.py | 529 | def _get_messages_from_page_or_report(doctype, name, module=None): | CODE |
| LOW | frappe/translate.py | 566 | def get_messages_from_include_files(app_name=None): | CODE |
| LOW | frappe/translate.py | 584 | def get_all_messages_from_js_files(app_name=None): | CODE |
| LOW | frappe/translate.py | 645 | def extract_messages_from_python_code(code: str) -> list[tuple[int, str, str | None]]: | CODE |
| LOW | frappe/translate.py | 672 | def extract_messages_from_javascript_code(code: str) -> list[tuple[int, str, str | None]]: | CODE |
| LOW | frappe/translate.py | 877 | def rebuild_all_translation_files(): | CODE |
| LOW | frappe/translate.py | 918 | def update_translations_for_source(source: str | None = None, translation_dict: str | dict | None = None): | CODE |
| LOW | frappe/translate.py | 956 | def get_all_language_with_name(): | CODE |
| LOW | frappe/translate.py | 969 | def get_preferred_language_cookie(): | CODE |
| LOW | frappe/config.py | 123 | def _apply_common_env_overrides(config: _dict[str, Any]) -> None: | CODE |
| LOW | frappe/cache_manager.py | 146 | def _clear_doctype_cache_from_redis(doctype: str | None = None): | CODE |
| LOW | frappe/cache_manager.py | 262 | def build_domain_restricted_doctype_cache(*args, **kwargs): | CODE |
| LOW | frappe/cache_manager.py | 279 | def build_domain_restricted_page_cache(*args, **kwargs): | CODE |
| LOW | frappe/boot.py | 513 | def get_link_preview_doctypes(): | CODE |
| LOW | frappe/boot.py | 530 | def get_additional_filters_from_hooks(): | CODE |
| LOW | frappe/boot.py | 561 | def get_notification_settings(): | CODE |
| LOW | frappe/onboarding.py | 13 | def update_user_onboarding_status(steps: str | list | dict, appName: str): | CODE |
| LOW | frappe/recorder.py | 255 | def _install_run_method_tracer(): | CODE |
| LOW | frappe/__init__.py | 484 | def setup_redis_cache_connection(): | CODE |
| LOW | frappe/__init__.py | 1159 | def _get_cached_signature_params(fn: Callable) -> tuple[dict[str, Any], bool]: | CODE |
| LOW | frappe/__init__.py | 1482 | def validate_and_sanitize_search_inputs(fn): | CODE |
| LOW | frappe/__init__.py | 1488 | def override_whitelisted_method(original_method: str) -> str: | CODE |
| LOW | frappe/deprecation_dumpster.py | 383 | def test_runner_make_test_records(*args, **kwargs): | CODE |
| LOW | frappe/deprecation_dumpster.py | 392 | def test_runner_make_test_objects(*args, **kwargs): | CODE |
| LOW | frappe/deprecation_dumpster.py | 404 | def test_runner_make_test_records_for_doctype(*args, **kwargs): | CODE |
| LOW | frappe/deprecation_dumpster.py | 416 | def test_runner_print_mandatory_fields(*args, **kwargs): | CODE |
| LOW | frappe/deprecation_dumpster.py | 428 | def test_runner_get_test_record_log(doctype): | CODE |
| LOW | frappe/deprecation_dumpster.py | 440 | def test_runner_add_to_test_record_log(doctype): | CODE |
| LOW | frappe/deprecation_dumpster.py | 486 | def tests_update_system_settings(args, commit=False): | CODE |
| LOW | frappe/deprecation_dumpster.py | 745 | def execute_command_and_count(*args, **kwargs): | CODE |
| LOW | frappe/deprecation_dumpster.py | 845 | def get_compat_frappe_test_case_preparation(cfg): | CODE |
| LOW | frappe/deprecation_dumpster.py | 889 | def model_trace_traced_field_context(*args, **kwargs): | CODE |
| LOW | frappe/deprecation_dumpster.py | 901 | def tests_utils_get_dependencies(doctype): | CODE |
| LOW | frappe/deprecation_dumpster.py | 936 | def test_runner_get_dependencies(doctype): | CODE |
| LOW | frappe/deprecation_dumpster.py | 964 | def compat_preload_test_records_upfront(candidates: list): | CODE |
| LOW | frappe/twofactor.py | 112 | def two_factor_is_enabled_for_(user): | CODE |
| LOW | frappe/twofactor.py | 271 | def get_email_subject_for_qr_code(kwargs_dict): | CODE |
| LOW | frappe/twofactor.py | 279 | def get_email_body_for_qr_code(kwargs_dict): | CODE |
| LOW | frappe/twofactor.py | 410 | def delete_all_barcodes_for_users(): | CODE |
| 4364 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | frappe/auth.py | 736 | except AttributeError: | CODE |
| HIGH | frappe/auth.py | 762 | except (AttributeError, TypeError, ValueError): | CODE |
| HIGH | frappe/bundler.py | 226 | except Exception: | CODE |
| HIGH | frappe/bundler.py | 44 | except FileExistsError: | CODE |
| HIGH | frappe/bundler.py | 69 | except ImportError: | CODE |
| HIGH | frappe/handler.py | 330 | except ValueError: | CODE |
| HIGH | frappe/cache_manager.py | 184 | except frappe.DoesNotExistError: | CODE |
| HIGH | frappe/boot.py | 601 | except Exception: | CODE |
| HIGH | frappe/client.py | 424 | except frappe.db.InternalError: | CODE |
| HIGH | frappe/recorder.py | 101 | except Exception: | CODE |
| HIGH | frappe/recorder.py | 123 | except Exception: | CODE |
| HIGH | frappe/recorder.py | 136 | except Exception: | CODE |
| HIGH | frappe/recorder.py | 162 | except Exception: | CODE |
| HIGH | frappe/recorder.py | 356 | except Exception: | CODE |
| HIGH | frappe/installer.py | 34 | except Exception: | CODE |
| HIGH | frappe/installer.py | 795 | except Exception: | CODE |
| HIGH | frappe/frappeclient.py | 399 | except Exception: | CODE |
| HIGH | frappe/database/query.py | 114 | except (AttributeError, TypeError, KeyError): | CODE |
| HIGH | frappe/database/postgres/database.py | 903 | except Exception: | CODE |
| HIGH | …ppe/core/page/permission_manager/permission_manager.py | 258 | except Exception: | CODE |
| HIGH | frappe/core/doctype/page/page.py | 297 | except (AttributeError, ImportError): | CODE |
| HIGH | frappe/core/doctype/module_def/module_def.py | 162 | except frappe.DoesNotExistError: | CODE |
| HIGH | frappe/core/doctype/file/test_file.py | 537 | except frappe.DoesNotExistError: | CODE |
| HIGH | frappe/core/doctype/file/test_file.py | 818 | except Exception: | CODE |
| HIGH | frappe/core/doctype/file/test_file.py | 847 | except Exception: | CODE |
| HIGH | frappe/core/doctype/data_import/importer.py | 1734 | except ValueError: | CODE |
| HIGH | frappe/core/doctype/data_import/importer.py | 1748 | except ValueError: | CODE |
| HIGH | frappe/core/doctype/data_import/importer.py | 422 | except Exception: | CODE |
| HIGH | frappe/core/doctype/data_import/importer.py | 376 | except Exception: | CODE |
| HIGH | frappe/core/doctype/data_import/data_import.py | 305 | except Exception: | CODE |
| HIGH | frappe/core/doctype/doctype/doctype.py | 2133 | except frappe.DoesNotExistError: | CODE |
| HIGH | frappe/core/doctype/doctype/doctype.py | 885 | except ValueError: | CODE |
| HIGH | frappe/desk/reportview.py | 1109 | except frappe.db.SQLError: | CODE |
| HIGH | frappe/desk/reportview.py | 1111 | except frappe.db.InternalError: | CODE |
| HIGH | frappe/desk/notifications.py | 500 | except frappe.DoesNotExistError: | CODE |
| HIGH | frappe/desk/desktop.py | 518 | except frappe.PermissionError: | CODE |
| HIGH | frappe/desk/form/assign_to.py | 238 | except frappe.DoesNotExistError: | CODE |
| HIGH | frappe/desk/form/meta.py | 257 | except frappe.PermissionError: | CODE |
| HIGH | …doctype/notification_settings/notification_settings.py | 156 | except ImportError: | CODE |
| HIGH | frappe/patches/v12_0/fix_public_private_files.py | 31 | except OSError: | CODE |
| HIGH | frappe/patches/v14_0/log_settings_migration.py | 27 | except Exception: | CODE |
| HIGH | frappe/patches/v14_0/clear_long_pending_stale_logs.py | 38 | except Exception: | CODE |
| HIGH | frappe/patches/v13_0/reset_corrupt_defaults.py | 32 | except frappe.DoesNotExistError: | CODE |
| HIGH | frappe/website/router.py | 83 | except NotFound: | CODE |
| HIGH | frappe/website/router.py | 205 | except Exception: | CODE |
| HIGH | frappe/website/page_renderers/template_page.py | 275 | except Exception: | CODE |
| HIGH | frappe/tests/test_sequence.py | 35 | except frappe.db.SequenceGeneratorLimitExceeded: | CODE |
| HIGH | frappe/tests/test_child_table.py | 12 | except Exception: | CODE |
| HIGH | frappe/tests/test_sqlite_search.py | 219 | except Exception: | CODE |
| HIGH | frappe/tests/test_sqlite_search.py | 225 | except Exception: | CODE |
| HIGH | frappe/tests/classes/unit_test_case.py | 124 | except (ValueError, IndexError): | CODE |
| HIGH | frappe/utils/user.py | 57 | except frappe.DoesNotExistError: | CODE |
| HIGH | frappe/utils/task_queue.py | 157 | except Exception: | CODE |
| HIGH | frappe/utils/error.py | 158 | except Exception: | CODE |
| HIGH | frappe/utils/__init__.py | 795 | except Exception: | CODE |
| HIGH | frappe/utils/__init__.py | 1081 | except Exception: | CODE |
| HIGH | frappe/utils/pdf.py | 232 | except errors.FileNotDecryptedError: | CODE |
| HIGH | frappe/utils/logger.py | 72 | except KeyError: | CODE |
| HIGH | frappe/utils/print_format_generator.py | 167 | except Exception: | CODE |
| HIGH | frappe/utils/file_lock.py | 62 | except OSError: | CODE |
| 51 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frappe/auth.py | 776 | except Exception: | CODE |
| LOW | frappe/bundler.py | 56 | except Exception: | CODE |
| LOW | frappe/bundler.py | 226 | except Exception: | CODE |
| LOW | frappe/bundler.py | 285 | except Exception: | CODE |
| LOW | frappe/bundler.py | 314 | except Exception as e: | CODE |
| LOW | frappe/translate.py | 178 | except Exception: | CODE |
| LOW | frappe/translate.py | 623 | except Exception: | CODE |
| LOW | frappe/config.py | 46 | except Exception as error: | CODE |
| LOW | frappe/config.py | 102 | except Exception: | CODE |
| LOW | frappe/config.py | 138 | except Exception as error: | CODE |
| LOW | frappe/monitor.py | 67 | except Exception: | CODE |
| LOW | frappe/monitor.py | 121 | except Exception: | CODE |
| MEDIUM | frappe/monitor.py | 52 | def __init__(self, transaction_type, method, kwargs): | CODE |
| MEDIUM | frappe/monitor.py | 101 | def dump(self, response=None): | CODE |
| LOW | frappe/handler.py | 78 | except Exception as e: | CODE |
| LOW | frappe/deferred_insert.py | 62 | except Exception as e: | CODE |
| LOW | frappe/boot.py | 601 | except Exception: | CODE |
| LOW | frappe/boot.py | 634 | except Exception: | CODE |
| MEDIUM | frappe/boot.py | 631 | def add_subscription_conf(): | CODE |
| LOW | frappe/client.py | 322 | except Exception: | CODE |
| LOW | frappe/recorder.py | 101 | except Exception: | CODE |
| LOW | frappe/recorder.py | 123 | except Exception: | CODE |
| LOW | frappe/recorder.py | 136 | except Exception: | CODE |
| LOW | frappe/recorder.py | 162 | except Exception: | CODE |
| LOW | frappe/recorder.py | 356 | except Exception: | CODE |
| LOW | frappe/recorder.py | 400 | except Exception as e: | CODE |
| LOW | frappe/twofactor.py | 307 | except Exception: | CODE |
| LOW | frappe/apps.py | 80 | except Exception: | CODE |
| LOW | frappe/installer.py | 34 | except Exception: | CODE |
| LOW | frappe/installer.py | 78 | except Exception: | CODE |
| LOW | frappe/installer.py | 239 | except Exception: | CODE |
| LOW | frappe/installer.py | 474 | except Exception: | CODE |
| LOW | frappe/installer.py | 513 | except Exception: | CODE |
| LOW | frappe/installer.py | 795 | except Exception: | CODE |
| LOW | frappe/installer.py | 1273 | except Exception: | CODE |
| LOW | frappe/app.py | 85 | except Exception: | CODE |
| LOW | frappe/app.py | 157 | except Exception as e: | CODE |
| LOW | frappe/app.py | 172 | except Exception: | CODE |
| LOW | frappe/frappeclient.py | 399 | except Exception: | CODE |
| LOW | frappe/migrate.py | 54 | except Exception as e: | CODE |
| LOW | frappe/migrate.py | 269 | except Exception as e: | CODE |
| MEDIUM | frappe/migrate.py | 49 | def wrapper(*args, **kwargs): | CODE |
| LOW⚡ | frappe/oauth.py | 454 | except Exception: | CODE |
| LOW⚡ | frappe/oauth.py | 464 | except Exception: | CODE |
| LOW | frappe/oauth.py | 567 | except Exception: | CODE |
| MEDIUM | frappe/oauth.py | 449 | def validate_id_token(self, token, scopes, request): | CODE |
| MEDIUM | frappe/oauth.py | 459 | def validate_jwt_bearer_token(self, token, scopes, request): | CODE |
| LOW | frappe/database/query.py | 536 | except Exception as e: | CODE |
| LOW | frappe/database/query.py | 1997 | except Exception: | CODE |
| LOW | frappe/database/query.py | 2076 | except Exception: | CODE |
| LOW | frappe/database/query.py | 2092 | except Exception: | CODE |
| LOW | frappe/database/query.py | 2144 | except Exception: | CODE |
| LOW | frappe/database/query.py | 2262 | except Exception: | CODE |
| LOW | frappe/database/database.py | 159 | except Exception as e: | CODE |
| LOW | frappe/database/database.py | 164 | except Exception as e: | CODE |
| LOW | frappe/database/database.py | 302 | except Exception as e: | CODE |
| LOW | frappe/database/database.py | 466 | except Exception as e: | CODE |
| LOW | frappe/database/database.py | 713 | except Exception as e: | CODE |
| LOW | frappe/database/database.py | 1240 | except Exception: | CODE |
| LOW | frappe/database/database.py | 1467 | except Exception: | CODE |
| 387 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frappe/runner.py | 7 | CODE | |
| LOW | frappe/hooks.py | 3 | CODE | |
| LOW | frappe/translate.py | 13 | CODE | |
| LOW | frappe/handler.py | 14 | CODE | |
| LOW | frappe/handler.py | 18 | CODE | |
| LOW | frappe/handler.py | 22 | CODE | |
| LOW | frappe/handler.py | 25 | CODE | |
| LOW | frappe/deferred_insert.py | 2 | CODE | |
| LOW | frappe/deferred_insert.py | 10 | CODE | |
| LOW | frappe/boot.py | 30 | CODE | |
| LOW | frappe/boot.py | 34 | CODE | |
| LOW | frappe/client.py | 3 | CODE | |
| LOW | frappe/client.py | 16 | CODE | |
| LOW | frappe/parallel_test_runner.py | 4 | CODE | |
| LOW | frappe/parallel_test_runner.py | 9 | CODE | |
| LOW | frappe/recorder.py | 31 | CODE | |
| LOW | frappe/__init__.py | 24 | CODE | |
| LOW | frappe/__init__.py | 25 | CODE | |
| LOW | frappe/__init__.py | 25 | CODE | |
| LOW | frappe/__init__.py | 25 | CODE | |
| LOW | frappe/__init__.py | 30 | CODE | |
| LOW | frappe/__init__.py | 36 | CODE | |
| LOW | frappe/__init__.py | 36 | CODE | |
| LOW | frappe/__init__.py | 36 | CODE | |
| LOW | frappe/__init__.py | 36 | CODE | |
| LOW | frappe/__init__.py | 38 | CODE | |
| LOW | frappe/__init__.py | 38 | CODE | |
| LOW | frappe/__init__.py | 38 | CODE | |
| LOW | frappe/__init__.py | 41 | CODE | |
| LOW | frappe/__init__.py | 43 | CODE | |
| LOW | frappe/__init__.py | 43 | CODE | |
| LOW | frappe/__init__.py | 43 | CODE | |
| LOW | frappe/__init__.py | 43 | CODE | |
| LOW | frappe/__init__.py | 43 | CODE | |
| LOW | frappe/__init__.py | 1495 | CODE | |
| LOW | frappe/__init__.py | 1495 | CODE | |
| LOW | frappe/__init__.py | 1495 | CODE | |
| LOW | frappe/__init__.py | 1495 | CODE | |
| LOW | frappe/__init__.py | 1495 | CODE | |
| LOW | frappe/__init__.py | 148 | CODE | |
| LOW | frappe/__init__.py | 154 | CODE | |
| LOW | frappe/__init__.py | 154 | CODE | |
| LOW | frappe/__init__.py | 155 | CODE | |
| LOW | frappe/__init__.py | 156 | CODE | |
| LOW | frappe/__init__.py | 156 | CODE | |
| LOW | frappe/__init__.py | 157 | CODE | |
| LOW | frappe/__init__.py | 162 | CODE | |
| LOW | frappe/__init__.py | 163 | CODE | |
| LOW | frappe/__init__.py | 164 | CODE | |
| LOW | frappe/__init__.py | 164 | CODE | |
| LOW | frappe/__init__.py | 164 | CODE | |
| LOW | frappe/__init__.py | 164 | CODE | |
| LOW | frappe/__init__.py | 164 | CODE | |
| LOW | frappe/__init__.py | 164 | CODE | |
| LOW | frappe/__init__.py | 164 | CODE | |
| LOW | frappe/__init__.py | 164 | CODE | |
| LOW | frappe/__init__.py | 164 | CODE | |
| LOW | frappe/__init__.py | 164 | CODE | |
| LOW | frappe/__init__.py | 164 | CODE | |
| LOW | frappe/__init__.py | 164 | CODE | |
| 409 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frappe/translate.py | 209 | CODE | |
| LOW | frappe/translate.py | 274 | CODE | |
| LOW | frappe/translate.py | 387 | CODE | |
| LOW | frappe/translate.py | 584 | CODE | |
| LOW | frappe/translate.py | 707 | CODE | |
| LOW | frappe/translate.py | 737 | CODE | |
| LOW | frappe/translate.py | 835 | CODE | |
| LOW | frappe/config.py | 33 | CODE | |
| LOW | frappe/monitor.py | 101 | CODE | |
| LOW | frappe/handler.py | 131 | CODE | |
| LOW | frappe/deferred_insert.py | 28 | CODE | |
| LOW | frappe/cache_manager.py | 146 | CODE | |
| LOW | frappe/boot.py | 686 | CODE | |
| LOW | frappe/boot.py | 733 | CODE | |
| LOW | frappe/recorder.py | 105 | CODE | |
| LOW | frappe/recorder.py | 220 | CODE | |
| LOW | frappe/recorder.py | 329 | CODE | |
| LOW | frappe/recorder.py | 225 | CODE | |
| LOW | frappe/__init__.py | 1001 | CODE | |
| LOW | frappe/deprecation_dumpster.py | 845 | CODE | |
| LOW | frappe/deprecation_dumpster.py | 964 | CODE | |
| LOW | frappe/deprecation_dumpster.py | 852 | CODE | |
| LOW | frappe/twofactor.py | 44 | CODE | |
| LOW | frappe/apps.py | 41 | CODE | |
| LOW | frappe/installer.py | 451 | CODE | |
| LOW | frappe/installer.py | 485 | CODE | |
| LOW | frappe/installer.py | 610 | CODE | |
| LOW | frappe/installer.py | 752 | CODE | |
| LOW | frappe/installer.py | 893 | CODE | |
| LOW | frappe/concurrency_limiter.py | 61 | CODE | |
| LOW | frappe/app.py | 111 | CODE | |
| LOW | frappe/app.py | 362 | CODE | |
| LOW | frappe/permissions.py | 82 | CODE | |
| LOW | frappe/permissions.py | 358 | CODE | |
| LOW | frappe/permissions.py | 512 | CODE | |
| LOW | frappe/defaults.py | 235 | CODE | |
| LOW | frappe/frappeclient.py | 64 | CODE | |
| LOW | frappe/frappeclient.py | 260 | CODE | |
| LOW | frappe/frappeclient.py | 380 | CODE | |
| LOW | frappe/oauth.py | 511 | CODE | |
| LOW | frappe/database/query.py | 401 | CODE | |
| LOW | frappe/database/query.py | 450 | CODE | |
| LOW | frappe/database/query.py | 623 | CODE | |
| LOW | frappe/database/query.py | 843 | CODE | |
| LOW | frappe/database/query.py | 891 | CODE | |
| LOW | frappe/database/query.py | 1102 | CODE | |
| LOW | frappe/database/query.py | 1197 | CODE | |
| LOW | frappe/database/query.py | 1246 | CODE | |
| LOW | frappe/database/query.py | 1397 | CODE | |
| LOW | frappe/database/query.py | 1585 | CODE | |
| LOW | frappe/database/query.py | 1671 | CODE | |
| LOW | frappe/database/query.py | 1914 | CODE | |
| LOW | frappe/database/query.py | 1962 | CODE | |
| LOW | frappe/database/query.py | 2210 | CODE | |
| LOW | frappe/database/query.py | 2533 | CODE | |
| LOW | frappe/database/query.py | 2613 | CODE | |
| LOW | frappe/database/query.py | 2647 | CODE | |
| LOW | frappe/database/database.py | 211 | CODE | |
| LOW | frappe/database/database.py | 380 | CODE | |
| LOW | frappe/database/database.py | 626 | CODE | |
| 405 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …ctype/installed_applications/installed_applications.js | 54 | dialog.fields_dict.apps.df.data.push({ | CODE |
| CRITICAL | frappe/printing/page/print/print.js | 556 | const get_options = frappe.ui.form.ControlBarcode.prototype.get_options.bind({ | CODE |
| CRITICAL | frappe/public/js/frappe/module_editor.js | 15 | return this.frm.doc.__onload.all_modules.map((module) => { | CODE |
| CRITICAL | frappe/public/js/frappe/ui/naming_series.js | 172 | this.dialog.fields_dict.naming_series_options.grid.refresh(); | CODE |
| CRITICAL | frappe/public/js/frappe/ui/naming_series.js | 176 | const rows = this.dialog.fields_dict.naming_series_options.grid.get_data(); | CODE |
| CRITICAL | frappe/public/js/frappe/ui/naming_series.js | 221 | this.dialog.fields_dict.naming_series_options.grid.refresh(); | CODE |
| CRITICAL | frappe/public/js/frappe/views/kanban_v2/kanban_page.js | 610 | frappe.views.BaseList.prototype.setup_view_menu.call(this); | CODE |
| CRITICAL | frappe/public/js/frappe/widgets/widget_dialog.js | 644 | let color = this.dialog.fields_dict.color.value.toLowerCase(); | CODE |
| CRITICAL | frappe/public/js/frappe/widgets/widget_dialog.js | 666 | this.dialog.fields_dict.link_to.df.onchange(); | CODE |
| CRITICAL⚡ | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 454 | this._endLabelText = L.drawLocal.draw.handlers.simpleshape.tooltip.end, L.Draw.Feature.prototype.initialize.call(thi | CODE |
| CRITICAL⚡ | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 457 | L.Draw.Feature.prototype.addHooks.call(this), this._map && (this._mapDraggable = this._map.dragging.enabled(), this. | CODE |
| CRITICAL⚡ | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 462 | L.Draw.Feature.prototype.removeHooks.call(this), this._map && (this._mapDraggable && this._map.dragging.enable(), th | CODE |
| CRITICAL⚡ | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 498 | this.type = L.Draw.Rectangle.TYPE, this._initialLabelText = L.drawLocal.draw.handlers.rectangle.tooltip.start, L.Dra | CODE |
| CRITICAL⚡ | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 501 | this._enabled && (this._isCurrentlyTwoClickDrawing = !1, L.Draw.SimpleShape.prototype.disable.call(this)) | CODE |
| CRITICAL⚡ | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 505 | this._isCurrentlyTwoClickDrawing && !o(t.target, "leaflet-pane") || L.Draw.SimpleShape.prototype._onMouseUp.call(thi | CODE |
| CRITICAL⚡ | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 512 | L.Draw.SimpleShape.prototype._fireCreatedEvent.call(this, t) | CODE |
| CRITICAL⚡ | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 515 | var t, e, i, o = L.Draw.SimpleShape.prototype._getTooltipText.call(this), | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 203 | L.Browser.touch && (this.options.icon = this.options.touchIcon), this.options.drawError.message = L.drawLocal.draw.h | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 206 | L.Draw.Feature.prototype.addHooks.call(this), this._map && (this._markers = [], this._markerGroup = new L.LayerGroup | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 217 | L.Draw.Feature.prototype.removeHooks.call(this), this._clearHideErrorTimeout(), this._cleanUpShape(), this._map.remo | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 394 | L.Draw.Feature.prototype._fireCreatedEvent.call(this, t) | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 420 | L.Draw.Polyline.prototype.initialize.call(this, t, e), this.type = L.Draw.Polygon.TYPE | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 436 | return t || this.options.showLength ? (this.options.showLength && (e = L.Draw.Polyline.prototype._getMeasurementStri | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 443 | !this.options.allowIntersection && this.options.showArea && (i = this._poly.getLatLngs(), this._area = L.GeometryUti | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 533 | this.type = L.Draw.Marker.TYPE, this._initialLabelText = L.drawLocal.draw.handlers.marker.tooltip.start, L.Draw.Feat | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 536 | L.Draw.Feature.prototype.addHooks.call(this), this._map && (this._tooltip.updateContent({ | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 549 | L.Draw.Feature.prototype.removeHooks.call(this), this._map && (this._marker && (this._marker.off("click", this._onCl | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 571 | L.Draw.Feature.prototype._fireCreatedEvent.call(this, t) | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 589 | this.type = L.Draw.CircleMarker.TYPE, this._initialLabelText = L.drawLocal.draw.handlers.circlemarker.tooltip.start, | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 593 | L.Draw.Feature.prototype._fireCreatedEvent.call(this, t) | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 619 | this.type = L.Draw.Circle.TYPE, this._initialLabelText = L.drawLocal.draw.handlers.circle.tooltip.start, L.Draw.Simp | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 627 | L.Draw.SimpleShape.prototype._fireCreatedEvent.call(this, t) | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 907 | if (L.Edit.SimpleShape.prototype._onMarkerDragStart.call(this, t), "function" == typeof this._getCorners) { | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 937 | L.Edit.SimpleShape.prototype._onMarkerDragStart.call(this, t); | CODE |
| CRITICAL | frappe/public/js/lib/leaflet_draw/leaflet.draw.js | 945 | o === this._moveMarker && (e = this._shape.getBounds(), i = e.getCenter(), o.setLatLng(i)), this._toggleCornerMarker | CODE |
| CRITICAL | frappe/public/js/lib/jquery/jquery.min.js | 3 | }catch(e){}O.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:fun | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ui/src/components/FileUpload/useUploader.ts | 340 | // ── internals ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/FileUpload/FileUploadDialog.vue | 355 | // ── the add-menu ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/FileUpload/FileUploadDialog.vue | 424 | // ── staged rows ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/FileUpload/FileUploadDialog.vue | 511 | // ── crop ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/FileUpload/FileUploadDialog.vue | 528 | // ── drag & drop (scoped to this popover) ───────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/FileUpload/FileUploadDialog.vue | 583 | // ── commit ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/Fields/GeolocationField.vue | 140 | // ─── Computed ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/Fields/GeolocationField.vue | 170 | // ─── Map lifecycle ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/Fields/GeolocationField.vue | 302 | // ── Tile layers (mirrors Frappe's map_defaults) ────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/Fields/GeolocationField.vue | 336 | // ── Locate control ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/Fields/GeolocationField.vue | 440 | // ─── Actions ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | ui/src/components/Fields/GeolocationField.vue | 463 | // ─── Cleanup ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frappe/database/__init__.py | 5 | # -------------------- | COMMENT |
| MEDIUM | frappe/core/doctype/sms_settings/sms_settings.py | 178 | # ========================================================= | COMMENT |
| MEDIUM | frappe/desk/doctype/custom_sidebar/custom_sidebar.py | 274 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/custom_sidebar/custom_sidebar.py | 276 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/custom_sidebar/custom_sidebar.py | 384 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/custom_sidebar/custom_sidebar.py | 389 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/custom_sidebar/custom_sidebar.py | 496 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/custom_sidebar/custom_sidebar.py | 498 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/custom_sidebar/custom_sidebar.py | 986 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/custom_sidebar/custom_sidebar.py | 988 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/sidebar/sidebar.py | 520 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/sidebar/sidebar.py | 525 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/sidebar/sidebar.py | 771 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/sidebar/sidebar.py | 782 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/sidebar/sidebar.py | 1039 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/sidebar/sidebar.py | 1053 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/sidebar/sidebar.py | 1208 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/sidebar/sidebar.py | 1210 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/sidebar/sidebar.py | 1361 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/sidebar/sidebar.py | 1363 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/sidebar/sidebar.py | 1495 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/sidebar/sidebar.py | 1497 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/dock/dock.py | 353 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/dock/dock.py | 364 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/dock/dock.py | 1173 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/dock/dock.py | 1175 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/dock/dock.py | 1313 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/dock/dock.py | 1315 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/dock/dock.py | 1343 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/desk/doctype/dock/dock.py | 1345 | # --------------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/automation_engine/schema_relationships.py | 87 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/automation_engine/schema_relationships.py | 89 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/automation_engine/schema_relationships.py | 133 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | frappe/automation_engine/schema_relationships.py | 135 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | frappe/tests/test_mask_fields.py | 163 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | frappe/tests/test_mask_fields.py | 165 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | frappe/tests/test_mask_fields.py | 177 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | frappe/tests/test_mask_fields.py | 179 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | frappe/tests/test_mask_fields.py | 198 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | frappe/tests/test_mask_fields.py | 200 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | frappe/tests/test_mask_fields.py | 258 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | frappe/tests/test_mask_fields.py | 260 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | frappe/tests/test_mask_fields.py | 327 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | frappe/tests/test_mask_fields.py | 329 | # ------------------------------------------------------------------ | COMMENT |
| MEDIUM⚡ | frappe/utils/boilerplate.py | 487 | # ------------ | COMMENT |
| MEDIUM⚡ | frappe/utils/boilerplate.py | 495 | # ---------- | COMMENT |
| MEDIUM⚡ | frappe/utils/boilerplate.py | 504 | # ---------- | COMMENT |
| MEDIUM⚡ | frappe/utils/boilerplate.py | 513 | # ------------ | COMMENT |
| 52 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ui/vite/index.js | 1 | // Vite plugin for apps that consume @framework/ui. | COMMENT |
| LOW | ui/vite/island/build-pages.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | ui/vite/island/index.js | 1 | // The island build preset. It sets everything the mount contract depends on, so | COMMENT |
| LOW | ui/vite/island/pages.js | 1 | // Page islands: what the framework build compiles, and how it names it. | COMMENT |
| LOW | ui/vite/island/tests/fixture/src/islands/unused.js | 1 | // The island does not import this module, so its classes must stay out of the | COMMENT |
| LOW | ui/island/index.js | 1 | // The island client contract: what an app's island entry imports. | COMMENT |
| LOW | ui/island/mount.js | 81 | root.style.height = "100%"; | COMMENT |
| LOW | ui/src/components/FileUpload/useUploader.ts | 261 | COMMENT | |
| LOW | ui/src/components/FileUpload/FileUploadDialog.vue | 281 | :aspectRatio="restrictions?.crop_image_aspect_ratio ?? null" | COMMENT |
| LOW | ui/src/components/FileUpload/FileUploadDialog.vue | 601 | COMMENT | |
| LOW | ui/src/components/FileUpload/ImageCropper.vue | 41 | <Button variant="solid" label="Apply" @click="apply" /> | COMMENT |
| LOW | ui/src/components/FormLayout/FormLayout.vue | 41 | COMMENT | |
| LOW | ui/src/components/FormLayout/FormLayout.vue | 61 | // Record page does on every save — holds the ref itself. | COMMENT |
| LOW | ui/src/components/Fields/GeolocationField.vue | 81 | // | COMMENT |
| LOW | ui/src/components/Fields/TableField.vue | 301 | // --- Row-edit dialog --------------------------------------------------------- | COMMENT |
| LOW | ui/src/components/Fields/TableField.vue | 421 | // There is no write-back: `FormLayout` mutates `doc.value[fieldname]` and never | COMMENT |
| LOW | ui/src/telemetry/index.ts | 1 | // Product telemetry for Frappe SPAs. Moved here from `frappe-ui/frappe` — the | COMMENT |
| LOW | frappe/hooks.py | 601 | # Expose method source code through the API discovery endpoints. Safe for open | COMMENT |
| LOW | frappe/hooks.py | 641 | # whose module is code-only resolves against the heirs instead of dead-ending. Naming the heirs is | COMMENT |
| LOW | frappe/boot.py | 261 | # The dock this user sees, keyed by app: each app's own dock, with the site's arrangement and | COMMENT |
| LOW | frappe/_optimizations.py | 141 | # | COMMENT |
| LOW | frappe/database/query.py | 161 | TAB_PATTERN = re.compile("^tab") | COMMENT |
| LOW | frappe/database/sequence.py | 1 | from frappe import db, scrub | COMMENT |
| LOW | frappe/database/sequence.py | 41 | sequence_name = scrub(doctype_name + slug) | COMMENT |
| LOW | frappe/database/database.py | 1521 | return | COMMENT |
| LOW | frappe/core/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/page/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/page/permission_manager/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/report/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/doctype/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/doctype/page/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/doctype/role/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/doctype/docperm/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/doctype/permission_type/permission_type.js | 1 | // Copyright (c) 2025, Frappe Technologies and contributors | COMMENT |
| LOW | frappe/core/doctype/scheduler_event/scheduler_event.js | 1 | // Copyright (c) 2025, Frappe Technologies and contributors | COMMENT |
| LOW | frappe/core/doctype/docfield/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/doctype/module_def/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/doctype/api_request_log/api_request_log.js | 1 | // Copyright (c) 2025, Frappe Technologies and contributors | COMMENT |
| LOW | frappe/core/doctype/defaultvalue/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/doctype/patch_log/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/doctype/report/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/doctype/report/boilerplate/controller.js | 1 | // Copyright (c) {year}, {app_publisher} and contributors | COMMENT |
| LOW | frappe/core/doctype/recorder_query/recorder_query.js | 1 | // Copyright (c) 2023, Frappe Technologies and contributors | COMMENT |
| LOW | frappe/core/doctype/communication/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/core/doctype/doctype/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | …ore/doctype/doctype/boilerplate/controller_calendar.js | 1 | // Copyright (c) {year}, {app_publisher} and contributors | COMMENT |
| LOW | …pe/core/doctype/doctype/boilerplate/controller_list.js | 1 | /* eslint-disable */ | COMMENT |
| LOW | …pe/core/doctype/doctype/boilerplate/controller_tree.js | 1 | // Copyright (c) {year}, {app_publisher} and contributors | COMMENT |
| LOW | frappe/core/doctype/doctype/boilerplate/controller.js | 1 | // Copyright (c) {year}, {app_publisher} and contributors | COMMENT |
| LOW | frappe/core/doctype/mapreduce_task/mapreduce_task.js | 1 | // Copyright (c) 2026, Frappe Technologies and contributors | COMMENT |
| LOW | frappe/desk/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/desk/layers.py | 141 | # because a saved layer is the rail, so an app's later addition waits in the manager rather | COMMENT |
| LOW | frappe/desk/page/desktop/desktop.js | 81 | render_app_icons() { | COMMENT |
| LOW | frappe/desk/form/__init__.py | 1 | # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors | COMMENT |
| LOW | frappe/desk/doctype/sidebar/sidebar.py | 61 | "filters", | COMMENT |
| LOW | frappe/desk/doctype/sidebar/sidebar.py | 81 | # | COMMENT |
| LOW | frappe/desk/doctype/sidebar/sidebar.py | 761 | doc.title = base.title | COMMENT |
| LOW | frappe/desk/doctype/sidebar/sidebar.py | 781 | # there is none there: a site running in developer mode belongs to a developer. | COMMENT |
| LOW | frappe/desk/doctype/sidebar/sidebar.py | 1041 | # | COMMENT |
| LOW | frappe/desk/doctype/sidebar/sidebar.py | 1641 | COMMENT | |
| 113 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ui/src/components/TableMultiSelect/TableMultiSelect.vue | 7 | :placeholder="placeholder" | CODE |
| LOW | …ts/ActivityTimeline/stories/ActivityTimeline.story.vue | 85 | author: person("Jane Doe", "jane@example.com"), | CODE |
| LOW | …ts/ActivityTimeline/stories/ActivityTimeline.story.vue | 92 | author: person("Jane Doe", "jane@example.com"), | CODE |
| LOW | …ts/ActivityTimeline/stories/ActivityTimeline.story.vue | 162 | author: person("Jane Doe", "jane@example.com"), | CODE |
| LOW | ui/src/components/Composer/ComposerEditor.vue | 7 | :placeholder="placeholder" | CODE |
| LOW | …rc/components/Composer/EmailComposer/EmailComposer.vue | 4 | :placeholder="placeholder" | CODE |
| LOW | …/components/Composer/EmailComposer/RecipientSelect.vue | 16 | :placeholder="placeholder" | CODE |
| LOW | …omponents/Composer/CommentComposer/CommentComposer.vue | 4 | :placeholder="placeholder" | CODE |
| LOW | …src/components/FormLayout/tests/renderPipeline.test.ts | 203 | expect(el.getAttribute("placeholder")).toBe("0.00"); | CODE |
| LOW | …c/components/FormLayout/stories/StaticSchema.story.vue | 71 | owner: "admin@example.com", | CODE |
| LOW | ui/src/components/Phone/Phone.vue | 88 | :placeholder="placeholder" | CODE |
| LOW | ui/src/components/Filter/valueControl.ts | 185 | return "John Doe"; | CODE |
| LOW⚡ | frappe/database/database.py | 1307 | exists("User", "jane@example.org", cache=True) | STRING |
| LOW⚡ | frappe/database/database.py | 1313 | exists({"doctype": "User", "full_name": "Jane Doe"}) | STRING |
| LOW⚡ | frappe/database/database.py | 1319 | exists("User", {"full_name": "Jane Doe"}) | STRING |
| LOW | …ppe/core/page/component_explorer/component_explorer.js | 10 | { label: "John Doe", image: "https://avatars.githubusercontent.com/u/499550?s=60&v=4" }, | CODE |
| LOW | …ppe/core/page/component_explorer/component_explorer.js | 372 | label: "John Doe", | CODE |
| LOW | …ppe/core/page/component_explorer/component_explorer.js | 814 | ).attr("placeholder", __("Search users"))), | CODE |
| LOW | …ppe/core/page/component_explorer/component_explorer.js | 830 | ["Jane Doe", "jane@example.com"], | CODE |
| LOW | …ppe/core/page/component_explorer/component_explorer.js | 926 | .attr("placeholder", "Search fields") | CODE |
| LOW | …ppe/core/page/component_explorer/component_explorer.js | 1907 | label: "John Doe", | CODE |
| LOW | …ppe/core/page/component_explorer/component_explorer.js | 1926 | { label: "John Doe" }, | CODE |
| LOW⚡ | …ppe/core/page/component_explorer/component_explorer.js | 1943 | { label: "John Doe", theme: "auto" }, | CODE |
| LOW⚡ | …ppe/core/page/component_explorer/component_explorer.js | 1953 | { label: "John Doe", size: "xs" }, | CODE |
| LOW⚡ | …ppe/core/page/component_explorer/component_explorer.js | 1954 | { label: "John Doe", size: "sm" }, | CODE |
| LOW⚡ | …ppe/core/page/component_explorer/component_explorer.js | 1955 | { label: "John Doe" }, | CODE |
| LOW⚡ | …ppe/core/page/component_explorer/component_explorer.js | 1956 | { label: "John Doe", size: "lg" }, | CODE |
| LOW⚡ | …ppe/core/page/component_explorer/component_explorer.js | 1957 | { label: "John Doe", size: "xl" }, | CODE |
| LOW⚡ | …ppe/core/page/component_explorer/component_explorer.js | 1958 | { label: "John Doe", size: "2xl" }, | CODE |
| LOW⚡ | …ppe/core/page/component_explorer/component_explorer.js | 1959 | { label: "John Doe", size: "3xl" }, | CODE |
| LOW⚡ | …ppe/core/page/component_explorer/component_explorer.js | 1965 | { label: "John Doe", theme: "blue" }, | CODE |
| LOW⚡ | …ppe/core/page/component_explorer/component_explorer.js | 1966 | { label: "John Doe", theme: "blue", shape: "square" }, | CODE |
| LOW⚡ | …ppe/core/page/component_explorer/component_explorer.js | 1967 | { label: "John Doe", theme: "blue", shape: "square", size: "2xl" }, | CODE |
| LOW⚡ | …ppe/core/page/component_explorer/component_explorer.js | 1974 | label: "John Doe", | CODE |
| LOW | frappe/core/doctype/role/role.py | 143 | if enabled and user_info not in ["admin@example.com", "guest@example.com"]: | CODE |
| LOW | frappe/core/doctype/docfield/docfield.json | 87 | "placeholder", | CODE |
| LOW | frappe/core/doctype/docfield/docfield.json | 649 | "fieldname": "placeholder", | CODE |
| LOW | frappe/core/doctype/comment/test_comment.py | 72 | "comment_email": "test@test.com", | CODE |
| LOW | frappe/core/doctype/comment/test_comment.py | 130 | comment_email="test@test.com", | CODE |
| LOW | frappe/core/doctype/user/test_user.py | 341 | data = {"cmd": "frappe.core.doctype.user.user.reset_password", "user": "test@test.com"} | STRING |
| LOW | frappe/core/doctype/report/test_report.py | 451 | "email": "admin@example.com", | CODE |
| LOW | frappe/core/doctype/report/test_report.py | 487 | "email": "admin@example.com", | CODE |
| LOW⚡ | frappe/core/doctype/communication/test_communication.py | 416 | to = "jane.doe+A+Test@example.org" | CODE |
| LOW⚡ | frappe/core/doctype/communication/test_communication.py | 423 | results = list(parse_email(["erp+ToDo=TASK-0001@example.org"])) | CODE |
| LOW | frappe/core/doctype/communication/communication.py | 634 | e.g. 'admin@example.com' is returned for email 'admin+doctype+docname@example.com' | STRING |
| LOW | frappe/desk/page/setup_wizard/install_fixtures.py | 55 | {"email": "admin@example.com", "global_unsubscribe": 1}, | CODE |
| LOW | frappe/patches/v13_0/email_unsubscribe.py | 6 | {"email": "admin@example.com", "global_unsubscribe": 1}, | CODE |
| LOW⚡ | frappe/contacts/doctype/contact/test_contact.py | 43 | self.assertEqual(get_full_name(first="John", last="Doe"), "John Doe") | CODE |
| LOW⚡ | frappe/contacts/doctype/contact/test_contact.py | 45 | self.assertEqual(get_full_name(first="John", last="Doe", company="Doe Pvt Ltd"), "John Doe") | CODE |
| LOW | …appe/website/doctype/web_template/test_web_template.py | 48 | self.assertEqual(sections[0].find("p").text, "test lorem ipsum") | CODE |
| LOW | …appe/website/doctype/web_template/test_web_template.py | 84 | {"title": "Test Title", "subtitle": "test lorem ipsum"} | CODE |
| LOW | …appe/website/doctype/web_template/test_web_template.py | 92 | "subtitle": "test lorem ipsum", | CODE |
| LOW | frappe/website/doctype/web_form/web_form.json | 189 | "placeholder": "Add a short description to tell users what this form is for..." | CODE |
| LOW | …ppe/website/doctype/web_form_field/web_form_field.json | 30 | "placeholder" | CODE |
| LOW | …ppe/website/doctype/web_form_field/web_form_field.json | 158 | "fieldname": "placeholder", | CODE |
| LOW⚡ | frappe/tests/test_utils.py | 1531 | self.assertEqual(escape_formula_injection("555-1234"), "555-1234") | CODE |
| LOW⚡ | frappe/tests/test_utils.py | 1567 | ["REC-002", "normal text", "555-1234", "10"], | CODE |
| LOW | frappe/tests/test_utils.py | 1490 | ["+91-1234567890", -5, "555-1234"], | CODE |
| LOW | frappe/tests/test_utils.py | 1504 | ((2, 2), "555-1234"), | CODE |
| LOW | frappe/tests/test_email.py | 32 | sender="admin@example.com", | CODE |
| 85 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frappe/sessions.py | 152 | """This function is meant to be called from scheduler""" | STRING |
| MEDIUM | frappe/database/query.py | 975 | # Create a ChildTableField instance to handle join and field access | COMMENT |
| MEDIUM | frappe/core/doctype/file/test_file.py | 2352 | # Create a test user without System Manager role | COMMENT |
| MEDIUM | frappe/core/doctype/rq_job/test_rq_job.py | 92 | # Create a slow job and check if it's stuck in "Started" | COMMENT |
| MEDIUM | frappe/desk/desktop.py | 616 | # Create a json string to log | COMMENT |
| MEDIUM | …ctype/global_search_settings/global_search_settings.py | 194 | # Create a Customize Form stub to apply property setters | COMMENT |
| MEDIUM | frappe/tests/test_mask_fields.py | 88 | # Create a role without mask permission | COMMENT |
| MEDIUM | frappe/tests/test_mask_fields.py | 92 | # Create a test user and assign the role | COMMENT |
| MEDIUM⚡ | frappe/tests/test_search.py | 334 | # Create a test doctype to link to | COMMENT |
| MEDIUM⚡ | frappe/tests/test_search.py | 342 | # Create a form doctype with a link field that has ignore_user_permissions | COMMENT |
| MEDIUM | frappe/tests/test_search.py | 370 | # Create a test user with restricted permissions | COMMENT |
| MEDIUM | frappe/tests/test_removing_orphans.py | 11 | # Create a new report | COMMENT |
| MEDIUM | frappe/tests/test_boot.py | 296 | # Create a ToDo custom report with admin user | COMMENT |
| MEDIUM | frappe/tests/test_boot.py | 320 | # Create a ToDo custom report with test user | STRING |
| MEDIUM | frappe/tests/test_api_v2.py | 536 | # Create a fresh doc for this test | COMMENT |
| MEDIUM | frappe/tests/test_query_report.py | 298 | # Define the visible rows | COMMENT |
| MEDIUM | frappe/tests/test_query_report.py | 323 | # Define the visible rows | COMMENT |
| MEDIUM | frappe/tests/test_query_report.py | 354 | # Define the visible rows | COMMENT |
| MEDIUM | frappe/tests/test_base_document.py | 134 | # Create an instance of the extended ToDo | COMMENT |
| MEDIUM | frappe/tests/test_base_document.py | 187 | # Create an instance with some data | COMMENT |
| MEDIUM⚡ | frappe/tests/test_query.py | 3603 | # This function is used as a permission query condition hook | COMMENT |
| MEDIUM | frappe/tests/test_query.py | 1004 | # Create a test blog post | COMMENT |
| MEDIUM | frappe/tests/test_query.py | 1112 | # Create a test note with specific content | COMMENT |
| MEDIUM | frappe/tests/test_query.py | 1332 | # Create a Dashboard Settings for test user | COMMENT |
| MEDIUM | frappe/tests/test_query.py | 1345 | # Create a server script for permission query | COMMENT |
| MEDIUM | frappe/tests/test_query.py | 1779 | # Create a test blog post | COMMENT |
| MEDIUM | frappe/tests/test_query.py | 2769 | # Create a private event (only owner can see by default) | COMMENT |
| MEDIUM | frappe/tests/test_query.py | 2994 | # Create a child table row with non-existent parent | COMMENT |
| MEDIUM | frappe/tests/test_sqlite_search.py | 388 | # Create a test user and switch to them | COMMENT |
| MEDIUM | frappe/tests/test_sqlite_search.py | 556 | # Create a new document after index is built | COMMENT |
| MEDIUM | frappe/tests/test_sqlite_search.py | 676 | # Create a note with HTML content | COMMENT |
| MEDIUM | frappe/tests/test_sqlite_search.py | 719 | # Create a search class with search disabled | COMMENT |
| MEDIUM | frappe/tests/test_sqlite_search.py | 762 | # Create a test document | COMMENT |
| MEDIUM⚡ | frappe/utils/test_print_format_generator.py | 80 | # Create the doc directly (without format_data) because _make_print_format | COMMENT |
| MEDIUM | frappe/utils/password_strength.py | 82 | # Define a number of functions that are used in a look up dictionary | COMMENT |
| MEDIUM | frappe/utils/chromium/page.py | 372 | # Create a new stylesheet | COMMENT |
| MEDIUM | frappe/utils/chromium/page.py | 379 | # Define the CSS rule for the page size | COMMENT |
| MEDIUM | frappe/search/sqlite_search.py | 1358 | # Create the FTS table with dynamic columns | COMMENT |
| MEDIUM | frappe/search/sqlite_search.py | 1368 | # Create the vocabulary and trigram tables | STRING |
| MEDIUM | frappe/search/sqlite_search.py | 1385 | # Create the index progress tracking table | STRING |
| MEDIUM | …tegrations/doctype/ldap_settings/test_ldap_settings.py | 41 | # Create a clean doc | COMMENT |
| MEDIUM | …tegrations/doctype/ldap_settings/test_ldap_settings.py | 572 | # Create a clean doc | COMMENT |
| MEDIUM | frappe/model/db_query.py | 824 | # Create a copy of the fields list and reverse it to avoid index issues when removing fields | COMMENT |
| MEDIUM | frappe/model/base_document.py | 240 | # Create the extended class by combining extension classes with base class | COMMENT |
| MEDIUM | frappe/email/doctype/notification/test_notification.py | 262 | # Create a test notification | COMMENT |
| MEDIUM | frappe/email/doctype/notification/test_notification.py | 321 | # Create a test notification | COMMENT |
| MEDIUM | frappe/email/doctype/notification/test_notification.py | 716 | # Create a ToDo | COMMENT |
| MEDIUM | frappe/email/doctype/notification/test_notification.py | 921 | # # Create an event and notification before each test | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | frappe/database/query.py | 2163 | # Since Y and X can't be null, null value in column will never match filter, so | COMMENT |
| HIGH⚡ | frappe/core/doctype/server_script/test_server_script.py | 173 | server_script["script"] = "js || code.?" | CODE |
| HIGH | frappe/core/doctype/data_import/test_data_import.py | 9 | CSV_IMPORT_SOURCE_DEPENDS_ON = "eval:doc.google_sheets_url || (doc.import_file && doc.import_file.split('.').pop().toLow | CODE |
| HIGH | frappe/core/doctype/data_import/test_data_import.py | 10 | CSV_DELIMITER_OPTIONS_DEPENDS_ON = "eval:doc.custom_delimiters && (doc.google_sheets_url || (doc.import_file && doc.impo | CODE |
| HIGH | frappe/desk/reportview.py | 1158 | filters=[*filters, "({0} = '' or {0} is null)".format(tag["name"])], | CODE |
| HIGH⚡ | …ppe/printing/doctype/print_format/test_print_format.py | 289 | "sections is null": '{"sections": null}', | CODE |
| HIGH⚡ | frappe/tests/test_utils.py | 1153 | "these_are && js_conditions", | CODE |
| HIGH⚡ | frappe/tests/test_utils.py | 1154 | "more || js_conditions", | CODE |
| HIGH | frappe/tests/test_db_query.py | 1393 | # it is non-null, so the plucked result must be masked. | COMMENT |
| HIGH | frappe/tests/test_translate.py | 325 | __("attr with", null, "context") | STRING |
| HIGH | frappe/tests/test_translate.py | 371 | args = get_args("""__("attr with", null, "context")""") | CODE |
| HIGH⚡ | frappe/tests/test_query.py | 3476 | null, empty, filled = (self.names[label] for label in ("null", "empty", "filled")) | CODE |
| HIGH⚡ | frappe/tests/test_query.py | 3478 | (["is", "not set"], {null}), | CODE |
| HIGH⚡ | frappe/tests/test_query.py | 3481 | (["!=", "[]"], {null, filled}), | CODE |
| HIGH⚡ | frappe/tests/test_query.py | 3483 | (["not in", ["[]"]], {null, filled}), | CODE |
| HIGH⚡ | frappe/tests/test_query.py | 3485 | (["=", None], {null}), | CODE |
| HIGH⚡ | frappe/utils/telemetry/pulse/test_pulse_client.py | 332 | # Guests have no server-known identity → null; the client mints its own anon id. | COMMENT |
| HIGH⚡ | frappe/gettext/extractors/tests/test_javascript.py | 13 | code = "let test = `<p>${__('Test', null, 'Context')}</p>`;" | CODE |
| HIGH | frappe/model/db_query.py | 1059 | # Since Y and X can't be null, null value in column will never match filter, so | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | frappe/database/mariadb/database.py | 0 | syncs a `doctype` to the table * creates if required * updates columns * updates indices | STRING |
| HIGH | frappe/database/mariadb/mysqlclient.py | 0 | syncs a `doctype` to the table * creates if required * updates columns * updates indices | STRING |
| HIGH | frappe/database/postgres/database.py | 0 | syncs a `doctype` to the table * creates if required * updates columns * updates indices | STRING |
| HIGH | frappe/core/doctype/page/page.py | 0 | return true if `has role` is not set or the user is allowed. | STRING |
| HIGH | frappe/core/doctype/report/report.py | 0 | return true if `has role` is not set or the user is allowed. | STRING |
| HIGH | frappe/desk/doctype/desktop_icon/desktop_icon.py | 0 | return true if `has role` is not set or the user is allowed. | STRING |
| HIGH | frappe/gettext/extractors/sidebar.py | 0 | extract messages from `custom/{doctype}.json` files. to be used by babel extractor. :param fileobj: the file-like object | STRING |
| HIGH | frappe/gettext/extractors/desktop_icon.py | 0 | extract messages from `custom/{doctype}.json` files. to be used by babel extractor. :param fileobj: the file-like object | STRING |
| HIGH | frappe/gettext/extractors/workspace_sidebar.py | 0 | extract messages from `custom/{doctype}.json` files. to be used by babel extractor. :param fileobj: the file-like object | STRING |
| HIGH | frappe/gettext/extractors/customization.py | 0 | extract messages from `custom/{doctype}.json` files. to be used by babel extractor. :param fileobj: the file-like object | STRING |
| HIGH | frappe/gettext/extractors/web_form.py | 0 | extract messages from report json files. to be used to babel extractor :param fileobj: the file-like object the messages | STRING |
| HIGH | frappe/gettext/extractors/doctype.py | 0 | extract messages from report json files. to be used to babel extractor :param fileobj: the file-like object the messages | STRING |
| HIGH | frappe/gettext/extractors/workspace.py | 0 | extract messages from report json files. to be used to babel extractor :param fileobj: the file-like object the messages | STRING |
| HIGH | frappe/gettext/extractors/report.py | 0 | extract messages from report json files. to be used to babel extractor :param fileobj: the file-like object the messages | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frappe/auth.py | 114 | # Check if the referrer or origin is in the allowed list | COMMENT |
| LOW | frappe/database/query.py | 498 | # Check if the operator is a string, and specifically a logical operator | COMMENT |
| LOW | frappe/database/query.py | 509 | # Check if it looks like it *might* be nested (even if malformed). | COMMENT |
| LOW | frappe/database/query.py | 848 | # Check if it's a nested condition list [cond1, op, cond2, ...] | COMMENT |
| LOW | frappe/database/query.py | 959 | # Check if doctype is a valid child table of self.doctype | COMMENT |
| LOW | frappe/database/query.py | 1226 | # Iterate through the list where each item could be a single field, criterion, or a comma-separated string | COMMENT |
| LOW | frappe/database/query.py | 1254 | # Check if it's a SQL function or operator dictionary | COMMENT |
| LOW | frappe/database/query.py | 1543 | # Check if the last word is a valid direction | COMMENT |
| LOW | frappe/database/query.py | 1661 | # Check if the field name is an optional field (like _user_tags) or in permitted fields | COMMENT |
| LOW | frappe/database/query.py | 2257 | # Check if the first part is a valid fieldname in the parent doctype | COMMENT |
| LOW | frappe/database/query.py | 2683 | # Check if it's a numeric string like "1" (for COUNT(1), etc.) | COMMENT |
| LOW | frappe/core/doctype/user/user.py | 1318 | # Check if we have a search term, and decide the filters depending on the search term | COMMENT |
| LOW | frappe/core/doctype/version/version.py | 34 | # Check if doc has some information about creation source like data import | COMMENT |
| LOW | frappe/core/doctype/package_release/package_release.py | 133 | # Set path to tarball | COMMENT |
| LOW | frappe/core/doctype/report/test_report.py | 389 | # Check if creating and deleting works with proper validations | COMMENT |
| LOW | frappe/desk/desktop.py | 127 | # Check if onboarding is enabled | COMMENT |
| LOW | frappe/desk/desktop.py | 138 | # Check if user is allowed | COMMENT |
| LOW | frappe/desk/desktop.py | 144 | # Check if already complete | COMMENT |
| LOW | frappe/desk/desktop.py | 254 | # Check if user is allowed to view | COMMENT |
| LOW | frappe/tests/test_nestedset.py | 362 | # Check if all records are fetched when flag is set to True | COMMENT |
| LOW | frappe/tests/test_nestedset.py | 365 | # Check if disabled records are skipped is set to False | COMMENT |
| LOW | frappe/tests/test_query_report.py | 334 | # Check if unset filters are skipped | Rows -> 2 filters + 1 empty + 1 column + 3 data | COMMENT |
| LOW | frappe/tests/test_sqlite_search.py | 298 | # Check if FTS table exists | COMMENT |
| LOW | frappe/tests/test_sqlite_search.py | 302 | # Check if vocabulary tables exist | COMMENT |
| LOW | frappe/tests/test_sqlite_search.py | 452 | # Check if corrections were applied | COMMENT |
| LOW | frappe/utils/backups.py | 198 | # Check if file exists and is less than a day old | COMMENT |
| LOW | frappe/utils/change_log.py | 382 | # Check if user is int the set of users to send update message to | COMMENT |
| LOW | frappe/utils/pdf_generator/browser.py | 145 | # Check if any of the classes exist | COMMENT |
| LOW | frappe/utils/pdf_generator/browser.py | 157 | if soup.find(class_=class_name): # Check if any element with the class is found | CODE |
| LOW | frappe/search/sqlite_search.py | 341 | # Check if this is a completely fresh build or a continuation | COMMENT |
| LOW | frappe/search/sqlite_search.py | 353 | # Check if we're continuing a fresh build (temp db exists) | COMMENT |
| LOW | frappe/search/sqlite_search.py | 387 | # Check if indexing is already complete | COMMENT |
| LOW | frappe/search/sqlite_search.py | 466 | # Check if all doctypes are indexed before building vocabulary | COMMENT |
| LOW | frappe/search/sqlite_search.py | 927 | # Check if this is a LIKE filter (list with 'LIKE' operator) | COMMENT |
| LOW | frappe/search/sqlite_search.py | 1873 | # Check if a temp DB exists (incomplete build from previous run) | COMMENT |
| LOW | frappe/search/sqlite_search.py | 1963 | # Check if a temp DB exists (incomplete build from previous run) | COMMENT |
| LOW | frappe/testing/discovery.py | 85 | # Check if the DocType belongs to the specified app | COMMENT |
| LOW | frappe/model/qb_query.py | 117 | # Set fields to the requested field or `name` if none specified | COMMENT |
| LOW | frappe/model/qb_query.py | 183 | # Check if table exists before running query | COMMENT |
| LOW | frappe/model/db_query.py | 668 | # Check if table_name is a linked_table alias | COMMENT |
| LOW | frappe/api/v2.py | 167 | # Check if the doctype controller has a static get_list method | COMMENT |
| LOW | frappe/commands/site.py | 385 | # Check if the backup is of an older version of frappe and the user hasn't specified force | COMMENT |
| LOW | frappe/email/doctype/notification/test_notification.py | 280 | # Check if the notification was triggered | COMMENT |
| LOW | frappe/email/doctype/notification/test_notification.py | 339 | # Check if the notification was triggered | COMMENT |
| LOW | …e/email/doctype/auto_email_report/auto_email_report.py | 125 | # Check if all Mandatory Report Filters are filled by the User | COMMENT |
| LOW | .github/workflows/run-indinvidual-tests.yml | 32 | # Loop through array and create JSON objects | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frappe/client.py | 26 | CODE | |
| LOW | frappe/client.py | 374 | CODE | |
| LOW | frappe/recorder.py | 581 | CODE | |
| LOW | frappe/__init__.py | 764 | CODE | |
| LOW | frappe/__init__.py | 901 | CODE | |
| LOW | frappe/installer.py | 42 | CODE | |
| LOW | frappe/installer.py | 124 | CODE | |
| LOW | frappe/installer.py | 726 | CODE | |
| LOW | frappe/installer.py | 752 | CODE | |
| LOW | frappe/share.py | 49 | CODE | |
| LOW | frappe/app.py | 573 | CODE | |
| LOW | frappe/frappeclient.py | 363 | CODE | |
| LOW | frappe/frappeclient.py | 370 | CODE | |
| LOW | frappe/database/query.py | 242 | CODE | |
| LOW | frappe/database/sequence.py | 28 | CODE | |
| LOW | frappe/database/database.py | 211 | CODE | |
| LOW | frappe/database/database.py | 548 | CODE | |
| LOW | frappe/database/database.py | 626 | CODE | |
| LOW | frappe/database/__init__.py | 122 | CODE | |
| LOW | …prepared_report_analytics/prepared_report_analytics.py | 106 | CODE | |
| LOW | frappe/core/doctype/access_log/access_log.py | 51 | CODE | |
| LOW | frappe/core/doctype/data_export/exporter.py | 33 | CODE | |
| LOW | frappe/core/doctype/data_export/exporter.py | 78 | CODE | |
| LOW | frappe/core/doctype/data_import/importer.py | 749 | CODE | |
| LOW | frappe/core/doctype/communication/mixins.py | 270 | CODE | |
| LOW | frappe/core/doctype/communication/mixins.py | 338 | CODE | |
| LOW | frappe/core/doctype/communication/email.py | 33 | CODE | |
| LOW | frappe/core/doctype/communication/email.py | 143 | CODE | |
| LOW | frappe/desk/query_report.py | 264 | CODE | |
| LOW | frappe/desk/query_report.py | 287 | CODE | |
| LOW | frappe/desk/search.py | 104 | CODE | |
| LOW | frappe/desk/doctype/dashboard_chart/dashboard_chart.py | 94 | CODE | |
| LOW | frappe/website/doctype/web_page_view/web_page_view.py | 47 | CODE | |
| LOW | frappe/tests/ui_test_helpers.py | 782 | CODE | |
| LOW | frappe/tests/microbenchmarks/utils.py | 31 | CODE | |
| LOW | frappe/tests/microbenchmarks/utils.py | 43 | CODE | |
| LOW | frappe/utils/task_queue.py | 12 | CODE | |
| LOW | frappe/utils/backups.py | 646 | CODE | |
| LOW | frappe/utils/backups.py | 685 | CODE | |
| LOW | frappe/utils/backups.py | 64 | CODE | |
| LOW | frappe/utils/print_utils.py | 59 | CODE | |
| LOW | frappe/utils/print_utils.py | 188 | CODE | |
| LOW | frappe/utils/response.py | 377 | CODE | |
| LOW | frappe/utils/messages.py | 11 | CODE | |
| LOW | frappe/utils/background_jobs.py | 129 | CODE | |
| LOW | frappe/utils/commands.py | 40 | CODE | |
| LOW | frappe/utils/data.py | 238 | CODE | |
| LOW | frappe/utils/data.py | 253 | CODE | |
| LOW | frappe/utils/data.py | 268 | CODE | |
| LOW | frappe/utils/data.py | 282 | CODE | |
| LOW | frappe/realtime/__init__.py | 30 | CODE | |
| LOW | frappe/testing/runner.py | 49 | CODE | |
| LOW | frappe/model/delete_doc.py | 24 | CODE | |
| LOW | frappe/model/qb_query.py | 26 | CODE | |
| LOW | frappe/model/db_query.py | 119 | CODE | |
| LOW | frappe/model/document.py | 179 | CODE | |
| LOW | frappe/model/document.py | 415 | CODE | |
| LOW | frappe/model/rename_doc.py | 108 | CODE | |
| LOW | frappe/commands/site.py | 74 | CODE | |
| LOW | frappe/commands/site.py | 208 | CODE | |
| 13 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frappe/database/postgres/setup_db.py | 66 | def _set_database_owner(root_conn, db_name: str, db_user: str, postgres_version: int) -> None: | CODE |
| LOW | frappe/core/doctype/file/utils.py | 343 | def update_existing_file_docs(doc: "File") -> None: | CODE |
| LOW | frappe/core/doctype/background_task/background_task.py | 66 | def update_stage(self, stage: str) -> None: | CODE |
| LOW | frappe/core/doctype/recorder/db_optimizer.py | 110 | def update_cardinality(self, column_stats: list[ColumnStat]) -> None: | CODE |
| LOW | …e/document_naming_settings/document_naming_settings.py | 124 | def set_series_options_in_meta(self, doctype: str, options: str) -> None: | CODE |
| LOW⚡ | …ctype/global_search_settings/global_search_settings.py | 161 | def _set_global_search_property_setter(cf: CustomizeForm, fieldname: str, enabled: bool) -> None: | CODE |
| LOW | frappe/automation_engine/__init__.py | 8 | __all__ = ["emit", "is_enabled", "skip_automations"] | CODE |
| LOW | frappe/tests/test_virtual_doctype.py | 42 | def update_data(data: dict[str, dict]) -> None: | CODE |
| LOW | frappe/tests/classes/context_managers.py | 274 | __all__ = [ | CODE |
| LOW | frappe/tests/utils/generators.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | frappe/tests/utils/generators.py | 26 | __all__ = [ | CODE |
| LOW | frappe/pulse/utils.py | 5 | __all__ = ["get_app_version", "get_frappe_version"] | CODE |
| LOW | frappe/utils/translations.py | 73 | def set_user_lang(user: str, user_language: str | None = None) -> None: | CODE |
| LOW | frappe/utils/logger.py | 109 | def set_log_level(level: Literal["ERROR", "WARNING", "WARN", "INFO", "DEBUG"]) -> None: | CODE |
| LOW | frappe/utils/messages.py | 176 | __all__ = [ | CODE |
| LOW⚡ | frappe/utils/scheduler.py | 71 | def _update_scheduler_heartbeat() -> None: | CODE |
| LOW | frappe/utils/chromium/__init__.py | 25 | __all__ = [ | CODE |
| LOW | frappe/www/printview.py | 294 | def set_link_titles(doc: "Document") -> None: | STRING |
| LOW | frappe/www/printview.py | 331 | def set_title_values_for_table_and_multiselect_fields(meta: "Meta", doc: "Document") -> None: | STRING |
| LOW | frappe/testing/runner.py | 37 | logger = logging.getLogger(__name__) | CODE |
| LOW | frappe/testing/__init__.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | frappe/testing/result.py | 28 | logger = logging.getLogger(__name__) | CODE |
| LOW | frappe/testing/utils.py | 5 | logger = logging.getLogger(__name__) | CODE |
| LOW⚡ | frappe/testing/environment.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | frappe/model/naming.py | 128 | def update_counter(self, new_count: int) -> None: | CODE |
| LOW | frappe/model/document.py | 2747 | def _set_document_in_cache(key: str, doc: "Document") -> None: | CODE |
| LOW | frappe/model/rename_doc.py | 236 | def update_assignments(old: str, new: str, doctype: str) -> None: | CODE |
| LOW | frappe/model/rename_doc.py | 260 | def update_user_settings(old: str, new: str, link_fields: list[dict]) -> None: | CODE |
| LOW | frappe/model/rename_doc.py | 299 | def update_customizations(old: str, new: str) -> None: | CODE |
| LOW | frappe/model/rename_doc.py | 303 | def update_attachments(doctype: str, old: str, new: str) -> None: | CODE |
| LOW | frappe/model/rename_doc.py | 327 | def update_autoname_field(doctype: str, new: str, meta: "Meta") -> None: | CODE |
| LOW | frappe/model/rename_doc.py | 414 | def update_child_docs(old: str, new: str, meta: "Meta") -> None: | CODE |
| LOW | frappe/model/rename_doc.py | 424 | def update_link_field_values(link_fields: list[dict], old: str, new: str, doctype: str) -> None: | CODE |
| LOW | frappe/model/rename_doc.py | 516 | def update_options_for_fieldtype(fieldtype: str, old: str, new: str) -> None: | CODE |
| LOW | frappe/custom/doctype/custom_field/custom_field.py | 442 | def _update_fieldname_references(field: CustomField, old_fieldname: str, new_fieldname: str) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frappe/utils/chromium/page.py | 147 | # Covers private files, but we need to check if the user has permission to read the file. | COMMENT |
| LOW | …ntegrations/doctype/google_calendar/google_calendar.py | 343 | # instances of recurring events, so we need to check if the event is already | COMMENT |
| LOW | frappe/public/js/frappe/form/toolbar.js | 768 | // We need to check if document is already amend specifically and hide | COMMENT |
| LOW⚡ | frappe/public/js/frappe/list/list_factory.js | 90 | // Step 1: /desk/List/Item redirects to /desk/List/Item/List | COMMENT |
| LOW⚡ | frappe/public/js/frappe/list/list_factory.js | 91 | // Step 2: User hits "back" comes back to /desk/List/Item | COMMENT |
| LOW⚡ | frappe/public/js/frappe/list/list_factory.js | 92 | // Step 3: Now we cannot send the user back to /desk/List/Item/List so go back one more step | COMMENT |
| LOW⚡ | …appe/public/js/frappe/list/list_view_virtualization.js | 362 | // Step 1: compute visible window from scroll position | COMMENT |
| LOW⚡ | …appe/public/js/frappe/list/list_view_virtualization.js | 372 | // Step 2: nothing to do if user scrolled inside the same window | COMMENT |
| LOW | …appe/public/js/frappe/list/list_view_virtualization.js | 384 | // Step 3: tear down previous window | COMMENT |
| LOW⚡ | …appe/public/js/frappe/list/list_view_virtualization.js | 411 | // Step 7: measure; retry once if spacers were sized with stale height estimates. | COMMENT |
| LOW⚡ | …appe/public/js/frappe/list/list_view_virtualization.js | 419 | // Step 8: column widths + bulk checkbox state for visible rows | COMMENT |
| LOW⚡ | frappe/public/js/frappe/list/list_view.js | 2480 | // Step 1: Walk visible rows once and resolve each checkbox docname. | COMMENT |
| LOW⚡ | frappe/public/js/frappe/list/list_view.js | 2481 | // Step 2: Mark checked from Set membership, so off-screen selections remain source-of-truth. | COMMENT |
| LOW⚡ | frappe/public/js/frappe/list/list_view.js | 2482 | // Step 3: Refresh header/action state from checked_docnames. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frappe/__init__.py | 1194 | # WARNING: This behaviour is now part of business logic in places, never remove. | COMMENT |
| LOW | frappe/tests/utils/generators.py | 222 | # NOTE: This method is called in roughly these situations: | COMMENT |
| LOW⚡ | frappe/public/js/frappe/list/list_factory.js | 91 | // Step 2: User hits "back" comes back to /desk/List/Item | COMMENT |
| LOW⚡ | frappe/public/js/frappe/list/list_factory.js | 92 | // Step 3: Now we cannot send the user back to /desk/List/Item/List so go back one more step | COMMENT |
| LOW⚡ | …appe/public/js/frappe/list/list_view_virtualization.js | 362 | // Step 1: compute visible window from scroll position | COMMENT |
| LOW⚡ | …appe/public/js/frappe/list/list_view_virtualization.js | 372 | // Step 2: nothing to do if user scrolled inside the same window | COMMENT |
| LOW | …appe/public/js/frappe/list/list_view_virtualization.js | 384 | // Step 3: tear down previous window | COMMENT |
| LOW⚡ | …appe/public/js/frappe/list/list_view_virtualization.js | 411 | // Step 7: measure; retry once if spacers were sized with stale height estimates. | COMMENT |
| LOW⚡ | …appe/public/js/frappe/list/list_view_virtualization.js | 419 | // Step 8: column widths + bulk checkbox state for visible rows | COMMENT |
| LOW⚡ | frappe/public/js/frappe/list/list_view.js | 2480 | // Step 1: Walk visible rows once and resolve each checkbox docname. | COMMENT |
| LOW⚡ | frappe/public/js/frappe/list/list_view.js | 2481 | // Step 2: Mark checked from Set membership, so off-screen selections remain source-of-truth. | COMMENT |
| LOW⚡ | frappe/public/js/frappe/list/list_view.js | 2482 | // Step 3: Refresh header/action state from checked_docnames. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frappe/core/doctype/file/file.py | 573 | # just use the url, to avoid uploading a duplicate | COMMENT |
| MEDIUM | frappe/automation_engine/tests/test_drainer.py | 45 | # instead of relying on the harness transaction rollback. | COMMENT |
| MEDIUM | frappe/automation_engine/tests/test_drainer.py | 51 | # claim_batch commits, so these tests cannot rely on the harness rollback. | COMMENT |
| MEDIUM | frappe/tests/test_preview.py | 80 | # this robust against jpeg compression noise. | COMMENT |
| LOW | frappe/tests/test_permissions.py | 578 | # not raise permission error but simply return empty list | COMMENT |
| MEDIUM | frappe/utils/chromium/page.py | 320 | # Absolutely/fixed-positioned descendants are skipped so they can't | COMMENT |
| MEDIUM | frappe/public/js/frappe/ui/sort_selector.js | 84 | // and is robust to missing backticks | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …/island/decisions/0012-a-desk-page-can-be-an-island.md | 25 | ## Rejected: the scaffold mounts the island | COMMENT |
| MEDIUM | frappe/core/doctype/page/test_page.py | 145 | # A title is data, and the scaffold writes it into source. Substituted | COMMENT |
| MEDIUM | frappe/core/doctype/page/page.py | 145 | # has. There is nothing to scaffold beside its json. | COMMENT |
| MEDIUM | …/public/js/frappe/form/doctype_settings/tabs/naming.js | 2 | // Naming Rules. Each is a shared `frappe.doctype_settings.section` scaffold over a | COMMENT |
| MEDIUM | …/public/js/frappe/form/doctype_settings/tabs/naming.js | 27 | // A titled section (shared scaffold) + an EmbeddedList table beneath it. Returns the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | frappe/utils/telemetry/pulse/utils.py | 42 | Parse interval string or integer into seconds. Args: interval: Can be: - Integer: seconds (e.g., 3600) | STRING |
| HIGH | frappe/model/delete_doc.py | 36 | Deletes a document and validates if it is not submitted and not linked in a live record. Args: doctype (str, optio | STRING |
| HIGH | frappe/model/qb_query.py | 61 | Execute a database query using the Query Builder engine. Args: fields: Fields to select. Can be a list, tuple, or | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | frappe/public/js/frappe/utils/utils.js | 1834 | print(doctype, docname, print_format, letterhead, lang_code) { | CODE |
| HIGH | frappe/public/js/frappe/list/bulk_operations.js | 7 | print(docs) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frappe/__init__.py | 236 | # TODO: implement dataclass | COMMENT |
| LOW | frappe/__init__.py | 238 | # TODO: implement dataclass | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frappe/deprecation_dumpster.py | 140 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frappe/oauth.py | 241 | # the authorization code. Don't forget to save both the | COMMENT |