Made project river-agnostic
This commit is contained in:
35
src/clip_annotator/filesystem.py
Normal file
35
src/clip_annotator/filesystem.py
Normal file
@@ -0,0 +1,35 @@
|
||||
import os
|
||||
|
||||
|
||||
_DEFAULT_ENDPOINT = "https://os.zhdk.cloud.switch.ch"
|
||||
|
||||
|
||||
def make_fs(storage: str):
|
||||
"""Return an S3FileSystem for storage='s3', or None for local."""
|
||||
if storage != "s3":
|
||||
return None
|
||||
import s3fs
|
||||
|
||||
return s3fs.S3FileSystem(
|
||||
key=os.environ["S3_ACCESS_KEY"],
|
||||
secret=os.environ["S3_SECRET_ACCESS_KEY"],
|
||||
client_kwargs={
|
||||
"endpoint_url": os.environ.get("S3_ENDPOINT_URL", _DEFAULT_ENDPOINT)
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
def fsjoin(base, *parts: str) -> str:
|
||||
"""Join path segments with forward slashes (works for both local and S3)."""
|
||||
return "/".join([str(base).rstrip("/"), *[str(p).strip("/") for p in parts if p]])
|
||||
|
||||
|
||||
def fsstem(path) -> str:
|
||||
"""Filename stem (no extension) for local Path or S3 string."""
|
||||
name = str(path).replace("\\", "/").split("/")[-1]
|
||||
return name.rsplit(".", 1)[0] if "." in name else name
|
||||
|
||||
|
||||
def fsname(path) -> str:
|
||||
"""Filename component (with extension) for local Path or S3 string."""
|
||||
return str(path).replace("\\", "/").split("/")[-1]
|
||||
Reference in New Issue
Block a user