Commit graph

6 commits

Author SHA1 Message Date
bot-backend
5494fa23e3 fix(tradein/pdf): честный embedded-шрифт (PT Sans/PT Serif) + реальный matplotlib-график вместо div
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI / changes (pull_request) Successful in 9s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 54s
Корень жалоб «дизайн не премиум»/«бары самодельные» — не в WeasyPrint, а в
execution gap: CSS объявлял font-family DejaVu Serif/Sans, но ни один
@font-face не embedded — документ всегда рендерился на системном
fallback-шрифте. Price-range bar был буквально <div> с фиксированной
64%/14% заливкой, никак не связанной с реальными числами диапазона.

Подтверждено 4 параллельными прототипами (ReportLab/Typst/Playwright/
улучшенный WeasyPrint) на одном и том же образце: WeasyPrint с честным
шрифтом и настоящим графиком визуально не уступает более дорогим
альтернативам (Chromium, Typst) при нулевом новом риске в Docker.

Изменения:
- PT Sans (400/700) + PT Serif (700, только для заголовков секций) —
  base64 @font-face из локальных .ttf (app/services/exporters/fonts/,
  OFL-лицензия ParaType), embedded один раз при импорте модуля.
- Обязательный WeasyPrint FontConfiguration() — без него @font-face
  молча игнорируется и рендер откатывается на DejaVu (реальный баг,
  найденный и исправленный в процессе).
- _price_range_bar (декоративный div) → _price_range_chart_svg —
  matplotlib (Agg backend, объектный Figure() API, не pyplot — потокобезопасно
  для конкурентных PDF-запросов в FastAPI threadpool) bullet-chart на
  реальном диапазоне значений, embedded как SVG data URI.
- url_fetcher теперь передаётся в HTML() и CSS() конструкторы, а не в
  write_pdf() — в WeasyPrint 69 write_pdf(url_fetcher=...) молча
  игнорируется, из-за чего SSRF-guard фактически не применялся к
  CSS-ресурсам (@font-face src). Побочная находка при верификации, не
  связанная с шрифтами/графиком напрямую, но тот же вызов кода.
2026-07-04 17:33:54 +03:00
e6000cb029 ci(tradein): pre-merge гейт — backend pytest + frontend type-check/lint (#2208) (#2220)
All checks were successful
Deploy Trade-In / changes (push) Successful in 10s
Deploy Trade-In / build-browser (push) Successful in 34s
Deploy Trade-In / test (push) Successful in 1m38s
Deploy Trade-In / build-backend (push) Successful in 1m29s
Deploy Trade-In / build-frontend (push) Successful in 3m21s
Deploy Trade-In / deploy (push) Successful in 1m18s
2026-07-02 19:56:22 +00:00
df5e9003df feat(scraper-kit): copy avito providers with protocol injection, strangler (#2133 avito)
All checks were successful
Deploy Trade-In / changes (push) Successful in 11s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 1m30s
Deploy Trade-In / build-backend (push) Successful in 1m47s
Deploy Trade-In / deploy (push) Successful in 1m1s
2026-07-02 15:58:00 +00:00
5c17d21f6c feat(scraper-kit): copy core layer (base/save_listings/transport) with protocol injection, strangler (#2132)
All checks were successful
Deploy Trade-In / changes (push) Successful in 11s
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / test (push) Successful in 1m27s
Deploy Trade-In / build-backend (push) Successful in 1m22s
Deploy Trade-In / deploy (push) Successful in 1m8s
2026-07-02 15:43:15 +00:00
8d7feabf9f chore(scraper-kit): docker-context wiring + restore backend workspace dep (#2137)
All checks were successful
Deploy Trade-In / changes (push) Successful in 11s
Deploy Trade-In / build-frontend (push) Successful in 31s
Deploy Trade-In / build-browser (push) Successful in 30s
Deploy Trade-In / test (push) Successful in 1m29s
Deploy Trade-In / build-backend (push) Successful in 1m21s
Deploy Trade-In / deploy (push) Successful in 1m2s
2026-07-02 14:21:38 +00:00
ddf6cb7ce3 chore(scraper-kit): scaffold internal package + uv workspace, build-safe (#2128)
All checks were successful
Deploy Trade-In / build-frontend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / build-backend (push) Successful in 1m22s
Deploy Trade-In / deploy (push) Successful in 1m24s
Deploy Trade-In / changes (push) Successful in 11s
Deploy Trade-In / test (push) Successful in 1m31s
2026-07-02 14:06:07 +00:00