renovate[bot]
35023c7d61
chore(deps): update python to ==3.15.*
2026-11-09 05:51:06 +00:00
renovate[bot] and ThePhaseless
93ffe3ec0f
fix(deps): pin dependencies ( #446 )
...
* fix(deps): pin dependencies
* fix: stop passing log_level to FastAPI
FastAPI never had a log_level parameter; it went into **extra and was
ignored until 0.162 removed **extra, where it raises TypeError at import.
uvicorn.run already receives the log level.
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: ThePhaseless <kukubaorch@gmail.com >
2026-11-05 16:56:43 +01:00
renovate[bot]
3d34b33ff8
chore(deps): update dependency pytest to ==9.2.* ( #443 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-28 03:34:30 +00:00
renovate[bot]
96e49b71a1
chore(deps): update dependency httpx2 to ==2.16.* ( #440 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-21 13:56:52 +00:00
renovate[bot]
94ae1e7b9a
chore(deps): update dependency httpx2 to ==2.15.* ( #438 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-20 23:30:18 +00:00
renovate[bot]
5c3681129d
chore(deps): update dependency httpx2 to ==2.14.* ( #436 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-18 21:53:19 +00:00
renovate[bot]
405a45b334
fix(deps): update dependency playwright to ==1.64.* ( #434 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-14 04:34:40 +00:00
renovate[bot]
4e4e76ffed
chore(deps): update dependency ruff to ==0.17.* ( #431 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-10 04:58:49 +00:00
Jakub Orchowski
e1eaa19166
Merge pull request #427 from ThePhaseless/fix/vendored-playwright-errors
...
fix: catch invisible_playwright's own error classes
2026-10-09 00:00:33 +02:00
Jakub Orchowski
9246d3a732
Merge pull request #428 from ThePhaseless/fix/per-request-geo-lookup
...
fix: resolve the browser timezone once per process instead of per request
2026-10-08 23:56:35 +02:00
ThePhaseless and Claude Opus 5.5
804c776a80
refactor: take the host timezone from tzlocal
...
The fallback zone used after a failed egress lookup came from hand-rolled
TZ and /etc/localtime parsing. That parsing passed values such as
TZ=UTC0, TZ=CET-1CEST,M3.5.0,M10.5.0/3 or TZ=:/usr/share/zoneinfo/... to
the browser unchanged, and Playwright rejects them as an invalid
timezone ID. tzlocal.get_localzone_name() handles those forms and returns
only names it could load, or None. A None result still falls back to UTC.
tzlocal already came in through trafilatura (htmldate -> dateparser).
It is now a direct dependency because Byparr imports it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-08 23:52:44 +02:00
ThePhaseless
34181005d5
Merge remote-tracking branch 'origin/main' into fix/vendored-playwright-errors
...
# Conflicts:
# pyproject.toml
# uv.lock
2026-10-08 23:42:23 +02:00
renovate[bot]
06b67c498e
fix(deps): update dependency fastapi to ==0.143.* ( #430 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-08 19:37:48 +00:00
ThePhaseless and Claude Opus 5.5
39bdeedecd
fix: catch invisible_playwright's own error classes
...
invisible_playwright drives Firefox through a vendored copy of Playwright
(invisible_playwright._pw), and its Error/TimeoutError are not subclasses
of playwright.async_api's classes or of the builtin TimeoutError. Every
except and suppress in Byparr named the playwright.async_api classes, so
in production none of them matched:
- a Turnstile widget read that outlasted its 1s timeout escaped the
suppress() in the solve loop and turned the whole request into a 500
(the Locator.bounding_box traceback in #419 ), even with budget left
- an unreachable host was a 500 instead of a 502
- a goto/domcontentloaded timeout was a 500 instead of a 408
- a page that never reaches networkidle was a 500 instead of returning
the loaded page, and /load returned empty content for it
Nothing in Byparr runs the real playwright package at runtime any more;
it is only used for type hints. So the handlers now import the classes
invisible_playwright re-exports from its public async_api, and nothing
else. That module exports them since 0.15.0, hence the raised floor.
The unit-test fakes raised the playwright.async_api classes too, which
is why the suite stayed green. They now raise the vendored classes, and
a new test covers a widget read timing out mid-solve.
Refs #419
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-07 23:51:21 +02:00
renovate[bot]
b87a07439c
fix(deps): update dependency trafilatura to ==2.3.*
2026-10-06 21:19:26 +00:00
renovate[bot]
8bcc5e89c4
fix(deps): update dependency fastapi to ==0.142.* ( #420 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-30 03:46:54 +00:00
renovate[bot]
b46614fb55
fix(deps): update dependency playwright to ==1.63.* ( #413 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-16 02:11:38 +00:00
renovate[bot]
cdfd73785a
chore(deps): update dependency httpx2 to ==2.13.* ( #412 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-14 21:29:44 +00:00
renovate[bot]
080b0f9141
chore(deps): update dependency httpx2 to ==2.12.* ( #406 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-08-27 05:27:30 +00:00
renovate[bot]
c611afb865
fix(deps): update dependency playwright to ==1.62.* ( #369 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-08-27 01:34:31 +00:00
ThePhaseless
3c45ef9691
chore: fix ruff lint findings and refactor read_item
...
- Fix I001: sort imports in src/consts.py
- Fix PLC0415: move `import base64` to top of tests/main_test.py
- Fix UP037: remove quotes from LinkResponse return annotation
- Fix D213: correct multi-line docstring summary placement
- Remove unused `# noqa: BLE001` in src/owui.py
- Refactor read_item into helpers: setup_routes, load_page_and_solve,
build_response_content, _fetch_pdf_content — resolves C901 and PLR0915
- Add CPY001, BLE001 to ruff ignore list
2026-08-11 00:15:39 +02:00
renovate[bot]
07309c8d8e
chore(deps): update dependency httpx2 to ==2.10.* ( #386 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-08-09 16:33:10 +00:00
ThePhaseless
cb80a0f2a0
Merge remote-tracking branch 'origin/main' into feat/owui-loader-cleanup
...
# Conflicts:
# uv.lock
2026-08-08 01:42:54 +02:00
ThePhaseless
23374ce58e
chore: migrate tests from httpx to httpx2
...
Starlette's TestClient deprecates httpx; httpx2 is the maintained
successor (Pydantic stewardship) with a drop-in API.
2026-08-08 01:42:10 +02:00
ThePhaseless
941d5e7350
Revert "chore: migrate tests from httpx to httpx2"
...
This reverts commit ff70ffc32b .
2026-08-08 01:41:52 +02:00
ThePhaseless
ff70ffc32b
chore: migrate tests from httpx to httpx2
...
Starlette's TestClient deprecates httpx; httpx2 is the maintained
successor (Pydantic stewardship) with a drop-in API.
2026-08-08 01:40:12 +02:00
ThePhaseless
0dff659e34
feat: extract articles with trafilatura on /load
...
Run trafilatura server-side on the rendered DOM (page.content()), so
JS-rendered pages stay fully visible to the extractor; fall back to
innerText when trafilatura cannot score any main content.
2026-08-08 01:26:35 +02:00
renovate[bot]
709a73a5cb
fix(deps): update dependency fastapi to ==0.141.*
2026-08-07 21:49:50 +00:00
ThePhaseless
e298eb8d3f
chore(deps): update invisible-playwright to 0.6.1
...
Bump the PyPI floor to the latest release (0.6.1), which pins
invisible-core 18.13.0 and drops Windows-only deps (pywin32, tqdm).
2026-08-07 23:49:01 +02:00
Federico
a0c4b1dd93
deps: install invisible-playwright from PyPI instead of git
2026-08-07 23:49:01 +02:00
renovate[bot]
c42a353b8a
chore(deps): update dependency ruff to ==0.16.* ( #377 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-07-24 02:43:56 +00:00
ThePhaseless
8c3e7a9fe4
refactor: use pydantic-settings for environment configuration
...
- Add pydantic-settings as direct dependency
- Replace os.getenv calls with typed Settings class
- Add BLOCK_MEDIA and RETURN_ONLY_COOKIES env defaults
2026-07-04 17:42:53 +02:00
ThePhaseless
4800ef7f5f
feat: migrate from camoufox to invisible_playwright
...
- Replace camoufox[geoip] with invisible_playwright git dependency
- Switch playwright-captcha framework from CAMOUFOX to PLAYWRIGHT
- Remove camoufox addon path from consts
- Add git to Docker base image; fetch invisible_playwright binary
- Make /cache writable for runtime USER 1000
2026-07-04 17:34:48 +02:00
ThePhaseless
10aa77fb00
fix: revert to camoufox 0.4.*, pin playwright==1.60.*
...
cloverlabs-camoufox 0.6.0 was a confirmed regression (3/6 tests failed
with 'Cloudflare iframes not found' vs 6/6 passing on camoufox 0.4.11).
Revert to camoufox[geoip]==0.4.* and pin playwright==1.60.* (exact pin
to avoid the 1.61 protocol error).
2026-07-04 16:14:37 +02:00
ThePhaseless
b177dc6ad4
feat: migrate to cloverlabs-camoufox, pin playwright<1.61, add tini as PID 1
...
- Migrate from daijro/camoufox==0.4.* to cloverlabs-camoufox==0.6.*
(drop-in API: same import path, same kwargs)
- Pin playwright>=1.58,<1.61 to prevent protocol error
(Browser.setDefaultViewport viewport.isMobile incompatibility with
camoufox bundled Firefox v135.0.1-beta.24; upstream daijro/camoufox#653)
- Bump fastapi 0.136->0.139, pytest 9.0->9.1, pytest-asyncio 1.3->1.4
(absorbs Renovate PRs #360 , #359 , #357 )
- Remove dead deptry DEP002 pyautogui ignore (cloverlabs dropped pyautogui)
- Add tini to Dockerfile base image and set as ENTRYPOINT PID 1
(fixes zombie/defunct Firefox subprocesses: [Socket Process],
[RDD Process], [Utility Process] — verified: 21 zombies without tini,
0 zombies with tini after 5 POST /v1 requests)
- Remove init: true from compose.yaml (tini makes it redundant)
- Remove --init/init: true checkbox from bug report template
Closes #339 , #340 , #360 , #359 , #357 , #366
2026-07-04 15:18:21 +02:00
renovate[bot]
680c5cd709
fix(deps): update dependency fastapi to ==0.136.* ( #343 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-04-16 23:32:34 +00:00
renovate[bot]
1064addf5e
chore(deps): update dependency deptry to ==0.25.* ( #335 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-19 04:58:07 +00:00
renovate[bot]
818b54848c
fix(deps): update dependency fastapi to ==0.135.* ( #324 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-03-02 02:15:47 +00:00
renovate[bot]
740efc573e
fix(deps): update dependency fastapi to ==0.134.* ( #323 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-28 01:00:34 +00:00
renovate[bot]
1a18bbfe1a
fix(deps): update dependency fastapi to ==0.133.* ( #321 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-24 19:11:48 +00:00
renovate[bot]
1826610937
fix(deps): update dependency fastapi to ==0.132.* ( #320 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-24 02:09:13 +00:00
renovate[bot]
27ee7c2fb8
fix(deps): update dependency fastapi to ==0.131.* ( #319 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-22 20:57:33 +00:00
renovate[bot]
8575316da6
fix(deps): update dependency fastapi to ==0.129.* ( #317 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-12 22:24:32 +00:00
renovate[bot]
1e726296a3
chore(deps): update python to ==3.14.* ( #261 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-08 12:42:41 +00:00
renovate[bot]
f5d4b02d64
chore(deps): update dependency ruff to ==0.15.* ( #304 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-02-04 01:01:14 +00:00
renovate[bot]
c4c924ead0
fix(deps): update dependency fastapi to ==0.128.* ( #299 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-27 22:05:29 +00:00
renovate[bot]
e894e0bf73
chore(deps): update dependency pytest to v9 ( #271 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-26 19:36:35 +01:00
renovate[bot]
f91bc1aae7
fix(deps): update dependency fastapi to ==0.127.* ( #298 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-21 20:38:41 +00:00
renovate[bot]
d223bb058a
fix(deps): update dependency fastapi to ==0.126.* ( #297 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-20 20:53:50 +00:00
renovate[bot]
463e1ae83c
fix(deps): update dependency fastapi to ==0.125.* ( #296 )
...
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-18 04:26:14 +00:00