invisible_playwright/pyproject.toml
feder-cr 06815c9afb deps: cap Playwright at the latest tested version (<=1.61.0), bump 0.3.3
The upper bound was an open <1.62, which would let an untested future 1.61.x (or
anything below 1.62) install and potentially break a fresh setup the way 1.61
first did. Cap it at the exact version validated against this binary, 1.61.0, so
only versions we have tested can be pulled in. The cap moves forward on purpose,
once a newer Playwright is validated against the binary.
2026-07-24 13:24:47 +02:00

70 lines
2.9 KiB
TOML

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[project]
name = "invisible-playwright"
version = "0.3.3"
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.55,<=1.61.0",
]
[project.optional-dependencies]
dev = ["pytest>=7", "pytest-mock>=3", "responses>=0.24", "build>=1", "pytest-rerunfailures>=14", "playwright>=1.55,<=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"]