Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.8/site-packages/sqlalchemy/dialects/__init__.py: 75%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

28 statements  

1# dialects/__init__.py 

2# Copyright (C) 2005-2024 the SQLAlchemy authors and contributors 

3# <see AUTHORS file> 

4# 

5# This module is part of SQLAlchemy and is released under 

6# the MIT License: https://www.opensource.org/licenses/mit-license.php 

7 

8from __future__ import annotations 

9 

10from typing import Callable 

11from typing import Optional 

12from typing import Type 

13from typing import TYPE_CHECKING 

14 

15from .. import util 

16 

17if TYPE_CHECKING: 

18 from ..engine.interfaces import Dialect 

19 

20__all__ = ("mssql", "mysql", "oracle", "postgresql", "sqlite") 

21 

22 

23def _auto_fn(name: str) -> Optional[Callable[[], Type[Dialect]]]: 

24 """default dialect importer. 

25 

26 plugs into the :class:`.PluginLoader` 

27 as a first-hit system. 

28 

29 """ 

30 if "." in name: 

31 dialect, driver = name.split(".") 

32 else: 

33 dialect = name 

34 driver = "base" 

35 

36 try: 

37 if dialect == "mariadb": 

38 # it's "OK" for us to hardcode here since _auto_fn is already 

39 # hardcoded. if mysql / mariadb etc were third party dialects 

40 # they would just publish all the entrypoints, which would actually 

41 # look much nicer. 

42 module = __import__( 

43 "sqlalchemy.dialects.mysql.mariadb" 

44 ).dialects.mysql.mariadb 

45 return module.loader(driver) # type: ignore 

46 else: 

47 module = __import__("sqlalchemy.dialects.%s" % (dialect,)).dialects 

48 module = getattr(module, dialect) 

49 except ImportError: 

50 return None 

51 

52 if hasattr(module, driver): 

53 module = getattr(module, driver) 

54 return lambda: module.dialect 

55 else: 

56 return None 

57 

58 

59registry = util.PluginLoader("sqlalchemy.dialects", auto_fn=_auto_fn) 

60 

61plugins = util.PluginLoader("sqlalchemy.plugins")