fenn.remote¶
Client library for the Fenn remote execution service.
Used by fenn auth and fenn run. Public surface:
fenn.remote.credentials—~/.fenn/credentialscredential storefenn.remote.client— HTTP/SSE client for the/v1/*APIfenn.remote.workspace— project packing for uploadfenn.remote.artifacts— artifact tarball extractionfenn.remote.exceptions— typed error hierarchy
- exception fenn.remote.AuthError[source]¶
Bases:
RemoteErrorThe API key was missing, invalid, or revoked (HTTP 401/403).
- class fenn.remote.Credentials(api_key: 'str', host: 'Optional[str]' = None)[source]¶
Bases:
object- Parameters:
api_key (str)
host (str | None)
- __init__(api_key, host=None)¶
- Parameters:
api_key (str)
host (str | None)
- Return type:
None
- api_key: str¶
- host: str | None = None¶
- exception fenn.remote.CredentialsError[source]¶
Bases:
RemoteErrorNo usable API key could be resolved locally.
- exception fenn.remote.InsufficientCreditsError[source]¶
Bases:
RemoteErrorThe account does not have enough credits for the request (HTTP 402).
- exception fenn.remote.JobFailedError(message, *, job_id=None, status=None)[source]¶
Bases:
RemoteErrorA remote job finished in a non-success terminal state.
- Parameters:
message (str)
job_id (Optional[str])
status (Optional[str])
- Return type:
None
- exception fenn.remote.NetworkError[source]¶
Bases:
RemoteErrorThe remote host could not be reached.
- class fenn.remote.RemoteClient(host, api_key, session=None)[source]¶
Bases:
objectThin
requestswrapper with bearer auth and typed errors.- Parameters:
host (str)
api_key (str)
session (Optional[requests.Session])
- __init__(host, api_key, session=None)[source]¶
- Parameters:
host (str)
api_key (str)
session (Session | None)
- Return type:
None
- download_artifacts(job_id, dest)[source]¶
Stream the job’s artifact tarball to
destand return it.- Parameters:
job_id (str)
dest (Path)
- Return type:
Path
- stream_events(job_id)[source]¶
Context manager yielding an iterator of parsed SSE events.
- Parameters:
job_id (str)
- submit_job(workspace_tar, *, script, max_runtime, project=None, venv=None, machine_class=None)[source]¶
Upload a workspace and enqueue a job.
Matches the server contract (
POST /v1/jobs): atarballfile part plus ametaJSON form field. Returns the server response, e.g.{"job_id": ..., "credit_hold": N, "credits_remaining": N}.- Parameters:
workspace_tar (Path)
script (str)
max_runtime (int)
project (str | None)
venv (dict[str, Any] | None)
machine_class (str | None)
- Return type:
dict
- exception fenn.remote.RemoteError[source]¶
Bases:
ExceptionBase class for every error raised by
fenn.remote.
- exception fenn.remote.WorkspaceTooLargeError[source]¶
Bases:
RemoteErrorThe packed workspace exceeds the upload size limit.
- fenn.remote.delete_credentials()[source]¶
Remove the stored credential. Returns True if one existed.
- Return type:
bool
- fenn.remote.load_credentials()[source]¶
Return the stored
Credentials, orNoneif unset.- Return type:
Credentials | None
- fenn.remote.mask_key(api_key)[source]¶
Return a redacted form safe for terminal output.
- Parameters:
api_key (str)
- Return type:
str
- fenn.remote.resolve_api_key()[source]¶
Resolve an API key from env > credentials file.
- Raises:
CredentialsError – when no key can be found anywhere.
- Return type: