markitect-main/markitect/query_paradigms/base.py

77 lines
2 KiB
Python
Raw Normal View History

"""
Base classes for query paradigms.
"""
from abc import ABC, abstractmethod
from typing import Dict, Any, List, Optional, Union
from dataclasses import dataclass
from datetime import datetime
@dataclass
class QueryResult:
"""Standardized result format for all query paradigms."""
paradigm: str
query: str
execution_time_ms: float
result_count: int
results: List[Dict[str, Any]]
metadata: Dict[str, Any]
success: bool
error_message: Optional[str] = None
class BaseQueryParadigm(ABC):
"""Base class for all query paradigms."""
@property
@abstractmethod
def name(self) -> str:
"""Human-readable name of the paradigm."""
pass
@property
@abstractmethod
def description(self) -> str:
"""Description of what this paradigm does."""
pass
@property
@abstractmethod
def category(self) -> str:
"""Category: structural, textual, semantic, procedural."""
pass
@property
@abstractmethod
def complexity(self) -> str:
"""Complexity level: beginner, intermediate, advanced."""
pass
@abstractmethod
def execute(self, query: str, config: Dict[str, Any] = None) -> QueryResult:
"""Execute a query using this paradigm."""
pass
@abstractmethod
def get_examples(self) -> List[Dict[str, str]]:
"""Get example queries for this paradigm."""
pass
@abstractmethod
def validate_query(self, query: str) -> tuple[bool, Optional[str]]:
"""Validate if a query is valid for this paradigm."""
pass
def get_syntax_help(self) -> str:
"""Get syntax help for this paradigm."""
return f"{self.name} syntax help not yet implemented."
def can_translate_from(self, other_paradigm: str) -> bool:
"""Check if this paradigm can translate queries from another."""
return False
def translate_query(self, query: str, from_paradigm: str) -> Optional[str]:
"""Translate a query from another paradigm to this one."""
return None