Authentication#
Warning
Live timing data from livetiming.formula1.com requires an F1 account
with an active F1TV subscription. Without it, season indexes, session
archives, and the live stream are refused.
LiveF1 asks for your account email and password (or reads them from a
.env file) and signs in for you. The password is saved only in that
.env file. The token file holds the subscription token, not the
password.
Calendar and championship data from Jolpica does not need an F1TV account. Timing, telemetry, and the real-time client do.
Formula 1 live timing data requires an F1 account with an active F1TV
subscription. LiveF1 signs in with your account email and password and sends
the resulting subscription token with every request to
livetiming.formula1.com, both for historical (static) data and for the
real-time client.
Signing in#
import livef1
livef1.login()
login() looks for credentials in this order:
The
usernameandpasswordarguments.The
F1_USERNAMEandF1_PASSWORDenvironment variables.The same variables in a
.envfile. By default this is the first.envfound in the current working directory or one of its parents, so a notebook inproject/notebooks/usesproject/.env. If there is no.env, it is created in the current working directory when values are saved.F1_USERNAME='you@example.com' F1_PASSWORD='your-password'
An interactive prompt. After a successful sign-in, the entered values are saved to the
.envfile, readable by your user only. Keep this file out of version control.
If no credentials are available and the session is not interactive, an
AuthenticationError is raised.
You do not have to call login() yourself: when live timing rejects a
request, LiveF1 signs in once and retries it.
Reusing the token#
The token is saved to ~/.livef1/f1tv_auth_token.json and reused until it expires, so
you are not signed in again on every run.
# Sign in again even if a valid token is saved
livef1.login(force=True)
# Keep the token in memory only
livef1.login(save_token=False)
# Save the token somewhere else (remembered in .env, see below)
livef1.login(token_path="/path/to/token.json")
# Read and save credentials in another .env file
livef1.login(env_path="/path/to/.env")
# Delete the saved token (the .env file is kept)
livef1.logout()
To set these options once for all sign-ins, including the automatic ones, use
livef1.configure():
livef1.configure(
auth_save_token=True,
auth_token_path="/path/to/token.json",
auth_env_path="/path/to/.env",
)
Remembering the token path#
When you pass token_path to login(), its absolute path is saved as
LIVEF1_TOKEN_PATH in the .env file. Later runs then find the token
there, even without calling login():
LIVEF1_TOKEN_PATH='/path/to/token.json'
You can also set LIVEF1_TOKEN_PATH yourself, in .env or as an
environment variable. The token path is chosen in this order:
The
token_pathargument.livef1.configure(auth_token_path=...).LIVEF1_TOKEN_PATHin the environment.LIVEF1_TOKEN_PATHin the.envfile.~/.livef1/f1tv_auth_token.json.
The path is not saved when save_token=False or when the sign-in fails.
Overriding the sign-in configuration#
The OAuth client ID and policy ID are read from the F1 account website. If F1
changes the website before LiveF1 is updated, set LIVEF1_F1_CLIENT_ID and
LIVEF1_F1_POLICY_ID to override them.