mirror of
https://github.com/daijro/camoufox.git
synced 2026-09-08 16:01:00 +00:00
Pairs the library with the browser: v152.0.4-beta.30 is published as a GitHub
pre-release, so the library that requires it should be one too.
PEP 440 puts 0.5.6b1 after 0.5.5 and before 0.5.6, and pip skips pre-releases
by default -- so `pip install camoufox` still resolves 0.5.5, and only
`pip install --pre camoufox` or an explicit pin picks this up. That is what
makes the conditional browser floor safe to exercise in the wild: the users who
opt in are the ones who get moved to beta.30.
Verified against the live release: with Playwright 1.61 installed the effective
floor resolves to beta.30 and the fetcher selects the real published asset
(camoufox-152.0.4-beta.30-lin.x86_64.zip). 172 tests pass, the 3.8 vermin gate
holds, and the package builds as camoufox-0.5.6b1.
Known wrinkle, not introduced here: _parse_semver() does int("6b1"), fails, and
substitutes 0, so 0.5.6b1 parses to (0, 5, 0). The browser constraint still
resolves correctly because repos.yml's only entry is min 0.5.0 / max 1, but a
future entry gating on a patch version would silently miss a pre-release
install. Worth making that parser PEP 440-aware separately.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
61 lines
1.5 KiB
TOML
61 lines
1.5 KiB
TOML
[build-system]
|
|
requires = ["poetry-core>=1.0.0"]
|
|
build-backend = "poetry.core.masonry.api"
|
|
|
|
[tool.poetry]
|
|
name = "camoufox"
|
|
version = "0.5.6b1"
|
|
description = "Wrapper around Playwright to help launch Camoufox"
|
|
authors = ["daijro <daijro.dev@gmail.com>"]
|
|
license = "MIT"
|
|
repository = "https://github.com/daijro/camoufox"
|
|
homepage = "https://camoufox.com/python"
|
|
readme = "README.md"
|
|
keywords = [
|
|
"client",
|
|
"fingerprint",
|
|
"browser",
|
|
"scraping",
|
|
"injector",
|
|
"firefox",
|
|
"playwright",
|
|
]
|
|
classifiers = [
|
|
"Topic :: Internet :: WWW/HTTP",
|
|
"Topic :: Internet :: WWW/HTTP :: Browsers",
|
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
]
|
|
|
|
[tool.poetry.dependencies]
|
|
python = "^3.10"
|
|
rich-click = "*"
|
|
rich = "*"
|
|
requests = "*"
|
|
orjson = "*"
|
|
browserforge = "^1.2.4"
|
|
# Keep a ceiling. 1.61 added Juggler params the protocol schema had to learn
|
|
# (viewport isMobile/screenSize, webp screenshots, webSocketFrame timestamps)
|
|
# and every Playwright minor is free to change Juggler again, while
|
|
# camoufox.server imports playwright._impl._driver -- a private API with no
|
|
# compat guarantee. Bump deliberately, with a run of `make tests`.
|
|
playwright = "<1.63"
|
|
pyyaml = "*"
|
|
platformdirs = "*"
|
|
numpy = "*"
|
|
ua_parser = "*"
|
|
typing_extensions = "*"
|
|
screeninfo = "*"
|
|
lxml = "*"
|
|
language-tags = "*"
|
|
pysocks = "*"
|
|
inquirer = "*"
|
|
geoip2 = {version = "*", optional = true}
|
|
PySide6 = {version = "*", optional = true}
|
|
|
|
[tool.poetry.extras]
|
|
geoip = ["geoip2"]
|
|
gui = ["PySide6"]
|
|
|
|
[tool.poetry.scripts]
|
|
camoufox = "camoufox.__main__:cli"
|