Download database.py from T7yrttrd/Spark.4.5.Text.Image.File.Search.Connectors: direct link, hf CLI and curl.
- Browser
- Download file 3.72 kB
-
https://huggingface.co/spaces/T7yrttrd/Spark.4.5.Text.Image.File.Search.Connectors/resolve/3ef0831909a0c0d2a2a68226331a0aff52ba7671/database.py
- Command line
-
hf download hf://spaces/T7yrttrd/Spark.4.5.Text.Image.File.Search.Connectors@3ef0831909a0c0d2a2a68226331a0aff52ba7671/database.py
-
curl -L -o database.py https://huggingface.co/spaces/T7yrttrd/Spark.4.5.Text.Image.File.Search.Connectors/resolve/3ef0831909a0c0d2a2a68226331a0aff52ba7671/database.py
3.72 kB
| import json | |
| import httpx | |
| from config import SUPABASE_URL, SUPABASE_KEY, user_tokens | |
| async def save_token_to_supabase(user_id: str, service: str, token_data: dict): | |
| google_services = ["google", "gmail", "calendar", "drive"] | |
| ms_services = ["microsoft", "teams", "word", "excel", "powerpoint"] | |
| if service in google_services: | |
| target_services = google_services | |
| elif service in ms_services: | |
| target_services = ms_services | |
| else: | |
| target_services = [service] | |
| for s in target_services: | |
| user_tokens[(user_id, s)] = token_data | |
| try: | |
| url = f"{SUPABASE_URL}/rest/v1/user_connectors" | |
| headers = { | |
| "apikey": SUPABASE_KEY, | |
| "Authorization": f"Bearer {SUPABASE_KEY}", | |
| "Content-Type": "application/json", | |
| "Prefer": "resolution=merge-duplicates" | |
| } | |
| payload = { | |
| "user_id": user_id, | |
| "service": s, | |
| "token_data": token_data | |
| } | |
| async with httpx.AsyncClient(timeout=15.0) as c: | |
| await c.post(url, headers=headers, json=payload) | |
| except Exception: | |
| pass | |
| async def get_token_from_supabase(user_id: str, service: str): | |
| google_services = ["google", "gmail", "calendar", "drive"] | |
| ms_services = ["microsoft", "teams", "word", "excel", "powerpoint"] | |
| if service in google_services: | |
| check_services = [service] + [x for x in google_services if x != service] | |
| elif service in ms_services: | |
| check_services = [service] + [x for x in ms_services if x != service] | |
| else: | |
| check_services = [service] | |
| for s in check_services: | |
| if (user_id, s) in user_tokens: | |
| return user_tokens[(user_id, s)] | |
| try: | |
| url = f"{SUPABASE_URL}/rest/v1/user_connectors?user_id=eq.{user_id}&service=eq.{s}&select=token_data" | |
| headers = { | |
| "apikey": SUPABASE_KEY, | |
| "Authorization": f"Bearer {SUPABASE_KEY}" | |
| } | |
| async with httpx.AsyncClient(timeout=15.0) as c: | |
| res = await c.get(url, headers=headers) | |
| if res.status_code == 200: | |
| data = res.json() | |
| if data and len(data) > 0: | |
| raw_t = data[0].get("token_data") | |
| if isinstance(raw_t, dict): | |
| t_data = raw_t | |
| elif isinstance(raw_t, str): | |
| t_data = json.loads(raw_t) | |
| else: | |
| t_data = {} | |
| if t_data: | |
| user_tokens[(user_id, s)] = t_data | |
| return t_data | |
| except Exception: | |
| pass | |
| return None | |
| async def delete_token_from_supabase(user_id: str, service: str): | |
| google_services = ["google", "gmail", "calendar", "drive"] | |
| ms_services = ["microsoft", "teams", "word", "excel", "powerpoint"] | |
| if service in google_services: | |
| target_services = google_services | |
| elif service in ms_services: | |
| target_services = ms_services | |
| else: | |
| target_services = [service] | |
| for s in target_services: | |
| user_tokens.pop((user_id, s), None) | |
| try: | |
| url = f"{SUPABASE_URL}/rest/v1/user_connectors?user_id=eq.{user_id}&service=eq.{s}" | |
| headers = { | |
| "apikey": SUPABASE_KEY, | |
| "Authorization": f"Bearer {SUPABASE_KEY}" | |
| } | |
| async with httpx.AsyncClient(timeout=15.0) as c: | |
| await c.delete(url, headers=headers) | |
| except Exception: | |
| pass | |