|
|
""" |
|
|
Smart Investigation Service Selector. |
|
|
|
|
|
Automatically selects the correct investigation service implementation based on environment: |
|
|
- HuggingFace Spaces: Uses REST API (HTTP/HTTPS) |
|
|
- Local/VPS with PostgreSQL: Uses direct connection |
|
|
|
|
|
This allows the same code to work in both environments without modification. |
|
|
""" |
|
|
|
|
|
import os |
|
|
from typing import TYPE_CHECKING |
|
|
|
|
|
if TYPE_CHECKING: |
|
|
from src.services.investigation_service import InvestigationService |
|
|
|
|
|
|
|
|
def _is_huggingface_spaces() -> bool: |
|
|
"""Detect if running on HuggingFace Spaces.""" |
|
|
return os.getenv("SPACE_ID") is not None or os.getenv("SPACE_AUTHOR_NAME") is not None |
|
|
|
|
|
|
|
|
def _has_supabase_rest_config() -> bool: |
|
|
"""Check if Supabase REST API configuration is available.""" |
|
|
return bool(os.getenv("SUPABASE_URL") and os.getenv("SUPABASE_SERVICE_ROLE_KEY")) |
|
|
|
|
|
|
|
|
def _has_postgres_config() -> bool: |
|
|
"""Check if PostgreSQL direct connection configuration is available.""" |
|
|
return bool(os.getenv("DATABASE_URL") or os.getenv("SUPABASE_DB_URL")) |
|
|
|
|
|
|
|
|
def get_investigation_service() -> "InvestigationService": |
|
|
""" |
|
|
Get the appropriate investigation service for the current environment. |
|
|
|
|
|
Returns: |
|
|
Investigation service instance (REST API or direct PostgreSQL) |
|
|
""" |
|
|
|
|
|
if _is_huggingface_spaces(): |
|
|
if not _has_supabase_rest_config(): |
|
|
raise RuntimeError( |
|
|
"HuggingFace Spaces detected but SUPABASE_URL/SUPABASE_SERVICE_ROLE_KEY not configured. " |
|
|
"Add these to your Space secrets: https://huggingface.co/spaces/YOUR_SPACE/settings" |
|
|
) |
|
|
|
|
|
from src.services.investigation_service_supabase_rest import investigation_service_supabase_rest |
|
|
return investigation_service_supabase_rest |
|
|
|
|
|
|
|
|
if _has_supabase_rest_config(): |
|
|
from src.services.investigation_service_supabase_rest import investigation_service_supabase_rest |
|
|
return investigation_service_supabase_rest |
|
|
|
|
|
|
|
|
if _has_postgres_config(): |
|
|
from src.services.investigation_service_supabase import investigation_service_supabase |
|
|
return investigation_service_supabase |
|
|
|
|
|
|
|
|
from src.services.investigation_service import investigation_service |
|
|
return investigation_service |
|
|
|
|
|
|
|
|
|
|
|
investigation_service = get_investigation_service() |
|
|
|