Kshitijk20's picture
code push
99bbd9b
from pydantic import BaseModel, validator
from urllib.parse import urlparse
import re
class DatabaseConnectionRequest(BaseModel):
connection_string: str # e.g., "mysql+pymysql://user:password@host:port/database"
@validator('connection_string')
def validate_connection_string(cls, v):
if not v:
raise ValueError("Connection string cannot be empty")
# Check if string follows basic URL format
try:
# Basic format check
if not re.match(r'^[a-zA-Z]+(\+[a-zA-Z]+)?://[^/]+/.+$', v):
raise ValueError("Invalid connection string format - must follow pattern: dialect+driver://username:password@host:port/database")
# Parse URL to validate components
parsed = urlparse(v)
# Validate scheme (database type)
if not parsed.scheme:
raise ValueError("Database type must be specified")
# Validate that we have a hostname
if not parsed.hostname:
raise ValueError("Host must be specified")
# Validate that we have a database name
if not parsed.path or parsed.path == '/':
raise ValueError("Database name must be specified")
# Validate port if present
if parsed.port and (parsed.port < 1 or parsed.port > 65535):
raise ValueError("Port number must be between 1 and 65535")
return v
except Exception as e:
raise ValueError(f"Invalid connection string: {str(e)}")
# Alternatively, you can break it down into individual fields:
# db_type: str # e.g., "mysql", "postgres"
# host: str
# port: int
# database: str
# username: str
# password: str
class SQLQueryRequest(BaseModel):
query: str
class SQLQueryResponse(BaseModel):
result: str