Repository Analysis

readthedocs/readthedocs.org

The source code that powers readthedocs.org

16.7 Moderate AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of readthedocs/readthedocs.org, a Python project with 8,372 GitHub stars. SynthScan v2.0 examined 138,027 lines of code across 836 source files, recording 2120 pattern matches distributed across 19 syntactic categories. The overall adjusted score of 16.7 places this repository in the Moderate AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

16.7
Adjusted Score
16.7
Raw Score
100%
Time Factor
2026-07-30
Last Push
8.4K
Stars
Python
Language
138.0K
Lines of Code
836
Files
2.1K
Pattern Hits
2026-08-02
Scan Date
0.04
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

Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.

No multi-scan history yet — run the scanner again to build trend data.

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 14HIGH 18MEDIUM 58LOW 2030

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 2120 distinct pattern matches across 19 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 Identifiers1725 hits · 1580 pts
SeverityFileLineSnippetContext
LOWreadthedocs/organizations/signals.py33def remove_organization_completely(sender, instance, using, **kwargs):CODE
LOWreadthedocs/organizations/signals.py70def mark_organization_assets_not_cleaned(sender, instance, created, **kwargs):CODE
LOWreadthedocs/organizations/querysets.py47 def subscription_trial_plan_ended(self):CODE
LOWreadthedocs/organizations/models.py36def _upload_organization_avatar_to(instance, filename):CODE
LOWreadthedocs/organizations/models.py56def _get_user_content_storage():CODE
LOWreadthedocs/organizations/filters.py37 def get_organization_queryset(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py183 def test_create_organization_with_empty_slug(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py194 def test_create_organization_with_invalid_unicode_slug(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py206 def test_create_organization_with_big_name(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py215 def test_create_organization_with_existent_slug(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py226 def test_create_organization_with_nonexistent_slug(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py237 def test_create_organization_with_invalid_slug(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py247 def test_create_organization_with_dns_invalid_slug(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py40 def test_add_team_member_by_name(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py50 def test_add_duplicate_member_by_username(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py63 def test_add_team_member_by_email(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py83 def test_add_team_invite_unverified_email(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py103 def test_add_fresh_member_by_email(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py123 def test_add_team_member_with_username_matching_other_user_email(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py143 def test_add_team_member_with_username_matching_unverified_email(self):CODE
LOWreadthedocs/organizations/tests/test_forms.py159 def test_add_duplicate_invite_by_email(self):CODE
LOWreadthedocs/organizations/tests/test_orgs.py204 def test_member_add_regression(self):CODE
LOWreadthedocs/organizations/tests/test_orgs.py211 def test_member_delete_regression(self):CODE
LOWreadthedocs/organizations/tests/test_orgs.py229 def test_team_add_slug_conflict(self):CODE
LOWreadthedocs/organizations/tests/test_orgs.py261 def test_team_delete_regression(self):CODE
LOWreadthedocs/organizations/tests/test_orgs.py300 def test_add_member_by_email_on_org_with_members(self):CODE
LOWreadthedocs/organizations/tests/test_orgs.py330 def test_add_duplicate_member_by_email(self):CODE
LOWreadthedocs/organizations/tests/test_orgs.py356 def test_add_existing_user_by_username(self):CODE
LOWreadthedocs/organizations/tests/test_orgs.py372 def test_invite_already_invited_member_by_username(self):CODE
LOWreadthedocs/organizations/tests/test_orgs.py398 def test_invite_already_existing_member_by_username(self):CODE
LOWreadthedocs/organizations/tests/test_orgs.py415 def test_invite_user_from_the_same_org(self, send_email):CODE
LOWreadthedocs/organizations/tests/test_orgs.py452 def test_invite_myuself_to_team(self, send_email):CODE
LOWreadthedocs/organizations/tests/test_views.py96 def test_update_avatar_invalid_dimensions(self):CODE
LOWreadthedocs/organizations/tests/test_views.py119 def test_update_avatar_invalid_image(self):CODE
LOWreadthedocs/organizations/tests/test_views.py142 def test_update_avatar_invalid_extension(self):CODE
LOWreadthedocs/organizations/tests/test_views.py197 def test_delete_blocked_for_banned_owner(self):CODE
LOWreadthedocs/organizations/tests/test_views.py210 def test_delete_blocked_for_spam_project_score(self, get_spam_score):CODE
LOWreadthedocs/organizations/tests/test_views.py270 def test_add_owner_with_username_matching_other_user_email(self):CODE
LOWreadthedocs/organizations/tests/test_views.py288 def test_add_owner_with_username_matching_unverified_email(self):CODE
LOWreadthedocs/organizations/tests/test_views.py560 def test_choose_organization_edit(self):CODE
LOWreadthedocs/organizations/tests/test_views.py596 def test_unspecified_slug_redirects_to_organization_edit(self):CODE
LOWreadthedocs/organizations/tests/test_views.py617 def test_choose_organization_edit(self):CODE
LOWreadthedocs/organizations/tests/test_querysets.py37 def test_organizations_with_trial_subscription_plan_ended(self):CODE
LOWreadthedocs/organizations/tests/test_querysets.py79 def test_organizations_to_be_disabled(self):CODE
LOWreadthedocs/organizations/tests/test_filters.py135 def test_filtered_queryset_choice(self, user, organization):CODE
LOWreadthedocs/organizations/tests/test_filters.py150 def test_filtered_queryset_invalid_choice(self, user, organization):CODE
LOWreadthedocs/organizations/tests/test_filters.py173 def test_organization_filter_choices(self, user, organization):CODE
LOWreadthedocs/organizations/tests/test_filters.py221 def test_filtered_queryset_project_choice(self, user, organization, project):CODE
LOWreadthedocs/organizations/tests/test_filters.py245 def test_filtered_queryset_project_invalid_choice(CODE
LOWreadthedocs/organizations/tests/test_filters.py276 def test_filtered_queryset_team_choice(CODE
LOWreadthedocs/organizations/tests/test_filters.py302 def test_filtered_queryset_team_invalid_choice(self, user, organization, project):CODE
LOWreadthedocs/organizations/tests/test_filters.py329 def test_project_filter_choices(self, user, organization, project):CODE
LOWreadthedocs/organizations/tests/test_filters.py402 def test_filtered_queryset_team_choice(self, user, organization, team):CODE
LOWreadthedocs/organizations/tests/test_filters.py426 def test_filtered_queryset_team_invalid_choice(self, user, organization, team):CODE
LOWreadthedocs/organizations/tests/test_filters.py498 def test_filtered_queryset_team_choice(self, user, organization, team, users):CODE
LOWreadthedocs/organizations/tests/test_filters.py524 def test_filtered_queryset_access_choice(self, user, organization, access, users):CODE
LOWreadthedocs/organizations/tests/test_filters.py548 def test_filtered_queryset_team_invalid_choice(self, user, organization):CODE
LOWreadthedocs/organizations/tests/test_filters.py588 def test_access_filter_choices(self, user, organization):CODE
LOWreadthedocs/organizations/tests/test_access.py64 def test_organization_details(self):CODE
LOWreadthedocs/organizations/tests/test_access.py68 def test_organization_owners_regression(self):CODE
1665 more matches not shown…
Self-Referential Comments50 hits · 159 pts
SeverityFileLineSnippetContext
MEDIUMreadthedocs/organizations/tests/test_orgs.py306 # Create a team member that has no invite.COMMENT
MEDIUMreadthedocs/settings/docker_compose.py60 # Create a Token for an admin User and set it here.COMMENT
MEDIUMreadthedocs/oauth/tests/test_githubapp_webhook.py1099 # Create a webhook automation rule that matches docs filesCOMMENT
MEDIUMreadthedocs/oauth/tests/test_githubapp_webhook.py1144 # Create a webhook automation rule that matches docs filesCOMMENT
MEDIUMreadthedocs/oauth/tests/test_githubapp_webhook.py1320 # Create a webhook automation rule for external versions (PRs)COMMENT
MEDIUMreadthedocs/oauth/tests/test_githubapp_webhook.py1435 # Create a webhook automation rule for external versions (PRs)COMMENT
MEDIUMreadthedocs/oauth/tests/test_githubapp_webhook.py1744 # Create a webhook automation rule that only matches PRs (EXTERNAL),COMMENT
MEDIUMreadthedocs/oauth/tests/test_githubapp_webhook.py1794 # Create a webhook automation rule that only matches branches, not PRs.COMMENT
MEDIUMreadthedocs/core/tests/test_db_utils.py270 # Create a project with 3 versionsCOMMENT
MEDIUMreadthedocs/core/tests/test_db_utils.py282 # Create a project with 20 versionsCOMMENT
MEDIUMreadthedocs/core/tests/test_db_utils.py324 # Create a project with 5 versionsCOMMENT
MEDIUMreadthedocs/core/tests/test_db_utils.py120 # Create a project with multiple versionsCOMMENT
MEDIUMreadthedocs/core/tests/test_db_utils.py214 # Create a project with 3 versionsCOMMENT
MEDIUMreadthedocs/core/tests/test_db_utils.py231 # Create a project with exactly 5 versionsCOMMENT
MEDIUMreadthedocs/core/tests/test_db_utils.py244 # Create a project with 10 versionsCOMMENT
MEDIUMreadthedocs/core/tests/test_db_utils.py257 # Create a project with 25 versionsCOMMENT
MEDIUMreadthedocs/core/tests/test_db_utils.py296 # Create a project with 5 versionsCOMMENT
MEDIUMreadthedocs/core/tests/test_db_utils.py310 # Create a project with 10 versionsCOMMENT
MEDIUMreadthedocs/vcs_support/base.py50 # Defining a base API, so we'll have unused argsCOMMENT
MEDIUMreadthedocs/projects/tasks/builds.py155 # Create the object to store all the task-related dataCOMMENT
MEDIUMreadthedocs/projects/tasks/builds.py383 # Create the object to store all the task-related dataCOMMENT
MEDIUMreadthedocs/projects/tests/test_build_tasks.py285 # Create the artifact paths, so that `store_build_artifacts`COMMENT
MEDIUMreadthedocs/projects/tests/test_build_tasks.py497 # Create the artifact paths, so it's detected by the builderCOMMENT
MEDIUMreadthedocs/projects/tests/test_build_tasks.py875 # Create the artifact paths, so it's detected by the builderCOMMENT
MEDIUMreadthedocs/projects/tests/test_build_tasks.py1157 # Create the artifact paths, so it's detected by the builderCOMMENT
MEDIUMreadthedocs/projects/tests/test_build_tasks.py1421 # Create the artifact paths, so it's detected by the builderCOMMENT
MEDIUMreadthedocs/projects/tests/test_domain_views.py199 # Create the first domainCOMMENT
MEDIUMreadthedocs/projects/tests/test_domain_views.py207 # Create the second domainCOMMENT
MEDIUMreadthedocs/builds/tests/test_trigger_build.py40 # Create a running buildCOMMENT
MEDIUMreadthedocs/builds/tests/test_trigger_build.py72 # Create a running buildCOMMENT
MEDIUMreadthedocs/builds/tests/test_buildconfig.py87 # Create a build with actual configCOMMENT
MEDIUMreadthedocs/builds/tests/test_buildconfig.py92 # Create a build with same config on the same versionCOMMENT
MEDIUMreadthedocs/builds/tests/test_tasks.py216 # Create a Build and manually assign the BuildConfigCOMMENT
MEDIUMreadthedocs/search/parsers.py248 # Create a copy of the node to avoid manipulating theCOMMENT
MEDIUMreadthedocs/search/tests/test_views.py48 # Create a project in bn and add it as a translationCOMMENT
MEDIUMreadthedocs/search/tests/test_views.py67 # Create a project in bn and add it as a translationCOMMENT
MEDIUMreadthedocs/api/v2/client.py36 # Define a retry mechanism trying to attempt to not fail in the first error.COMMENT
MEDIUMreadthedocs/api/v3/tests/test_filters.py61 # Create a running build.COMMENT
MEDIUMreadthedocs/api/v3/tests/test_filters.py78 # Create a running build to make sure it's excluded.COMMENT
MEDIUMreadthedocs/doc_builder/environments.py691 # Create the checkout path if it doesn't exist to avoid Docker creationCOMMENT
MEDIUMreadthedocs/doc_builder/environments.py871 # Create the container in the same network the web container isCOMMENT
MEDIUMreadthedocs/doc_builder/director.py93 # Create the VCS repository where all the commands are going to beCOMMENT
MEDIUMreadthedocs/doc_builder/director.py554 # Create a symlink for ``root`` user to use the same ``.asdf``COMMENT
MEDIUMreadthedocs/doc_builder/tests/test_director.py27 # Create a minimal data object that BuildDirector expectsCOMMENT
MEDIUMreadthedocs/rtd_tests/tests/test_version.py16 # Create a External Version. ie: pull/merge request Version.COMMENT
MEDIUMreadthedocs/rtd_tests/tests/test_oauth.py985 # Create an external version (PR build) that is not builtCOMMENT
MEDIUMreadthedocs/rtd_tests/tests/test_domains.py250 # Creating the third (3) domain should fail the validation formCOMMENT
MEDIUMreadthedocs/rtd_tests/tests/test_api.py3493 # Create a second GitHub integration for the same project with the same secretCOMMENT
MEDIUMreadthedocs/rtd_tests/tests/test_project.py43 # Create a External Version. ie: pull/merge request Version.COMMENT
MEDIUMreadthedocs/rtd_tests/tests/test_automation_rules.py920 # Create a tag versionCOMMENT
Hallucination Indicators14 hits · 150 pts
SeverityFileLineSnippetContext
CRITICALreadthedocs/organizations/forms.py6from django.core.exceptions import ValidationErrorCODE
CRITICALreadthedocs/organizations/templatetags/organizations.py5from django.core.exceptions import FieldErrorCODE
CRITICALreadthedocs/domains/validators.py2from django.core.exceptions import ValidationErrorCODE
CRITICALreadthedocs/oauth/tests/test_models.py1from django.core.exceptions import ValidationErrorCODE
CRITICALreadthedocs/projects/validators.py7from django.core.exceptions import ValidationErrorCODE
CRITICALreadthedocs/projects/tasks/builds.py346 response = self.data.api_client.build.concurrent.get(CODE
CRITICALreadthedocs/projects/tasks/utils.py11from django.core.exceptions import ValidationErrorCODE
CRITICALreadthedocs/projects/tests/test_validators.py2from django.core.exceptions import ValidationErrorCODE
CRITICALreadthedocs/projects/tests/test_models.py2from django.core.exceptions import ValidationErrorCODE
CRITICALreadthedocs/storage/tests/test_s3_storage.py22 mock_bucket.objects.filter.return_value.delete.assert_called_once()CODE
CRITICALreadthedocs/storage/tests/test_s3_storage.py31 mock_bucket.objects.filter.return_value.delete.assert_called_once()CODE
CRITICALreadthedocs/redirects/validators.py2from django.core.exceptions import ValidationErrorCODE
CRITICALreadthedocs/doc_builder/director.py575 for tool, version in self.data.config.build.tools.items():CODE
CRITICALmedia/javascript/jquery/jquery-2.0.3.min.js23})}},k.pseudos.nth=k.pseudos.eq;for(T in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})k.pseudos[T]=u(T);for(T in{sCODE
Over-Commented Block123 hits · 115 pts
SeverityFileLineSnippetContext
LOWdocker-compose.override.yml1# docker-compose.override.yml file to launch a full instance of Read the Docs.COMMENT
LOWrequirements/deploy.txt1#COMMENT
LOWrequirements/deploy.txt21 # -r requirements/pip.txtCOMMENT
LOWrequirements/deploy.txt41bumpver==2026.1132COMMENT
LOWrequirements/deploy.txt61 # -r requirements/pip.txtCOMMENT
LOWrequirements/deploy.txt81 # -r requirements/pip.txtCOMMENT
LOWrequirements/deploy.txt101 # via ipythonCOMMENT
LOWrequirements/deploy.txt121 # django-formtoolsCOMMENT
LOWrequirements/deploy.txt141django-csp==3.8COMMENT
LOWrequirements/deploy.txt161django-safemigrate==6.0COMMENT
LOWrequirements/deploy.txt181 # rest-framework-generic-relationsCOMMENT
LOWrequirements/deploy.txt201 # viaCOMMENT
LOWrequirements/deploy.txt221 # requestsCOMMENT
LOWrequirements/deploy.txt241 # -r requirements/pip.txtCOMMENT
LOWrequirements/deploy.txt261 # -r requirements/pip.txtCOMMENT
LOWrequirements/deploy.txt281 # viaCOMMENT
LOWrequirements/deploy.txt301 # psycopgCOMMENT
LOWrequirements/deploy.txt321 # ipythonCOMMENT
LOWrequirements/deploy.txt341 # botocoreCOMMENT
LOWrequirements/deploy.txt361 # viaCOMMENT
LOWrequirements/deploy.txt381 # via -r requirements/pip.txtCOMMENT
LOWrequirements/deploy.txt401 # viaCOMMENT
LOWrequirements/deploy.txt421structlog-sentry==2.2.1COMMENT
LOWrequirements/deploy.txt441 # stripeCOMMENT
LOWrequirements/deploy.txt461 # viaCOMMENT
LOWrequirements/deploy.txt481vine==5.1.0COMMENT
LOWrequirements/testing.txt1#COMMENT
LOWrequirements/testing.txt21asgiref==3.11.1COMMENT
LOWrequirements/testing.txt41 # boto3COMMENT
LOWrequirements/testing.txt61 # viaCOMMENT
LOWrequirements/testing.txt81 # viaCOMMENT
LOWrequirements/testing.txt101 # -r requirements/pip.txtCOMMENT
LOWrequirements/testing.txt121 # django-filterCOMMENT
LOWrequirements/testing.txt161 # viaCOMMENT
LOWrequirements/testing.txt181 # viaCOMMENT
LOWrequirements/testing.txt201drf-flex-fields==1.0.2COMMENT
LOWrequirements/testing.txt221 # via -r requirements/pip.txtCOMMENT
LOWrequirements/testing.txt241 # botocoreCOMMENT
LOWrequirements/testing.txt261 # via jinja2COMMENT
LOWrequirements/testing.txt281platformdirs==4.10.0COMMENT
LOWrequirements/testing.txt301 # viaCOMMENT
LOWrequirements/testing.txt321pyjwt[crypto]==2.13.0COMMENT
LOWrequirements/testing.txt341pytest-custom-exit-code==0.3.0COMMENT
LOWrequirements/testing.txt361python-ipware==3.0.0COMMENT
LOWrequirements/testing.txt381requests==2.34.2COMMENT
LOWrequirements/testing.txt401roman-numerals==4.1.0COMMENT
LOWrequirements/testing.txt421 # elasticsearchCOMMENT
LOWrequirements/testing.txt441 # djangoCOMMENT
LOWrequirements/testing.txt461 # psycopg-poolCOMMENT
LOWrequirements/testing.txt481 # viaCOMMENT
LOWrequirements/testing.txt501 # requestsCOMMENT
LOWrequirements/docker.txt1#COMMENT
LOWrequirements/docker.txt21 # -r requirements/pip.txtCOMMENT
LOWrequirements/docker.txt41bumpver==2026.1132COMMENT
LOWrequirements/docker.txt61 # viaCOMMENT
LOWrequirements/docker.txt81 # viaCOMMENT
LOWrequirements/docker.txt101 # pyqueryCOMMENT
LOWrequirements/docker.txt121 # django-celery-beatCOMMENT
LOWrequirements/docker.txt161django-impersonate==1.9.5COMMENT
LOWrequirements/docker.txt181django-vanilla-views==3.0.0COMMENT
63 more matches not shown…
Excessive Try-Catch Wrapping64 hits · 68 pts
SeverityFileLineSnippetContext
LOWreadthedocs/organizations/forms.py98 except Exception:CODE
LOWreadthedocs/oauth/tasks.py117 except Exception:CODE
LOWreadthedocs/oauth/tasks.py188 except Exception:CODE
LOWreadthedocs/oauth/services/bitbucket.py329 except Exception:CODE
LOWreadthedocs/oauth/services/gitlab.py357 except Exception:CODE
LOWreadthedocs/oauth/services/gitlab.py412 except Exception:CODE
LOWreadthedocs/oauth/services/gitlab.py473 except Exception:CODE
LOWreadthedocs/oauth/services/gitlab.py478 except Exception:CODE
LOWreadthedocs/oauth/services/github.py281 except Exception:CODE
LOWreadthedocs/core/signals.py78 except Exception: # noqaCODE
LOWreadthedocs/core/history.py56 except Exception:CODE
LOWreadthedocs/core/utils/contact.py90 except Exception:CODE
LOWreadthedocs/core/utils/tasks/public.py73 except Exception as e:CODE
LOWreadthedocs/core/views/hooks.py111 except Exception:CODE
LOWreadthedocs/embed/v3/views.py107 except Exception: # noqaCODE
LOWreadthedocs/embed/v3/views.py362 except Exception: # noqaCODE
LOWreadthedocs/projects/models.py2515 except Exception:CODE
LOWreadthedocs/projects/models.py2564 except Exception:CODE
LOWreadthedocs/projects/models.py2598 except Exception:CODE
MEDIUMreadthedocs/projects/forms.py1269def _get_cname(self, domain):CODE
LOWreadthedocs/projects/forms.py1034 except Exception as exc:CODE
LOWreadthedocs/projects/forms.py1551 except Exception:CODE
LOWreadthedocs/projects/tasks/builds.py354 except Exception:CODE
LOWreadthedocs/projects/tasks/builds.py778 except Exception:CODE
LOWreadthedocs/projects/tasks/builds.py821 except Exception:CODE
LOWreadthedocs/projects/tasks/builds.py888 except Exception:CODE
LOWreadthedocs/projects/tasks/builds.py904 except Exception:CODE
LOWreadthedocs/projects/tasks/builds.py966 except Exception as exc:CODE
LOWreadthedocs/projects/tasks/builds.py990 except Exception as exc:CODE
LOWreadthedocs/projects/tasks/builds.py1021 except Exception:CODE
MEDIUMreadthedocs/projects/tasks/builds.py344def _check_concurrency_limit(self):CODE
MEDIUMreadthedocs/projects/tasks/builds.py1010def _log_directory_size(self, directory, media_type):CODE
LOWreadthedocs/projects/tasks/utils.py232 except Exception:CODE
LOWreadthedocs/projects/tasks/utils.py308 except Exception:CODE
LOWreadthedocs/projects/tasks/storage.py87 except Exception:CODE
LOWreadthedocs/projects/tasks/search.py275 except Exception:CODE
LOWreadthedocs/projects/tasks/search.py286 except Exception:CODE
LOWreadthedocs/projects/tasks/search.py331 except Exception:CODE
LOWreadthedocs/projects/tasks/search.py375 except Exception:CODE
LOWreadthedocs/projects/views/private.py353 except Exception:CODE
LOWreadthedocs/builds/tasks.py105 except Exception:CODE
LOWreadthedocs/builds/tasks.py177 except Exception:CODE
LOWreadthedocs/builds/tasks.py186 except Exception:CODE
LOWreadthedocs/builds/tasks.py373 except Exception:CODE
LOWreadthedocs/builds/tasks.py386 except Exception:CODE
LOWreadthedocs/builds/tasks.py508 except Exception:CODE
LOWreadthedocs/builds/tasks.py696 except Exception:CODE
LOWreadthedocs/builds/models.py912 except Exception:CODE
LOWreadthedocs/subscriptions/signals.py58 except Exception:CODE
LOWreadthedocs/subscriptions/views.py89 except Exception:CODE
LOWreadthedocs/search/tasks.py91 except Exception:CODE
LOWreadthedocs/search/parsers.py78 except Exception:CODE
LOWreadthedocs/search/parsers.py204 except Exception as e:CODE
LOWreadthedocs/search/parsers.py219 except Exception:CODE
LOWreadthedocs/search/parsers.py465 except Exception:CODE
LOWreadthedocs/search/utils.py70 except Exception:CODE
LOWreadthedocs/api/mixins.py50 except Exception:CODE
LOWreadthedocs/api/v2/views/model_views.py380 except Exception:CODE
LOWreadthedocs/aws/security_token_service.py113 except Exception:CODE
LOWreadthedocs/telemetry/collectors.py48 except Exception:CODE
4 more matches not shown…
Cross-File Repetition11 hits · 55 pts
SeverityFileLineSnippetContext
HIGHreadthedocs/oauth/services/bitbucket.py0gets provider data from git providers webhooks api. :param project: project :type project: project :param integration: iSTRING
HIGHreadthedocs/oauth/services/gitlab.py0gets provider data from git providers webhooks api. :param project: project :type project: project :param integration: iSTRING
HIGHreadthedocs/oauth/services/github.py0gets provider data from git providers webhooks api. :param project: project :type project: project :param integration: iSTRING
HIGHreadthedocs/oauth/services/base.py0gets provider data from git providers webhooks api. :param project: project :type project: project :param integration: iSTRING
HIGHreadthedocs/oauth/services/bitbucket.py0update webhook integration. :param project: project to set up webhook for :type project: project :param integration: webSTRING
HIGHreadthedocs/oauth/services/gitlab.py0update webhook integration. :param project: project to set up webhook for :type project: project :param integration: webSTRING
HIGHreadthedocs/oauth/services/github.py0update webhook integration. :param project: project to set up webhook for :type project: project :param integration: webSTRING
HIGHreadthedocs/oauth/services/base.py0update webhook integration. :param project: project to set up webhook for :type project: project :param integration: webSTRING
HIGHreadthedocs/oauth/services/gitlab.py0create commit status for project. :param build: build to set up commit status for :type build: build :param commit: commSTRING
HIGHreadthedocs/oauth/services/github.py0create commit status for project. :param build: build to set up commit status for :type build: build :param commit: commSTRING
HIGHreadthedocs/oauth/services/base.py0create commit status for project. :param build: build to set up commit status for :type build: build :param commit: commSTRING
Unused Imports44 hits · 42 pts
SeverityFileLineSnippetContext
LOWreadthedocs/organizations/apps.py10CODE
LOWreadthedocs/domains/apps.py11CODE
LOWreadthedocs/oauth/apps.py10CODE
LOWreadthedocs/core/utils/tasks/__init__.py3CODE
LOWreadthedocs/core/utils/tasks/__init__.py3CODE
LOWreadthedocs/core/utils/tasks/__init__.py7CODE
LOWreadthedocs/core/utils/tasks/__init__.py8CODE
LOWreadthedocs/core/utils/tasks/__init__.py9CODE
LOWreadthedocs/config/__init__.py3CODE
LOWreadthedocs/config/__init__.py5CODE
LOWreadthedocs/config/__init__.py6CODE
LOWreadthedocs/projects/apps.py15CODE
LOWreadthedocs/projects/apps.py16CODE
LOWreadthedocs/projects/apps.py17CODE
LOWreadthedocs/projects/apps.py18CODE
LOWreadthedocs/projects/apps.py19CODE
LOWreadthedocs/projects/tests/mockers.py10CODE
LOWreadthedocs/builds/apps.py17CODE
LOWreadthedocs/builds/apps.py18CODE
LOWreadthedocs/subscriptions/apps.py13CODE
LOWreadthedocs/subscriptions/apps.py14CODE
LOWreadthedocs/subscriptions/apps.py15CODE
LOWreadthedocs/subscriptions/tests/test_event_handlers.py8CODE
LOWreadthedocs/search/apps.py9CODE
LOWreadthedocs/gold/apps.py11CODE
LOWreadthedocs/gold/tests/test_signals.py2CODE
LOWreadthedocs/audit/apps.py14CODE
LOWreadthedocs/telemetry/apps.py15CODE
LOWreadthedocs/doc_builder/tests/test_director.py6CODE
LOWreadthedocs/notifications/apps.py11CODE
LOWreadthedocs/proxito/tests/handler_404_urls.py17CODE
LOWreadthedocs/rtd_tests/utils.py14CODE
LOWreadthedocs/rtd_tests/tests/test_project_views.py24CODE
LOWreadthedocs/rtd_tests/tests/test_notifications.py7CODE
LOWreadthedocs/rtd_tests/tests/test_project.py1CODE
LOWreadthedocs/rtd_tests/tests/test_project.py11CODE
LOWreadthedocs/rtd_tests/tests/test_project.py14CODE
LOWreadthedocs/rtd_tests/tests/test_project.py14CODE
LOWreadthedocs/rtd_tests/tests/test_project.py14CODE
LOWreadthedocs/rtd_tests/tests/test_project.py22CODE
LOWreadthedocs/rtd_tests/files/conf.py3CODE
LOWreadthedocs/rtd_tests/files/conf.py3CODE
LOWreadthedocs/rtd_tests/files/conf.py3CODE
LOWreadthedocs/invitations/apps.py15CODE
Fake / Example Data21 hits · 28 pts
SeverityFileLineSnippetContext
LOWreadthedocs/organizations/forms.py46 "email": forms.EmailInput(attrs={"placeholder": "accounting@example.com"}),CODE
LOWreadthedocs/organizations/forms.py49 attrs={"placeholder": "Engineering docs for Example company"}CODE
LOWreadthedocs/organizations/forms.py52 "url": forms.TextInput(attrs={"placeholder": "https://"}),CODE
LOWreadthedocs/organizations/tests/test_forms.py186 "email": "test@example.org",CODE
LOWreadthedocs/organizations/tests/test_forms.py197 "email": "test@example.org",CODE
LOWreadthedocs/organizations/tests/test_forms.py209 "email": "test@example.org",CODE
LOWreadthedocs/organizations/tests/test_forms.py218 "email": "test@example.org",CODE
LOWreadthedocs/organizations/tests/test_forms.py229 "email": "test@example.org",CODE
LOWreadthedocs/organizations/tests/test_forms.py240 "email": "test@example.org",CODE
LOWreadthedocs/organizations/tests/test_forms.py250 "email": "test@example.org",CODE
LOWreadthedocs/domains/tests/test_tasks.py22 self.user = get(User, email="user@example.com")CODE
LOWreadthedocs/projects/forms.py1485 "version_match_pattern": forms.TextInput(attrs={"placeholder": "^release-.*$"}),CODE
LOWreadthedocs/projects/forms.py1486 "webhook_labels_match_pattern": forms.TextInput(attrs={"placeholder": "^docs|build$"}),CODE
LOWreadthedocs/projects/forms.py1488 attrs={"placeholder": "^fix|feature$"}CODE
LOWreadthedocs/projects/forms.py91 self.fields["repo"].widget.attrs["placeholder"] = self.placehold_repo()CODE
LOWreadthedocs/projects/forms.py459 self.fields["repo"].widget.attrs["placeholder"] = self.placehold_repo()CODE
LOWreadthedocs/projects/forms.py525 "placeholder": "\n".join(CODE
LOWreadthedocs/projects/forms.py794 "placeholder": "\n".join(CODE
LOWreadthedocs/projects/forms.py903 "options_root_selector": forms.TextInput(attrs={"placeholder": "[role=main]"}),CODE
LOWreadthedocs/projects/forms.py1456 "placeholder": "\n".join(CODE
LOWreadthedocs/search/tests/conftest.py15from .dummy_data import ALL_PROJECTS, PROJECT_DATA_FILESCODE
Redundant / Tautological Comments15 hits · 24 pts
SeverityFileLineSnippetContext
LOWreadthedocs/organizations/views/private.py93 # Check if user has exactly 1 organization and automatically redirect in this caseCOMMENT
LOWreadthedocs/core/mixins.py83 # Check if resp is a redirect, which means the object was deletedCOMMENT
LOWreadthedocs/core/tests/test_db_utils.py187 # Set limit to 1COMMENT
LOWreadthedocs/core/tests/test_db_utils.py329 # Set limit to 1COMMENT
LOWreadthedocs/vcs_support/backends/git.py585 # Check if ref is a branch of the origin remoteCOMMENT
LOWreadthedocs/projects/models.py1081 # Check if there is `_has_good_build` annotation in the queryset.COMMENT
LOWreadthedocs/projects/tasks/builds.py215 # Set GIT_SSH_COMMAND to use ssh with options that disable host key checkingCOMMENT
LOWreadthedocs/projects/tasks/builds.py620 # Check if there are multiple files on artifact directories.COMMENT
LOWreadthedocs/projects/tasks/builds.py694 # Check if the project is spamCOMMENT
LOWreadthedocs/doc_builder/director.py206 # Check if the key has write access to the repository (RTD Business only).COMMENT
LOWreadthedocs/doc_builder/director.py760 # Set GIT_SSH_COMMAND to use ssh with options that disable host key checkingCOMMENT
LOWreadthedocs/proxito/views/serve.py262 # Check if the old language code format was used, and redirect to the new one.COMMENT
LOWreadthedocs/proxito/views/serve.py304 # Verify if the project is marked as spam and return a 401 in that caseCOMMENT
LOWreadthedocs/proxito/views/serve.py631 # Verify if the project is marked as spam and return a custom robots.txtCOMMENT
LOWreadthedocs/rtd_tests/tests/test_project_views.py685 # Set version to privateCOMMENT
Deep Nesting24 hits · 23 pts
SeverityFileLineSnippetContext
LOWreadthedocs/settings/docker_compose.py215CODE
LOWreadthedocs/oauth/tasks.py563CODE
LOWreadthedocs/oauth/tasks.py642CODE
LOWreadthedocs/core/management/commands/contact_owners.py122CODE
LOWreadthedocs/core/utils/contact.py15CODE
LOWreadthedocs/embed/v3/views.py158CODE
LOWreadthedocs/config/config.py612CODE
LOWreadthedocs/vcs_support/backends/git.py60CODE
LOWreadthedocs/projects/filters.py55CODE
LOWreadthedocs/projects/tasks/search.py233CODE
LOWreadthedocs/projects/views/base.py20CODE
LOWreadthedocs/projects/views/private.py291CODE
LOWreadthedocs/projects/views/private.py102CODE
LOWreadthedocs/subscriptions/views.py113CODE
LOWreadthedocs/search/parsers.py222CODE
LOWreadthedocs/search/api/v3/queryparser.py28CODE
LOWreadthedocs/redirects/querysets.py50CODE
LOWreadthedocs/api/v2/utils.py26CODE
LOWreadthedocs/api/v2/views/model_views.py349CODE
LOWreadthedocs/telemetry/collectors.py174CODE
LOWreadthedocs/doc_builder/python_environments.py44CODE
LOWreadthedocs/proxito/middleware.py121CODE
LOWreadthedocs/proxito/views/hosting.py334CODE
LOWreadthedocs/proxito/views/serve.py804CODE
Cross-Language Confusion6 hits · 15 pts
SeverityFileLineSnippetContext
HIGHreadthedocs/oauth/tasks.py364 "single_file_name": null,STRING
HIGHreadthedocs/oauth/tasks.py367 "suspended_by": null,STRING
HIGHreadthedocs/oauth/tasks.py384 "requester": null,STRING
HIGHreadthedocs/oauth/tasks.py462 "single_file_name": null,STRING
HIGHreadthedocs/oauth/tasks.py465 "suspended_by": null,STRING
HIGHreadthedocs/oauth/tasks.py478 "requester": null,STRING
Decorative Section Separators4 hits · 15 pts
SeverityFileLineSnippetContext
MEDIUMreadthedocs/vcs_support/base.py46 # =========================================================================COMMENT
MEDIUMreadthedocs/vcs_support/base.py48 # =========================================================================COMMENT
MEDIUMreadthedocs/vcs_support/base.py101 # =========================================================================COMMENT
MEDIUMreadthedocs/vcs_support/base.py103 # =========================================================================COMMENT
AI Response Leakage1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHreadthedocs/search/parsers.py239 # In this example, we cannot use the current <dt>'s ID because they contain invalidCOMMENT
AI Slop Vocabulary4 hits · 6 pts
SeverityFileLineSnippetContext
LOWreadthedocs/oauth/models.py358 # (or v3) to just return the linked Project (slug, url) if the ``RemoteRepository``COMMENT
LOWreadthedocs/projects/version_handling.py150 # we just return the first branch found.COMMENT
LOWreadthedocs/search/api/v3/executor.py62 # we also just return.COMMENT
LOWreadthedocs/api/v2/views/integrations.py139 # In that case, we just return it as is.COMMENT
Verbosity Indicators4 hits · 5 pts
SeverityFileLineSnippetContext
LOWreadthedocs/core/resolver.py331 we need to check if the main translation is a subproject.STRING
LOWreadthedocs/api/v2/views/integrations.py561 # webhooks. If we receive a PUSH event we need to check if the webhook doesn'tCOMMENT
LOWreadthedocs/proxito/views/hosting.py619 # if only we need to check if there are results or not.COMMENT
LOWreadthedocs/proxito/views/serve.py164 # For .com we need to check if the project supports custom domains.COMMENT
TODO Padding3 hits · 4 pts
SeverityFileLineSnippetContext
LOW…th/management/commands/reconnect_remoterepositories.py54 # TODO: consider using same login than RemoteRepository.matches methodCOMMENT
LOWreadthedocs/api/v2/serializers.py398 # TODO: handle exceptionsCOMMENT
LOWreadthedocs/proxito/views/hosting.py434 # TODO: consider adding this field into the ProjectSerializer itself.COMMENT
Modern Structural Boilerplate3 hits · 3 pts
SeverityFileLineSnippetContext
LOWreadthedocs/oauth/services/__init__.py10__all__ = [CODE
LOWreadthedocs/builds/querysets.py24__all__ = ["VersionQuerySet", "BuildQuerySet", "RelatedBuildQuerySet"]CODE
LOWreadthedocs/builds/managers.py24__all__ = ["VersionManager"]CODE
Structural Annotation Overuse2 hits · 3 pts
SeverityFileLineSnippetContext
LOWreadthedocs/projects/views/private.py156 # NOTE: This method is called twice, on .org it doesn't matter,COMMENT
LOWreadthedocs/search/tasks.py37 # WARNING: This must use the exact same queryset as from where we get the ID'sCOMMENT
Slop Phrases2 hits · 2 pts
SeverityFileLineSnippetContext
LOWreadthedocs/settings/base.py993 # Everytime we need to do a re-index, make sure to check the size of the index and adjust theSTRING
LOWreadthedocs/projects/models.py739 # make sure to use the clone URL from the repository.COMMENT