twine.auth module

twine.auth.TOKEN_RENEWAL_THRESHOLD: Final[timedelta] = datetime.timedelta(seconds=300)

Tokens expire after 15 minutes, let’s start allowing renewal/replacement after 10 minutes that way if we fail, we may still have time to replace it before it expires. Thus, if our current time + this threshold is past the greater or equal to the expiration time, we should start trying to replace the token.

class twine.auth.CredentialInput[source]
__init__(username: str | None = None, password: str | None = None) None[source]
class twine.auth.TrustedPublishingTokenRetrievalError[source]
code: str
description: str
class twine.auth.TrustedPublishingToken[source]
message: str | None
errors: list[TrustedPublishingTokenRetrievalError] | None
token: str | None
success: bool | None
expires: int | None
class twine.auth.TrustedPublishingAuthenticator[source]
__init__(resolver: Resolver) None[source]
class twine.auth.Resolver[source]
_tp_token: TrustedPublishingToken | None = None
_expires: int | None = None
__init__(config: Dict[str, str | None], input: CredentialInput) None[source]
property authenticator: AuthBase
classmethod choose(interactive: bool) Type[Resolver][source]
property username: str | None
property password: str | None
_has_valid_cached_tp_token() bool[source]
_make_trusted_publishing_token() TrustedPublishingToken | None[source]
make_trusted_publishing_token() str | None[source]
property system: str | None
get_username_from_keyring() str | None[source]
get_password_from_keyring() str | None[source]
username_from_keyring_or_prompt() str[source]
password_from_keyring_or_trusted_publishing_or_prompt() str[source]
prompt(what: str, how: Callable[[...], str]) str[source]
is_pypi() bool[source]

As of 2024-01-01, PyPI requires API tokens for uploads.

class twine.auth.Private[source]
prompt(what: str, how: Callable[[...], str] | None = None) str[source]