Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

fix: rename InfoboxTableParser→InfoboxNestedTableExtractor, CollapsibleTableParser→CollapsibleCareerTableExtractor#1470

Draft
Copilot wants to merge 2 commits into
main from
copilot/create-parser-hierarchy
Draft

fix: rename InfoboxTableParser→InfoboxNestedTableExtractor, CollapsibleTableParser→CollapsibleCareerTableExtractor #1470
Copilot wants to merge 2 commits into
main from
copilot/create-parser-hierarchy

Conversation

Copilot AI commented Apr 11, 2026
edited
Loading

Copy link
Copy Markdown
Contributor

Dwie klasy w scrapers/parsers/infobox/ miały sufiks *TableParser, lecz nie implementowały kontraktu parsera (parse() + dziedziczenie po WikiTableBaseParser/WikiTableHtmlParser). Były to helpery ekstrakcji danych z zagnieżdżonych tabel infoboksa — nie parsery HTML w sensie hierarchii warstw.

Opis zmiany

Klasy pełniące rolę ekstraktorów danych nazwano zgodnie z ich faktyczną odpowiedzialnością:

  • InfoboxTableParserInfoboxNestedTableExtractor (scrapers/parsers/infobox/table.py)
  • CollapsibleTableParserCollapsibleCareerTableExtractor (scrapers/parsers/infobox/collapsible_table.py)

Przy okazji naprawiono dwa istniejące błędy:

  • Zły ścieżka importu w teście test_collapsible_table.py (wskazywał na nieistniejący moduł scrapers.drivers.drivers_infobox.parsers.collapsible_table)
  • Zły import NumericExtractor w collapsible_table.py (scrapers.parsers.infobox.numeric_extractorscrapers.parsers.numeric_extractor)

SRP impact

Nazwy klas teraz precyzyjnie opisują ich odpowiedzialność: ekstrakcja danych z konkretnych podtabel infoboksa, nie parsowanie ogólnych elementów HTML. Klasy nie muszą implementować kontraktu TableParser — i nie udają że go implementują.

DRY impact

Bez zmian.

Contracts changed

InfoboxTableParser i CollapsibleTableParser usunięte z przestrzeni publicznej (__all__). Zastąpione przez InfoboxNestedTableExtractor i CollapsibleCareerTableExtractor. Brak zewnętrznych konsumentów poza driver_cell.py.

Backward compatibility

Zmiana łamie kompatybilność dla każdego kodu importującego stare nazwy klas. Wewnątrz repozytorium wszystkie miejsca użycia zaktualizowane. Stare nazwy usunięte bez aliasów — celowo, były błędne semantycznie.

DoD

  • test_parser_naming_inheritance_contract przechodzi (4 naruszenia → 0)
  • test_collapsible_table_parser_* przechodzi (wcześniej ImportError)
  • CodeQL: 0 alertów

Checklista techniczna (obowiązkowa)

  • Testy kontraktowe
  • Brak nowych Any
  • Brak nowych magic strings
  • Brak nowych print
  • Złożoność i długość modułów
  • Spójność rejestru konfiguracji i implementacji
  • Wyjątki tylko jawnie uzasadnione
  • Zaktualizowany ADR/docs
  • Spójność terminologii domenowej (zgodnie z docs/DOMAIN_GLOSSARY.md)

Checklist (quality gate)

  • Brak nowych Any: potwierdzone przez gate Strict typing regression gate (mypy) (scripts/ci/mypy_regression_gate.py).
  • Granice modułów: potwierdzone przez Architecture tests + import-linter.
  • Duplikacja: potwierdzona przez jscpd + pylint duplicate-code (Static quality gates).
  • Złożoność i długość modułów: potwierdzone przez próg pylint (too-many-branches, too-many-statements, too-many-lines).
  • Brak nowych print/magic strings/defaultów: potwierdzone przez scripts/ci/enforce_diff_quality_guards.py.
  • Spójność rejestru konfiguracji i implementacji: potwierdzona przez scripts/ci/enforce_diff_quality_guards.py.
  • Wyjątki tylko jawnie uzasadnione: każdy nowy except Exception ma adnotację justified-exception:.
  • Architecture impact: sekcja poniżej jest uzupełniona i przechodzi walidator PR template (scripts/ci/validate_pr_template.py).
  • Spójność terminologiczna: nazwy pól/klas są zgodne z DOMAIN_GLOSSARY.md oraz gate scripts/ci/check_terminology_consistency.py.

Architecture impact

  • Zmiany w scrapers/base/: nie dotyczy
  • Dotknięte domeny: scrapers/parsers/infobox/ — wewnętrzne helpery infoboksa kierowcy
  • Kompatybilność wsteczna: brak — stare nazwy usunięte
  • Migracja wymagana: nie (wszystkie miejsca użycia zaktualizowane w tym PR)

Refactor included

  • Mikro-refactor wykonany (redukcja duplikacji lub poprawa kontraktu OOP).
  • Typ: OOP contract
  • Zakres (pliki/moduły): scrapers/parsers/infobox/table.py, scrapers/parsers/infobox/collapsible_table.py, scrapers/parsers/infobox/driver_cell.py
  • Wpływ na duplikację (linie lub bloki): usunięto: 0 / dodano: 0 (czyste rename)
  • Notatka o kompatybilności kontraktu: stare nazwy nie były częścią publicznego API poza modułem infobox; konsumenci zaktualizowani

Code review evidence (wymagane)

# python -m pytest tests/test_parser_naming_inheritance_contract.py tests/test_parser_naming_convention.py tests/scrapers/drivers/infobox/parsers/test_collapsible_table.py -v
tests/test_parser_naming_inheritance_contract.py::test_parser_name_to_inheritance_and_interface_contract PASSED
tests/test_parser_naming_convention.py::test_infobox_driver_parser_classes_require_parse_entrypoint PASSED
tests/scrapers/drivers/infobox/parsers/test_collapsible_table.py::test_collapsible_table_parser_parses_label_rows_and_numeric_values PASSED
tests/scrapers/drivers/infobox/parsers/test_collapsible_table.py::test_collapsible_table_parser_parses_nested_table_and_returns_none_for_empty PASSED
4 passed in 0.69s
# CodeQL: 0 alerts
Original prompt

znajdź wszystkie klasy parser i zaplanuj utworzenie im sensownej hierarchii i rodziny klas, jeśli coś się nazywa parser to ma działać i zachowywać się jak parser, jeśli coś działa inaczej to powinno się inaczej zachowywać, myślę, że powinno być to oparte o elementy htmlowe Wikipedii - osobne parsery do tabel inne do list, inne do sekcji, infoboxów itp

The user has attached the following files from their workspace:

  • scrapers/parsers/infobox/driver.py

...sibleTableParser→CollapsibleCareerTableExtractor
Agent-Logs-Url: https://github.com/bgembalczyk/F1/sessions/daa03eba-5ee3-4544-b537-0b5f15773e6c
Co-authored-by: bgembalczyk <101186475+bgembalczyk@users.noreply.github.com>
Copilot AI changed the title (削除) [WIP] Plan and create parser class hierarchy (削除ここまで) (追記) fix: rename InfoboxTableParser→InfoboxNestedTableExtractor, CollapsibleTableParser→CollapsibleCareerTableExtractor (追記ここまで) Apr 11, 2026
Copilot AI requested a review from bgembalczyk April 11, 2026 18:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@bgembalczyk bgembalczyk Awaiting requested review from bgembalczyk

Labels

None yet

Projects

None yet

Milestone

No milestone

Development

Successfully merging this pull request may close these issues.

2 participants

AltStyle によって変換されたページ (->オリジナル) /