| |
|
| | import os |
| | import sys |
| | import time |
| | from dotenv import load_dotenv |
| | from appwrite.client import Client |
| | from appwrite.services.databases import Databases |
| |
|
| | load_dotenv() |
| |
|
| | APPWRITE_ENDPOINT = os.getenv("APPWRITE_ENDPOINT") |
| | APPWRITE_PROJECT_ID = os.getenv("APPWRITE_PROJECT_ID") |
| | APPWRITE_API_KEY = os.getenv("APPWRITE_API_KEY") |
| | APPWRITE_DATABASE_ID = os.getenv("APPWRITE_DATABASE_ID") |
| | RESEARCH_COLLECTION_ID = os.getenv("APPWRITE_RESEARCH_COLLECTION_ID") |
| |
|
| | client = Client() |
| | client.set_endpoint(APPWRITE_ENDPOINT) |
| | client.set_project(APPWRITE_PROJECT_ID) |
| | client.set_key(APPWRITE_API_KEY) |
| |
|
| | databases = Databases(client) |
| |
|
| | def wait_for_attribute(collection_id, key): |
| | print(f" ⏳ Waiting for attribute '{key}'...", end="", flush=True) |
| | for _ in range(30): |
| | try: |
| | response = databases.list_attributes(APPWRITE_DATABASE_ID, collection_id) |
| | attrs = response.get('attributes', []) |
| | target = next((a for a in attrs if a['key'] == key), None) |
| | if target and target['status'] == 'available': |
| | print(" ✅ Ready.") |
| | return True |
| | time.sleep(2) |
| | print(".", end="", flush=True) |
| | except Exception: |
| | time.sleep(2) |
| | print(" ❌ Timeout.") |
| | return False |
| |
|
| | def add_missing(): |
| | print(f"🔧 Adding missing attributes to {RESEARCH_COLLECTION_ID}...") |
| | |
| | |
| | print(" -> original_category") |
| | try: |
| | databases.create_string_attribute(APPWRITE_DATABASE_ID, RESEARCH_COLLECTION_ID, "original_category", 50, False) |
| | except Exception as e: |
| | if "already exists" not in str(e): print(f"Error: {e}") |
| | wait_for_attribute(RESEARCH_COLLECTION_ID, "original_category") |
| |
|
| | |
| | print(" -> sub_category") |
| | try: |
| | databases.create_string_attribute(APPWRITE_DATABASE_ID, RESEARCH_COLLECTION_ID, "sub_category", 100, False) |
| | except Exception as e: |
| | if "already exists" not in str(e): print(f"Error: {e}") |
| | wait_for_attribute(RESEARCH_COLLECTION_ID, "sub_category") |
| |
|
| | |
| | print(" -> source") |
| | try: |
| | databases.create_string_attribute(APPWRITE_DATABASE_ID, RESEARCH_COLLECTION_ID, "source", 50, False) |
| | except Exception as e: |
| | if "already exists" not in str(e): print(f"Error: {e}") |
| | wait_for_attribute(RESEARCH_COLLECTION_ID, "source") |
| |
|
| | print("\n✅ Schema Update Complete.") |
| |
|
| | if __name__ == "__main__": |
| | add_missing() |
| |
|