]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- oursql dialect accepts the same "ssl" arguments in
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 10 Feb 2011 23:06:48 +0000 (18:06 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 10 Feb 2011 23:06:48 +0000 (18:06 -0500)
    create_engine() as that of MySQLdb.  [ticket:2047]

CHANGES
lib/sqlalchemy/dialects/mysql/oursql.py
test/dialect/test_mysql.py

diff --git a/CHANGES b/CHANGES
index 67b87b801f36c8c89ea63b2b7517633e12d9439b..d35ef809daba898ed594f463a8a0ae74f1d24ec8 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -59,6 +59,10 @@ CHANGES
     exceptions, "could not receive data from server"
     [ticket:2044]
 
+- mysql
+  - oursql dialect accepts the same "ssl" arguments in 
+    create_engine() as that of MySQLdb.  [ticket:2047]
+
 0.6.6
 =====
 - orm
index d3ef839b14da189f8a542af637bf5fa11cc8b5ef..001f8a0bbcbde7001afbfda5185475f8eb240346 100644 (file)
@@ -222,6 +222,16 @@ class MySQLDialect_oursql(MySQLDialect):
         # supports_sane_rowcount.
         opts.setdefault('found_rows', True)
 
+        ssl = {}
+        for key in ['ssl_ca', 'ssl_key', 'ssl_cert', 
+                        'ssl_capath', 'ssl_cipher']:
+            if key in opts:
+                ssl[key[4:]] = opts[key]
+                util.coerce_kw_type(ssl, key[4:], str)
+                del opts[key]
+        if ssl:
+            opts['ssl'] = ssl
+
         return [[], opts]
 
     def _get_server_version_info(self, connection):
index 4eff0f98a38a034a69c0a3a31ec8a30dab360428..e3168e2449268b78c0d3c8a88f02214814522148 100644 (file)
@@ -13,6 +13,32 @@ from sqlalchemy.test.testing import eq_
 from sqlalchemy.test import *
 from sqlalchemy.test.engines import utf8_engine
 import datetime
+from sqlalchemy.engine.url import make_url
+
+class DialectTest(TestBase):
+    __only_on__ = 'mysql'
+
+    @testing.only_on(['mysql+mysqldb', 'mysql+oursql'], 
+                    'requires particular SSL arguments')
+    def test_ssl_arguments(self):
+        dialect = testing.db.dialect
+        kwarg = dialect.create_connect_args(
+            make_url("mysql://scott:tiger@localhost:3306/test"
+                "?ssl_ca=/ca.pem&ssl_cert=/cert.pem&ssl_key=/key.pem")
+        )[1]
+        # args that differ among mysqldb and oursql
+        for k in ('use_unicode', 'found_rows', 'client_flag'):
+            kwarg.pop(k, None)
+        eq_(
+            kwarg, 
+            {
+                'passwd': 'tiger', 'db': 'test', 
+                'ssl': {'ca': '/ca.pem', 'cert': '/cert.pem', 
+                        'key': '/key.pem'}, 
+                'host': 'localhost', 'user': 'scott', 
+                'port': 3306
+            }
+        )
 
 class TypesTest(TestBase, AssertsExecutionResults, AssertsCompiledSQL):
     "Test MySQL column types"