11import os
2- from typing import Optional
2+ from typing import Optional , Literal
33from urllib .parse import urlparse
44
55from sqlalchemy import create_engine as sa_create_engine , text as sa_text , Engine
66from loguru import logger
77
88
9- def _create_sqlite_engine (db_url : Optional [ str ] = None , db_name : Optional [ str ] = None , storage_dir : str = "storage" ) -> Engine :
9+ def _create_sqlite_engine (db_url : str ) -> Engine :
1010 """
11- Create a SQLite engine from a URL or create a default URL if not provided .
11+ Create a SQLite engine from a URL.
1212
1313 Args:
1414 db_url: SQLite database URL (sqlite:///path/to/file.db)
15- db_name: Database name to use if db_url is not provided
16- storage_dir: Directory to store SQLite databases (default: 'storage')
1715
1816 Returns:
1917 SQLAlchemy engine instance
20-
21- Raises:
22- ValueError: If neither db_url nor db_name is provided
2318 """
24- if db_url :
25- return sa_create_engine (db_url )
26-
27- if not db_name :
28- raise ValueError ("Either db_url or db_name must be provided for SQLite" )
29-
30- # Create default SQLite path
31- db_path = os .path .join (os .getcwd (), storage_dir , f"{ db_name } .db" )
32- if not os .path .exists (os .path .dirname (db_path )):
33- os .makedirs (os .path .dirname (db_path ))
34-
35- return sa_create_engine (f"sqlite:///{ db_path } " )
19+ return sa_create_engine (db_url )
3620
3721
3822def _ensure_postgres_database_exists (db_url : str ) -> None :
@@ -86,28 +70,27 @@ def _create_postgres_engine(db_url: str) -> Engine:
8670 return sa_create_engine (db_url )
8771
8872
89- def create_engine (db_type : str = "sqlite" , db_url : Optional [ str ] = None , db_name : Optional [ str ] = None , storage_dir : str = "storage" ) -> Engine :
73+ def create_engine (db_type : Literal [ "sqlite" , "postgres" ] = "sqlite" , db_url : str = None ) -> Engine :
9074 """
9175 Create a database engine based on the provided configuration.
9276
9377 Args:
9478 db_type: Type of database ('sqlite' or 'postgres')
9579 db_url: Database URL. For postgres: postgresql://user:password@host:port/database,
9680 for sqlite: sqlite:///path/to/file.db
97- db_name: Database name to use if db_url is not provided (SQLite only)
98- storage_dir: Directory to store SQLite databases (default: 'storage')
9981
10082 Returns:
10183 SQLAlchemy engine instance
10284
10385 Raises:
104- ValueError: If an unsupported database type is specified or if required parameters are missing
86+ ValueError: If an unsupported database type is specified or if db_url is missing
10587 """
88+ if not db_url :
89+ raise ValueError ("Database URL is required" )
90+
10691 if db_type == "sqlite" :
107- return _create_sqlite_engine (db_url , db_name , storage_dir )
92+ return _create_sqlite_engine (db_url )
10893 elif db_type == "postgres" :
109- if not db_url :
110- raise ValueError ("Database URL is required for PostgreSQL" )
11194 return _create_postgres_engine (db_url )
11295 else :
11396 raise ValueError (f"Unsupported database type: { db_type } " )
0 commit comments