1# dialects/__init__.py
2# Copyright (C) 2005-2021 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: http://www.opensource.org/licenses/mit-license.php
7
8__all__ = (
9 "firebird",
10 "mssql",
11 "mysql",
12 "oracle",
13 "postgresql",
14 "sqlite",
15 "sybase",
16)
17
18from .. import util
19
20
21_translates = {"postgres": "postgresql"}
22
23
24def _auto_fn(name):
25 """default dialect importer.
26
27 plugs into the :class:`.PluginLoader`
28 as a first-hit system.
29
30 """
31 if "." in name:
32 dialect, driver = name.split(".")
33 else:
34 dialect = name
35 driver = "base"
36
37 if dialect in _translates:
38 translated = _translates[dialect]
39 util.warn_deprecated(
40 "The '%s' dialect name has been "
41 "renamed to '%s'" % (dialect, translated)
42 )
43 dialect = translated
44 try:
45 if dialect == "firebird":
46 try:
47 module = __import__("sqlalchemy_firebird")
48 except ImportError:
49 module = __import__("sqlalchemy.dialects.firebird").dialects
50 module = getattr(module, dialect)
51 elif dialect == "sybase":
52 try:
53 module = __import__("sqlalchemy_sybase")
54 except ImportError:
55 module = __import__("sqlalchemy.dialects.sybase").dialects
56 module = getattr(module, dialect)
57 else:
58 module = __import__("sqlalchemy.dialects.%s" % (dialect,)).dialects
59 module = getattr(module, dialect)
60 except ImportError:
61 return None
62
63 if hasattr(module, driver):
64 module = getattr(module, driver)
65 return lambda: module.dialect
66 else:
67 return None
68
69
70registry = util.PluginLoader("sqlalchemy.dialects", auto_fn=_auto_fn)
71
72plugins = util.PluginLoader("sqlalchemy.plugins")