From e4359e9acb76586e99434592cdf3ee3ccf9aaecd Mon Sep 17 00:00:00 2001 From: Shane Smiskol Date: Thu, 18 Dec 2025 17:15:47 -0800 Subject: [PATCH] api_get: use session (#36930) * use session * prob better for now * todo * same for firehose * no more stutters! * cmt --- common/api.py | 6 ++++-- selfdrive/ui/lib/prime_state.py | 4 +++- selfdrive/ui/mici/layouts/settings/firehose.py | 4 +++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/common/api.py b/common/api.py index 7ea278038d..ebf0290d15 100644 --- a/common/api.py +++ b/common/api.py @@ -42,14 +42,16 @@ class Api: return token -def api_get(endpoint, method='GET', timeout=None, access_token=None, **params): +def api_get(endpoint, method='GET', timeout=None, access_token=None, session=None, **params): headers = {} if access_token is not None: headers['Authorization'] = "JWT " + access_token headers['User-Agent'] = "openpilot-" + get_version() - return requests.request(method, API_HOST + "/" + endpoint, timeout=timeout, headers=headers, params=params) + # TODO: add session to Api + req = requests if session is None else session + return req.request(method, API_HOST + "/" + endpoint, timeout=timeout, headers=headers, params=params) def get_key_pair() -> tuple[str, str, str] | tuple[None, None, None]: diff --git a/selfdrive/ui/lib/prime_state.py b/selfdrive/ui/lib/prime_state.py index e1ef387bf7..1aed949bee 100644 --- a/selfdrive/ui/lib/prime_state.py +++ b/selfdrive/ui/lib/prime_state.py @@ -1,5 +1,6 @@ from enum import IntEnum import os +import requests import threading import time @@ -29,6 +30,7 @@ class PrimeState: def __init__(self): self._params = Params() self._lock = threading.Lock() + self._session = requests.Session() # reuse session to reduce SSL handshake overhead self.prime_type: PrimeType = self._load_initial_state() self._running = False @@ -50,7 +52,7 @@ class PrimeState: try: identity_token = get_token(dongle_id) - response = api_get(f"v1.1/devices/{dongle_id}", timeout=self.API_TIMEOUT, access_token=identity_token) + response = api_get(f"v1.1/devices/{dongle_id}", timeout=self.API_TIMEOUT, access_token=identity_token, session=self._session) if response.status_code == 200: data = response.json() is_paired = data.get("is_paired", False) diff --git a/selfdrive/ui/mici/layouts/settings/firehose.py b/selfdrive/ui/mici/layouts/settings/firehose.py index 10e52bb3b4..d305906e13 100644 --- a/selfdrive/ui/mici/layouts/settings/firehose.py +++ b/selfdrive/ui/mici/layouts/settings/firehose.py @@ -1,3 +1,4 @@ +import requests import threading import time import pyray as rl @@ -44,6 +45,7 @@ class FirehoseLayoutBase(Widget): def __init__(self): super().__init__() self._params = Params() + self._session = requests.Session() # reuse session to reduce SSL handshake overhead self._segment_count = self._get_segment_count() self._scroll_panel = GuiScrollPanel2(horizontal=False) @@ -203,7 +205,7 @@ class FirehoseLayoutBase(Widget): if not dongle_id or dongle_id == UNREGISTERED_DONGLE_ID: return identity_token = get_token(dongle_id) - response = api_get(f"v1/devices/{dongle_id}/firehose_stats", access_token=identity_token) + response = api_get(f"v1/devices/{dongle_id}/firehose_stats", access_token=identity_token, session=self._session) if response.status_code == 200: data = response.json() self._segment_count = data.get("firehose", 0)