summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-05-22 13:51:00 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2015-05-22 13:51:00 -0400
commit04c625467e65ec4189d4fd73e0e10c727f04dce6 (patch)
tree454220f26352b5454f18d0627999d35fed5d86b0
parentc581b907b3f1bcee3ab347e9a93c2c2b37bfe7ef (diff)
downloadsqlalchemy-04c625467e65ec4189d4fd73e0e10c727f04dce6.tar.gz
- Adjustments to the engine plugin hook, such that the
:meth:`.URL.get_dialect` method will continue to return the ultimate :class:`.Dialect` object when a dialect plugin is used, without the need for the caller to be aware of the :meth:`.Dialect.get_dialect_cls` method. reference #3379
-rw-r--r--doc/build/changelog/changelog_10.rst11
-rw-r--r--lib/sqlalchemy/engine/strategies.py3
-rw-r--r--lib/sqlalchemy/engine/url.py18
3 files changed, 23 insertions, 9 deletions
diff --git a/doc/build/changelog/changelog_10.rst b/doc/build/changelog/changelog_10.rst
index 291382ba1..917485582 100644
--- a/doc/build/changelog/changelog_10.rst
+++ b/doc/build/changelog/changelog_10.rst
@@ -19,6 +19,17 @@
:version: 1.0.5
.. change::
+ :tags: feature, engine
+ :tickets: 3379
+
+ Adjustments to the engine plugin hook, such that the
+ :meth:`.URL.get_dialect` method will continue to return the
+ ultimate :class:`.Dialect` object when a dialect plugin is used,
+ without the need for the caller to be aware of the
+ :meth:`.Dialect.get_dialect_cls` method.
+
+
+ .. change::
:tags: bug, ext
:tickets: 3427
diff --git a/lib/sqlalchemy/engine/strategies.py b/lib/sqlalchemy/engine/strategies.py
index a802e5d90..e2a086de4 100644
--- a/lib/sqlalchemy/engine/strategies.py
+++ b/lib/sqlalchemy/engine/strategies.py
@@ -48,8 +48,7 @@ class DefaultEngineStrategy(EngineStrategy):
# create url.URL object
u = url.make_url(name_or_url)
- entrypoint = u.get_dialect()
- dialect_cls = entrypoint.get_dialect_cls(u)
+ entrypoint, dialect_cls = u._get_dialect_plus_entrypoint()
if kwargs.pop('_coerce_config', False):
def pop_kwarg(key, default=None):
diff --git a/lib/sqlalchemy/engine/url.py b/lib/sqlalchemy/engine/url.py
index d045961dd..07f6a5730 100644
--- a/lib/sqlalchemy/engine/url.py
+++ b/lib/sqlalchemy/engine/url.py
@@ -117,11 +117,7 @@ class URL(object):
else:
return self.drivername.split('+')[1]
- def get_dialect(self):
- """Return the SQLAlchemy database dialect class corresponding
- to this URL's driver name.
- """
-
+ def _get_dialect_plus_entrypoint(self):
if '+' not in self.drivername:
name = self.drivername
else:
@@ -133,9 +129,17 @@ class URL(object):
if hasattr(cls, 'dialect') and \
isinstance(cls.dialect, type) and \
issubclass(cls.dialect, Dialect):
- return cls.dialect
+ return cls.dialect, cls.dialect
else:
- return cls
+ dialect_cls = cls.get_dialect_cls(self)
+ return cls, dialect_cls
+
+ def get_dialect(self):
+ """Return the SQLAlchemy database dialect class corresponding
+ to this URL's driver name.
+ """
+ entrypoint, dialect_cls = self._get_dialect_plus_entrypoint()
+ return dialect_cls
def translate_connect_args(self, names=[], **kw):
"""Translate url attributes into a dictionary of connection arguments.