import re
from types import ModuleType
+import typing
from typing import Any
from typing import Dict
from typing import List
from ..engine import URL
from ..sql.type_api import TypeEngine
+if typing.TYPE_CHECKING:
+ from ..engine.interfaces import _IsolationLevel
+
class PyODBCConnector(Connector):
driver = "pyodbc"
def get_isolation_level_values(
self, dbapi_connection: interfaces.DBAPIConnection
- ) -> List[str]:
+ ) -> List[_IsolationLevel]:
return super().get_isolation_level_values(dbapi_connection) + [ # type: ignore # noqa E501
"AUTOCOMMIT"
]
def set_isolation_level(
- self, dbapi_connection: interfaces.DBAPIConnection, level: str
+ self,
+ dbapi_connection: interfaces.DBAPIConnection,
+ level: _IsolationLevel,
) -> None:
# adjust for ConnectionFairy being present
# allows attribute set e.g. "connection.autocommit = True"
import inspect
import typing
from typing import Any
+from typing import Callable
from typing import cast
from typing import Dict
+from typing import List
from typing import Optional
+from typing import overload
+from typing import Type
from typing import Union
from . import base
if typing.TYPE_CHECKING:
from .base import Engine
+ from .interfaces import _ExecuteOptions
+ from .interfaces import _IsolationLevel
+ from .interfaces import _ParamStyle
+ from .url import URL
+ from ..log import _EchoFlagType
+ from ..pool import _CreatorFnType
+ from ..pool import _CreatorWRecFnType
+ from ..pool import _ResetStyleArgType
+ from ..pool import Pool
+ from ..util.typing import Literal
+
+
+@overload
+def create_engine(
+ url: Union[str, URL],
+ *,
+ connect_args: Dict[Any, Any] = ...,
+ convert_unicode: bool = ...,
+ creator: Union[_CreatorFnType, _CreatorWRecFnType] = ...,
+ echo: _EchoFlagType = ...,
+ echo_pool: _EchoFlagType = ...,
+ enable_from_linting: bool = ...,
+ execution_options: _ExecuteOptions = ...,
+ future: Literal[True],
+ hide_parameters: bool = ...,
+ implicit_returning: bool = ...,
+ isolation_level: _IsolationLevel = ...,
+ json_deserializer: Callable[..., Any] = ...,
+ json_serializer: Callable[..., Any] = ...,
+ label_length: Optional[int] = ...,
+ listeners: Any = ...,
+ logging_name: str = ...,
+ max_identifier_length: Optional[int] = ...,
+ max_overflow: int = ...,
+ module: Optional[Any] = ...,
+ paramstyle: Optional[_ParamStyle] = ...,
+ pool: Optional[Pool] = ...,
+ poolclass: Optional[Type[Pool]] = ...,
+ pool_logging_name: str = ...,
+ pool_pre_ping: bool = ...,
+ pool_size: int = ...,
+ pool_recycle: int = ...,
+ pool_reset_on_return: Optional[_ResetStyleArgType] = ...,
+ pool_timeout: float = ...,
+ pool_use_lifo: bool = ...,
+ plugins: List[str] = ...,
+ query_cache_size: int = ...,
+ **kwargs: Any,
+) -> Engine:
+ ...
+
+
+@overload
+def create_engine(url: Union[str, URL], **kwargs: Any) -> Engine:
+ ...
@util.deprecated_params(
from ..util import immutabledict
from ..util.concurrency import await_only
from ..util.typing import _TypeToInstance
+from ..util.typing import Literal
from ..util.typing import NotRequired
from ..util.typing import Protocol
from ..util.typing import TypedDict
_ImmutableExecuteOptions = immutabledict[str, Any]
+_ParamStyle = Literal["qmark", "numeric", "named", "format", "pyformat"]
+
+_IsolationLevel = Literal[
+ "SERIALIZABLE",
+ "REPEATABLE READ",
+ "READ COMMITTED",
+ "READ UNCOMMITTED",
+ "AUTOCOMMIT",
+]
+
class ReflectedIdentity(TypedDict):
"""represent the reflected IDENTITY structure of a column, corresponding
"""
- default_isolation_level: str
+ default_isolation_level: _IsolationLevel
"""the isolation that is implicitly present on new connections"""
execution_ctx_cls: Type["ExecutionContext"]
raise NotImplementedError()
def set_isolation_level(
- self, dbapi_connection: DBAPIConnection, level: str
+ self, dbapi_connection: DBAPIConnection, level: _IsolationLevel
) -> None:
"""Given a DBAPI connection, set its isolation level.
raise NotImplementedError()
- def get_isolation_level(self, dbapi_connection: DBAPIConnection) -> str:
+ def get_isolation_level(
+ self, dbapi_connection: DBAPIConnection
+ ) -> _IsolationLevel:
"""Given a DBAPI connection, return its isolation level.
When working with a :class:`_engine.Connection` object,
raise NotImplementedError()
- def get_default_isolation_level(self, dbapi_conn: DBAPIConnection) -> str:
+ def get_default_isolation_level(
+ self, dbapi_conn: DBAPIConnection
+ ) -> _IsolationLevel:
"""Given a DBAPI connection, return its isolation level, or
a default isolation level if one cannot be retrieved.
def get_isolation_level_values(
self, dbapi_conn: DBAPIConnection
- ) -> List[str]:
+ ) -> List[_IsolationLevel]:
"""return a sequence of string isolation level names that are accepted
by this dialect.
raise NotImplementedError()
def _assert_and_set_isolation_level(
- self, dbapi_conn: DBAPIConnection, level: str
+ self, dbapi_conn: DBAPIConnection, level: _IsolationLevel
) -> None:
raise NotImplementedError()
from .base import _AdhocProxiedConnection as _AdhocProxiedConnection
from .base import _ConnectionFairy as _ConnectionFairy
from .base import _ConnectionRecord
+from .base import _CreatorFnType as _CreatorFnType
+from .base import _CreatorWRecFnType as _CreatorWRecFnType
from .base import _finalize_fairy
+from .base import _ResetStyleArgType as _ResetStyleArgType
from .base import ConnectionPoolEntry as ConnectionPoolEntry
from .base import ManagesConnection as ManagesConnection
from .base import Pool as Pool
_ResetStyleArgType = Union[
ResetStyle,
- Literal[True],
- Literal[None],
- Literal[False],
- Literal["commit"],
- Literal["rollback"],
+ Literal[True, None, False, "commit", "rollback"],
]
reset_rollback, reset_commit, reset_none = list(ResetStyle)