One webpage for every book ever published!
This report presents the forensic synthetic code analysis of internetarchive/openlibrary, a Python project with 6,553 GitHub stars. SynthScan v2.0 examined 237,229 lines of code across 1529 source files, recording 1439 pattern matches distributed across 20 syntactic categories. The overall adjusted score of 8.4 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).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1439 distinct pattern matches across 20 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_docker_compose.py | 12 | def test_all_root_services_must_be_in_prod(self): | CODE |
| LOW | tests/test_docker_compose.py | 27 | def test_all_prod_services_need_profile(self): | CODE |
| LOW | tests/unit/js/search.test.js | 88 | function checkFacetMoreLessVisibility(totalFacet, minVisibleFacet, expectedVisibleFacet) { | CODE |
| LOW | tests/unit/js/SelectionManager.test.js | 3 | function createTestElementsForProcessClick() { | CODE |
| LOW | tests/integration/test_fastapi_auth.py | 79 | def test_logout_clears_session(session): | CODE |
| LOW | tests/integration/test_fastapi_auth.py | 90 | def test_relogin_after_logout(session): | CODE |
| LOW | tests/integration/test_fastapi_auth.py | 101 | def test_login_with_invalid_credentials(session): | CODE |
| LOW | docs/ai/i18n.md | 72 | export function searchModalStringsFromElement(el) { | CODE |
| LOW | openlibrary/book_providers.py | 59 | def to_acquisition_access_literal(self) -> AcquisitionAccessLiteral | None: | CODE |
| LOW | openlibrary/book_providers.py | 742 | def get_book_provider_by_name(name: str) -> AbstractBookProvider | None: | CODE |
| LOW | openlibrary/core/ia.py | 146 | def edition_from_item_metadata(itemid: str, metadata: dict) -> ItemEdition | None: | CODE |
| LOW | openlibrary/core/db.py | 66 | def update_work_ids_individually(cls, current_work_id, new_work_id, _test=False): | CODE |
| LOW | openlibrary/core/vendors.py | 706 | def clean_amazon_metadata_for_load(metadata: dict) -> dict: | CODE |
| LOW | openlibrary/core/vendors.py | 750 | def create_edition_from_amazon_metadata(id_: str, id_type: Literal["asin", "isbn"] = "isbn") -> str | None: | CODE |
| LOW | openlibrary/core/vendors.py | 770 | def cached_get_amazon_metadata(*args, **kwargs): | CODE |
| LOW | openlibrary/core/vendors.py | 807 | async def get_betterworldbooks_metadata( | CODE |
| LOW | openlibrary/core/vendors.py | 833 | async def _get_betterworldbooks_metadata( | CODE |
| LOW | openlibrary/core/yearly_reading_goals.py | 53 | def select_by_username_and_year(cls, username: str, year: int) -> list[dict]: | CODE |
| LOW | openlibrary/core/yearly_reading_goals.py | 65 | def total_yearly_reading_goals(cls, since: date | None = None) -> int: | CODE |
| LOW | openlibrary/core/yearly_reading_goals.py | 110 | def delete_by_username_and_year(cls, username: str, year: int) -> None: | CODE |
| LOW | openlibrary/core/models.py | 463 | def make_work_from_orphaned_edition(self): | CODE |
| LOW | openlibrary/core/models.py | 493 | def update_list_seed_metadata(a: ListSeedMetadata, b: ListSeedMetadata) -> None: | CODE |
| LOW | openlibrary/core/models.py | 552 | def get_patrons_who_also_read(self): | CODE |
| LOW | openlibrary/core/models.py | 590 | def get_num_users_by_bookshelf(self): | CODE |
| LOW | openlibrary/core/booknotes.py | 71 | def count_total_booksnotes_by_user(cls, username): | CODE |
| LOW | openlibrary/core/booknotes.py | 79 | def count_works_with_notes_by_user(cls, username): | CODE |
| LOW | openlibrary/core/booknotes.py | 131 | def get_notes_grouped_by_work(cls, username, limit=25, page=1): | STRING |
| LOW | openlibrary/core/observations.py | 563 | def _get_deleted_types_and_values(): | CODE |
| LOW | openlibrary/core/observations.py | 602 | def _get_all_types_and_values(): | CODE |
| LOW | openlibrary/core/observations.py | 790 | def count_unique_respondents_by_type(cls, work_id): | CODE |
| LOW | openlibrary/core/observations.py | 858 | def count_distinct_observations(cls, username): | CODE |
| LOW | openlibrary/core/observations.py | 914 | def get_observations_for_work(cls, work_id): | CODE |
| LOW | openlibrary/core/observations.py | 920 | def get_observations_grouped_by_work(cls, username, limit=25, page=1): | CODE |
| LOW | openlibrary/core/imports.py | 321 | def _get_count_by_date_status(ndays=10): | CODE |
| LOW | openlibrary/core/imports.py | 358 | def _get_books_imported_per_day(): | CODE |
| LOW | openlibrary/core/imports.py | 375 | def get_books_imported_per_day(cls, use_cache=False): | STRING |
| LOW | openlibrary/core/bookshelves.py | 178 | def count_total_books_logged_by_user(cls, username: str, bookshelf_ids: list[str] | None = None) -> int: | STRING |
| LOW | openlibrary/core/bookshelves.py | 186 | def count_user_books_on_shelf( | STRING |
| LOW | openlibrary/core/bookshelves.py | 204 | def count_total_books_logged_by_user_per_shelf(cls, username: str, bookshelf_ids: list[str] | None = None) -> dict[i | STRING |
| LOW | openlibrary/core/bookshelves.py | 252 | async def add_storage_items_for_redirects(cls, reading_log_keys, solr_docs: list[web.Storage]): | STRING |
| LOW | openlibrary/core/bookshelves.py | 311 | def add_storage_items_for_deletes(cls, reading_log_keys, solr_docs: list[web.Storage]): | STRING |
| LOW | openlibrary/core/bookshelves.py | 409 | async def get_filtered_reading_log_books( | CODE |
| LOW | openlibrary/core/bookshelves.py | 476 | async def get_sorted_reading_log_books( | CODE |
| LOW | openlibrary/core/bookshelves.py | 554 | def iterate_users_logged_books(cls, username: str) -> Iterable[dict]: | STRING |
| LOW | openlibrary/core/bookshelves.py | 576 | def get_recently_logged_books( | STRING |
| LOW | openlibrary/core/bookshelves.py | 594 | def get_users_read_status_of_work(cls, username: str, work_id: str) -> int | None: | STRING |
| LOW | openlibrary/core/bookshelves.py | 613 | def get_users_read_status_of_works(cls, username: str, work_ids: list[str]) -> list: | STRING |
| LOW | openlibrary/core/bookshelves.py | 681 | def get_num_users_by_bookshelf_by_work_id(cls, work_id: str) -> dict[int, int]: | CODE |
| LOW | openlibrary/core/edits.py | 321 | def cached_get_counts_by_mode(mode: ApiMode = "all", reviewer="", **kwargs): | CODE |
| LOW | openlibrary/core/experiments.py | 72 | def evaluate_experiments_for_request( | CODE |
| LOW | openlibrary/core/admin.py | 44 | def _convert_to_milli_timestamp(d): | CODE |
| LOW | openlibrary/core/admin.py | 65 | def _get_loan_counts_from_graphite(ndays: int) -> list[list[int]] | None: | CODE |
| LOW | openlibrary/core/admin.py | 102 | def _get_visitor_counts_from_graphite(self, ndays: int = 28) -> list[list[int]]: | CODE |
| LOW | openlibrary/core/ratings.py | 102 | def work_ratings_summary_from_counts(cls, rating_counts: list[int]) -> WorkRatingsSummary: | STRING |
| LOW | openlibrary/core/ratings.py | 144 | def get_users_rating_for_work(cls, username: str, work_id: str | int) -> int | None: | STRING |
| LOW | openlibrary/core/bookshelves_events.py | 70 | def get_user_yearly_read_counts(cls, username: str) -> list[tuple[int, int]]: | CODE |
| LOW | openlibrary/core/bookshelves_events.py | 91 | def select_by_book_user_and_type(cls, username, work_id, edition_id, event_type): | CODE |
| LOW | openlibrary/core/bookshelves_events.py | 111 | def select_by_user_type_and_year(cls, username, event_type, year): | STRING |
| LOW | openlibrary/core/bookshelves_events.py | 129 | def select_distinct_by_user_type_and_year(cls, username, event_type, year): | STRING |
| LOW | openlibrary/core/bookshelves_events.py | 221 | def delete_by_username_and_work(cls, username, work_id): | STRING |
| 807 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | openlibrary/plugins/admin/code.py | 170 | "cd %s && git pull" % root, | CODE |
| HIGH | …nlibrary/plugins/openlibrary/tests/test_bestbookapi.py | 15 | fetch(`http://localhost:8080/works/OL151880W/awards.json?${params.toString()}`, { | STRING |
| HIGH | openlibrary/plugins/upstream/jsdef.py | 78 | self.push("Hello "); self.push(websafe(name)); self.push("!\n"); | CODE |
| HIGH | openlibrary/plugins/upstream/jsdef.py | 129 | text = ["self.push(%s);" % self.jsemit(n, "") for n in node.nodes] | STRING |
| HIGH | openlibrary/plugins/upstream/jsdef.py | 228 | 'x && y' | CODE |
| HIGH⚡ | openlibrary/plugins/upstream/jsdef.py | 253 | 'self.push(websafe(x));\n' | CODE |
| HIGH⚡ | openlibrary/plugins/upstream/jsdef.py | 255 | 'self.push(x);\n' | CODE |
| HIGH⚡ | openlibrary/plugins/upstream/jsdef.py | 259 | 'var x = a && b;\n' | CODE |
| HIGH⚡ | openlibrary/plugins/upstream/jsdef.py | 261 | 'if (a || ! b) {\n self.push(websafe(a));\n}\n' | CODE |
| HIGH⚡ | openlibrary/plugins/upstream/jsdef.py | 263 | 'foreach(a && a.data || [], loop, function(loop, i) {\n self.push(websafe(i));\n});\n' | CODE |
| HIGH⚡ | openlibrary/plugins/upstream/jsdef.py | 263 | 'foreach(a && a.data || [], loop, function(loop, i) {\n self.push(websafe(i));\n});\n' | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 37 | edition_id integer default null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 44 | work_id INTEGER not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 46 | username text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 47 | observation_type INTEGER not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 48 | observation_value INTEGER not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 56 | submitter text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 57 | reviewer text default null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 58 | url text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 66 | username text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 67 | work_id integer not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 68 | edition_id integer not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 69 | event_type integer not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 70 | event_date text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 77 | username text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 78 | year integer not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 79 | target integer not null, | CODE |
| HIGH | openlibrary/tests/core/test_db.py | 17 | edition_id integer default null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_acquisitions.py | 13 | work_id integer not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_acquisitions.py | 14 | edition_id integer not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_acquisitions.py | 15 | provider_name text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_acquisitions.py | 16 | local_id text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_acquisitions.py | 17 | data json not null, | CODE |
| HIGH | openlibrary/tests/core/test_jinja.py | 120 | assert isinstance(env.undefined, type(jinja2.StrictUndefined)) | CODE |
| HIGH | openlibrary/utils/solr.py | 91 | # Solr returns {doc: null} if the record isn't there | COMMENT |
| HIGH | openlibrary/utils/schema.py | 382 | slug character varying(255) unique not null, | STRING |
| HIGH | openlibrary/utils/schema.py | 383 | title character varying(255) not null, | STRING |
| HIGH | openlibrary/utils/schema.py | 399 | slug varchar(255) unique not null, | STRING |
| HIGH | openlibrary/utils/schema.py | 400 | title varchar(255) not null, | STRING |
| HIGH⚡ | scripts/utils/scheduler.py | 36 | misfire_grace_time=undefined, | CODE |
| HIGH⚡ | scripts/utils/scheduler.py | 37 | coalesce=undefined, | CODE |
| HIGH⚡ | scripts/utils/scheduler.py | 38 | max_instances=undefined, | CODE |
| HIGH⚡ | scripts/utils/scheduler.py | 39 | next_run_time=undefined, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 242 | # ── Rule Exclusions ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/plugins/openlibrary/js/SearchFilterBar.js | 55 | // ── URL / sticky-filter helpers ──────────────────────────────────────────── | COMMENT |
| MEDIUM | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1014 | // ── Render ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1444 | // ── Event handlers ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1652 | // ── Data layer ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1776 | // ── Static SVGs ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ibrary/plugins/openlibrary/tests/test_patron_status.py | 18 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …ibrary/plugins/openlibrary/tests/test_patron_status.py | 20 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ibrary/plugins/openlibrary/tests/test_patron_status.py | 44 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | …ibrary/plugins/openlibrary/tests/test_patron_status.py | 46 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openlibrary/tests/core/test_processors.py | 133 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openlibrary/tests/core/test_processors.py | 135 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | openlibrary/tests/fastapi/test_auth.py | 75 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | openlibrary/tests/fastapi/test_auth.py | 77 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openlibrary/tests/fastapi/test_auth.py | 108 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openlibrary/tests/fastapi/test_auth.py | 110 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openlibrary/components/lit/OlOptionsPopover.js | 351 | // ── Event handlers ─────────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/components/lit/OlSelectPopover.js | 576 | // ── State helpers ──────────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/components/lit/OlSelectPopover.js | 582 | // ── Event handlers ─────────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/components/lit/OlPopover.js | 348 | // ── Show / Hide ───────────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/components/lit/OlPopover.js | 458 | // ── Trigger ARIA ──────────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/components/lit/OlPopover.js | 472 | // ── Focus trap ────────────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/components/lit/OlPopover.js | 500 | // ── Positioning ───────────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/components/lit/OlPopover.js | 597 | // ── Scroll / resize repositioning ─────────────────────────── | COMMENT |
| MEDIUM | openlibrary/components/lit/OlPopover.js | 626 | // ── Trigger / outside click / keyboard ────────────────────── | COMMENT |
| MEDIUM | openlibrary/components/lit/OlPopover.js | 669 | // ── Mobile touch / swipe-to-dismiss ───────────────────────── | COMMENT |
| MEDIUM | openlibrary/components/lit/OlPopover.js | 818 | // ── Body scroll lock ──────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/components/lit/OlPopover.js | 828 | // ── Listener management ───────────────────────────────────── | COMMENT |
| MEDIUM | scripts/oldump.sh | 220 | # ================= | COMMENT |
| MEDIUM | scripts/oldump.sh | 222 | # ================= | COMMENT |
| MEDIUM | conf/solr/conf/protwords.txt | 13 | #----------------------------------------------------------------------- | COMMENT |
| MEDIUM | conf/solr/conf/synonyms.txt | 13 | #----------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openlibrary/code.py | 64 | except Exception as e: | CODE |
| LOW | openlibrary/asgi_app.py | 158 | except Exception: | CODE |
| LOW | openlibrary/core/ia.py | 45 | except Exception: | CODE |
| LOW | openlibrary/core/vendors.py | 56 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | openlibrary/core/vendors.py | 245 | except Exception: | CODE |
| LOW | openlibrary/core/vendors.py | 437 | except Exception as e: | CODE |
| LOW | openlibrary/core/vendors.py | 495 | except Exception: | CODE |
| LOW | openlibrary/core/vendors.py | 828 | except Exception: | CODE |
| MEDIUM | openlibrary/core/vendors.py | 48 | def get_lexile(isbn): | CODE |
| LOW | openlibrary/core/imports.py | 183 | except Exception: # noqa: BLE001 | CODE |
| LOW | openlibrary/core/imports.py | 210 | except Exception: # noqa: BLE001 | CODE |
| LOW | openlibrary/core/bookshelves.py | 666 | except Exception: # we want to catch no entry exists | CODE |
| LOW | openlibrary/core/bookshelves.py | 677 | except Exception: | CODE |
| LOW | openlibrary/core/stats.py | 34 | except Exception as e: | CODE |
| LOW | openlibrary/core/helpers.py | 189 | except Exception: | CODE |
| LOW | openlibrary/core/helpers.py | 199 | except Exception: | CODE |
| LOW | openlibrary/core/lending.py | 306 | except Exception: # TODO: Narrow exception scope | CODE |
| LOW | openlibrary/core/lending.py | 467 | except Exception as e: # TODO: Narrow exception scope | CODE |
| LOW | openlibrary/core/lending.py | 603 | except Exception: # TODO: Narrow exception scope | CODE |
| LOW | openlibrary/core/lending.py | 636 | except Exception: # TODO: Narrow exception scope | CODE |
| LOW | openlibrary/core/lending.py | 641 | except Exception: # TODO: Narrow exception scope | CODE |
| LOW | openlibrary/core/lending.py | 775 | except Exception: # TODO: Narrow exception scope | CODE |
| LOW | openlibrary/core/lending.py | 1040 | except Exception: # TODO: Narrow exception scope | CODE |
| MEDIUM | openlibrary/core/lending.py | 981 | def find_loans(self, **kw): | CODE |
| LOW | openlibrary/plugins/ol_infobase.py | 86 | except Exception as e: | CODE |
| LOW | openlibrary/plugins/ol_infobase.py | 111 | except Exception: | CODE |
| LOW | openlibrary/plugins/ol_infobase.py | 311 | except Exception: | CODE |
| LOW | openlibrary/plugins/ol_infobase.py | 369 | except Exception: | CODE |
| LOW | openlibrary/plugins/ol_infobase.py | 486 | except Exception: | CODE |
| MEDIUM | openlibrary/plugins/ol_infobase.py | 79 | def setup_logging(): | CODE |
| MEDIUM | openlibrary/plugins/ol_infobase.py | 130 | def get_thing_id(key): | CODE |
| LOW | openlibrary/plugins/admin/services.py | 17 | except Exception as m: | CODE |
| MEDIUM | openlibrary/plugins/admin/services.py | 14 | def __init__(self, url): | CODE |
| MEDIUM | openlibrary/plugins/books/readlinks.py | 305 | print("Error in processing Read API", file=sys.stderr) | CODE |
| MEDIUM | openlibrary/plugins/books/dynlinks.py | 585 | print("Error in processing Books API", file=sys.stderr) | CODE |
| LOW | openlibrary/plugins/openlibrary/home.py | 44 | except Exception: | CODE |
| MEDIUM | openlibrary/plugins/openlibrary/home.py | 41 | def get_homepage(devmode): | CODE |
| LOW | openlibrary/plugins/openlibrary/code.py | 613 | except Exception as e: | CODE |
| LOW | openlibrary/plugins/openlibrary/code.py | 925 | except Exception as e: | CODE |
| LOW | openlibrary/plugins/openlibrary/stats.py | 48 | except Exception as k: | CODE |
| LOW | openlibrary/plugins/openlibrary/stats.py | 71 | except Exception as e: | CODE |
| LOW | openlibrary/plugins/importapi/code.py | 198 | except Exception as e: | CODE |
| LOW | openlibrary/plugins/upstream/models.py | 480 | except Exception: | CODE |
| LOW | openlibrary/plugins/upstream/models.py | 511 | except Exception: | CODE |
| MEDIUM | openlibrary/plugins/upstream/models.py | 477 | def get_covers_from_solr(self) -> list[Image]: | CODE |
| LOW | openlibrary/plugins/upstream/utils.py | 1369 | except Exception: | CODE |
| MEDIUM | openlibrary/plugins/upstream/utils.py | 501 | def get_version(key, revision): | CODE |
| LOW | openlibrary/plugins/upstream/account.py | 262 | except Exception: | CODE |
| LOW | openlibrary/plugins/upstream/account.py | 1434 | except Exception as e: | CODE |
| LOW | openlibrary/admin/stats.py | 92 | except Exception as k: | CODE |
| LOW | openlibrary/utils/retry.py | 25 | except Exception as e: | CODE |
| LOW | openlibrary/utils/retry.py | 41 | except Exception as e: | CODE |
| LOW⚡ | openlibrary/fastapi/account.py | 200 | except Exception: | CODE |
| LOW⚡ | openlibrary/fastapi/account.py | 216 | except Exception: | CODE |
| LOW | openlibrary/fastapi/account.py | 395 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | openlibrary/i18n/__init__.py | 70 | except Exception as e: | CODE |
| LOW | openlibrary/i18n/__init__.py | 146 | except Exception as e: | CODE |
| MEDIUM | openlibrary/i18n/__init__.py | 62 | def _compile_translation(po, mo): | CODE |
| LOW | scripts/delete_import_items.py | 70 | except Exception as e: | CODE |
| MEDIUM | scripts/delete_import_items.py | 71 | print(f"Error when deleting: {e}") | CODE |
| 19 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openlibrary/conftest.py | 12 | CODE | |
| LOW | openlibrary/conftest.py | 13 | CODE | |
| LOW | openlibrary/conftest.py | 16 | CODE | |
| LOW | openlibrary/code.py | 25 | CODE | |
| LOW | openlibrary/code.py | 26 | CODE | |
| LOW | openlibrary/code.py | 27 | CODE | |
| LOW | openlibrary/code.py | 28 | CODE | |
| LOW | openlibrary/code.py | 29 | CODE | |
| LOW | openlibrary/code.py | 30 | CODE | |
| LOW | openlibrary/code.py | 53 | CODE | |
| LOW | openlibrary/code.py | 71 | CODE | |
| LOW | openlibrary/asgi_app.py | 1 | CODE | |
| LOW | openlibrary/asgi_app.py | 53 | CODE | |
| LOW | openlibrary/core/acquisitions.py | 14 | CODE | |
| LOW | openlibrary/core/vendors.py | 1 | CODE | |
| LOW | openlibrary/core/features.py | 17 | CODE | |
| LOW | openlibrary/core/helpers.py | 24 | CODE | |
| LOW | openlibrary/core/helpers.py | 25 | CODE | |
| LOW | openlibrary/core/lending.py | 3 | CODE | |
| LOW | openlibrary/core/lists/model.py | 13 | CODE | |
| LOW | openlibrary/core/lists/model.py | 14 | CODE | |
| LOW | openlibrary/core/lists/model.py | 15 | CODE | |
| LOW | openlibrary/core/processors/__init__.py | 1 | CODE | |
| LOW | openlibrary/plugins/admin/code.py | 21 | CODE | |
| LOW | openlibrary/plugins/admin/code.py | 588 | CODE | |
| LOW | openlibrary/plugins/openlibrary/home.py | 8 | CODE | |
| LOW | openlibrary/plugins/openlibrary/code.py | 1196 | CODE | |
| LOW | openlibrary/plugins/openlibrary/utils.py | 1 | CODE | |
| LOW | openlibrary/plugins/worksearch/bulk_search.py | 1 | CODE | |
| LOW | openlibrary/plugins/importapi/tests/test_code.py | 4 | CODE | |
| LOW | openlibrary/plugins/upstream/addbook.py | 20 | CODE | |
| LOW | openlibrary/plugins/upstream/models.py | 11 | CODE | |
| LOW | openlibrary/plugins/upstream/models.py | 14 | CODE | |
| LOW | openlibrary/plugins/upstream/models.py | 22 | CODE | |
| LOW | openlibrary/plugins/upstream/code.py | 19 | CODE | |
| LOW | openlibrary/plugins/upstream/code.py | 26 | CODE | |
| LOW | openlibrary/plugins/upstream/code.py | 27 | CODE | |
| LOW | openlibrary/plugins/upstream/code.py | 27 | CODE | |
| LOW | openlibrary/plugins/upstream/jsdef.py | 60 | CODE | |
| LOW | openlibrary/plugins/upstream/mybooks.py | 11 | CODE | |
| LOW | openlibrary/plugins/upstream/borrow.py | 26 | CODE | |
| LOW | openlibrary/plugins/upstream/recentchanges.py | 13 | CODE | |
| LOW | openlibrary/plugins/upstream/data.py | 8 | CODE | |
| LOW | openlibrary/plugins/upstream/tests/test_utils.py | 9 | CODE | |
| LOW | openlibrary/tests/core/test_features.py | 1 | CODE | |
| LOW | openlibrary/tests/catalog/test_utils.py | 5 | CODE | |
| LOW | openlibrary/tests/fastapi/test_auth.py | 3 | CODE | |
| LOW | openlibrary/tests/fastapi/test_public_my_books.py | 7 | CODE | |
| LOW | openlibrary/tests/fastapi/test_account.py | 3 | CODE | |
| LOW | openlibrary/utils/request_context.py | 8 | CODE | |
| LOW | openlibrary/utils/isbn.py | 1 | CODE | |
| LOW | openlibrary/utils/ddc.py | 10 | CODE | |
| LOW | openlibrary/utils/lcc.py | 88 | CODE | |
| LOW | openlibrary/fastapi/auth.py | 8 | CODE | |
| LOW | openlibrary/fastapi/lists.py | 1 | CODE | |
| LOW | openlibrary/fastapi/importapi.py | 5 | CODE | |
| LOW | openlibrary/fastapi/yearly_reading_goals.py | 5 | CODE | |
| LOW | openlibrary/fastapi/models.py | 1 | CODE | |
| LOW | openlibrary/fastapi/partials.py | 1 | CODE | |
| LOW | openlibrary/fastapi/public_my_books.py | 5 | CODE | |
| 34 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openlibrary/api.py | 235 | CODE | |
| LOW | openlibrary/api.py | 255 | CODE | |
| LOW | openlibrary/book_providers.py | 756 | CODE | |
| LOW | openlibrary/book_providers.py | 44 | CODE | |
| LOW | openlibrary/book_providers.py | 126 | CODE | |
| LOW | openlibrary/core/ia.py | 288 | CODE | |
| LOW | openlibrary/core/ia.py | 315 | CODE | |
| LOW | openlibrary/core/observations.py | 563 | CODE | |
| LOW | openlibrary/core/features.py | 36 | CODE | |
| LOW | openlibrary/core/olmarkdown.py | 38 | CODE | |
| LOW | openlibrary/core/imports.py | 103 | CODE | |
| LOW | openlibrary/core/helpers.py | 341 | CODE | |
| LOW | openlibrary/core/lending.py | 534 | CODE | |
| LOW | openlibrary/core/lists/model.py | 428 | CODE | |
| LOW | openlibrary/core/lists/model.py | 511 | CODE | |
| LOW | openlibrary/core/lists/model.py | 567 | CODE | |
| LOW | openlibrary/plugins/admin/code.py | 309 | CODE | |
| LOW | openlibrary/plugins/openlibrary/lists.py | 79 | CODE | |
| LOW | openlibrary/plugins/openlibrary/lists.py | 345 | CODE | |
| LOW | openlibrary/plugins/openlibrary/lists.py | 976 | CODE | |
| LOW | openlibrary/plugins/openlibrary/code.py | 629 | CODE | |
| LOW | openlibrary/plugins/openlibrary/connection.py | 31 | CODE | |
| LOW | openlibrary/plugins/openlibrary/stats.py | 27 | CODE | |
| LOW | openlibrary/plugins/worksearch/code.py | 265 | CODE | |
| LOW | openlibrary/plugins/worksearch/code.py | 341 | CODE | |
| LOW | openlibrary/plugins/worksearch/subjects.py | 340 | CODE | |
| LOW | openlibrary/plugins/worksearch/schemes/works.py | 670 | CODE | |
| LOW | openlibrary/plugins/worksearch/schemes/works.py | 707 | CODE | |
| LOW | openlibrary/plugins/worksearch/schemes/works.py | 298 | CODE | |
| LOW | openlibrary/plugins/worksearch/schemes/works.py | 319 | CODE | |
| LOW | openlibrary/plugins/worksearch/schemes/works.py | 621 | CODE | |
| LOW | openlibrary/plugins/worksearch/schemes/works.py | 437 | CODE | |
| LOW | openlibrary/plugins/importapi/import_rdf.py | 74 | CODE | |
| LOW | openlibrary/plugins/importapi/code.py | 66 | CODE | |
| LOW | openlibrary/plugins/importapi/code.py | 393 | CODE | |
| LOW | openlibrary/plugins/upstream/addbook.py | 361 | CODE | |
| LOW | openlibrary/plugins/upstream/addbook.py | 552 | CODE | |
| LOW | openlibrary/plugins/upstream/addbook.py | 923 | CODE | |
| LOW | openlibrary/plugins/upstream/models.py | 477 | CODE | |
| LOW | openlibrary/plugins/upstream/code.py | 270 | CODE | |
| LOW | openlibrary/plugins/upstream/code.py | 307 | CODE | |
| LOW | openlibrary/plugins/upstream/edits.py | 147 | CODE | |
| LOW | openlibrary/plugins/upstream/edits.py | 203 | CODE | |
| LOW | openlibrary/plugins/upstream/edits.py | 247 | CODE | |
| LOW | openlibrary/plugins/upstream/borrow.py | 421 | CODE | |
| LOW | openlibrary/plugins/upstream/borrow.py | 109 | CODE | |
| LOW | openlibrary/catalog/marc/get_subjects.py | 61 | CODE | |
| LOW | openlibrary/catalog/marc/parse.py | 170 | CODE | |
| LOW | openlibrary/catalog/marc/parse.py | 367 | CODE | |
| LOW | openlibrary/catalog/marc/parse.py | 454 | CODE | |
| LOW | openlibrary/catalog/marc/parse.py | 571 | CODE | |
| LOW | openlibrary/catalog/marc/parse.py | 629 | CODE | |
| LOW | openlibrary/catalog/marc/tests/test_marc_binary.py | 45 | CODE | |
| LOW | openlibrary/catalog/add_book/__init__.py | 393 | CODE | |
| LOW | openlibrary/catalog/add_book/__init__.py | 553 | CODE | |
| LOW | openlibrary/catalog/add_book/__init__.py | 596 | CODE | |
| LOW | openlibrary/catalog/add_book/load_book.py | 348 | CODE | |
| LOW | openlibrary/tests/test_templates.py | 59 | CODE | |
| LOW | openlibrary/utils/solr.py | 131 | CODE | |
| LOW | openlibrary/utils/open_syllabus_project.py | 57 | CODE | |
| 29 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | compose.selinux.yaml | 1 | # This file is meant to be applied as overrides when running podman/docker | COMMENT |
| MEDIUM | compose.override.yaml | 1 | # This file is applied "on top" of compose.yaml when docker compose | COMMENT |
| MEDIUM | openlibrary/app.py | 35 | # Defining a class extending from _app.page auto-registers it inside infogami. | COMMENT |
| MEDIUM | openlibrary/core/models.py | 422 | # Create a list of ISBNs (or an ASIN) to match. | COMMENT |
| MEDIUM | openlibrary/core/bookshelves.py | 390 | # Create a mapping of work keys to ReadingLogItem from the reading log DB. | COMMENT |
| MEDIUM | openlibrary/core/batch_imports.py | 133 | # Create the batch | COMMENT |
| MEDIUM | openlibrary/core/lending.py | 311 | # Create a sync wrapper for backward compatibility | COMMENT |
| MEDIUM | openlibrary/core/lists/model.py | 206 | # Create the return dictionary | COMMENT |
| MEDIUM | openlibrary/plugins/openlibrary/lists.py | 363 | # Creating a new list | COMMENT |
| MEDIUM | openlibrary/plugins/openlibrary/events.py | 23 | # Create a thing object to pass to event listeners. | COMMENT |
| MEDIUM | openlibrary/plugins/worksearch/code.py | 251 | # Create a sync wrapper for backward compatibility | COMMENT |
| MEDIUM | openlibrary/plugins/upstream/addbook.py | 602 | # Create a new work if so desired | COMMENT |
| MEDIUM | openlibrary/plugins/upstream/merge_authors.py | 28 | # Create the actual redirect objects | COMMENT |
| MEDIUM⚡ | openlibrary/tests/core/test_lists_model.py | 52 | # Create a mock list with seeds | COMMENT |
| MEDIUM | openlibrary/tests/core/test_lists_model.py | 75 | # Create a mock list with seeds | COMMENT |
| MEDIUM | openlibrary/utils/open_syllabus_project.py | 74 | # Create an SQLite database and table | COMMENT |
| MEDIUM | openlibrary/solr/solr_types.py | 1 | # This file is auto-generated by types_generator.py | COMMENT |
| MEDIUM | openlibrary/solr/types_generator.py | 73 | python = f"""# This file is auto-generated by types_generator.py | CODE |
| MEDIUM | openlibrary/accounts/model.py | 134 | # Create the data portion | COMMENT |
| MEDIUM | openlibrary/fastapi/auth.py | 45 | # Define the session cookie as a FastAPI security scheme so it appears | COMMENT |
| MEDIUM | openlibrary/data/db.py | 89 | # Create a new database to avoid this transaction interfere with the application code | COMMENT |
| MEDIUM | scripts/oldump.sh | 3 | # Create a dump of all Open Library records, and generate sitemaps | COMMENT |
| MEDIUM | scripts/manage-imports.py | 79 | """This method is mostly for testing. It allows you to import one more | STRING |
| MEDIUM | scripts/update_stale_ocaid_references.py | 72 | # Create a session with configured retries | COMMENT |
| MEDIUM | scripts/bulk_load_ia_query.py | 167 | # Create a session with configured retries | COMMENT |
| MEDIUM | scripts/gh_scripts/issue_comment_bot.py | 245 | # Create the parent message | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | openlibrary/plugins/openlibrary/js/index.js | 341 | if (!window.ILE.selectionManager.selectedItems.work.includes(workOlid)) { | CODE |
| CRITICAL | openlibrary/components/LibraryExplorer.vue | 175 | book3d: this.settingsState.styles.book.selected.startsWith('3d'), | CODE |
| CRITICAL⚡ | scripts/solr_builder/README.md | 57 | ##### java.lang.NoSuchMethodError: 'boolean org.kohsuke.groovy.sandbox.SandboxTransformer.mightBePositionalArgumentConst | COMMENT |
| CRITICAL⚡ | scripts/solr_builder/README.md | 59 | java.lang.NoSuchMethodError: 'boolean org.kohsuke.groovy.sandbox.SandboxTransformer.mightBePositionalArgumentConstructor | CODE |
| CRITICAL⚡ | scripts/solr_builder/README.md | 60 | at com.cloudbees.groovy.cps.SandboxCpsTransformer.visitAssignmentOrCast(SandboxCpsTransformer.java:93) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .pre-commit-config.yaml | 141 | files: \.sql$ | COMMENT |
| LOW | pyproject.toml | 121 | # "EM", # flake8-errmsg | COMMENT |
| LOW | pyproject.toml | 241 | dialect = "postgres" | COMMENT |
| LOW | pyproject.toml | 261 | # deeply embedded in the schema and cannot be renamed | COMMENT |
| LOW | compose.near-prod.yaml | 1 | ## | COMMENT |
| LOW | compose.yaml | 41 | # - autoCommit.maxTime: Hard commit less frequently to avoid performance impact, but avoid | COMMENT |
| LOW | docker/ol-install-missing-deps.sh | 1 | #!/bin/bash | COMMENT |
| LOW | openlibrary/core/vendors.py | 221 | and getattr( | COMMENT |
| LOW | openlibrary/core/jinja.py | 81 | from infogami.utils.view import render_template | COMMENT |
| LOW | openlibrary/core/jinja.py | 101 | # | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 41 | // to the author page (and so deriveAuthors() can surface author rows for the | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 61 | // `ebook_access` values that earn the "Readable" badge: `public` (free to read | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 881 | // Curated set shown instantly; replaced by the real catalogue list | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1301 | // rather than the work page. The edition is editions.docs[0] from the | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1321 | COMMENT | |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1341 | // disabled via SOLR_EDITIONS, or an edition-less work — so those still | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1441 | return sprintf(template, n.toLocaleString()); | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1801 | COMMENT | |
| LOW | openlibrary/plugins/worksearch/code.py | 421 | # once. Keep the field name first (language:("a" OR "b")) so | COMMENT |
| LOW | openlibrary/plugins/upstream/borrow.py | 41 | in_library_subject = "In library" | COMMENT |
| LOW | openlibrary/components/lit/OlCarousel.js | 601 | // | COMMENT |
| LOW | openlibrary/components/lit/OlCarousel.js | 621 | e.stopPropagation(); | COMMENT |
| LOW | openlibrary/accounts/model.py | 1061 | # 2. There is an OL account, and it was linked to this IA account at some point, | COMMENT |
| LOW | scripts/oldump.sh | 1 | #! /bin/bash | COMMENT |
| LOW | scripts/oldump.sh | 21 | # The cron job takes 18+ hours to process 192,000,000+ records in 29GB of data!! | COMMENT |
| LOW | scripts/install_nginx.sh | 21 | COMMENT | |
| LOW | scripts/obfi.sh | 281 | COMMENT | |
| LOW | scripts/make-integration-branch-sample.txt | 1 | # This file stores the branches to be merged into `dev-merged` for easy dev.openlibrary.org deploy | COMMENT |
| LOW | scripts/fully_reset_environment.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/make-integration-branch.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/providers/import_wikisource.py | 341 | if self.page_count: | COMMENT |
| LOW | scripts/dev-instance/create-dev-db-pgdump.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/dev-instance/load-patron-data.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/deployment/patch_test_new_memcache_server.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/obfi/mktable.py | 1 | #!/usr/bin/env python3 | COMMENT |
| LOW | scripts/monitoring/utils.sh | 1 | # Note: The code in here is tested by scripts/monitoring/tests/test_utils_sh.py | COMMENT |
| LOW | scripts/monitoring/utils.sh | 61 | HTTP_STATUS_COUNTS=$(obfi_in_docker obfi_previous_minute | obfi_top_http_statuses) | COMMENT |
| LOW | .github/labeler.yml | 1 | # Configurations for the `labeler` GitHub action. | COMMENT |
| LOW | .github/workflows/issue_refinement.lock.yml | 1 | # | COMMENT |
| LOW | conf/openlibrary.yml | 181 | COMMENT | |
| LOW | conf/solr/conf/protwords.txt | 1 | # The ASF licenses this file to You under the Apache License, Version 2.0 | COMMENT |
| LOW | conf/solr/conf/wordtypes.txt | 1 | # Licensed to the Apache Software Foundation (ASF) under one or more | COMMENT |
| LOW | conf/solr/conf/synonyms.txt | 1 | # The ASF licenses this file to You under the Apache License, Version 2.0 | COMMENT |
| LOW | conf/solr/conf/stopwords.txt | 1 | # Licensed to the Apache Software Foundation (ASF) under one or more | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 1 | # | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 21 | #名詞-固有名詞 | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 41 | # | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 61 | # e.g. それ, ここ, あいつ, あなた, あちこち, いくつ, どこか, なに, みなさん, みんな, わたくし, われわれ | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 81 | #名詞-形容動詞語幹 | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 101 | # 上, うち, 内, おり, 折り, かぎり, 限り, きり, っきり, 結果, ころ, 頃, さい, 際, 最中, さなか, | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 121 | # treated as 助動詞 ("auxiliary verb") in school grammars, and attach to the base | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 141 | # | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 161 | #名詞-接尾-形容動詞語幹 | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 181 | # | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 201 | # prefix-nominal: Prefixes that attach to nouns (including adjective stem forms) | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 221 | #動詞 | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 241 | # | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 261 | # e.g. この, その, あの, どの, いわゆる, なんらかの, 何らかの, いろんな, こういう, そういう, ああいう, | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 281 | # | COMMENT |
| LOW | conf/solr/conf/lang/stoptags_ja.txt | 301 | # e.g. から, からには, が, けれど, けれども, けど, し, つつ, て, で, と, ところが, どころか, とも, ども, | COMMENT |
| 8 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openlibrary/asgi_app.py | 30 | def _setup_env() -> None: | CODE |
| LOW | openlibrary/core/yearly_reading_goals.py | 82 | def update_target(cls, username: str, year: int, new_target: int) -> None: | CODE |
| LOW | openlibrary/core/models.py | 493 | def update_list_seed_metadata(a: ListSeedMetadata, b: ListSeedMetadata) -> None: | CODE |
| LOW | openlibrary/core/cache.py | 24 | __all__ = [ | CODE |
| LOW | openlibrary/core/cache.py | 126 | def update_async(self, *args: P.args, **kw: P.kwargs) -> None: | CODE |
| LOW | openlibrary/core/cache.py | 132 | def _update_async_worker(self, *args: P.args, **kw: P.kwargs) -> None: | CODE |
| LOW | openlibrary/core/follows.py | 9 | logger = logging.getLogger(__name__) | CODE |
| LOW | openlibrary/core/waitinglist.py | 228 | def update_ebook(ebook_key: str, **data) -> None: | CODE |
| LOW | openlibrary/core/waitinglist.py | 264 | def update_all_ebooks() -> None: | CODE |
| LOW | openlibrary/core/bookshelves.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | openlibrary/core/formats.py | 10 | __all__ = ["dump_yaml", "load_yaml"] | CODE |
| LOW | openlibrary/core/helpers.py | 32 | __all__ = [ | CODE |
| LOW | openlibrary/core/lending.py | 42 | logger = logging.getLogger(__name__) | CODE |
| LOW | openlibrary/core/processors/invalidation.py | 9 | __all__ = ["InvalidationProcessor"] | CODE |
| LOW | openlibrary/plugins/openlibrary/api.py | 53 | logger = logging.getLogger(__name__) | CODE |
| LOW | openlibrary/plugins/worksearch/subjects.py | 19 | __all__ = ["SubjectEngine", "get_subject"] | CODE |
| LOW⚡ | openlibrary/plugins/upstream/spamcheck.py | 19 | def set_spam_words(words: Iterable[str]) -> None: | CODE |
| LOW⚡ | openlibrary/plugins/upstream/spamcheck.py | 24 | def set_spam_domains(domains: Iterable[str]) -> None: | CODE |
| LOW⚡ | openlibrary/plugins/upstream/spamcheck.py | 29 | def _update_spam_doc(**kwargs) -> None: | CODE |
| LOW | openlibrary/plugins/upstream/edits.py | 56 | def update_request() -> None: | CODE |
| LOW | openlibrary/plugins/upstream/utils.py | 614 | def set_share_links(url: str = "#", title: str = "", view_context: InfogamiContext | None = None) -> None: | CODE |
| LOW | openlibrary/catalog/marc/parse.py | 664 | def update_edition(rec: MarcBase, edition: dict[str, Any], func: Callable, field: str) -> None: | CODE |
| LOW | openlibrary/admin/numbers.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | openlibrary/admin/stats.py | 16 | logger = logging.getLogger(__name__) | CODE |
| LOW | openlibrary/utils/request_context.py | 176 | def set_context_from_legacy_web_py() -> None: | CODE |
| LOW | openlibrary/utils/request_context.py | 206 | def set_context_from_fastapi(request: Request) -> None: | CODE |
| LOW | openlibrary/utils/processors.py | 8 | __all__ = ["RateLimitProcessor"] | CODE |
| LOW | openlibrary/utils/schema.py | 8 | __all__ = [ | CODE |
| LOW | openlibrary/accounts/__init__.py | 42 | def _set_conn_auth_token(self, token: str | None) -> None: | CODE |
| LOW | openlibrary/accounts/model.py | 308 | def update_password(self, new_password) -> None: | CODE |
| LOW | openlibrary/accounts/model.py | 311 | def update_email(self, email) -> None: | CODE |
| LOW | openlibrary/accounts/model.py | 431 | def set_bot_flag(self, flag) -> None: | CODE |
| LOW | openlibrary/fastapi/auth.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | openlibrary/data/db.py | 33 | __all__ = [ | CODE |
| LOW | openlibrary/coverstore/coverlib.py | 20 | __all__ = ["read_file", "read_image", "save_image"] | CODE |
| LOW | openlibrary/coverstore/oldb.py | 11 | __all__ = ["get", "query"] | CODE |
| LOW | scripts/providers/isbndb.py | 178 | def update_state(logfile: str, fname: str, line_num: int = 0) -> None: | CODE |
| LOW | scripts/obfi/mktable.py | 45 | def set_db(self) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openlibrary/plugins/openlibrary/js/autocomplete.js | 161 | * <input class="ac-input__visible" type="text" name="fake_name--0" value="Author 1" /> | COMMENT |
| LOW | openlibrary/plugins/upstream/account.py | 141 | "email": "openlibrary@example.org", | CODE |
| LOW | openlibrary/plugins/upstream/account.py | 158 | "email": "openlibrary@example.org", | CODE |
| LOW | openlibrary/plugins/upstream/account.py | 182 | "email": "openlibrary@example.org", | CODE |
| LOW | openlibrary/plugins/upstream/account.py | 204 | "username": "openlibrary@example.org", | CODE |
| LOW | openlibrary/tests/core/test_lists_engine.py | 18 | "subject_people": ["Jane Doe", {"name": "ignored"}], | CODE |
| LOW⚡ | openlibrary/tests/fastapi/conftest.py | 40 | fake_user = AuthenticatedUser( | CODE |
| LOW⚡ | openlibrary/tests/fastapi/conftest.py | 45 | fastapi_client.app.dependency_overrides[require_authenticated_user] = lambda: fake_user | CODE |
| LOW⚡ | openlibrary/tests/fastapi/conftest.py | 46 | yield fake_user | CODE |
| LOW⚡ | openlibrary/tests/fastapi/conftest.py | 59 | fake_user = AuthenticatedUser( | CODE |
| LOW⚡ | openlibrary/tests/fastapi/conftest.py | 64 | fastapi_client.app.dependency_overrides[get_authenticated_user] = lambda: fake_user | CODE |
| LOW⚡ | openlibrary/tests/fastapi/conftest.py | 65 | yield fake_user | CODE |
| LOW | openlibrary/components/lit/custom-elements.json | 751 | "name": "placeholder", | CODE |
| LOW | openlibrary/components/lit/custom-elements.json | 756 | "attribute": "placeholder" | CODE |
| LOW | openlibrary/components/lit/custom-elements.json | 803 | "name": "placeholder", | CODE |
| LOW | openlibrary/components/lit/custom-elements.json | 807 | "fieldName": "placeholder" | CODE |
| LOW | openlibrary/components/lit/custom-elements.json | 3868 | "name": "placeholder", | CODE |
| LOW | openlibrary/components/lit/custom-elements.json | 3875 | "attribute": "placeholder" | CODE |
| LOW | openlibrary/components/lit/custom-elements.json | 4056 | "name": "placeholder", | CODE |
| LOW | openlibrary/components/lit/custom-elements.json | 4062 | "fieldName": "placeholder" | CODE |
| LOW | openlibrary/templates/design.html | 160 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | openlibrary/templates/design.html | 160 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | openlibrary/templates/design.html | 173 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | openlibrary/templates/design.html | 173 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | openlibrary/templates/design.html | 189 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | openlibrary/templates/design.html | 189 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | openlibrary/templates/design.html | 204 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | openlibrary/templates/design.html | 204 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | openlibrary/templates/design.html | 219 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | openlibrary/templates/design.html | 219 | <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et | CODE |
| LOW | scripts/dev-instance/patron_data.sql | 122 | INSERT INTO public.data (thing_id, revision, data) VALUES ((SELECT id FROM public.thing WHERE key = '/people/openlibrary | CODE |
| LOW | scripts/dev-instance/patron_data.sql | 122 | INSERT INTO public.data (thing_id, revision, data) VALUES ((SELECT id FROM public.thing WHERE key = '/people/openlibrary | CODE |
| LOW⚡ | scripts/tests/test_detect_missing_i18n.py | 27 | assert check_html("<p>Lorem ipsum dolor sit amet</p>") == [] | CODE |
| LOW⚡ | scripts/tests/test_detect_missing_i18n.py | 27 | assert check_html("<p>Lorem ipsum dolor sit amet</p>") == [] | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | compose.production.yaml | 300 | # Set it to something so that it never starts by default ; we have to | COMMENT |
| LOW | openlibrary/conftest.py | 62 | # Set infobase_parameters to use local connection instead of OLConnection | STRING |
| LOW | openlibrary/plugins/openlibrary/lists.py | 478 | # Check if current user is admin or list owner | COMMENT |
| LOW | openlibrary/plugins/openlibrary/deprecated_handler.py | 17 | # Check if we're in dev environment | COMMENT |
| LOW | openlibrary/catalog/utils/__init__.py | 515 | # Check if it's a 2-letter code, eg en | COMMENT |
| LOW | openlibrary/catalog/utils/__init__.py | 517 | # Check if it's a full name, eg English, Anglais, etc | COMMENT |
| LOW | openlibrary/tests/fastapi/test_account.py | 107 | # Check if the set-cookie header deletes "pending_action" | COMMENT |
| LOW | openlibrary/solr/updater/edition.py | 179 | # Check if plain string first | COMMENT |
| LOW | openlibrary/accounts/model.py | 1073 | # Check if it is linked already, i.e. has an itemname set. We already | COMMENT |
| LOW | openlibrary/coverstore/archive.py | 455 | # Set compression to ZIP_STORED to avoid compression | COMMENT |
| LOW | scripts/obfi.sh | 252 | # Check if in the future | COMMENT |
| LOW | scripts/obfi.sh | 264 | # Check if the TS is after the start of the log file, which is all that's needed | COMMENT |
| LOW | scripts/obfi.sh | 275 | # Check if in the range of the current log file | COMMENT |
| LOW | scripts/obfi.sh | 592 | # Check if already running using ps | COMMENT |
| LOW | scripts/obfi.sh | 612 | # Check if already running using ps | COMMENT |
| LOW | scripts/build_pwa.sh | 4 | # Check if git is installed | COMMENT |
| LOW | scripts/providers/import_wikisource.py | 213 | # Check if book description contains a page range. These are generally articles | COMMENT |
| LOW | scripts/solr_builder/utils.sh | 24 | # Check if '.' in host | COMMENT |
| LOW | scripts/solr_builder/dump-solr.sh | 61 | # Check if enough disk space | COMMENT |
| LOW | scripts/deployment/patchdeploy.sh | 5 | # Check if PR number is provided | COMMENT |
| LOW | scripts/deployment/deploy.sh | 48 | # Check if jq is installed | COMMENT |
| LOW | scripts/deployment/deploy.sh | 76 | # Check if any critical cron jobs are running: | COMMENT |
| LOW | scripts/deployment/deploy.sh | 312 | # Check if Mac | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openlibrary/asgi_app.py | 115 | CODE | |
| LOW | openlibrary/asgi_app.py | 202 | CODE | |
| LOW | openlibrary/plugins/books/readlinks.py | 245 | CODE | |
| LOW | openlibrary/plugins/worksearch/code.py | 341 | CODE | |
| LOW | openlibrary/plugins/worksearch/code.py | 487 | CODE | |
| LOW | openlibrary/plugins/worksearch/code.py | 1201 | CODE | |
| LOW | openlibrary/plugins/worksearch/code.py | 1051 | CODE | |
| LOW | openlibrary/plugins/upstream/yearly_reading_goals.py | 29 | CODE | |
| LOW | openlibrary/plugins/upstream/checkins.py | 59 | CODE | |
| LOW | openlibrary/tests/fastapi/test_account.py | 14 | CODE | |
| LOW | openlibrary/utils/solr.py | 131 | CODE | |
| LOW | openlibrary/solr/update.py | 161 | CODE | |
| LOW | openlibrary/fastapi/internal/api.py | 477 | CODE | |
| LOW | scripts/copydocs.py | 317 | CODE | |
| LOW | scripts/utils/scheduler.py | 28 | CODE | |
| LOW | scripts/solr_builder/solr_builder/solr_builder.py | 37 | CODE | |
| LOW | scripts/solr_builder/solr_builder/solr_builder.py | 385 | CODE | |
| LOW | scripts/solr_builder/solr_builder/solr_builder.py | 463 | CODE | |
| LOW | scripts/solr_updater/solr_updater.py | 249 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit/js/my-books.test.js | 126 | // Step 1: Check in — stores the event id from the response | COMMENT |
| LOW⚡ | tests/unit/js/my-books.test.js | 130 | // Step 2: Dispatch delete event — triggers DELETE /check-ins/<id> | COMMENT |
| LOW⚡ | tests/unit/js/my-books.test.js | 135 | // Step 3: Verify the DELETE was sent to the correct URL | COMMENT |
| LOW | scripts/fully_reset_environment.sh | 12 | # WARNING: This is destructive. All local volumes and databases will be wiped. | COMMENT |
| LOW | .github/workflows/issue_enrichment.md | 32 | ## Step 1: Fetch issue data | COMMENT |
| LOW | .github/workflows/issue_enrichment.md | 44 | ## Step 2: Skip checks | COMMENT |
| LOW | .github/workflows/issue_enrichment.md | 51 | ## Step 3: Read the entire thread | COMMENT |
| LOW | .github/workflows/issue_enrichment.md | 69 | ## Step 4: Assess the issue template | COMMENT |
| LOW | .github/workflows/issue_enrichment.md | 83 | ## Step 5: Research the codebase | COMMENT |
| LOW | .github/workflows/issue_enrichment.md | 161 | ## Step 6: Assess and apply labels | COMMENT |
| LOW | .github/workflows/issue_enrichment.md | 209 | ## Step 7: Write and post the comment | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/unit/js/my-books.test.js | 126 | // Step 1: Check in — stores the event id from the response | COMMENT |
| LOW⚡ | tests/unit/js/my-books.test.js | 130 | // Step 2: Dispatch delete event — triggers DELETE /check-ins/<id> | COMMENT |
| LOW⚡ | tests/unit/js/my-books.test.js | 135 | // Step 3: Verify the DELETE was sent to the correct URL | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | openlibrary/core/imports.py | 387 | # so this stays robust even if a future caller forwards user input as the | STRING |
| MEDIUM | openlibrary/components/HelloWorld.vue | 55 | // Essentially getters | COMMENT |
| LOW | scripts/affiliate_server.py | 621 | # TODO: Any point in having option not to stage and just return metadata? | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | openlibrary/core/auth.py | 32 | Verify an HMAC digest against a message with timestamp validation. This method validates that the prov | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | openlibrary/plugins/README.md | 54 | The following example from [plugins/openlibrary/api.py](https://github.com/internetarchive/openlibrary/blob/master/openl | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openlibrary/tests/core/test_vendors.py | 88 | # TODO: implement and test edition number | COMMENT |
| LOW | openlibrary/tests/core/test_vendors.py | 139 | # TODO: implement and test edition number | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/make-integration-branch.sh | 6 | # Usage: | COMMENT |