Implemented. Sign in, then open Experience or Skills to:

- Add, edit, and delete experience entries and project links.
- Manage skill categories and individual skill labels.
- Edit the skills introduction and “How I work” text.
Changes save directly to Supabase—no code edits or Git push needed. Existing content is preserved.
This commit is contained in:
StormRunner06106
2026-09-13 10:03:21 -07:00
parent 6e3779e500
commit 404e0dc16d
25 changed files with 1337 additions and 82 deletions
+15 -1
View File
@@ -4,7 +4,7 @@ import re
from functools import lru_cache
import dropbox
from dropbox.exceptions import AuthError, DropboxException
from dropbox.exceptions import ApiError, AuthError, DropboxException
from fastapi import HTTPException
from requests.exceptions import RequestException
@@ -58,3 +58,17 @@ def download(file_id: str, limit: int) -> bytes:
raise HTTPException(503, "Dropbox needs to be reconnected by the site owner.") from exc
except (DropboxException, RequestException) as exc:
raise HTTPException(502, "This file is temporarily unavailable from Dropbox. Please retry.") from exc
def delete(file_id: str) -> None:
try:
get_dropbox().files_delete_v2(file_id)
except AuthError as exc:
raise HTTPException(503, "Dropbox needs to be reconnected by the site owner.") from exc
except ApiError as exc:
# A retry may follow a successful Dropbox delete and failed database cleanup.
if exc.error.is_path_lookup() and exc.error.get_path_lookup().is_not_found():
return
raise HTTPException(502, "Dropbox could not delete this file. Deletion will be retried.") from exc
except (DropboxException, RequestException) as exc:
raise HTTPException(502, "Dropbox could not delete this file. Deletion will be retried.") from exc