invisible_playwright/pyproject.toml
feder-cr 44afe950b3 deps: lower the Playwright floor to 1.40, bump 0.3.4
The >=1.55 floor was never a real compatibility bound - it was just the single
minor pinned when 0.3.1 tightened the range. The firefox-18 binary was smoke
tested (launch, new_context, navigate, evaluate, click) against 1.40, 1.45, 1.50
and 1.54 and passed on all four, so the floor drops back to 1.40 and anyone on an
older client keeps working. Upper cap stays at the tested 1.61.0.
2026-07-24 14:13:26 +02:00

70 lines
2.9 KiB
TOML

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "invisible-playwright"
version = "0.3.4"
description = "Playwright wrapper for a patched Firefox with deterministic stealth profile."
readme = "README.md"
requires-python = ">=3.11"
license = "MIT"
authors = [{ name = "feder-cr", email = "85809106+feder-cr@users.noreply.github.com" }]
keywords = ["playwright", "firefox", "stealth", "anti-detect", "automation"]
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
]
dependencies = [
# Pure config (seed -> fingerprint -> prefs, binary download, proxy, geo) lives
# in invisible-core since the 2026-07-03 split; it pulls platformdirs/requests/
# maxminddb/tzdata/tqdm/pywin32 transitively. The wrapper only adds Playwright.
"invisible-core @ git+https://github.com/feder-cr/invisible_core.git",
# Pinned to the Juggler client we actually test against (scripts/playwright_pin.txt,
# 1.55.x). Playwright 1.61 added an isMobile field to Browser.setDefaultViewport that
# the FF150 Juggler does not accept, which breaks the session (issue #48).
"playwright>=1.40,<=1.61.0",
]
[project.optional-dependencies]
dev = ["pytest>=7", "pytest-mock>=3", "responses>=0.24", "build>=1", "pytest-rerunfailures>=14", "playwright>=1.40,<=1.61.0"]
[tool.pytest.ini_options]
markers = [
"unit: pure-logic tests, no I/O or external deps",
"integration: multi-module tests, no browser",
"e2e: requires patched Firefox binary and display",
"slow: tests that build the wheel — opt-in only",
"linux_only: tests that require Linux platform",
]
addopts = "-m 'not slow and not e2e'"
# tests/playwright-upstream/ is a vendored Microsoft Playwright test suite
# used for compatibility verification on demand. It has its own deps
# (pixelmatch with API not matching our version) and a conftest that fails
# collection in our env. Run it explicitly with --override-ini for compat
# audits, not on every push.
norecursedirs = ["playwright-upstream"]
[project.scripts]
invisible-playwright = "invisible_playwright.cli:main"
[project.urls]
Homepage = "https://github.com/feder-cr/invisible_playwright"
Issues = "https://github.com/feder-cr/invisible_playwright/issues"
[tool.hatch.metadata]
# invisible-core is pinned by a direct git reference (see [project].dependencies).
# Hatchling refuses direct references unless this is opted in — without it a clean
# `pip install git+.../invisible_playwright` fails at metadata generation.
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["src/invisible_playwright"]
exclude = ["*.bak", "*-bak"]
[tool.hatch.build.targets.sdist]
include = ["src/invisible_playwright", "tests", "README.md", "LICENSE", "pyproject.toml"]