mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-02-19 05:24:06 +08:00
* sourcing supports any file type! * stuff * no camera for now * i guess these are fine without * rename * get rid of these too! * fix * fix * this is better * start to clean up! * better * holy holy * clean up sources * more robust * working but needs some clean up * clean up * remove some trash * nl * auto_source can only return if it finds acceptable logs from sources * double negative is confusing * default * list isn't hashable * fix typing * clean up * speed up -- test_models got zst before bz2 in openpilotci, so do that (some segments have both bz2 and zst!) * don't be a hero * same behavior for now
47 lines
1.0 KiB
Python
47 lines
1.0 KiB
Python
import os
|
|
import posixpath
|
|
import socket
|
|
from functools import cache
|
|
from urllib.parse import urlparse
|
|
|
|
from openpilot.tools.lib.url_file import URLFile
|
|
|
|
DATA_ENDPOINT = os.getenv("DATA_ENDPOINT", "http://data-raw.comma.internal/")
|
|
|
|
|
|
def internal_source_available(url: str) -> bool:
|
|
if os.path.isdir(url):
|
|
return True
|
|
|
|
try:
|
|
hostname = urlparse(url).hostname
|
|
port = urlparse(url).port or 80
|
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
|
s.settimeout(0.5)
|
|
s.connect((hostname, port))
|
|
return True
|
|
except (socket.gaierror, ConnectionRefusedError):
|
|
pass
|
|
return False
|
|
|
|
|
|
def resolve_name(fn):
|
|
if fn.startswith("cd:/"):
|
|
return posixpath.join(DATA_ENDPOINT, fn[4:])
|
|
return fn
|
|
|
|
|
|
@cache
|
|
def file_exists(fn):
|
|
fn = resolve_name(fn)
|
|
if fn.startswith(("http://", "https://")):
|
|
return URLFile(fn).get_length_online() != -1
|
|
return os.path.exists(fn)
|
|
|
|
|
|
def FileReader(fn, debug=False):
|
|
fn = resolve_name(fn)
|
|
if fn.startswith(("http://", "https://")):
|
|
return URLFile(fn, debug=debug)
|
|
return open(fn, "rb")
|