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