multipass
Reusable browser-login building blocks, spun out of
canvasser. Import name and
distribution are both multipass. GPL-3.0-or-later.
Ships four modules: credential resolution (multipass.credentials),
persistent browser contexts with 700/600 debug snapshots (multipass.browser),
a branding skeleton (multipass.config — state layout plus every brandable
string in one frozen object), and the recogniser-loop auth engine
(multipass.auth: LoginState dispatch, one IdP row, structural rejection
check, allowlist liveness) with Duo answered through the duo-pass
dependency. Factor plugins beyond Duo arrive through extra_recognisers.
from pathlib import Path
from multipass import CredentialNames, resolve_credentials
NAMES = CredentialNames(
username_vars=("CONCURRER_USERNAME",),
password_vars=("CONCURRER_PASSWORD",),
program="concurrer",
)
user, pw = resolve_credentials(
names=NAMES,
default_file=Path.home() / ".local" / "state" / "concurrer" / "secrets.env",
)
Branding
A library must not hardcode its first host's variable names — and it must not
hold them as setup either. Every variable, flag example, and program name the
package can utter arrives per call, in one frozen CredentialNames the host
constructs and passes in (resolve_credentials(names=...),
LoginTarget(names=...)). There is no configure(), no active branding, and
no default to inherit: a default here would be the thing every host silently
inherits. The MULTIPASS_* object exists only so the shape has something to
show, not something to run under. State paths work the same way:
resolve_state_dir(config) takes its AuthConfig explicitly, and the
browser's snapshot directory, session file, and profile dir are required
arguments wherever they are used.
Release files for multipass 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| multipass-0.1.0.tar.gz | 44.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| multipass-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 91.2 kB
Release files / multipass-0.1.0.tar.gz
| Download URL | multipass-0.1.0.tar.gz |
|---|---|
| Size | 44.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4489d2e924e0de136c82ccd8aa3e84cfdd6f55b7907376cf58fc7be4f1c5607a
|
|
BLAKE2b-256 checksum How to use checksums |
be96e100507af06520980dea24507ae76bac4484ce85093996f4a6f644ce408b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency logRelease files / multipass-0.1.0-py3-none-any.whl
| Download URL | multipass-0.1.0-py3-none-any.whl |
|---|---|
| Size | 46.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
860e8eaf71f79c75f9c7250a0dbd48ad9529cd7542eda40b9802f416c029dfa6
|
|
BLAKE2b-256 checksum How to use checksums |
30eba9f91f971699632a698e3d40cf2a9e50064ebfa4229514f9adb89def25d8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.
Transparency log