ashandilgith's picture
pushing tested revised files for HF compatibility
ab65fad
#this was not the original storage py file, and was created for Huggging Face. If this fails consider using storage_local.py
import os
import json
import streamlit as st
from google.cloud import storage
from google.oauth2 import service_account
# ✅ YOUR BUCKET NAME
BUCKET_NAME = "piranaware20251227841ph"
def get_storage_client():
"""
Authenticates with Google Cloud.
Priority:
1. Local File (Codespaces)
2. Environment Variable (Hugging Face Docker)
3. Streamlit Secrets (Streamlit Cloud fallback)
"""
# 1. Local Dev: Check for local file
if os.path.exists("gcp_key.json"):
return storage.Client.from_service_account_json("gcp_key.json")
# 2. Hugging Face / Docker: Check Environment Variable
# In HF, secrets are stored as Env Vars, so we parse the JSON string.
env_key = os.environ.get("gcp_service_account")
if env_key:
try:
creds_dict = json.loads(env_key)
creds = service_account.Credentials.from_service_account_info(creds_dict)
return storage.Client(credentials=creds)
except Exception as e:
st.error(f"⚠️ Credential Error: {e}")
return None
# 3. Streamlit Cloud: Check Secrets (Fallback)
if "gcp_service_account" in st.secrets:
try:
creds_dict = dict(st.secrets["gcp_service_account"])
creds = service_account.Credentials.from_service_account_info(creds_dict)
return storage.Client(credentials=creds)
except Exception:
pass
# 4. If nothing works
st.error("⚠️ No Google Cloud credentials found. Cannot save/load models.")
return None
def upload_file(local_path, boat_id, filename):
client = get_storage_client()
if not client: return False
try:
bucket = client.bucket(BUCKET_NAME)
# Creates folder structure: boat_id/filename
blob_name = f"{boat_id}/{filename}"
blob = bucket.blob(blob_name)
blob.upload_from_filename(local_path)
return True
except Exception as e:
st.error(f"Upload failed: {e}")
return False
def download_file(boat_id, filename, local_dest):
client = get_storage_client()
if not client: return False
try:
bucket = client.bucket(BUCKET_NAME)
blob_name = f"{boat_id}/{filename}"
blob = bucket.blob(blob_name)
if not blob.exists():
return False
blob.download_to_filename(local_dest)
return True
except Exception as e:
st.error(f"Download failed: {e}")
return False