Spaces:
Running
Running
import logging | |
import pickle | |
from etils import epath | |
import streamlit as st | |
from core.constants import PAST_PROJECTS_PATH | |
from core.query_params import set_project | |
from core.state import CurrentProject | |
from core.state import get_cached_user | |
from core.state import Metadata | |
def load_past_projects_paths() -> list[epath.Path]: | |
user = get_cached_user() | |
past_projects_path = PAST_PROJECTS_PATH(user) | |
past_projects_path.mkdir(parents=True, exist_ok=True) | |
return sorted(list(past_projects_path.iterdir()), reverse=True) | |
def _pickle_file(path: epath.Path) -> epath.Path: | |
return path / ".metadata.pkl" | |
def save_current_project(): | |
metadata = st.session_state[Metadata] | |
project = st.session_state.get(CurrentProject) | |
if not project: | |
project = CurrentProject.create_new() | |
st.session_state[CurrentProject] = project | |
project.path.mkdir(parents=True, exist_ok=True) | |
set_project(project) | |
with _pickle_file(project.path).open("wb") as file: | |
try: | |
pickle.dump(metadata, file) | |
except pickle.PicklingError: | |
logging.error("Could not pickle metadata.") | |
def open_project(path: epath.Path) -> Metadata: | |
with _pickle_file(path).open("rb") as file: | |
return pickle.load(file) | |