One webpage for every book ever published!
This report summarizes scanner evidence for internetarchive/openlibrary, a Python project with 6,743 GitHub stars. SynthScan examined 292,250 lines of code across 1720 source files, recording 2905 pattern matches distributed across 21 syntactic categories. The legacy adjusted pattern signal is 13.8 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 2355 finding(s).
Are imports declared and package/API names verified? 221 finding(s).
Are wrappers, guards, and repeated structures necessary? 2417 finding(s).
Which changes need focused human review? 2905 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2905 distinct pattern matches across 21 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/mockservices/main.py | 337 | def _deterministic_availability(item_id: str) -> dict[str, Any]: | CODE |
| LOW | docker/mockservices/main.py | 518 | async def _loan_changes_ongoing_loop() -> None: | CODE |
| LOW⚡ | docker/mockservices/tests/test_matomo_inprocess.py | 121 | def test_every_cohort_label_survives_the_round_trip(self, client): | CODE |
| LOW⚡ | docker/mockservices/tests/test_matomo_inprocess.py | 126 | def test_action_details_carry_events_and_page_views(self, client): | CODE |
| LOW⚡ | docker/mockservices/tests/test_matomo_inprocess.py | 131 | def test_a_caller_cannot_strip_the_token(self, client, expected_visits): | CODE |
| LOW⚡ | docker/mockservices/tests/test_matomo_inprocess.py | 136 | def test_the_mock_rejects_an_unauthenticated_request(self, matomo_url): | CODE |
| LOW⚡ | docker/mockservices/tests/test_matomo_inprocess.py | 143 | def test_a_short_page_size_still_returns_the_whole_feed(self, client, expected_visits): | CODE |
| LOW⚡ | docker/mockservices/tests/test_matomo_inprocess.py | 150 | def test_no_visit_is_returned_twice_across_pages(self, client, expected_visits): | CODE |
| LOW⚡ | docker/mockservices/tests/test_matomo_inprocess.py | 155 | def test_a_page_size_over_the_feed_size_returns_everything(self, client, expected_visits): | CODE |
| LOW⚡ | docker/mockservices/tests/test_matomo_inprocess.py | 159 | def test_a_clean_fetch_is_not_flagged_truncated(self, client): | CODE |
| LOW | docker/mockservices/tests/test_matomo_inprocess.py | 173 | def test_a_window_after_the_whole_feed_returns_nothing(self, client): | CODE |
| LOW | docker/mockservices/tests/test_matomo_inprocess.py | 178 | def test_a_narrower_window_returns_fewer_visits(self, client, expected_visits): | CODE |
| LOW⚡ | docker/mockservices/tests/test_e2e.py | 169 | def test_unauthorized_missing_header(self): | CODE |
| LOW⚡ | docker/mockservices/tests/test_e2e.py | 176 | def test_loan_query_empty_by_default(self): | CODE |
| LOW⚡ | docker/mockservices/tests/test_e2e.py | 181 | def test_borrow_and_query_and_return_lifecycle(self): | CODE |
| LOW⚡ | docker/mockservices/tests/test_e2e.py | 258 | def test_availability_post_json(self): | CODE |
| LOW⚡ | docker/mockservices/tests/test_e2e.py | 266 | def test_availability_deterministic_results(self): | CODE |
| LOW⚡ | docker/mockservices/tests/test_e2e.py | 271 | def test_every_variant_is_reachable(self): | CODE |
| LOW⚡ | docker/mockservices/tests/test_e2e.py | 349 | def test_catchup_seeds_events_in_increasing_uid_order(self): | CODE |
| LOW⚡ | docker/mockservices/tests/test_e2e.py | 357 | def test_pagination_respects_after_uid(self): | CODE |
| LOW⚡ | docker/mockservices/tests/test_e2e.py | 366 | def test_row_shape_matches_get_loan_changes_contract(self): | CODE |
| LOW⚡ | docker/mockservices/tests/test_e2e.py | 391 | def test_rejects_unimplemented_methods(self): | CODE |
| LOW | docker/mockservices/tests/test_e2e.py | 72 | def test_authenticate_succeeds_with_password(self): | CODE |
| LOW | docker/mockservices/tests/test_e2e.py | 86 | def test_authenticate_fails_without_password(self): | CODE |
| LOW | docker/mockservices/tests/test_e2e.py | 96 | def test_authenticate_fails_with_sentinel_bad_password(self): | CODE |
| LOW | docker/mockservices/tests/test_e2e.py | 116 | def test_redeem_otp_correct_code(self): | CODE |
| LOW | docker/mockservices/tests/test_e2e.py | 127 | def test_redeem_otp_wrong_code(self): | CODE |
| LOW | docker/mockservices/tests/test_e2e.py | 230 | def test_browse_is_an_hour_and_borrow_is_two_weeks(self): | CODE |
| LOW | docker/mockservices/tests/test_e2e.py | 291 | def test_browse_and_borrow_ctas_are_both_reachable(self): | CODE |
| LOW | docker/mockservices/tests/test_e2e.py | 315 | def test_groundtruth_returns_lending_status(self): | CODE |
| LOW | docker/mockservices/tests/test_e2e.py | 323 | def test_groundtruth_agrees_with_availability_endpoint(self): | CODE |
| LOW | tests/test_docker_compose.py | 15 | def test_all_root_services_must_be_in_prod(self): | CODE |
| LOW | tests/test_docker_compose.py | 30 | def test_all_prod_services_need_profile(self): | CODE |
| LOW | tests/test_docker_compose.py | 41 | def test_web_services_set_deployment_name(self): | CODE |
| LOW | tests/test_docker_compose.py | 51 | def test_node_exporter_matches_across_environments(self): | CODE |
| LOW | tests/test_docker_compose.py | 68 | def test_provision_node_exporter_matches_production(self): | CODE |
| LOW⚡ | tests/test_docker_compose.py | 148 | def test_production_serves_baked_translations(self): | CODE |
| LOW⚡ | tests/test_docker_compose.py | 156 | def test_checkout_mounted_files_serve_committed_translations(self, compose_file): | CODE |
| LOW⚡ | tests/test_docker_compose.py | 164 | def test_near_prod_serves_committed_translations(self): | CODE |
| LOW | tests/unit/js/search.test.js | 116 | function checkFacetMoreLessVisibility(totalFacet, minVisibleFacet, expectedVisibleFacet) { | CODE |
| LOW | tests/unit/js/setup.js | 10 | process.on('unhandledRejection', function olRethrowUnhandledRejection(error) { | CODE |
| LOW | tests/unit/js/SelectionManager.test.js | 4 | function createTestElementsForProcessClick() { | CODE |
| LOW | tests/integration/test_coverstore_prod.py | 187 | def test_thumbnail_is_smaller_than_medium(self, http): | CODE |
| LOW | tests/integration/test_coverstore_prod.py | 193 | def test_large_and_original_redirect_to_the_cluster(self, http, suffix): | CODE |
| LOW | tests/integration/test_coverstore_prod.py | 210 | def test_covers_in_other_id_ranges(self, http, cover_id): | CODE |
| LOW | tests/integration/test_coverstore_prod.py | 217 | def test_an_archived_cover_redirect_stays_cacheable(self, http): | CODE |
| LOW⚡ | tests/integration/test_coverstore_prod.py | 241 | def test_keys_are_case_insensitive(self, http, key): | CODE |
| LOW⚡ | tests/integration/test_coverstore_prod.py | 247 | def test_hyphenated_isbn_without_a_size(self, http): | CODE |
| LOW⚡ | tests/integration/test_coverstore_prod.py | 254 | def test_hyphenated_isbn_with_a_size(self, http): | CODE |
| LOW⚡ | tests/integration/test_coverstore_prod.py | 259 | def test_unknown_size_suffix_is_part_of_the_value(self, http): | CODE |
| LOW⚡ | tests/integration/test_coverstore_prod.py | 270 | def test_missing_cover_serves_the_placeholder(self, http): | CODE |
| LOW⚡ | tests/integration/test_coverstore_prod.py | 279 | def test_default_url_redirects(self, http): | CODE |
| LOW⚡ | tests/integration/test_coverstore_prod.py | 286 | def test_by_id_sets_validators(self, http): | CODE |
| LOW | tests/integration/test_coverstore_prod.py | 303 | def test_head_honours_conditional_requests(self, http): | CODE |
| LOW | tests/integration/test_coverstore_prod.py | 308 | def test_stale_validators_still_serve_the_image(self, http): | CODE |
| LOW | tests/integration/test_coverstore_prod.py | 323 | def test_details_for_a_missing_cover(self, http): | CODE |
| LOW | tests/integration/test_coverstore_prod.py | 351 | def test_head_matches_get_status(self, http, path): | CODE |
| LOW | tests/integration/test_coverstore_prod.py | 367 | def test_acao_without_an_origin(self, http, path): | CODE |
| LOW | tests/integration/test_coverstore_prod.py | 402 | def test_preflight_that_should_fail(self, http, case, extra): | CODE |
| LOW | tests/integration/test_coverstore_prod.py | 414 | def test_options_on_an_unrouted_path(self, http): | CODE |
| 2009 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | openlibrary/plugins/admin/code.py | 170 | "cd %s && git pull" % root, | CODE |
| 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⚡ | …y/catalog/add_book/tests/test_add_book_acquisitions.py | 30 | work_id integer not null, | CODE |
| HIGH⚡ | …y/catalog/add_book/tests/test_add_book_acquisitions.py | 31 | edition_id integer not null, | CODE |
| HIGH⚡ | …y/catalog/add_book/tests/test_add_book_acquisitions.py | 32 | provider_name text not null, | CODE |
| HIGH⚡ | …y/catalog/add_book/tests/test_add_book_acquisitions.py | 33 | local_id text not null, | CODE |
| HIGH⚡ | …y/catalog/add_book/tests/test_add_book_acquisitions.py | 34 | data json not null, | CODE |
| HIGH⚡ | …y/catalog/add_book/tests/test_add_book_acquisitions.py | 44 | provider_name text not null, | CODE |
| HIGH⚡ | …y/catalog/add_book/tests/test_add_book_acquisitions.py | 46 | url text not null, | CODE |
| HIGH | openlibrary/tests/test_book_providers.py | 33 | id integer primary key, work_id integer not null, edition_id integer not null, | CODE |
| HIGH | openlibrary/tests/test_book_providers.py | 34 | provider_name text not null, local_id text not null, data json not null, | CODE |
| HIGH | openlibrary/tests/core/test_db.py | 16 | edition_id integer default null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 36 | edition_id integer default null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 43 | work_id INTEGER not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 45 | username text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 46 | observation_type INTEGER not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 47 | observation_value INTEGER not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 55 | submitter text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 56 | reviewer text default null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 57 | url text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 65 | username text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 66 | work_id integer not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 67 | edition_id integer not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 68 | event_type integer not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_db.py | 69 | event_date text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_acquisitions_weave.py | 877 | # value is a string or null, never whatever was in the blob. | COMMENT |
| HIGH | openlibrary/tests/core/test_acquisitions_weave.py | 42 | id integer primary key, work_id integer not null, edition_id integer not null, | CODE |
| HIGH | openlibrary/tests/core/test_acquisitions_weave.py | 43 | provider_name text not null, local_id text not null, data json not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_provider_tokens.py | 62 | username text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_provider_tokens.py | 63 | provider_name text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_provider_tokens.py | 64 | access_token text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_provider_tokens.py | 65 | refresh_token text default null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_provider_tokens.py | 66 | expires timestamp default null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_provider_tokens.py | 88 | username text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_provider_tokens.py | 89 | provider_name text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_provider_tokens.py | 90 | access_token text not null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_provider_tokens.py | 91 | refresh_token text default null, | CODE |
| HIGH⚡ | openlibrary/tests/core/test_provider_tokens.py | 92 | expires timestamp without time zone 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 | 210 | assert isinstance(env.undefined, type(jinja2.StrictUndefined)) | CODE |
| HIGH | openlibrary/utils/solr.py | 102 | # 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⚡ | openlibrary/i18n/test_po_files.py | 162 | "ru": "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);", | CODE |
| HIGH⚡ | openlibrary/i18n/test_po_files.py | 162 | "ru": "nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);", | CODE |
| HIGH⚡ | openlibrary/i18n/test_po_files.py | 163 | "pl": "nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);", | CODE |
| 16 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | pyproject.toml | 241 | # ── Rule Exclusions ────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | docker/mockservices/main.py | 571 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker/mockservices/main.py | 574 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker/mockservices/main.py | 582 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker/mockservices/main.py | 585 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker/mockservices/main.py | 593 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker/mockservices/main.py | 596 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker/mockservices/main.py | 604 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker/mockservices/main.py | 607 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 63 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 78 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 192 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 197 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 217 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 433 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 443 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 540 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 543 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 626 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 640 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 731 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | docker/mockservices/main.py | 733 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker/mockservices/tests/test_e2e.py | 381 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | docker/mockservices/tests/test_e2e.py | 387 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | tests/unit/js/searchFacets.test.js | 14 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/js/searchFacets.test.js | 16 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/js/searchFacets.test.js | 125 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/js/searchFacets.test.js | 127 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/js/searchFacets.test.js | 223 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | tests/unit/js/searchFacets.test.js | 225 | // ───────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/core/cache.py | 540 | # ── Fleet-wide single-flight cache ────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/core/fulltext.py | 22 | # ── Language resolution ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/core/fulltext.py | 53 | # ── Response envelope → rows ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/core/fulltext.py | 171 | # ── Search ───────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/core/fulltext.py | 201 | # ── Query normalization ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | openlibrary/plugins/openlibrary/js/SearchFilterBar.js | 78 | // ── Facet field config ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | openlibrary/plugins/openlibrary/js/SearchFilterBar.js | 85 | // ── sessionStorage helpers ───────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | openlibrary/plugins/openlibrary/js/SearchFilterBar.js | 95 | // ── URL / sticky-filter helpers ──────────────────────────────────────────── | COMMENT |
| MEDIUM | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1242 | // ── Render ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1358 | // ── Staleness ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1925 | // ── Shelf buttons ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 2044 | // ── Event handlers ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 2368 | // ── Data layer ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 2538 | // ── Static icons ───────────────────────────────────────────────────── | 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/plugins/inside/tests/test_code.py | 18 | # ── filter_readable ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | openlibrary/plugins/inside/tests/test_code.py | 41 | # ── The response envelope stops at fulltext_page ─────────────────────────── | COMMENT |
| MEDIUM⚡ | openlibrary/plugins/inside/tests/test_code.py | 113 | # ── resolve_language ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | openlibrary/plugins/inside/tests/test_code.py | 140 | # ── empty_reason ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | openlibrary/plugins/inside/tests/test_code.py | 150 | # ── Outgoing search params ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | openlibrary/tests/core/test_processors.py | 133 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | openlibrary/tests/core/test_processors.py | 135 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | openlibrary/tests/core/test_acquisitions_weave.py | 140 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | openlibrary/tests/core/test_acquisitions_weave.py | 142 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | openlibrary/tests/core/test_acquisitions_weave.py | 210 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | openlibrary/tests/core/test_acquisitions_weave.py | 212 | # --------------------------------------------------------------------------- | COMMENT |
| 80 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/lending/README.md | 226 | except Exception: | CODE |
| LOW | docs/lending/README.md | 230 | except Exception: | CODE |
| LOW | openlibrary/code.py | 44 | except Exception as e: | CODE |
| LOW | openlibrary/book_providers.py | 720 | except Exception: | CODE |
| LOW | openlibrary/book_providers.py | 776 | except Exception: | CODE |
| LOW | openlibrary/asgi_app.py | 207 | except Exception: | CODE |
| LOW | openlibrary/core/ia.py | 46 | except Exception: | CODE |
| LOW | openlibrary/core/vendors.py | 57 | except Exception as e: # noqa: BLE001 | CODE |
| LOW | openlibrary/core/vendors.py | 246 | except Exception: | CODE |
| LOW | openlibrary/core/vendors.py | 440 | except Exception as e: | CODE |
| LOW | openlibrary/core/vendors.py | 502 | except Exception: | CODE |
| LOW | openlibrary/core/vendors.py | 823 | except Exception: | CODE |
| MEDIUM | openlibrary/core/vendors.py | 49 | def get_lexile(isbn): | CODE |
| LOW | openlibrary/core/layout.py | 28 | except Exception: # noqa: BLE001 | CODE |
| LOW | openlibrary/core/layout.py | 58 | except Exception: # noqa: BLE001 | CODE |
| LOW | openlibrary/core/layout.py | 116 | except Exception: # noqa: BLE001 | CODE |
| LOW | openlibrary/core/layout.py | 142 | except Exception: # noqa: BLE001 | CODE |
| MEDIUM | openlibrary/core/layout.py | 104 | def _extract_flash_messages() -> list[dict[str, str]]: | CODE |
| LOW | openlibrary/core/imports.py | 332 | except Exception: # noqa: BLE001 | CODE |
| LOW | openlibrary/core/imports.py | 359 | except Exception: # noqa: BLE001 | CODE |
| LOW | openlibrary/core/bookshelves.py | 661 | except Exception: # we want to catch no entry exists | CODE |
| LOW | openlibrary/core/bookshelves.py | 672 | except Exception: | CODE |
| LOW | openlibrary/core/provider_loans.py | 71 | except Exception: | CODE |
| LOW | openlibrary/core/provider_loans.py | 87 | except Exception: | CODE |
| LOW | openlibrary/core/provider_loans.py | 95 | except Exception: | CODE |
| LOW | openlibrary/core/provider_loans.py | 118 | except Exception: | CODE |
| LOW | openlibrary/core/provider_loans.py | 142 | except Exception: | CODE |
| LOW | openlibrary/core/provider_loans.py | 189 | except Exception: | CODE |
| LOW | openlibrary/core/stats.py | 34 | except Exception as e: | CODE |
| LOW | openlibrary/core/async_db.py | 178 | except Exception: | CODE |
| LOW | openlibrary/core/provider_tokens.py | 418 | except Exception as exc: # noqa: BLE001 - every failure means the same thing | STRING |
| LOW | openlibrary/core/provider_tokens.py | 480 | except Exception: # noqa: BLE001 - tampered, truncated, or key rotated | CODE |
| LOW | openlibrary/core/provider_tokens.py | 489 | except Exception: # noqa: BLE001 - one bad entry is not all of them | CODE |
| LOW | openlibrary/core/provider_tokens.py | 610 | except Exception as exc: | CODE |
| MEDIUM | openlibrary/core/provider_tokens.py | 465 | def _read_raw(self) -> str | None: | CODE |
| LOW | openlibrary/core/helpers.py | 186 | except Exception: | CODE |
| LOW | openlibrary/core/helpers.py | 196 | except Exception: | CODE |
| LOW | openlibrary/core/lending.py | 304 | except Exception: # TODO: Narrow exception scope | CODE |
| LOW | openlibrary/core/lending.py | 465 | except Exception as e: # TODO: Narrow exception scope | CODE |
| LOW | openlibrary/core/lending.py | 610 | except Exception: # TODO: Narrow exception scope | CODE |
| LOW | openlibrary/core/lending.py | 620 | except Exception: # TODO: Narrow exception scope | CODE |
| LOW | openlibrary/core/lending.py | 804 | except Exception: # TODO: Narrow exception scope | CODE |
| MEDIUM | openlibrary/core/lending.py | 745 | 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 | 307 | print("Error in processing Read API", file=sys.stderr) | CODE |
| MEDIUM | openlibrary/plugins/books/dynlinks.py | 598 | print("Error in processing Books API", file=sys.stderr) | CODE |
| LOW | openlibrary/plugins/openlibrary/home.py | 29 | except Exception: | CODE |
| MEDIUM | openlibrary/plugins/openlibrary/home.py | 26 | def get_homepage(devmode): | CODE |
| LOW | openlibrary/plugins/openlibrary/partials.py | 310 | except Exception: # noqa: BLE001 # per-card isolation: one bad card should not break whole carousel | CODE |
| LOW | openlibrary/plugins/openlibrary/partials.py | 766 | except Exception: # noqa: BLE001 # one bad list shouldn't break the whole section | CODE |
| LOW | openlibrary/plugins/openlibrary/partials.py | 775 | except Exception: # noqa: BLE001 # same fallback the old saferender gave | CODE |
| LOW | openlibrary/plugins/openlibrary/partials.py | 1056 | except Exception: # noqa: BLE001 # one bad card does not stop the full carousel | CODE |
| 66 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 | 23 | CODE | |
| LOW | openlibrary/code.py | 24 | 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 | 33 | CODE | |
| LOW | openlibrary/code.py | 51 | CODE | |
| LOW | openlibrary/asgi_app.py | 1 | CODE | |
| LOW | openlibrary/asgi_app.py | 55 | CODE | |
| LOW | openlibrary/core/acquisitions.py | 14 | CODE | |
| LOW | openlibrary/core/vendors.py | 1 | CODE | |
| LOW | openlibrary/core/reading_state.py | 6 | CODE | |
| LOW | openlibrary/core/layout.py | 9 | CODE | |
| LOW | openlibrary/core/provider_loans.py | 26 | CODE | |
| LOW | openlibrary/core/async_db.py | 31 | CODE | |
| LOW | openlibrary/core/provider_tokens.py | 67 | 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 | 543 | CODE | |
| LOW | openlibrary/plugins/openlibrary/home.py | 8 | CODE | |
| LOW | openlibrary/plugins/openlibrary/partials.py | 1 | CODE | |
| LOW | openlibrary/plugins/openlibrary/code.py | 1185 | CODE | |
| LOW | openlibrary/plugins/openlibrary/utils.py | 1 | CODE | |
| LOW | openlibrary/plugins/openlibrary/tests/test_partials.py | 11 | 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/code.py | 28 | CODE | |
| LOW | openlibrary/plugins/upstream/code.py | 30 | CODE | |
| LOW | openlibrary/plugins/upstream/code.py | 30 | CODE | |
| LOW | openlibrary/plugins/upstream/code.py | 30 | CODE | |
| LOW | openlibrary/plugins/upstream/code.py | 30 | CODE | |
| LOW | openlibrary/plugins/upstream/jsdef.py | 60 | CODE | |
| LOW | openlibrary/plugins/upstream/mybooks.py | 11 | CODE | |
| LOW | openlibrary/plugins/upstream/borrow.py | 27 | CODE | |
| LOW | openlibrary/plugins/upstream/data.py | 8 | CODE | |
| LOW | openlibrary/plugins/upstream/account.py | 1 | CODE | |
| LOW | openlibrary/plugins/upstream/account.py | 17 | CODE | |
| LOW | openlibrary/plugins/upstream/tests/test_utils.py | 8 | CODE | |
| LOW | openlibrary/plugins/upstream/tests/test_lenny.py | 9 | CODE | |
| LOW | openlibrary/tests/core/conftest.py | 11 | CODE | |
| LOW | openlibrary/tests/core/test_imports_refresh.py | 18 | CODE | |
| LOW | openlibrary/tests/catalog/test_utils.py | 5 | CODE | |
| LOW | openlibrary/tests/fastapi/conftest.py | 1 | CODE | |
| LOW | openlibrary/tests/fastapi/test_unlink.py | 3 | CODE | |
| LOW | openlibrary/tests/fastapi/test_link.py | 3 | CODE | |
| LOW | openlibrary/tests/fastapi/test_search.py | 1 | 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 | |
| 54 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | pyproject.toml | 121 | # "EM", # flake8-errmsg | COMMENT |
| LOW | pyproject.toml | 241 | # ── Rule Exclusions ────────────────────────────────────────────────── | COMMENT |
| LOW | pyproject.toml | 261 | # Structure: | COMMENT |
| LOW | compose.near-prod.yaml | 1 | ## | COMMENT |
| LOW | docker/ol-nginx-start.sh | 21 | # expect conflicts writing to file | COMMENT |
| LOW | docker/ol-install-missing-deps.sh | 1 | #!/bin/bash | COMMENT |
| LOW | docker/mockservices/main.py | 61 | app = FastAPI(title="OL Mock Services", docs_url="/mock/docs", lifespan=_lifespan) | COMMENT |
| LOW | docker/mockservices/main.py | 621 | for asin in item_ids | COMMENT |
| LOW | docker/mockservices/start.sh | 1 | #!/bin/sh | COMMENT |
| LOW | tests/e2e/i18n-baked/run.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tests/e2e/i18n-baked/compose.yaml | 1 | ## | COMMENT |
| LOW | docs/search/README.md | 161 | # checkout's, and removing it from inside a worktree destroys an index that is | COMMENT |
| LOW | openlibrary/book_providers.py | 701 | # Moved BEFORE the query, not after: this runs once per Lenny edition per | COMMENT |
| LOW | openlibrary/core/acquisitions.py | 141 | # one provider can hold two rows for one edition (an ISBN-10 and an | COMMENT |
| LOW | openlibrary/core/jinja.py | 121 | COMMENT | |
| LOW | openlibrary/core/lending.py | 501 | "ocaid", # In editions | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 41 | // 'books' searches the catalogue (with the Search Inside band as a teaser); | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 61 | // printdisabled, borrowable, public). It rides along at both levels: the | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 961 | // A failed fetch, not an empty result. Non-reactive: read at click time. | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 981 | // list instead of one already filtered by the previous query's counts. | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1781 | return this._printDisabled && access === PRINT_DISABLED_ACCESS; | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1801 | // wins "chambre des secrets". Showing the work title over an edition link | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1821 | // "Readable" badge. When an edition is promoted, the badge reflects | COMMENT |
| LOW | …ary/plugins/openlibrary/js/search-modal/SearchModal.js | 1841 | // site language (readableLanguageMismatch) — a surprise-avoidance hint. | COMMENT |
| LOW | openlibrary/plugins/worksearch/facets.py | 161 | # Built per call (not at module level) so gettext resolves the current | COMMENT |
| LOW | openlibrary/plugins/worksearch/schemes/works.py | 361 | # query, but much more flexible. We wouldn't be able to do our | COMMENT |
| LOW | openlibrary/plugins/worksearch/schemes/works.py | 661 | COMMENT | |
| LOW | openlibrary/plugins/upstream/mybooks.py | 121 | merged_books[work_key] = (book, float(loaned_at), True) | COMMENT |
| LOW | openlibrary/plugins/upstream/borrow.py | 181 | and provider.short_name != "ia" | COMMENT |
| LOW | openlibrary/plugins/upstream/lenny.py | 821 | # (``lenny/routes/oauth.py:110-117``, ``post_email``). Sending it is | COMMENT |
| LOW | openlibrary/catalog/add_book/__init__.py | 521 | # obscure local-history pamphlet, exactly the material a | COMMENT |
| LOW | openlibrary/components/lit/OLButton.js | 701 | // The label and spinner are both always in the DOM so we can crossfade | COMMENT |
| LOW | openlibrary/accounts/model.py | 1081 | # 2. There is an OL account, and it was linked to this IA account at some point, | COMMENT |
| LOW | openlibrary/bookworm/opds.py | 221 | # record is, rather than letting build_pool guess from the title. That | COMMENT |
| LOW | scripts/i18n-pull-translations.sh | 1 | #!/bin/bash | 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/provision_olserver.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/deployment/patch_test_new_memcache_server.sh | 1 | #!/bin/bash | COMMENT |
| LOW | scripts/deployment/deploy.sh | 521 | fi | COMMENT |
| LOW | scripts/deployment/deploy.sh | 721 | # hostname. Hosts absent from this list don't run nginx. | COMMENT |
| LOW | scripts/deployment/deploy.sh | 741 | # olsystem carries the ModSecurity ruleset and most of what nginx.conf includes, | COMMENT |
| LOW | scripts/deployment/deploy.sh | 761 | # parses the PREVIOUS ruleset, passes, and the crash still arrives at restart. | COMMENT |
| LOW | scripts/deployment/deploy.sh | 781 | # OLIMAGE is passed through for the same reason restart_servers.sh passes it: an | COMMENT |
| LOW | scripts/deployment/deploy.sh | 801 | # broken deploy -- if olsystem stopped shipping a file compose mounts, the live | 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 | # request for /robots.txt becomes "robot", /works/OL1W/I-Robot becomes | COMMENT |
| LOW | scripts/monitoring/monitor.py | 41 | # | COMMENT |
| LOW | .github/labeler.yml | 1 | # Configurations for the `labeler` GitHub action. | COMMENT |
| LOW | .github/workflows/code_review_action.yml | 1 | name: Code Review Action | COMMENT |
| LOW | .github/workflows/code_review_action.yml | 21 | # ("do NOT post publicly. Follow security.md"). REVIEW_GATE_JS below is the one definition of | COMMENT |
| 39 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_docker_compose.py | 68 | CODE | |
| LOW | tests/e2e/i18n-baked/make_fixture.py | 68 | CODE | |
| LOW | openlibrary/api.py | 235 | CODE | |
| LOW | openlibrary/api.py | 255 | CODE | |
| LOW | openlibrary/book_providers.py | 987 | CODE | |
| LOW | openlibrary/book_providers.py | 47 | CODE | |
| LOW | openlibrary/book_providers.py | 129 | CODE | |
| LOW | openlibrary/core/ia.py | 289 | CODE | |
| LOW | openlibrary/core/ia.py | 316 | CODE | |
| LOW | openlibrary/core/observations.py | 563 | CODE | |
| LOW | openlibrary/core/layout.py | 104 | CODE | |
| LOW | openlibrary/core/olmarkdown.py | 38 | CODE | |
| LOW | openlibrary/core/helpers.py | 338 | CODE | |
| LOW | openlibrary/core/lending.py | 542 | CODE | |
| LOW | openlibrary/core/lending.py | 813 | CODE | |
| LOW | openlibrary/core/lists/model.py | 429 | CODE | |
| LOW | openlibrary/core/lists/model.py | 512 | CODE | |
| LOW | openlibrary/core/lists/model.py | 568 | CODE | |
| LOW | openlibrary/plugins/admin/code.py | 309 | CODE | |
| LOW | openlibrary/plugins/openlibrary/lists.py | 87 | CODE | |
| LOW | openlibrary/plugins/openlibrary/lists.py | 336 | CODE | |
| LOW | openlibrary/plugins/openlibrary/lists.py | 921 | CODE | |
| LOW | openlibrary/plugins/openlibrary/design_tokens.py | 184 | CODE | |
| LOW | openlibrary/plugins/openlibrary/design_tokens.py | 324 | CODE | |
| LOW | openlibrary/plugins/openlibrary/code.py | 615 | CODE | |
| LOW | openlibrary/plugins/openlibrary/connection.py | 31 | CODE | |
| LOW | openlibrary/plugins/openlibrary/stats.py | 26 | CODE | |
| LOW | …ibrary/plugins/openlibrary/tests/test_design_tokens.py | 370 | CODE | |
| LOW | openlibrary/plugins/worksearch/code.py | 263 | CODE | |
| LOW | openlibrary/plugins/worksearch/code.py | 343 | CODE | |
| LOW | openlibrary/plugins/worksearch/subjects.py | 556 | CODE | |
| LOW | openlibrary/plugins/importapi/import_rdf.py | 74 | CODE | |
| LOW | openlibrary/plugins/importapi/code.py | 66 | CODE | |
| LOW | openlibrary/plugins/importapi/code.py | 398 | CODE | |
| LOW | openlibrary/plugins/upstream/addbook.py | 361 | CODE | |
| LOW | openlibrary/plugins/upstream/addbook.py | 552 | CODE | |
| LOW | openlibrary/plugins/upstream/addbook.py | 925 | CODE | |
| LOW | openlibrary/plugins/upstream/code.py | 461 | CODE | |
| LOW | openlibrary/plugins/upstream/code.py | 499 | CODE | |
| LOW | openlibrary/plugins/upstream/mybooks.py | 72 | 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 | 153 | CODE | |
| LOW | openlibrary/plugins/upstream/borrow.py | 448 | CODE | |
| LOW | openlibrary/plugins/upstream/account.py | 98 | CODE | |
| LOW | openlibrary/plugins/upstream/account.py | 779 | CODE | |
| LOW | openlibrary/catalog/marc/get_subjects.py | 61 | CODE | |
| LOW | openlibrary/catalog/marc/parse.py | 179 | CODE | |
| LOW | openlibrary/catalog/marc/parse.py | 376 | CODE | |
| LOW | openlibrary/catalog/marc/parse.py | 463 | CODE | |
| LOW | openlibrary/catalog/marc/parse.py | 580 | CODE | |
| LOW | openlibrary/catalog/marc/parse.py | 641 | CODE | |
| LOW | openlibrary/catalog/marc/tests/test_marc_binary.py | 45 | CODE | |
| LOW | openlibrary/catalog/add_book/__init__.py | 403 | CODE | |
| LOW | openlibrary/catalog/add_book/__init__.py | 628 | CODE | |
| LOW | openlibrary/catalog/add_book/__init__.py | 671 | CODE | |
| LOW | openlibrary/catalog/add_book/load_book.py | 348 | CODE | |
| LOW | openlibrary/tests/test_templates.py | 59 | CODE | |
| LOW | openlibrary/tests/core/test_layout.py | 30 | CODE | |
| 34 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/unit/js/formAssociatedMixin.test.js | 153 | const data = el._internals.setFormValue.mock.calls.at(-1)[0]; | CODE |
| CRITICAL | openlibrary/plugins/openlibrary/js/main.js | 383 | 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 |
|---|---|---|---|---|
| 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 | 419 | # Create a list of ISBNs (or an ASIN) to match. | COMMENT |
| MEDIUM | openlibrary/core/bookshelves.py | 391 | # 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 | 309 | # Create a sync wrapper for backward compatibility | COMMENT |
| MEDIUM | openlibrary/core/lists/model.py | 209 | # Create the return dictionary | COMMENT |
| MEDIUM | openlibrary/plugins/openlibrary/lists.py | 354 | # 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 | 250 | # 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 | 24 | # 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 generate_solr_types.py | COMMENT |
| MEDIUM | openlibrary/solr/generate_solr_types.py | 76 | python = f"""# This file is auto-generated by generate_solr_types.py | CODE |
| MEDIUM | openlibrary/accounts/model.py | 154 | # 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 |
| MEDIUM | conf/openlibrary.yml | 65 | # Create a personal access token at https://github.com/settings/tokens | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | openlibrary/core/layout.py | 142 | except Exception: # noqa: BLE001 | CODE |
| HIGH | openlibrary/core/lending.py | 204 | except httpx.HTTPError: | CODE |
| HIGH | openlibrary/plugins/openlibrary/connection.py | 201 | except client.ClientException: | CODE |
| HIGH | openlibrary/plugins/openlibrary/connection.py | 426 | except client.ClientException: | CODE |
| HIGH | openlibrary/plugins/upstream/jsdef.py | 218 | except StopIteration: | CODE |
| HIGH | openlibrary/catalog/marc/marc_binary.py | 166 | except IndexError: | CODE |
| HIGH | scripts/affiliate_server.py | 480 | except queue.Empty: | CODE |
| HIGH | scripts/affiliate_server.py | 205 | except queue.Empty: | CODE |
| HIGH | scripts/providers/import_wikisource.py | 459 | except ValueError: | CODE |
| HIGH | scripts/providers/import_wikisource.py | 418 | except ValueError: | CODE |
| HIGH | scripts/providers/import_wikisource.py | 430 | except ValueError: | CODE |
| HIGH | scripts/providers/import_wikisource.py | 441 | except ValueError: | CODE |
| HIGH | scripts/providers/import_wikisource.py | 452 | except ValueError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …y/catalog/add_book/tests/test_add_book_acquisitions.py | 0 | create table acquisitions ( id integer primary key, work_id integer not null, edition_id integer not null, provider_name | STRING |
| HIGH | openlibrary/tests/test_book_providers.py | 0 | create table acquisitions ( id integer primary key, work_id integer not null, edition_id integer not null, provider_name | STRING |
| HIGH | openlibrary/tests/core/test_acquisitions_weave.py | 0 | create table acquisitions ( id integer primary key, work_id integer not null, edition_id integer not null, provider_name | STRING |
| HIGH | openlibrary/tests/core/test_acquisitions.py | 0 | create table acquisitions ( id integer primary key, work_id integer not null, edition_id integer not null, provider_name | STRING |
| HIGH | …y/catalog/add_book/tests/test_add_book_acquisitions.py | 0 | create table feed_registry ( id integer primary key, provider_name text not null, feed_type text not null default 'opds' | STRING |
| HIGH | openlibrary/bookworm/tests/test_registry.py | 0 | create table feed_registry ( id integer primary key, provider_name text not null, feed_type text not null default 'opds' | STRING |
| HIGH | openlibrary/bookworm/tests/test_harvest.py | 0 | create table feed_registry ( id integer primary key, provider_name text not null, feed_type text not null default 'opds' | STRING |
| HIGH | openlibrary/bookworm/tests/test_cli.py | 0 | create table feed_registry ( id integer primary key, provider_name text not null, feed_type text not null default 'opds' | STRING |
| HIGH | scripts/import_open_textbook_library.py | 0 | creates the itan batch import job. attempts to find an existing itan import batch. if nothing is found, a new batch is c | STRING |
| HIGH | scripts/import_bookdash.py | 0 | creates the itan batch import job. attempts to find an existing itan import batch. if nothing is found, a new batch is c | STRING |
| HIGH | scripts/import_itan.py | 0 | creates the itan batch import job. attempts to find an existing itan import batch. if nothing is found, a new batch is c | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker/mockservices/main.py | 50 | logger = logging.getLogger(__name__) | CODE |
| LOW | openlibrary/asgi_app.py | 32 | def _setup_env() -> None: | CODE |
| LOW | openlibrary/core/likes.py | 7 | logger = logging.getLogger(__name__) | CODE |
| LOW | openlibrary/core/yearly_reading_goals.py | 76 | async def update_target(cls, username: str, year: int, new_target: int) -> None: | CODE |
| LOW | openlibrary/core/models.py | 490 | def update_list_seed_metadata(a: ListSeedMetadata, b: ListSeedMetadata) -> None: | CODE |
| LOW | openlibrary/core/cache.py | 26 | __all__ = [ | CODE |
| LOW | openlibrary/core/cache.py | 130 | def update_async(self, *args: P.args, **kw: P.kwargs) -> None: | CODE |
| LOW | openlibrary/core/cache.py | 136 | 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/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 | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | openlibrary/core/processors/invalidation.py | 9 | __all__ = ["InvalidationProcessor"] | CODE |
| LOW | openlibrary/plugins/openlibrary/api.py | 49 | logger = logging.getLogger(__name__) | CODE |
| LOW | openlibrary/plugins/worksearch/subjects.py | 25 | __all__ = ["SubjectEngine", "get_subject"] | CODE |
| LOW⚡ | openlibrary/plugins/upstream/spamcheck.py | 17 | def set_spam_words(words: Iterable[str]) -> None: | CODE |
| LOW⚡ | openlibrary/plugins/upstream/spamcheck.py | 22 | def set_spam_domains(domains: Iterable[str]) -> None: | CODE |
| LOW⚡ | openlibrary/plugins/upstream/spamcheck.py | 27 | 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 | 594 | def set_share_links(url: str = "#", title: str = "", view_context: InfogamiContext | None = None) -> None: | CODE |
| LOW | openlibrary/catalog/marc/parse.py | 676 | 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 | 180 | def set_context_from_legacy_web_py() -> None: | CODE |
| LOW | openlibrary/utils/request_context.py | 241 | 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 | 328 | def update_password(self, new_password) -> None: | CODE |
| LOW | openlibrary/accounts/model.py | 331 | def update_email(self, email) -> None: | CODE |
| LOW | openlibrary/accounts/model.py | 451 | def set_bot_flag(self, flag) -> None: | CODE |
| LOW | openlibrary/fastapi/auth.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | openlibrary/fastapi/shared/utils.py | 16 | def set_flash_cookie(response: Response, flash_type: FlashType, message: str) -> None: | 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 | compose.production.yaml | 318 | # 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/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 | 110 | # Check if the set-cookie header deletes "pending_action" | COMMENT |
| LOW | openlibrary/solr/updater/edition.py | 184 | # Check if plain string first | COMMENT |
| LOW | openlibrary/accounts/model.py | 1093 | # 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 | 52 | # Check if jq is installed | COMMENT |
| LOW | scripts/deployment/deploy.sh | 80 | # Check if any critical cron jobs are running: | COMMENT |
| LOW | scripts/deployment/deploy.sh | 333 | # Check if Mac | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openlibrary/plugins/openlibrary/js/autocomplete.js | 160 | * <input class="ac-input__visible" type="text" name="fake_name--0" value="Author 1" /> | COMMENT |
| LOW | openlibrary/plugins/worksearch/tests/test_subjects.py | 220 | cached = [{"key": "/authors/OL2A", "name": "Jane Doe", "representative_work": None}] | CODE |
| LOW⚡ | openlibrary/plugins/upstream/tests/test_code.py | 348 | fake_user = Mock(name="context.user") | CODE |
| LOW⚡ | openlibrary/plugins/upstream/tests/test_code.py | 350 | monkeypatch.setattr(code.context, "user", fake_user, raising=False) | CODE |
| LOW⚡ | openlibrary/plugins/upstream/tests/test_code.py | 360 | assert mock_prepare.call_args[0][2] is fake_user | CODE |
| LOW⚡ | openlibrary/plugins/upstream/tests/test_lenny.py | 372 | assert self._params("patron@example.org")["login_hint"] == "patron@example.org" | CODE |
| LOW⚡ | openlibrary/plugins/upstream/tests/test_lenny.py | 448 | assert params["login_hint"] == "patron@example.org" | CODE |
| LOW | openlibrary/plugins/upstream/tests/test_lenny.py | 410 | return "patron@example.org" | CODE |
| LOW | openlibrary/plugins/upstream/tests/test_lenny.py | 1359 | return "patron@example.org" | CODE |
| LOW⚡ | openlibrary/plugins/upstream/tests/test_account.py | 576 | assert account._mask_email("alice@example.org") == "al***@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 | 42 | fake_user = AuthenticatedUser( | CODE |
| LOW⚡ | openlibrary/tests/fastapi/conftest.py | 47 | fastapi_client.app.dependency_overrides[require_authenticated_user] = lambda: fake_user | CODE |
| LOW⚡ | openlibrary/tests/fastapi/conftest.py | 48 | yield fake_user | CODE |
| LOW⚡ | openlibrary/tests/fastapi/conftest.py | 61 | fake_user = AuthenticatedUser( | CODE |
| LOW⚡ | openlibrary/tests/fastapi/conftest.py | 66 | fastapi_client.app.dependency_overrides[get_authenticated_user] = lambda: fake_user | CODE |
| LOW⚡ | openlibrary/tests/fastapi/conftest.py | 67 | yield fake_user | CODE |
| LOW | scripts/import_bookdash.py | 71 | """Strips a trailing role annotation, e.g. "Jane Doe(Illustrator)" -> "Jane Doe".""" | STRING |
| LOW | scripts/import_itan.py | 51 | """Strips a trailing role annotation, e.g. "Jane Doe (Illustrator)" -> "Jane Doe".""" | STRING |
| 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 |
| LOW⚡ | scripts/tests/test_import_itan.py | 30 | assert strip_author_role("Jane Doe") == "Jane Doe" | CODE |
| LOW | scripts/tests/test_import_bookdash.py | 71 | assert strip_author_role("Jane Doe") == "Jane Doe" | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| 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 | 33 | ## 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 |
| LOW | .github/workflows/pr_autoresponder.md | 31 | ## Step 1: Fetch PR data | COMMENT |
| LOW | .github/workflows/pr_autoresponder.md | 44 | ## Step 2: Skip checks | COMMENT |
| LOW | .github/workflows/pr_autoresponder.md | 50 | ## Step 3: Gather queue-position signals | COMMENT |
| LOW | .github/workflows/pr_autoresponder.md | 63 | ## Step 4: Assign an initial reviewer | COMMENT |
| LOW | .github/workflows/pr_autoresponder.md | 82 | ## Step 5: Write and post the comment | COMMENT |
| LOW | .github/workflows/code_review.md | 17 | ## Step 1: Establish the review range | COMMENT |
| LOW | .github/workflows/code_review.md | 34 | ## Step 2: Read beyond the diff | COMMENT |
| LOW | .github/workflows/code_review.md | 49 | ## Step 3: Review every dimension | COMMENT |
| LOW | .github/workflows/code_review.md | 137 | ## Step 4: Write `review.json` | COMMENT |
| LOW | .github/workflows/code_review.md | 193 | ## Step 5: Ignore our own bot | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | openlibrary/asgi_app.py | 117 | CODE | |
| LOW | openlibrary/asgi_app.py | 259 | CODE | |
| LOW | openlibrary/plugins/books/readlinks.py | 247 | CODE | |
| LOW | openlibrary/plugins/openlibrary/partials.py | 995 | CODE | |
| LOW | openlibrary/plugins/worksearch/code.py | 343 | CODE | |
| LOW | openlibrary/plugins/worksearch/code.py | 499 | CODE | |
| LOW | openlibrary/plugins/worksearch/code.py | 1251 | CODE | |
| LOW | openlibrary/plugins/worksearch/code.py | 1094 | CODE | |
| LOW | openlibrary/plugins/upstream/account.py | 622 | CODE | |
| LOW | openlibrary/tests/fastapi/test_account.py | 16 | CODE | |
| LOW | openlibrary/utils/solr.py | 142 | CODE | |
| LOW | openlibrary/solr/update.py | 161 | CODE | |
| LOW | openlibrary/fastapi/internal/api.py | 501 | CODE | |
| LOW | scripts/copydocs.py | 303 | 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 | 236 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | openlibrary/core/imports.py | 536 | # 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 | 620 | # 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 | 91 | # TODO: implement and test edition number | COMMENT |
| LOW | openlibrary/tests/core/test_vendors.py | 142 | # TODO: implement and test edition number | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/make-integration-branch.sh | 6 | # Usage: | COMMENT |