Repository Analysis

frappe/frappe

Low code web framework for real world applications, in Python and Javascript

9.9 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of frappe/frappe, a Python project with 10,417 GitHub stars. SynthScan v2.0 examined 483,006 lines of code across 3528 source files, recording 4008 pattern matches distributed across 22 syntactic categories. The overall adjusted score of 9.9 places this repository in the Low 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).

9.9
Adjusted Score
9.9
Raw Score
100%
Time Factor
2026-07-14
Last Push
10.4K
Stars
Python
Language
483.0K
Lines of Code
3.5K
Files
4.0K
Pattern Hits
2026-07-14
Scan Date
0.02
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

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.

Severity Breakdown

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.

CRITICAL 36HIGH 32MEDIUM 189LOW 3751

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 4008 distinct pattern matches across 22 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.

Hyper-Verbose Identifiers2142 hits · 2123 pts
SeverityFileLineSnippetContext
LOWui/src/components/ActivityTimeline/grouping.ts181export function groupAssignmentActivities(activities: Activity[]): Activity[] {CODE
LOWui/src/components/ColumnSettings/columns.ts150export function dropOrphanedSyntheticColumns(CODE
LOWfrappe/build.py307def get_safe_max_old_space_size():CODE
LOWfrappe/auth.py307 def force_user_to_reset_password(self):CODE
LOWfrappe/auth.py516def get_login_attempt_tracker(key: str, raise_locked_exception: bool = True):CODE
LOWfrappe/auth.py708def validate_auth_via_api_keys(authorization_header):CODE
LOWfrappe/sessions.py363 def get_session_data_from_cache(self):CODE
LOWfrappe/sessions.py499def get_expiry_period_for_query():CODE
LOWfrappe/translate.py181def get_translations_from_apps(lang, apps=None):CODE
LOWfrappe/translate.py199def get_translations_from_csv(lang, app):CODE
LOWfrappe/translate.py205def get_translation_dict_from_file(path, lang, app, throw=False) -> dict[str, str]:CODE
LOWfrappe/translate.py265def change_translation_version():CODE
LOWfrappe/translate.py337def get_messages_from_doctype(name):CODE
LOWfrappe/translate.py383def get_messages_from_workflow(doctype=None, app_name=None):CODE
LOWfrappe/translate.py453def get_messages_from_custom_fields(app_name):CODE
LOWfrappe/translate.py525def _get_messages_from_page_or_report(doctype, name, module=None):CODE
LOWfrappe/translate.py562def get_messages_from_include_files(app_name=None):CODE
LOWfrappe/translate.py580def get_all_messages_from_js_files(app_name=None):CODE
LOWfrappe/translate.py641def extract_messages_from_python_code(code: str) -> list[tuple[int, str, str | None]]:CODE
LOWfrappe/translate.py666def extract_messages_from_javascript_code(code: str) -> list[tuple[int, str, str | None]]:CODE
LOWfrappe/translate.py871def rebuild_all_translation_files():CODE
LOWfrappe/translate.py912def update_translations_for_source(source: str | None = None, translation_dict: str | dict | None = None):CODE
LOWfrappe/translate.py950 def get_all_language_with_name():CODE
LOWfrappe/translate.py963def get_preferred_language_cookie():CODE
LOWfrappe/config.py123def _apply_common_env_overrides(config: _dict[str, Any]) -> None:CODE
LOWfrappe/cache_manager.py136def _clear_doctype_cache_from_redis(doctype: str | None = None):CODE
LOWfrappe/cache_manager.py247def build_domain_restricted_doctype_cache(*args, **kwargs):CODE
LOWfrappe/cache_manager.py264def build_domain_restricted_page_cache(*args, **kwargs):CODE
LOWfrappe/boot.py432def get_link_preview_doctypes():CODE
LOWfrappe/boot.py449def get_additional_filters_from_hooks():CODE
LOWfrappe/boot.py480def get_notification_settings():CODE
LOWfrappe/boot.py552def get_authored_sidebar_items(workspace_names):CODE
LOWfrappe/boot.py651def build_default_workspace_map(sidebar_items):CODE
LOWfrappe/boot.py667def get_workspaces_with_sidebar():CODE
LOWfrappe/boot.py695def get_workspace_module_onboarding(workspace_names):CODE
LOWfrappe/onboarding.py13def update_user_onboarding_status(steps: str | list | dict, appName: str):CODE
LOWfrappe/__init__.py482def setup_redis_cache_connection():CODE
LOWfrappe/__init__.py1143def _get_cached_signature_params(fn: Callable) -> tuple[dict[str, Any], bool]:CODE
LOWfrappe/__init__.py1462def validate_and_sanitize_search_inputs(fn):CODE
LOWfrappe/__init__.py1468def override_whitelisted_method(original_method: str) -> str:CODE
LOWfrappe/deprecation_dumpster.py383def test_runner_make_test_records(*args, **kwargs):CODE
LOWfrappe/deprecation_dumpster.py392def test_runner_make_test_objects(*args, **kwargs):CODE
LOWfrappe/deprecation_dumpster.py404def test_runner_make_test_records_for_doctype(*args, **kwargs):CODE
LOWfrappe/deprecation_dumpster.py416def test_runner_print_mandatory_fields(*args, **kwargs):CODE
LOWfrappe/deprecation_dumpster.py428def test_runner_get_test_record_log(doctype):CODE
LOWfrappe/deprecation_dumpster.py440def test_runner_add_to_test_record_log(doctype):CODE
LOWfrappe/deprecation_dumpster.py486def tests_update_system_settings(args, commit=False):CODE
LOWfrappe/deprecation_dumpster.py742 def execute_command_and_count(*args, **kwargs):CODE
LOWfrappe/deprecation_dumpster.py841def get_compat_frappe_test_case_preparation(cfg):CODE
LOWfrappe/deprecation_dumpster.py885def model_trace_traced_field_context(*args, **kwargs):CODE
LOWfrappe/deprecation_dumpster.py897def tests_utils_get_dependencies(doctype):CODE
LOWfrappe/deprecation_dumpster.py932def test_runner_get_dependencies(doctype):CODE
LOWfrappe/deprecation_dumpster.py960def compat_preload_test_records_upfront(candidates: list):CODE
LOWfrappe/twofactor.py112def two_factor_is_enabled_for_(user):CODE
LOWfrappe/twofactor.py276def get_email_subject_for_qr_code(kwargs_dict):STRING
LOWfrappe/twofactor.py284def get_email_body_for_qr_code(kwargs_dict):CODE
LOWfrappe/twofactor.py413def delete_all_barcodes_for_users():CODE
LOWfrappe/twofactor.py423def should_remove_barcode_image(barcode):CODE
LOWfrappe/apps.py107def get_incomplete_setup_route(current_app: str, app_route: str):CODE
LOWfrappe/installer.py366def remove_from_installed_apps(app_name):CODE
2082 more matches not shown…
Excessive Try-Catch Wrapping411 hits · 454 pts
SeverityFileLineSnippetContext
LOWfrappe/build.py160 except Exception as e:CODE
LOWfrappe/build.py167 except Exception:CODE
LOWfrappe/build.py207 except Exception:CODE
LOWfrappe/build.py317 except Exception:CODE
LOWfrappe/build.py376 except Exception:CODE
LOWfrappe/build.py405 except Exception as e:CODE
LOWfrappe/auth.py744 except Exception:CODE
LOWfrappe/translate.py174 except Exception:CODE
LOWfrappe/translate.py619 except Exception:CODE
LOWfrappe/config.py46 except Exception as error:CODE
LOWfrappe/config.py102 except Exception:CODE
LOWfrappe/config.py138 except Exception as error:CODE
LOWfrappe/monitor.py65 except Exception:CODE
LOWfrappe/monitor.py115 except Exception:CODE
MEDIUMfrappe/monitor.py50def __init__(self, transaction_type, method, kwargs):CODE
MEDIUMfrappe/monitor.py95def dump(self, response=None):CODE
LOWfrappe/handler.py77 except Exception as e:CODE
LOWfrappe/deferred_insert.py55 except Exception as e:CODE
LOWfrappe/boot.py219 except Exception:CODE
LOWfrappe/boot.py508 except Exception:CODE
LOWfrappe/boot.py541 except Exception:CODE
MEDIUMfrappe/boot.py538def add_subscription_conf():CODE
LOWfrappe/client.py322 except Exception:CODE
LOWfrappe/recorder.py101 except Exception:CODE
LOWfrappe/recorder.py132 except Exception:CODE
LOWfrappe/recorder.py176 except Exception as e:CODE
LOWfrappe/twofactor.py312 except Exception:CODE
LOWfrappe/apps.py53 except Exception:CODE
LOWfrappe/installer.py31 except Exception:CODE
LOWfrappe/installer.py75 except Exception:CODE
LOWfrappe/installer.py236 except Exception:CODE
LOWfrappe/installer.py637 except Exception:CODE
LOWfrappe/installer.py819 except Exception:CODE
LOWfrappe/installer.py935 except Exception:CODE
LOWfrappe/app.py148 except Exception as e:CODE
LOWfrappe/app.py163 except Exception:CODE
LOWfrappe/frappeclient.py398 except Exception:CODE
LOWfrappe/migrate.py53 except Exception as e:CODE
LOWfrappe/migrate.py256 except Exception as e:CODE
MEDIUMfrappe/migrate.py48def wrapper(*args, **kwargs):CODE
LOWfrappe/oauth.py120 except Exception as e:CODE
LOWfrappe/oauth.py210 except Exception:CODE
LOWfrappe/oauth.py381 except Exception:CODE
LOWfrappe/oauth.py391 except Exception:CODE
LOWfrappe/oauth.py494 except Exception:CODE
MEDIUMfrappe/oauth.py125def authenticate_client_id(self, client_id, request, *args, **kwargs):CODE
MEDIUMfrappe/oauth.py376def validate_id_token(self, token, scopes, request):CODE
MEDIUMfrappe/oauth.py386def validate_jwt_bearer_token(self, token, scopes, request):CODE
LOWfrappe/database/query.py475 except Exception as e:CODE
LOWfrappe/database/query.py592 except Exception:CODE
LOWfrappe/database/query.py1901 except Exception:CODE
LOWfrappe/database/query.py1917 except Exception:CODE
LOWfrappe/database/query.py1966 except Exception:CODE
LOWfrappe/database/query.py1994 except Exception:CODE
LOWfrappe/database/query.py2112 except Exception:CODE
LOWfrappe/database/database.py154 except Exception as e:CODE
LOWfrappe/database/database.py274 except Exception as e:CODE
LOWfrappe/database/database.py438 except Exception as e:CODE
LOWfrappe/database/database.py685 except Exception as e:CODE
LOWfrappe/database/database.py1422 except Exception:CODE
351 more matches not shown…
Unused Imports437 hits · 392 pts
SeverityFileLineSnippetContext
LOWfrappe/hooks.py3CODE
LOWfrappe/translate.py13CODE
LOWfrappe/handler.py14CODE
LOWfrappe/handler.py18CODE
LOWfrappe/handler.py23CODE
LOWfrappe/handler.py26CODE
LOWfrappe/deferred_insert.py2CODE
LOWfrappe/deferred_insert.py10CODE
LOWfrappe/boot.py28CODE
LOWfrappe/client.py3CODE
LOWfrappe/client.py16CODE
LOWfrappe/parallel_test_runner.py4CODE
LOWfrappe/parallel_test_runner.py9CODE
LOWfrappe/recorder.py32CODE
LOWfrappe/__init__.py24CODE
LOWfrappe/__init__.py25CODE
LOWfrappe/__init__.py25CODE
LOWfrappe/__init__.py25CODE
LOWfrappe/__init__.py30CODE
LOWfrappe/__init__.py36CODE
LOWfrappe/__init__.py36CODE
LOWfrappe/__init__.py36CODE
LOWfrappe/__init__.py36CODE
LOWfrappe/__init__.py38CODE
LOWfrappe/__init__.py38CODE
LOWfrappe/__init__.py41CODE
LOWfrappe/__init__.py43CODE
LOWfrappe/__init__.py43CODE
LOWfrappe/__init__.py43CODE
LOWfrappe/__init__.py43CODE
LOWfrappe/__init__.py43CODE
LOWfrappe/__init__.py1475CODE
LOWfrappe/__init__.py1475CODE
LOWfrappe/__init__.py1475CODE
LOWfrappe/__init__.py1475CODE
LOWfrappe/__init__.py1475CODE
LOWfrappe/__init__.py146CODE
LOWfrappe/__init__.py152CODE
LOWfrappe/__init__.py152CODE
LOWfrappe/__init__.py153CODE
LOWfrappe/__init__.py154CODE
LOWfrappe/__init__.py154CODE
LOWfrappe/__init__.py155CODE
LOWfrappe/__init__.py160CODE
LOWfrappe/__init__.py161CODE
LOWfrappe/__init__.py162CODE
LOWfrappe/__init__.py162CODE
LOWfrappe/__init__.py162CODE
LOWfrappe/__init__.py162CODE
LOWfrappe/__init__.py162CODE
LOWfrappe/__init__.py162CODE
LOWfrappe/__init__.py162CODE
LOWfrappe/__init__.py162CODE
LOWfrappe/__init__.py162CODE
LOWfrappe/__init__.py162CODE
LOWfrappe/__init__.py162CODE
LOWfrappe/__init__.py162CODE
LOWfrappe/__init__.py162CODE
LOWfrappe/__init__.py180CODE
LOWfrappe/__init__.py180CODE
377 more matches not shown…
Hallucination Indicators36 hits · 370 pts
SeverityFileLineSnippetContext
CRITICAL…ctype/installed_applications/installed_applications.js54 dialog.fields_dict.apps.df.data.push({CODE
CRITICALfrappe/printing/page/print/print.js556 const get_options = frappe.ui.form.ControlBarcode.prototype.get_options.bind({CODE
CRITICALfrappe/public/js/frappe/module_editor.js15 return this.frm.doc.__onload.all_modules.map((module) => {CODE
CRITICALfrappe/public/js/frappe/ui/naming_series.js172 this.dialog.fields_dict.naming_series_options.grid.refresh();CODE
CRITICALfrappe/public/js/frappe/ui/naming_series.js176 const rows = this.dialog.fields_dict.naming_series_options.grid.get_data();CODE
CRITICALfrappe/public/js/frappe/ui/naming_series.js221 this.dialog.fields_dict.naming_series_options.grid.refresh();CODE
CRITICALfrappe/public/js/frappe/widgets/widget_dialog.js551 let color = this.dialog.fields_dict.color.value.toLowerCase();CODE
CRITICALfrappe/public/js/frappe/widgets/widget_dialog.js573 this.dialog.fields_dict.link_to.df.onchange();CODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js454 this._endLabelText = L.drawLocal.draw.handlers.simpleshape.tooltip.end, L.Draw.Feature.prototype.initialize.call(thiCODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js457 L.Draw.Feature.prototype.addHooks.call(this), this._map && (this._mapDraggable = this._map.dragging.enabled(), this.CODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js462 L.Draw.Feature.prototype.removeHooks.call(this), this._map && (this._mapDraggable && this._map.dragging.enable(), thCODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js498 this.type = L.Draw.Rectangle.TYPE, this._initialLabelText = L.drawLocal.draw.handlers.rectangle.tooltip.start, L.DraCODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js501 this._enabled && (this._isCurrentlyTwoClickDrawing = !1, L.Draw.SimpleShape.prototype.disable.call(this))CODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js505 this._isCurrentlyTwoClickDrawing && !o(t.target, "leaflet-pane") || L.Draw.SimpleShape.prototype._onMouseUp.call(thiCODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js512 L.Draw.SimpleShape.prototype._fireCreatedEvent.call(this, t)CODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js515 var t, e, i, o = L.Draw.SimpleShape.prototype._getTooltipText.call(this),CODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js203 L.Browser.touch && (this.options.icon = this.options.touchIcon), this.options.drawError.message = L.drawLocal.draw.hCODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js206 L.Draw.Feature.prototype.addHooks.call(this), this._map && (this._markers = [], this._markerGroup = new L.LayerGroupCODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js217 L.Draw.Feature.prototype.removeHooks.call(this), this._clearHideErrorTimeout(), this._cleanUpShape(), this._map.remoCODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js394 L.Draw.Feature.prototype._fireCreatedEvent.call(this, t)CODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js420 L.Draw.Polyline.prototype.initialize.call(this, t, e), this.type = L.Draw.Polygon.TYPECODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js436 return t || this.options.showLength ? (this.options.showLength && (e = L.Draw.Polyline.prototype._getMeasurementStriCODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js443 !this.options.allowIntersection && this.options.showArea && (i = this._poly.getLatLngs(), this._area = L.GeometryUtiCODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js533 this.type = L.Draw.Marker.TYPE, this._initialLabelText = L.drawLocal.draw.handlers.marker.tooltip.start, L.Draw.FeatCODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js536 L.Draw.Feature.prototype.addHooks.call(this), this._map && (this._tooltip.updateContent({CODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js549 L.Draw.Feature.prototype.removeHooks.call(this), this._map && (this._marker && (this._marker.off("click", this._onClCODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js571 L.Draw.Feature.prototype._fireCreatedEvent.call(this, t)CODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js589 this.type = L.Draw.CircleMarker.TYPE, this._initialLabelText = L.drawLocal.draw.handlers.circlemarker.tooltip.start,CODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js593 L.Draw.Feature.prototype._fireCreatedEvent.call(this, t)CODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js619 this.type = L.Draw.Circle.TYPE, this._initialLabelText = L.drawLocal.draw.handlers.circle.tooltip.start, L.Draw.SimpCODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js627 L.Draw.SimpleShape.prototype._fireCreatedEvent.call(this, t)CODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js907 if (L.Edit.SimpleShape.prototype._onMarkerDragStart.call(this, t), "function" == typeof this._getCorners) {CODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js937 L.Edit.SimpleShape.prototype._onMarkerDragStart.call(this, t);CODE
CRITICALfrappe/public/js/lib/leaflet_draw/leaflet.draw.js945 o === this._moveMarker && (e = this._shape.getBounds(), i = e.getCenter(), o.setLatLng(i)), this._toggleCornerMarkerCODE
CRITICALfrappe/public/js/lib/jquery/jquery.min.js3}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:funCODE
CRITICALfrappe/public/js/form_builder/form_builder.bundle.js35 this.store.frm.layout.tabs.find((tab) => tab.label === "Form").set_active();CODE
Deep Nesting406 hits · 360 pts
SeverityFileLineSnippetContext
LOWfrappe/build.py116CODE
LOWfrappe/translate.py205CODE
LOWfrappe/translate.py270CODE
LOWfrappe/translate.py383CODE
LOWfrappe/translate.py580CODE
LOWfrappe/translate.py701CODE
LOWfrappe/translate.py731CODE
LOWfrappe/translate.py829CODE
LOWfrappe/config.py33CODE
LOWfrappe/monitor.py95CODE
LOWfrappe/handler.py130CODE
LOWfrappe/deferred_insert.py28CODE
LOWfrappe/cache_manager.py136CODE
LOWfrappe/boot.py194CODE
LOWfrappe/boot.py782CODE
LOWfrappe/recorder.py105CODE
LOWfrappe/__init__.py985CODE
LOWfrappe/deprecation_dumpster.py841CODE
LOWfrappe/deprecation_dumpster.py960CODE
LOWfrappe/deprecation_dumpster.py848CODE
LOWfrappe/twofactor.py44CODE
LOWfrappe/apps.py24CODE
LOWfrappe/installer.py452CODE
LOWfrappe/installer.py594CODE
LOWfrappe/app.py102CODE
LOWfrappe/app.py353CODE
LOWfrappe/permissions.py80CODE
LOWfrappe/permissions.py351CODE
LOWfrappe/defaults.py235CODE
LOWfrappe/frappeclient.py64CODE
LOWfrappe/frappeclient.py260CODE
LOWfrappe/frappeclient.py380CODE
LOWfrappe/oauth.py438CODE
LOWfrappe/database/query.py389CODE
LOWfrappe/database/query.py562CODE
LOWfrappe/database/query.py835CODE
LOWfrappe/database/query.py883CODE
LOWfrappe/database/query.py1094CODE
LOWfrappe/database/query.py1178CODE
LOWfrappe/database/query.py1227CODE
LOWfrappe/database/query.py1333CODE
LOWfrappe/database/query.py1515CODE
LOWfrappe/database/query.py1601CODE
LOWfrappe/database/query.py1819CODE
LOWfrappe/database/query.py2060CODE
LOWfrappe/database/query.py2383CODE
LOWfrappe/database/query.py2465CODE
LOWfrappe/database/query.py2499CODE
LOWfrappe/database/database.py183CODE
LOWfrappe/database/database.py352CODE
LOWfrappe/database/database.py598CODE
LOWfrappe/database/database.py715CODE
LOWfrappe/database/__init__.py122CODE
LOWfrappe/database/schema.py411CODE
LOWfrappe/database/schema.py112CODE
LOWfrappe/database/schema.py317CODE
LOWfrappe/database/schema.py346CODE
LOWfrappe/database/sqlite/database.py467CODE
LOWfrappe/database/postgres/schema.py96CODE
LOWfrappe/types/exporter.py208CODE
346 more matches not shown…
Decorative Section Separators88 hits · 300 pts
SeverityFileLineSnippetContext
MEDIUMui/src/components/FileUpload/useUploader.ts340 // ── internals ────────────────────────────────────────────────────────────COMMENT
MEDIUMui/src/components/FileUpload/FileUploadDialog.vue355// ── the add-menu ───────────────────────────────────────────────────────────COMMENT
MEDIUMui/src/components/FileUpload/FileUploadDialog.vue424// ── staged rows ──────────────────────────────────────────────────────────────COMMENT
MEDIUMui/src/components/FileUpload/FileUploadDialog.vue511// ── crop ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMui/src/components/FileUpload/FileUploadDialog.vue528// ── drag & drop (scoped to this popover) ─────────────────────────────────────COMMENT
MEDIUMui/src/components/FileUpload/FileUploadDialog.vue583// ── commit ───────────────────────────────────────────────────────────────────COMMENT
MEDIUMui/src/components/Fields/GeolocationField.vue140// ─── Computed ────────────────────────────────────────────────────────────────COMMENT
MEDIUMui/src/components/Fields/GeolocationField.vue170// ─── Map lifecycle ───────────────────────────────────────────────────────────COMMENT
MEDIUMui/src/components/Fields/GeolocationField.vue302 // ── Tile layers (mirrors Frappe's map_defaults) ──────────────────────────COMMENT
MEDIUMui/src/components/Fields/GeolocationField.vue336 // ── Locate control ───────────────────────────────────────────────────────COMMENT
MEDIUMui/src/components/Fields/GeolocationField.vue440// ─── Actions ─────────────────────────────────────────────────────────────────COMMENT
MEDIUMui/src/components/Fields/GeolocationField.vue463// ─── Cleanup ─────────────────────────────────────────────────────────────────COMMENT
MEDIUMcypress/integration/print_format_builder.js6// ─── shared helpers ───────────────────────────────────────────────────────────COMMENT
MEDIUMcypress/integration/print_format_builder.js50// ─── Create flow ──────────────────────────────────────────────────────────────COMMENT
MEDIUMcypress/integration/print_format_builder.js331// ─── Setup flow ───────────────────────────────────────────────────────────────COMMENT
MEDIUMcypress/integration/print_format_builder.js444// ─── Section insert (+ Add Section) ──────────────────────────────────────────COMMENT
MEDIUMcypress/integration/print_format_builder.js590// ─── Column width resize ──────────────────────────────────────────────────────COMMENT
MEDIUMcypress/integration/print_format_builder.js789// ─── Image and Barcode blocks ─────────────────────────────────────────────────COMMENT
MEDIUMcypress/integration/list_view_column_width.js69 // ─── 1. Width set via List View Settings dialog is applied ───────────────────COMMENT
MEDIUMcypress/integration/list_view_column_width.js92 // ─── 2. Width persists after page reload ─────────────────────────────────────COMMENT
MEDIUMcypress/integration/list_view_column_width.js115 // ─── 3. Drag-to-resize changes the column width ──────────────────────────────COMMENT
MEDIUMcypress/integration/list_view_column_width.js126 // ─── 4. Drag-to-resize width is persisted after reload ───────────────────────COMMENT
MEDIUMcypress/integration/list_view_column_width.js141 // ─── 5. Min-width constraint (50 px) is enforced ─────────────────────────────COMMENT
MEDIUMcypress/integration/list_view_column_width.js149 // ─── 6. Max-width constraint (400 px) is enforced ────────────────────────────COMMENT
MEDIUMcypress/integration/list_view_column_width.js157 // ─── 7. Resize handles are present in the header ─────────────────────────────COMMENT
MEDIUMcypress/integration/list_view_column_width.js163 // ─── 8. List View Settings dialog shows Width (px) header and hint ───────────COMMENT
MEDIUMfrappe/database/__init__.py5# --------------------COMMENT
MEDIUMfrappe/core/doctype/sms_settings/sms_settings.py154# =========================================================COMMENT
MEDIUMfrappe/tests/test_mask_fields.py163 # ------------------------------------------------------------------COMMENT
MEDIUMfrappe/tests/test_mask_fields.py165 # ------------------------------------------------------------------COMMENT
MEDIUMfrappe/tests/test_mask_fields.py177 # ------------------------------------------------------------------COMMENT
MEDIUMfrappe/tests/test_mask_fields.py179 # ------------------------------------------------------------------COMMENT
MEDIUMfrappe/tests/test_mask_fields.py198 # ------------------------------------------------------------------COMMENT
MEDIUMfrappe/tests/test_mask_fields.py200 # ------------------------------------------------------------------COMMENT
MEDIUMfrappe/tests/test_mask_fields.py248 # ------------------------------------------------------------------COMMENT
MEDIUMfrappe/tests/test_mask_fields.py250 # ------------------------------------------------------------------COMMENT
MEDIUMfrappe/tests/test_mask_fields.py317 # ------------------------------------------------------------------COMMENT
MEDIUMfrappe/tests/test_mask_fields.py319 # ------------------------------------------------------------------COMMENT
MEDIUMfrappe/utils/boilerplate.py487# ----------COMMENT
MEDIUMfrappe/utils/boilerplate.py496# ----------COMMENT
MEDIUMfrappe/utils/boilerplate.py505# ------------COMMENT
MEDIUMfrappe/utils/boilerplate.py511# ------------COMMENT
MEDIUMfrappe/utils/boilerplate.py517# ------------------COMMENT
MEDIUMfrappe/utils/boilerplate.py525# -------------------COMMENT
MEDIUMfrappe/utils/boilerplate.py533# ------------------COMMENT
MEDIUMfrappe/utils/boilerplate.py539# ------------------COMMENT
MEDIUMfrappe/utils/boilerplate.py545# -----------COMMENT
MEDIUMfrappe/utils/boilerplate.py621# -----------------------------------------------------------COMMENT
MEDIUMfrappe/utils/boilerplate.py626# ----------------COMMENT
MEDIUMfrappe/utils/boilerplate.py631# ----------COMMENT
MEDIUMfrappe/utils/boilerplate.py638# --------------------COMMENT
MEDIUMfrappe/utils/boilerplate.py418# ------------------COMMENT
MEDIUMfrappe/utils/boilerplate.py444# ------------------COMMENT
MEDIUMfrappe/utils/boilerplate.py471# ------------------COMMENT
MEDIUMfrappe/utils/boilerplate.py476# ----------COMMENT
MEDIUMfrappe/utils/boilerplate.py557# ---------------COMMENT
MEDIUMfrappe/utils/boilerplate.py569# ---------------COMMENT
MEDIUMfrappe/utils/boilerplate.py595# ------------------------------COMMENT
MEDIUMfrappe/utils/boilerplate.py603# ------------------------------COMMENT
MEDIUMfrappe/utils/boilerplate.py662# --------------------------------COMMENT
28 more matches not shown…
Self-Referential Comments49 hits · 145 pts
SeverityFileLineSnippetContext
MEDIUMfrappe/sessions.py122 """This function is meant to be called from scheduler"""STRING
MEDIUMfrappe/database/query.py967 # Create a ChildTableField instance to handle join and field accessCOMMENT
MEDIUMfrappe/core/doctype/file/test_file.py1227 # Create a test user without System Manager roleCOMMENT
MEDIUMfrappe/core/doctype/rq_job/test_rq_job.py89 # Create a slow job and check if it's stuck in "Started"COMMENT
MEDIUMfrappe/core/doctype/data_import/importer.py1753 # Defining an explicit value which surely recognizesCOMMENT
MEDIUMfrappe/desk/desktop.py632 # Create a json string to logCOMMENT
MEDIUM…ctype/global_search_settings/global_search_settings.py194 # Create a Customize Form stub to apply property settersCOMMENT
MEDIUMfrappe/tests/test_mask_fields.py88 # Create a role without mask permissionCOMMENT
MEDIUMfrappe/tests/test_mask_fields.py92 # Create a test user and assign the roleCOMMENT
MEDIUMfrappe/tests/test_search.py196 # Create a test doctype to link toCOMMENT
MEDIUMfrappe/tests/test_search.py204 # Create a form doctype with a link field that has ignore_user_permissionsCOMMENT
MEDIUMfrappe/tests/test_search.py232 # Create a test user with restricted permissionsCOMMENT
MEDIUMfrappe/tests/test_removing_orphans.py11 # Create a new reportCOMMENT
MEDIUMfrappe/tests/test_boot.py47 # Create a ToDo custom report with admin userCOMMENT
MEDIUMfrappe/tests/test_boot.py69 # Create a ToDo custom report with test userSTRING
MEDIUMfrappe/tests/test_api_v2.py472 # Create a fresh doc for this testCOMMENT
MEDIUMfrappe/tests/test_query_report.py181 # Define the visible rowsCOMMENT
MEDIUMfrappe/tests/test_query_report.py206 # Define the visible rowsCOMMENT
MEDIUMfrappe/tests/test_query_report.py237 # Define the visible rowsCOMMENT
MEDIUMfrappe/tests/test_base_document.py104 # Create an instance of the extended ToDoCOMMENT
MEDIUMfrappe/tests/test_base_document.py157 # Create an instance with some dataCOMMENT
MEDIUMfrappe/tests/test_query.py2852# This function is used as a permission query condition hookCOMMENT
MEDIUMfrappe/tests/test_query.py983 # Create a test blog postCOMMENT
MEDIUMfrappe/tests/test_query.py1091 # Create a test note with specific contentCOMMENT
MEDIUMfrappe/tests/test_query.py1205 # Create a Dashboard Settings for test userCOMMENT
MEDIUMfrappe/tests/test_query.py1218 # Create a server script for permission queryCOMMENT
MEDIUMfrappe/tests/test_query.py1477 # Create a test blog postCOMMENT
MEDIUMfrappe/tests/test_query.py2258 # Create a private event (only owner can see by default)COMMENT
MEDIUMfrappe/tests/test_query.py2465 # Create a child table row with non-existent parentCOMMENT
MEDIUMfrappe/tests/test_sqlite_search.py232 # Create a test user and switch to themCOMMENT
MEDIUMfrappe/tests/test_sqlite_search.py400 # Create a new document after index is builtCOMMENT
MEDIUMfrappe/tests/test_sqlite_search.py520 # Create a note with HTML contentCOMMENT
MEDIUMfrappe/tests/test_sqlite_search.py563 # Create a search class with search disabledCOMMENT
MEDIUMfrappe/tests/test_sqlite_search.py606 # Create a test documentCOMMENT
MEDIUMfrappe/utils/test_print_format_generator.py83 # Create the doc directly (without format_data) because _make_print_formatCOMMENT
MEDIUMfrappe/utils/password_strength.py82 # Define a number of functions that are used in a look up dictionaryCOMMENT
MEDIUMfrappe/utils/chromium/page.py337 # Create a new stylesheetCOMMENT
MEDIUMfrappe/utils/chromium/page.py344 # Define the CSS rule for the page sizeCOMMENT
MEDIUMfrappe/search/sqlite_search.py1241 # Create the FTS table with dynamic columnsCOMMENT
MEDIUMfrappe/search/sqlite_search.py1251 # Create the vocabulary and trigram tablesSTRING
MEDIUMfrappe/search/sqlite_search.py1268 # Create the index progress tracking tableSTRING
MEDIUM…tegrations/doctype/ldap_settings/test_ldap_settings.py41 # Create a clean docCOMMENT
MEDIUM…tegrations/doctype/ldap_settings/test_ldap_settings.py572 # Create a clean docCOMMENT
MEDIUMfrappe/model/db_query.py848 # Create a copy of the fields list and reverse it to avoid index issues when removing fieldsCOMMENT
MEDIUMfrappe/model/base_document.py240 # Create the extended class by combining extension classes with base classCOMMENT
MEDIUMfrappe/email/doctype/notification/test_notification.py239 # Create a test notificationCOMMENT
MEDIUMfrappe/email/doctype/notification/test_notification.py298 # Create a test notificationCOMMENT
MEDIUMfrappe/email/doctype/notification/test_notification.py675 # Create a ToDoCOMMENT
MEDIUMfrappe/email/doctype/notification/test_notification.py785# # Create an event and notification before each testCOMMENT
Fake / Example Data117 hits · 125 pts
SeverityFileLineSnippetContext
LOWui/src/components/TableMultiSelect/TableMultiSelect.vue7 :placeholder="placeholder"CODE
LOW…ts/ActivityTimeline/stories/ActivityTimeline.story.vue85 author: person("Jane Doe", "jane@example.com"),CODE
LOW…ts/ActivityTimeline/stories/ActivityTimeline.story.vue92 author: person("Jane Doe", "jane@example.com"),CODE
LOW…ts/ActivityTimeline/stories/ActivityTimeline.story.vue162 author: person("Jane Doe", "jane@example.com"),CODE
LOWui/src/components/Phone/Phone.vue88 :placeholder="placeholder"CODE
LOWui/src/components/Filter/Filter.vue390 return "John Doe";CODE
LOWcypress/integration/control_color.js77 .invoke("attr", "placeholder")CODE
LOWfrappe/database/database.py1265 exists("User", "jane@example.org", cache=True)STRING
LOWfrappe/database/database.py1271 exists({"doctype": "User", "full_name": "Jane Doe"})STRING
LOWfrappe/database/database.py1277 exists("User", {"full_name": "Jane Doe"})STRING
LOW…ppe/core/page/component_explorer/component_explorer.js249 label: "John Doe",CODE
LOW…ppe/core/page/component_explorer/component_explorer.js1118 label: "John Doe",CODE
LOW…ppe/core/page/component_explorer/component_explorer.js1137 { label: "John Doe" },CODE
LOW…ppe/core/page/component_explorer/component_explorer.js1148 { label: "John Doe", size: "xs" },CODE
LOW…ppe/core/page/component_explorer/component_explorer.js1149 { label: "John Doe", size: "sm" },CODE
LOW…ppe/core/page/component_explorer/component_explorer.js1150 { label: "John Doe" },CODE
LOW…ppe/core/page/component_explorer/component_explorer.js1151 { label: "John Doe", size: "lg" },CODE
LOW…ppe/core/page/component_explorer/component_explorer.js1152 { label: "John Doe", size: "xl" },CODE
LOW…ppe/core/page/component_explorer/component_explorer.js1153 { label: "John Doe", size: "2xl" },CODE
LOW…ppe/core/page/component_explorer/component_explorer.js1154 { label: "John Doe", size: "3xl" },CODE
LOW…ppe/core/page/component_explorer/component_explorer.js1160 { label: "John Doe", theme: "blue" },CODE
LOW…ppe/core/page/component_explorer/component_explorer.js1161 { label: "John Doe", theme: "blue", shape: "square" },CODE
LOW…ppe/core/page/component_explorer/component_explorer.js1162 { label: "John Doe", theme: "blue", shape: "square", size: "2xl" },CODE
LOW…ppe/core/page/component_explorer/component_explorer.js1169 label: "John Doe",CODE
LOWfrappe/core/doctype/role/role.py143 if enabled and user_info not in ["admin@example.com", "guest@example.com"]:CODE
LOWfrappe/core/doctype/docfield/docfield.json86 "placeholder",CODE
LOWfrappe/core/doctype/docfield/docfield.json621 "fieldname": "placeholder",CODE
LOWfrappe/core/doctype/comment/test_comment.py55 "comment_email": "test@test.com",CODE
LOWfrappe/core/doctype/user/test_user.py291 data = {"cmd": "frappe.core.doctype.user.user.reset_password", "user": "test@test.com"}STRING
LOWfrappe/core/doctype/report/test_report.py194 "email": "admin@example.com",CODE
LOWfrappe/core/doctype/report/test_report.py230 "email": "admin@example.com",CODE
LOWfrappe/core/doctype/communication/test_communication.py242 to = "jane.doe+A+Test@example.org"CODE
LOWfrappe/core/doctype/communication/communication.py625 e.g. 'admin@example.com' is returned for email 'admin+doctype+docname@example.com'STRING
LOWfrappe/desk/page/setup_wizard/install_fixtures.py60 {"email": "admin@example.com", "global_unsubscribe": 1},CODE
LOWfrappe/patches/v13_0/email_unsubscribe.py6 {"email": "admin@example.com", "global_unsubscribe": 1},CODE
LOWfrappe/contacts/doctype/contact/test_contact.py40 self.assertEqual(get_full_name(first="John", last="Doe"), "John Doe")CODE
LOWfrappe/contacts/doctype/contact/test_contact.py42 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.py48 self.assertEqual(sections[0].find("p").text, "test lorem ipsum")CODE
LOW…appe/website/doctype/web_template/test_web_template.py84 {"title": "Test Title", "subtitle": "test lorem ipsum"}CODE
LOW…appe/website/doctype/web_template/test_web_template.py92 "subtitle": "test lorem ipsum",CODE
LOW…ppe/website/doctype/web_form_field/web_form_field.json30 "placeholder"CODE
LOW…ppe/website/doctype/web_form_field/web_form_field.json158 "fieldname": "placeholder",CODE
LOWfrappe/tests/test_email.py31 sender="admin@example.com",CODE
LOWfrappe/tests/test_email.py98 sender="admin@example.com",CODE
LOWfrappe/tests/test_email.py139 sender="admin@example.com",CODE
LOWfrappe/tests/test_email.py176 sender="admin@example.com",CODE
LOWfrappe/tests/test_email.py211 sender="admin@example.com",CODE
LOWfrappe/tests/test_email.py260 sender="admin@example.com",CODE
LOWfrappe/tests/test_email.py274 _patched_assertion(email_account, "admin@example.com")CODE
LOWfrappe/tests/test_email.py281 _patched_assertion(email_account, '"admin@example.com" <test@example.com>')CODE
LOWfrappe/tests/test_email.py299 sender="admin@example.com",CODE
LOWfrappe/tests/test_db_query.py467 self.assertEqual(result[0].allocated_user_email, "admin@example.com")CODE
LOWfrappe/tests/test_mask_fields.py48 self.assertEqual(mask_field_value(self._field("Link", "Company"), "Acme Corp"), "XXXXXXXX")CODE
LOWfrappe/tests/test_mask_fields.py59 result = mask_field_value(self._field("Data", "Email"), "user@example.com")CODE
LOWfrappe/tests/test_db.py152 self.assertEqual(result, ("Administrator", "admin@example.com"))CODE
LOWfrappe/tests/test_boilerplate.py34 "app_email": "example@example.org",CODE
LOWfrappe/tests/test_boilerplate.py45 "example@example.org", # emailCODE
LOWfrappe/tests/test_boilerplate.py103 invalid_inputs[3] = ["notavalidemail", "what@is@this.email", "example@example.org"]CODE
LOWfrappe/tests/test_boilerplate.py109 self.assertEqual(hooks.app_email, "example@example.org")CODE
LOWfrappe/tests/test_query_report.py101 fake_data = {CODE
57 more matches not shown…
Over-Commented Block120 hits · 109 pts
SeverityFileLineSnippetContext
LOWui/vite/index.js1// Vite plugin for apps that consume @framework/ui.COMMENT
LOWui/src/components/FileUpload/useUploader.ts261COMMENT
LOWui/src/components/FileUpload/FileUploadDialog.vue281 :aspectRatio="restrictions?.crop_image_aspect_ratio ?? null"COMMENT
LOWui/src/components/FileUpload/FileUploadDialog.vue601COMMENT
LOWui/src/components/Fields/GeolocationField.vue81//COMMENT
LOWcypress/plugins/index.js1// ***********************************************************COMMENT
LOWcypress/integration/awesome_bar.js41 cy.get(".title-text").should("contain", "To Do");COMMENT
LOWcypress/integration/relative_time_filters.js1// TODO: Enable this againCOMMENT
LOWcypress/integration/relative_time_filters.js21// cy.intercept('POST', '/api/method/frappe.desk.reportview.get').as('list_refresh');COMMENT
LOWcypress/integration/relative_time_filters.js41// cy.wait('@list_refresh');COMMENT
LOWcypress/integration/sidebar.js81 cy.get(".show-all-btn").click({ force: true });COMMENT
LOWcypress/integration/sidebar.js101 // cy.wait(1000);COMMENT
LOWcypress/integration/sidebar.js121 // cy.get(".fieldname-select-area > .awesomplete > .form-control").should(COMMENT
LOWcypress/integration/sidebar.js141 // cy.click_sidebar_button("Assigned To");COMMENT
LOWcypress/integration/es_components.js1// Espresso component tests, driven through the Component Explorer pageCOMMENT
LOWcypress/support/commands.js1import "@testing-library/cypress/add-commands";COMMENT
LOWcypress/support/e2e.js1// ***********************************************************COMMENT
LOWfrappe/database/query.py141# Pattern for detecting SQL function calls: identifier followed by opening parenthesisCOMMENT
LOWfrappe/database/sequence.py1from frappe import db, scrubCOMMENT
LOWfrappe/database/sequence.py41 sequence_name = scrub(doctype_name + slug)COMMENT
LOWfrappe/core/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/page/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/page/permission_manager/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/report/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/doctype/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/doctype/page/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/doctype/role/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/doctype/docperm/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/doctype/permission_type/permission_type.js1// Copyright (c) 2025, Frappe Technologies and contributorsCOMMENT
LOWfrappe/core/doctype/scheduler_event/scheduler_event.js1// Copyright (c) 2025, Frappe Technologies and contributorsCOMMENT
LOWfrappe/core/doctype/docfield/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/doctype/module_def/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/doctype/api_request_log/api_request_log.js1// Copyright (c) 2025, Frappe Technologies and contributorsCOMMENT
LOWfrappe/core/doctype/defaultvalue/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/doctype/patch_log/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/doctype/report/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/doctype/report/boilerplate/controller.js1// Copyright (c) {year}, {app_publisher} and contributorsCOMMENT
LOWfrappe/core/doctype/recorder_query/recorder_query.js1// Copyright (c) 2023, Frappe Technologies and contributorsCOMMENT
LOWfrappe/core/doctype/communication/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/core/doctype/doctype/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOW…ore/doctype/doctype/boilerplate/controller_calendar.js1// Copyright (c) {year}, {app_publisher} and contributorsCOMMENT
LOW…pe/core/doctype/doctype/boilerplate/controller_list.js1/* eslint-disable */COMMENT
LOW…pe/core/doctype/doctype/boilerplate/controller_tree.js1// Copyright (c) {year}, {app_publisher} and contributorsCOMMENT
LOWfrappe/core/doctype/doctype/boilerplate/controller.js1// Copyright (c) {year}, {app_publisher} and contributorsCOMMENT
LOWfrappe/desk/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/desk/form/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/desk/doctype/workspace/test_workspace.py21COMMENT
LOWfrappe/desk/doctype/todo/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOW…pe/desk/doctype/document_template/document_template.js1// Copyright (c) 2026, Frappe Technologies and contributorsCOMMENT
LOWfrappe/desk/doctype/event/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/desk/doctype/list_filter/list_filter.js1// Copyright (c) 2026, Frappe Technologies and contributorsCOMMENT
LOWfrappe/desk/doctype/desktop_layout/desktop_layout.js1// Copyright (c) 2026, Frappe Technologies and contributorsCOMMENT
LOWfrappe/website/__init__.py1# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and ContributorsCOMMENT
LOWfrappe/website/doctype/utm_source/utm_source.js1// Copyright (c) 2024, Frappe Technologies and contributorsCOMMENT
LOWfrappe/website/doctype/utm_medium/utm_medium.js1// Copyright (c) 2024, Frappe Technologies and contributorsCOMMENT
LOWfrappe/website/doctype/utm_campaign/utm_campaign.js1// Copyright (c) 2024, Frappe Technologies and contributorsCOMMENT
LOW…format_builder_classic/print_format_builder_classic.js61 // future-bindings for buttons on sections / fieldsCOMMENT
LOWfrappe/tests/test_domainification.py121COMMENT
LOWfrappe/tests/test_domainification.py141 # def test_module_def_for_domainification(self):COMMENT
LOWfrappe/utils/boilerplate.py421COMMENT
60 more matches not shown…
Cross-Language Confusion17 hits · 101 pts
SeverityFileLineSnippetContext
HIGHfrappe/build.py83 r"cd ../apps/frappe && git show-ref --tags -d | grep {} | sed -e 's,.*"CODE
HIGHfrappe/build.py145 frappe_head = getoutput("cd ../apps/frappe && git rev-parse HEAD")CODE
HIGHfrappe/database/query.py2013 # Since Y and X can't be null, null value in column will never match filter, soCOMMENT
HIGHfrappe/core/doctype/server_script/test_server_script.py171 server_script["script"] = "js || code.?"CODE
HIGHfrappe/core/doctype/data_import/test_data_import.py9CSV_IMPORT_SOURCE_DEPENDS_ON = "eval:doc.google_sheets_url || (doc.import_file && doc.import_file.split('.').pop().toLowCODE
HIGHfrappe/core/doctype/data_import/test_data_import.py10CSV_DELIMITER_OPTIONS_DEPENDS_ON = "eval:doc.custom_delimiters && (doc.google_sheets_url || (doc.import_file && doc.impoCODE
HIGHfrappe/desk/reportview.py944 filters=[*filters, "({0} = '' or {0} is null)".format(tag["name"])],CODE
HIGHfrappe/tests/test_utils.py790 "these_are && js_conditions",CODE
HIGHfrappe/tests/test_utils.py791 "more || js_conditions",CODE
HIGHfrappe/tests/test_db_query.py1322 # it is non-null, so the plucked result must be masked.COMMENT
HIGHfrappe/tests/test_translate.py241 __("attr with", null, "context")STRING
HIGHfrappe/tests/test_translate.py287 args = get_args("""__("attr with", null, "context")""")CODE
HIGHfrappe/utils/telemetry/pulse/test_pulse_client.py332 # Guests have no server-known identity → null; the client mints its own anon id.COMMENT
HIGHfrappe/gettext/extractors/tests/test_javascript.py13 code = "let test = `<p>${__('Test', null, 'Context')}</p>`;"CODE
HIGHfrappe/model/db_query.py1078 # Since Y and X can't be null, null value in column will never match filter, soCOMMENT
HIGHfrappe/commands/testing.py499 "(cd ../frappe && yarn bin)",STRING
HIGHfrappe/commands/testing.py540 frappe.commands.popen(f"(cd ../frappe && yarn add {packages} --no-lockfile)")STRING
Redundant / Tautological Comments48 hits · 71 pts
SeverityFileLineSnippetContext
LOWfrappe/auth.py113 # Check if the referrer or origin is in the allowed listCOMMENT
LOWfrappe/database/query.py437 # Check if the operator is a string, and specifically a logical operatorCOMMENT
LOWfrappe/database/query.py448 # Check if it looks like it *might* be nested (even if malformed).COMMENT
LOWfrappe/database/query.py840 # Check if it's a nested condition list [cond1, op, cond2, ...]COMMENT
LOWfrappe/database/query.py951 # Check if doctype is a valid child table of self.doctypeCOMMENT
LOWfrappe/database/query.py1207 # Iterate through the list where each item could be a single field, criterion, or a comma-separated stringCOMMENT
LOWfrappe/database/query.py1235 # Check if it's a SQL function or operator dictionaryCOMMENT
LOWfrappe/database/query.py1473 # Check if the last word is a valid directionCOMMENT
LOWfrappe/database/query.py1591 # Check if the field name is an optional field (like _user_tags) or in permitted fieldsCOMMENT
LOWfrappe/database/query.py2107 # Check if the first part is a valid fieldname in the parent doctypeCOMMENT
LOWfrappe/database/query.py2535 # Check if it's a numeric string like "1" (for COUNT(1), etc.)COMMENT
LOWfrappe/core/doctype/user/user.py1225 # Check if we have a search term, and decide the filters depending on the search termCOMMENT
LOWfrappe/core/doctype/version/version.py34 # Check if doc has some information about creation source like data importCOMMENT
LOWfrappe/core/doctype/package_release/package_release.py133 # Set path to tarballCOMMENT
LOWfrappe/core/doctype/report/test_report.py132 # Check if creating and deleting works with proper validationsCOMMENT
LOWfrappe/desk/desktop.py112 # Check if onboarding is enabledCOMMENT
LOWfrappe/desk/desktop.py124 # Check if user is allowedCOMMENT
LOWfrappe/desk/desktop.py130 # Check if already completeCOMMENT
LOWfrappe/desk/desktop.py224 # Check if user is allowed to viewCOMMENT
LOWfrappe/desk/desktop.py771 # Check if user is allowedSTRING
LOWfrappe/website/website_generator.py161 # Check if the route is changedCOMMENT
LOWfrappe/tests/test_nestedset.py333 # Check if all records are fetched when flag is set to TrueCOMMENT
LOWfrappe/tests/test_nestedset.py336 # Check if disabled records are skipped is set to FalseCOMMENT
LOWfrappe/tests/test_query_report.py217 # Check if unset filters are skipped | Rows -> 2 filters + 1 empty + 1 column + 3 dataCOMMENT
LOWfrappe/tests/test_sqlite_search.py142 # Check if FTS table existsCOMMENT
LOWfrappe/tests/test_sqlite_search.py146 # Check if vocabulary tables existCOMMENT
LOWfrappe/tests/test_sqlite_search.py296 # Check if corrections were appliedCOMMENT
LOWfrappe/utils/backups.py165 # Check if file exists and is less than a day oldCOMMENT
LOWfrappe/utils/change_log.py366 # Check if user is int the set of users to send update message toCOMMENT
LOWfrappe/utils/pdf_generator/browser.py124 # Check if any of the classes existCOMMENT
LOWfrappe/utils/pdf_generator/browser.py136 if soup.find(class_=class_name): # Check if any element with the class is foundCODE
LOWfrappe/search/sqlite_search.py308 # Check if this is a completely fresh build or a continuationCOMMENT
LOWfrappe/search/sqlite_search.py320 # Check if we're continuing a fresh build (temp db exists)COMMENT
LOWfrappe/search/sqlite_search.py353 # Check if indexing is already completeCOMMENT
LOWfrappe/search/sqlite_search.py429 # Check if all doctypes are indexed before building vocabularyCOMMENT
LOWfrappe/search/sqlite_search.py810 # Check if this is a LIKE filter (list with 'LIKE' operator)COMMENT
LOWfrappe/search/sqlite_search.py1753 # Check if a temp DB exists (incomplete build from previous run)COMMENT
LOWfrappe/search/sqlite_search.py1834 # Check if a temp DB exists (incomplete build from previous run)COMMENT
LOWfrappe/testing/discovery.py84 # Check if the DocType belongs to the specified appCOMMENT
LOWfrappe/model/qb_query.py117 # Set fields to the requested field or `name` if none specifiedCOMMENT
LOWfrappe/model/qb_query.py173 # Check if table exists before running queryCOMMENT
LOWfrappe/model/db_query.py607 # Check if table_name is a linked_table aliasCOMMENT
LOWfrappe/api/v2.py164 # Check if the doctype controller has a static get_list methodCOMMENT
LOWfrappe/commands/site.py373 # Check if the backup is of an older version of frappe and the user hasn't specified forceCOMMENT
LOWfrappe/email/doctype/notification/test_notification.py257 # Check if the notification was triggeredCOMMENT
LOWfrappe/email/doctype/notification/test_notification.py316 # Check if the notification was triggeredCOMMENT
LOW…e/email/doctype/auto_email_report/auto_email_report.py125 # Check if all Mandatory Report Filters are filled by the UserCOMMENT
LOW.github/workflows/run-indinvidual-tests.yml32 # Loop through array and create JSON objectsCOMMENT
AI Structural Patterns72 hits · 67 pts
SeverityFileLineSnippetContext
LOWfrappe/build.py226CODE
LOWfrappe/client.py26CODE
LOWfrappe/client.py374CODE
LOWfrappe/recorder.py335CODE
LOWfrappe/__init__.py748CODE
LOWfrappe/__init__.py885CODE
LOWfrappe/installer.py39CODE
LOWfrappe/installer.py121CODE
LOWfrappe/installer.py568CODE
LOWfrappe/installer.py594CODE
LOWfrappe/share.py49CODE
LOWfrappe/frappeclient.py363CODE
LOWfrappe/frappeclient.py370CODE
LOWfrappe/database/query.py215CODE
LOWfrappe/database/sequence.py28CODE
LOWfrappe/database/database.py183CODE
LOWfrappe/database/database.py520CODE
LOWfrappe/database/database.py598CODE
LOWfrappe/database/__init__.py122CODE
LOW…prepared_report_analytics/prepared_report_analytics.py106CODE
LOWfrappe/core/doctype/access_log/access_log.py51CODE
LOWfrappe/core/doctype/data_export/exporter.py33CODE
LOWfrappe/core/doctype/data_export/exporter.py78CODE
LOWfrappe/core/doctype/data_import/importer.py567CODE
LOWfrappe/core/doctype/communication/mixins.py270CODE
LOWfrappe/core/doctype/communication/mixins.py338CODE
LOWfrappe/core/doctype/communication/email.py33CODE
LOWfrappe/core/doctype/communication/email.py143CODE
LOWfrappe/desk/query_report.py225CODE
LOWfrappe/desk/query_report.py248CODE
LOWfrappe/desk/search.py102CODE
LOWfrappe/desk/doctype/dashboard_chart/dashboard_chart.py93CODE
LOWfrappe/website/doctype/web_page_view/web_page_view.py47CODE
LOWfrappe/tests/ui_test_helpers.py736CODE
LOWfrappe/tests/microbenchmarks/utils.py31CODE
LOWfrappe/tests/microbenchmarks/utils.py43CODE
LOWfrappe/utils/task_queue.py12CODE
LOWfrappe/utils/backups.py569CODE
LOWfrappe/utils/backups.py608CODE
LOWfrappe/utils/backups.py42CODE
LOWfrappe/utils/print_utils.py10CODE
LOWfrappe/utils/print_utils.py108CODE
LOWfrappe/utils/response.py360CODE
LOWfrappe/utils/messages.py11CODE
LOWfrappe/utils/background_jobs.py79CODE
LOWfrappe/utils/commands.py40CODE
LOWfrappe/utils/data.py238CODE
LOWfrappe/utils/data.py253CODE
LOWfrappe/utils/data.py268CODE
LOWfrappe/utils/data.py282CODE
LOWfrappe/realtime/__init__.py29CODE
LOWfrappe/testing/runner.py49CODE
LOWfrappe/model/delete_doc.py24CODE
LOWfrappe/model/qb_query.py26CODE
LOWfrappe/model/db_query.py111CODE
LOWfrappe/model/document.py178CODE
LOWfrappe/model/document.py412CODE
LOWfrappe/model/rename_doc.py108CODE
LOWfrappe/commands/site.py73CODE
LOWfrappe/commands/site.py196CODE
12 more matches not shown…
Cross-File Repetition10 hits · 50 pts
SeverityFileLineSnippetContext
HIGHfrappe/database/mariadb/database.py0select constraint_name from information_schema.table_constraints where table_name=%s and constraint_type='unique' and coSTRING
HIGHfrappe/database/mariadb/mysqlclient.py0select constraint_name from information_schema.table_constraints where table_name=%s and constraint_type='unique' and coSTRING
HIGHfrappe/database/postgres/database.py0select constraint_name from information_schema.table_constraints where table_name=%s and constraint_type='unique' and coSTRING
HIGHfrappe/database/mariadb/database.py0syncs a `doctype` to the table * creates if required * updates columns * updates indicesSTRING
HIGHfrappe/database/mariadb/mysqlclient.py0syncs a `doctype` to the table * creates if required * updates columns * updates indicesSTRING
HIGHfrappe/database/postgres/database.py0syncs a `doctype` to the table * creates if required * updates columns * updates indicesSTRING
HIGHfrappe/gettext/extractors/web_form.py0extract messages from report json files. to be used to babel extractor :param fileobj: the file-like object the messagesSTRING
HIGHfrappe/gettext/extractors/doctype.py0extract messages from report json files. to be used to babel extractor :param fileobj: the file-like object the messagesSTRING
HIGHfrappe/gettext/extractors/workspace.py0extract messages from report json files. to be used to babel extractor :param fileobj: the file-like object the messagesSTRING
HIGHfrappe/gettext/extractors/report.py0extract messages from report json files. to be used to babel extractor :param fileobj: the file-like object the messagesSTRING
Modern Structural Boilerplate32 hits · 32 pts
SeverityFileLineSnippetContext
LOWfrappe/core/doctype/file/utils.py324def update_existing_file_docs(doc: "File") -> None:CODE
LOWfrappe/core/doctype/background_task/background_task.py55 def update_stage(self, stage: str) -> None:CODE
LOWfrappe/core/doctype/recorder/db_optimizer.py110 def update_cardinality(self, column_stats: list[ColumnStat]) -> None:CODE
LOW…e/document_naming_settings/document_naming_settings.py124 def set_series_options_in_meta(self, doctype: str, options: str) -> None:CODE
LOW…ctype/global_search_settings/global_search_settings.py161def _set_global_search_property_setter(cf: CustomizeForm, fieldname: str, enabled: bool) -> None:CODE
LOWfrappe/tests/test_virtual_doctype.py42 def update_data(data: dict[str, dict]) -> None:CODE
LOWfrappe/tests/classes/context_managers.py267__all__ = [CODE
LOWfrappe/tests/utils/generators.py21logger = logging.getLogger(__name__)CODE
LOWfrappe/tests/utils/generators.py26__all__ = [CODE
LOWfrappe/pulse/utils.py5__all__ = ["get_app_version", "get_frappe_version"]CODE
LOWfrappe/utils/translations.py68def set_user_lang(user: str, user_language: str | None = None) -> None:CODE
LOWfrappe/utils/logger.py109def set_log_level(level: Literal["ERROR", "WARNING", "WARN", "INFO", "DEBUG"]) -> None:CODE
LOWfrappe/utils/messages.py176__all__ = [CODE
LOWfrappe/utils/chromium/__init__.py25__all__ = [CODE
LOWfrappe/www/printview.py296def set_link_titles(doc: "Document") -> None:STRING
LOWfrappe/www/printview.py333def set_title_values_for_table_and_multiselect_fields(meta: "Meta", doc: "Document") -> None:STRING
LOWfrappe/testing/runner.py37logger = logging.getLogger(__name__)CODE
LOWfrappe/testing/__init__.py41logger = logging.getLogger(__name__)CODE
LOWfrappe/testing/result.py28logger = logging.getLogger(__name__)CODE
LOWfrappe/testing/utils.py5logger = logging.getLogger(__name__)CODE
LOWfrappe/testing/environment.py36logger = logging.getLogger(__name__)CODE
LOWfrappe/model/naming.py128 def update_counter(self, new_count: int) -> None:CODE
LOWfrappe/model/document.py2702def _set_document_in_cache(key: str, doc: "Document") -> None:CODE
LOWfrappe/model/rename_doc.py236def update_assignments(old: str, new: str, doctype: str) -> None:CODE
LOWfrappe/model/rename_doc.py260def update_user_settings(old: str, new: str, link_fields: list[dict]) -> None:CODE
LOWfrappe/model/rename_doc.py299def update_customizations(old: str, new: str) -> None:CODE
LOWfrappe/model/rename_doc.py303def update_attachments(doctype: str, old: str, new: str) -> None:CODE
LOWfrappe/model/rename_doc.py327def update_autoname_field(doctype: str, new: str, meta: "Meta") -> None:CODE
LOWfrappe/model/rename_doc.py411def update_child_docs(old: str, new: str, meta: "Meta") -> None:CODE
LOWfrappe/model/rename_doc.py421def update_link_field_values(link_fields: list[dict], old: str, new: str, doctype: str) -> None:CODE
LOWfrappe/model/rename_doc.py513def update_options_for_fieldtype(fieldtype: str, old: str, new: str) -> None:CODE
LOWfrappe/custom/doctype/custom_field/custom_field.py437def _update_fieldname_references(field: CustomField, old_fieldname: str, new_fieldname: str) -> None:CODE
Docstring Block Structure3 hits · 15 pts
SeverityFileLineSnippetContext
HIGHfrappe/utils/telemetry/pulse/utils.py42 Parse interval string or integer into seconds. Args: interval: Can be: - Integer: seconds (e.g., 3600)STRING
HIGHfrappe/model/delete_doc.py36 Deletes a document and validates if it is not submitted and not linked in a live record. Args: doctype (str, optioSTRING
HIGHfrappe/model/qb_query.py61Execute a database query using the Query Builder engine. Args: fields: Fields to select. Can be a list, tuple, or STRING
AI Slop Vocabulary5 hits · 12 pts
SeverityFileLineSnippetContext
LOWfrappe/core/doctype/file/file.py507 # just use the url, to avoid uploading a duplicateCOMMENT
MEDIUMfrappe/tests/test_preview.py80 # this robust against jpeg compression noise.COMMENT
LOWfrappe/tests/test_permissions.py513 # not raise permission error but simply return empty listCOMMENT
MEDIUMfrappe/utils/chromium/page.py285 # Absolutely/fixed-positioned descendants are skipped so they can'tCOMMENT
MEDIUMfrappe/public/js/frappe/ui/sort_selector.js74 // and is robust to missing backticksCOMMENT
Cross-Language Confusion (JS/TS)2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHfrappe/public/js/frappe/utils/utils.js1677 print(doctype, docname, print_format, letterhead, lang_code) {CODE
HIGHfrappe/public/js/frappe/list/bulk_operations.js7 print(docs) {CODE
Verbosity Indicators5 hits · 10 pts
SeverityFileLineSnippetContext
LOW…ntegrations/doctype/google_calendar/google_calendar.py339 # instances of recurring events, so we need to check if the event is alreadyCOMMENT
LOWfrappe/public/js/frappe/form/toolbar.js743 // We need to check if document is already amend specifically and hideCOMMENT
LOWfrappe/public/js/frappe/list/list_factory.js70 // Step 1: /desk/List/Item redirects to /desk/List/Item/ListCOMMENT
LOWfrappe/public/js/frappe/list/list_factory.js71 // Step 2: User hits "back" comes back to /desk/List/ItemCOMMENT
LOWfrappe/public/js/frappe/list/list_factory.js72 // Step 3: Now we cannot send the user back to /desk/List/Item/List so go back one more stepCOMMENT
Structural Annotation Overuse4 hits · 8 pts
SeverityFileLineSnippetContext
LOWfrappe/__init__.py1178 # WARNING: This behaviour is now part of business logic in places, never remove.COMMENT
LOWfrappe/tests/utils/generators.py222 # NOTE: This method is called in roughly these situations:COMMENT
LOWfrappe/public/js/frappe/list/list_factory.js71 // Step 2: User hits "back" comes back to /desk/List/ItemCOMMENT
LOWfrappe/public/js/frappe/list/list_factory.js72 // Step 3: Now we cannot send the user back to /desk/List/Item/List so go back one more stepCOMMENT
TODO Padding2 hits · 3 pts
SeverityFileLineSnippetContext
LOWfrappe/__init__.py234# TODO: implement dataclassCOMMENT
LOWfrappe/__init__.py236# TODO: implement dataclassCOMMENT
Dead Code1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMfrappe/deprecation_dumpster.py140CODE
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
LOWfrappe/oauth.py194 # the authorization code. Don't forget to save both theCOMMENT