database-duel / models.py
mattmajestic's picture
Upload 8 files
bc6c423 verified
# models.py
from enum import Enum
from typing import Optional
from pydantic import BaseModel, Field, SecretStr
import pandas as pd
class UploadData:
def __init__(self, file_path: str, file_type: str):
self.file_path = file_path
self.file_type = file_type.lower()
self.data = None
def load_file(self):
if self.file_type == 'csv':
self.data = pd.read_csv(self.file_path)
elif self.file_type == 'excel':
self.data = pd.read_excel(self.file_path)
elif self.file_type == 'json':
self.data = pd.read_json(self.file_path)
elif self.file_type == 'parquet':
self.data = pd.read_parquet(self.file_path)
else:
raise ValueError(f"Unsupported file type: {self.file_type}")
def get_data(self):
if self.data is None:
raise ValueError("No data has been loaded. Please load a file first.")
return self.data
# Define the supported database types
class DatabaseType(str, Enum):
DUCKDB = "DuckDB"
POSTGRES = "Postgres"
MYSQL = "MySQL"
SQLITE = "SQLite"
MONGODB = "MongoDB"
# Add more databases as needed
# Base model for database connection settings
class DatabaseConnection(BaseModel):
name: str = Field(..., description="Friendly name for the database")
db_type: DatabaseType = Field(..., description="Type of the database")
host: Optional[str] = Field(None, description="Hostname or IP address")
port: Optional[int] = Field(None, description="Port number")
username: Optional[str] = Field(None, description="Username")
password: Optional[SecretStr] = Field(None, description="Password")
database: Optional[str] = Field(None, description="Database name")
class Config:
schema_extra = {
"example": {
"name": "Primary Database",
"db_type": "Postgres",
"host": "localhost",
"port": 5432,
"username": "user",
"password": "password",
"database": "sample_db",
}
}
# Model for database performance metrics
class DatabasePerformance(BaseModel):
db_name: str
avg_query_time: float = Field(..., description="Average query execution time in seconds")
total_queries: int = Field(..., description="Total number of queries run")
total_time: float = Field(..., description="Total time taken for all queries in seconds")
data_insertion_time: float = Field(..., description="Time taken for data insertion")
class Config:
schema_extra = {
"example": {
"db_name": "Postgres",
"avg_query_time": 0.075,
"total_queries": 10,
"total_time": 0.85,
"data_insertion_time": 0.2,
}
}