diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-01-06 01:14:26 -0500 |
|---|---|---|
| committer | mike bayer <mike_mp@zzzcomputing.com> | 2019-01-06 17:34:50 +0000 |
| commit | 1e1a38e7801f410f244e4bbb44ec795ae152e04e (patch) | |
| tree | 28e725c5c8188bd0cfd133d1e268dbca9b524978 /test/dialect/mssql/test_engine.py | |
| parent | 404e69426b05a82d905cbb3ad33adafccddb00dd (diff) | |
| download | sqlalchemy-1e1a38e7801f410f244e4bbb44ec795ae152e04e.tar.gz | |
Run black -l 79 against all source files
This is a straight reformat run using black as is, with no edits
applied at all.
The black run will format code consistently, however in
some cases that are prevalent in SQLAlchemy code it produces
too-long lines. The too-long lines will be resolved in the
following commit that will resolve all remaining flake8 issues
including shadowed builtins, long lines, import order, unused
imports, duplicate imports, and docstring issues.
Change-Id: I7eda77fed3d8e73df84b3651fd6cfcfe858d4dc9
Diffstat (limited to 'test/dialect/mssql/test_engine.py')
| -rw-r--r-- | test/dialect/mssql/test_engine.py | 367 |
1 files changed, 224 insertions, 143 deletions
diff --git a/test/dialect/mssql/test_engine.py b/test/dialect/mssql/test_engine.py index 973eb6dbb..40d3894fb 100644 --- a/test/dialect/mssql/test_engine.py +++ b/test/dialect/mssql/test_engine.py @@ -6,8 +6,11 @@ from sqlalchemy.dialects.mssql import pyodbc, pymssql, adodbapi from sqlalchemy.engine import url from sqlalchemy.testing import fixtures from sqlalchemy import testing -from sqlalchemy.testing import assert_raises_message, \ - assert_warnings, expect_warnings +from sqlalchemy.testing import ( + assert_raises_message, + assert_warnings, + expect_warnings, +) from sqlalchemy.testing.mock import Mock from sqlalchemy.dialects.mssql import base from sqlalchemy import Integer, String, Table, Column @@ -15,30 +18,29 @@ from sqlalchemy import event class ParseConnectTest(fixtures.TestBase): - def test_pyodbc_connect_dsn_trusted(self): dialect = pyodbc.dialect() - u = url.make_url('mssql://mydsn') + u = url.make_url("mssql://mydsn") connection = dialect.create_connect_args(u) - eq_([['dsn=mydsn;Trusted_Connection=Yes'], {}], connection) + eq_([["dsn=mydsn;Trusted_Connection=Yes"], {}], connection) def test_pyodbc_connect_old_style_dsn_trusted(self): dialect = pyodbc.dialect() - u = url.make_url('mssql:///?dsn=mydsn') + u = url.make_url("mssql:///?dsn=mydsn") connection = dialect.create_connect_args(u) - eq_([['dsn=mydsn;Trusted_Connection=Yes'], {}], connection) + eq_([["dsn=mydsn;Trusted_Connection=Yes"], {}], connection) def test_pyodbc_connect_dsn_non_trusted(self): dialect = pyodbc.dialect() - u = url.make_url('mssql://username:password@mydsn') + u = url.make_url("mssql://username:password@mydsn") connection = dialect.create_connect_args(u) - eq_([['dsn=mydsn;UID=username;PWD=password'], {}], connection) + eq_([["dsn=mydsn;UID=username;PWD=password"], {}], connection) def test_pyodbc_connect_dsn_extra(self): dialect = pyodbc.dialect() - u = \ - url.make_url('mssql://username:password@mydsn/?LANGUAGE=us_' - 'english&foo=bar') + u = url.make_url( + "mssql://username:password@mydsn/?LANGUAGE=us_" "english&foo=bar" + ) connection = dialect.create_connect_args(u) dsn_string = connection[0][0] assert ";LANGUAGE=us_english" in dsn_string @@ -47,87 +49,151 @@ class ParseConnectTest(fixtures.TestBase): def test_pyodbc_hostname(self): dialect = pyodbc.dialect() u = url.make_url( - 'mssql://username:password@hostspec/database?driver=SQL+Server' + "mssql://username:password@hostspec/database?driver=SQL+Server" ) connection = dialect.create_connect_args(u) - eq_([['DRIVER={SQL Server};Server=hostspec;Database=database;UI' - 'D=username;PWD=password'], {}], connection) + eq_( + [ + [ + "DRIVER={SQL Server};Server=hostspec;Database=database;UI" + "D=username;PWD=password" + ], + {}, + ], + connection, + ) def test_pyodbc_host_no_driver(self): dialect = pyodbc.dialect() - u = url.make_url('mssql://username:password@hostspec/database') + u = url.make_url("mssql://username:password@hostspec/database") def go(): return dialect.create_connect_args(u) + connection = assert_warnings( go, - ["No driver name specified; this is expected by " - "PyODBC when using DSN-less connections"]) + [ + "No driver name specified; this is expected by " + "PyODBC when using DSN-less connections" + ], + ) - eq_([['Server=hostspec;Database=database;UI' - 'D=username;PWD=password'], {}], connection) + eq_( + [ + [ + "Server=hostspec;Database=database;UI" + "D=username;PWD=password" + ], + {}, + ], + connection, + ) def test_pyodbc_connect_comma_port(self): dialect = pyodbc.dialect() - u = \ - url.make_url('mssql://username:password@hostspec:12345/data' - 'base?driver=SQL Server') + u = url.make_url( + "mssql://username:password@hostspec:12345/data" + "base?driver=SQL Server" + ) connection = dialect.create_connect_args(u) - eq_([['DRIVER={SQL Server};Server=hostspec,12345;Database=datab' - 'ase;UID=username;PWD=password'], {}], connection) + eq_( + [ + [ + "DRIVER={SQL Server};Server=hostspec,12345;Database=datab" + "ase;UID=username;PWD=password" + ], + {}, + ], + connection, + ) def test_pyodbc_connect_config_port(self): dialect = pyodbc.dialect() - u = \ - url.make_url('mssql://username:password@hostspec/database?p' - 'ort=12345&driver=SQL+Server') + u = url.make_url( + "mssql://username:password@hostspec/database?p" + "ort=12345&driver=SQL+Server" + ) connection = dialect.create_connect_args(u) - eq_([['DRIVER={SQL Server};Server=hostspec;Database=database;UI' - 'D=username;PWD=password;port=12345'], {}], connection) + eq_( + [ + [ + "DRIVER={SQL Server};Server=hostspec;Database=database;UI" + "D=username;PWD=password;port=12345" + ], + {}, + ], + connection, + ) def test_pyodbc_extra_connect(self): dialect = pyodbc.dialect() - u = \ - url.make_url('mssql://username:password@hostspec/database?L' - 'ANGUAGE=us_english&foo=bar&driver=SQL+Server') + u = url.make_url( + "mssql://username:password@hostspec/database?L" + "ANGUAGE=us_english&foo=bar&driver=SQL+Server" + ) connection = dialect.create_connect_args(u) eq_(connection[1], {}) - eq_(connection[0][0] - in ('DRIVER={SQL Server};Server=hostspec;Database=database;' - 'UID=username;PWD=password;foo=bar;LANGUAGE=us_english', - 'DRIVER={SQL Server};Server=hostspec;Database=database;UID=' - 'username;PWD=password;LANGUAGE=us_english;foo=bar'), True) + eq_( + connection[0][0] + in ( + "DRIVER={SQL Server};Server=hostspec;Database=database;" + "UID=username;PWD=password;foo=bar;LANGUAGE=us_english", + "DRIVER={SQL Server};Server=hostspec;Database=database;UID=" + "username;PWD=password;LANGUAGE=us_english;foo=bar", + ), + True, + ) def test_pyodbc_odbc_connect(self): dialect = pyodbc.dialect() - u = \ - url.make_url('mssql:///?odbc_connect=DRIVER%3D%7BSQL+Server' - '%7D%3BServer%3Dhostspec%3BDatabase%3Ddatabase' - '%3BUID%3Dusername%3BPWD%3Dpassword') + u = url.make_url( + "mssql:///?odbc_connect=DRIVER%3D%7BSQL+Server" + "%7D%3BServer%3Dhostspec%3BDatabase%3Ddatabase" + "%3BUID%3Dusername%3BPWD%3Dpassword" + ) connection = dialect.create_connect_args(u) - eq_([['DRIVER={SQL Server};Server=hostspec;Database=database;UI' - 'D=username;PWD=password'], {}], connection) + eq_( + [ + [ + "DRIVER={SQL Server};Server=hostspec;Database=database;UI" + "D=username;PWD=password" + ], + {}, + ], + connection, + ) def test_pyodbc_odbc_connect_with_dsn(self): dialect = pyodbc.dialect() - u = \ - url.make_url('mssql:///?odbc_connect=dsn%3Dmydsn%3BDatabase' - '%3Ddatabase%3BUID%3Dusername%3BPWD%3Dpassword' - ) + u = url.make_url( + "mssql:///?odbc_connect=dsn%3Dmydsn%3BDatabase" + "%3Ddatabase%3BUID%3Dusername%3BPWD%3Dpassword" + ) connection = dialect.create_connect_args(u) - eq_([['dsn=mydsn;Database=database;UID=username;PWD=password'], - {}], connection) + eq_( + [["dsn=mydsn;Database=database;UID=username;PWD=password"], {}], + connection, + ) def test_pyodbc_odbc_connect_ignores_other_values(self): dialect = pyodbc.dialect() - u = \ - url.make_url('mssql://userdiff:passdiff@localhost/dbdiff?od' - 'bc_connect=DRIVER%3D%7BSQL+Server%7D%3BServer' - '%3Dhostspec%3BDatabase%3Ddatabase%3BUID%3Duse' - 'rname%3BPWD%3Dpassword') + u = url.make_url( + "mssql://userdiff:passdiff@localhost/dbdiff?od" + "bc_connect=DRIVER%3D%7BSQL+Server%7D%3BServer" + "%3Dhostspec%3BDatabase%3Ddatabase%3BUID%3Duse" + "rname%3BPWD%3Dpassword" + ) connection = dialect.create_connect_args(u) - eq_([['DRIVER={SQL Server};Server=hostspec;Database=database;UI' - 'D=username;PWD=password'], {}], connection) + eq_( + [ + [ + "DRIVER={SQL Server};Server=hostspec;Database=database;UI" + "D=username;PWD=password" + ], + {}, + ], + connection, + ) def test_pyodbc_token_injection(self): token1 = "someuser%3BPORT%3D50001" @@ -136,18 +202,21 @@ class ParseConnectTest(fixtures.TestBase): token4 = "somedb%3BPORT%3D50001" u = url.make_url( - 'mssql+pyodbc://%s:%s@%s/%s?driver=foob' % ( - token1, token2, token3, token4 - ) + "mssql+pyodbc://%s:%s@%s/%s?driver=foob" + % (token1, token2, token3, token4) ) dialect = pyodbc.dialect() connection = dialect.create_connect_args(u) eq_( - [[ - "DRIVER={foob};Server=somehost%3BPORT%3D50001;" - "Database=somedb%3BPORT%3D50001;UID='someuser;PORT=50001';" - "PWD='somepw;PORT=50001'"], {}], - connection + [ + [ + "DRIVER={foob};Server=somehost%3BPORT%3D50001;" + "Database=somedb%3BPORT%3D50001;UID='someuser;PORT=50001';" + "PWD='somepw;PORT=50001'" + ], + {}, + ], + connection, ) def test_adodbapi_token_injection(self): @@ -158,49 +227,67 @@ class ParseConnectTest(fixtures.TestBase): # this URL format is all wrong u = url.make_url( - 'mssql+adodbapi://@/?user=%s&password=%s&host=%s&port=%s' % ( - token1, token2, token3, token4 - ) + "mssql+adodbapi://@/?user=%s&password=%s&host=%s&port=%s" + % (token1, token2, token3, token4) ) dialect = adodbapi.dialect() connection = dialect.create_connect_args(u) eq_( - [["Provider=SQLOLEDB;" - "Data Source='somehost;PORT=50001', 'someport;PORT=50001';" - "Initial Catalog=None;User Id='someuser;PORT=50001';" - "Password='somepw;PORT=50001'"], {}], - connection + [ + [ + "Provider=SQLOLEDB;" + "Data Source='somehost;PORT=50001', 'someport;PORT=50001';" + "Initial Catalog=None;User Id='someuser;PORT=50001';" + "Password='somepw;PORT=50001'" + ], + {}, + ], + connection, ) def test_pymssql_port_setting(self): dialect = pymssql.dialect() - u = \ - url.make_url('mssql+pymssql://scott:tiger@somehost/test') + u = url.make_url("mssql+pymssql://scott:tiger@somehost/test") connection = dialect.create_connect_args(u) eq_( - [[], {'host': 'somehost', 'password': 'tiger', - 'user': 'scott', 'database': 'test'}], connection + [ + [], + { + "host": "somehost", + "password": "tiger", + "user": "scott", + "database": "test", + }, + ], + connection, ) - u = \ - url.make_url('mssql+pymssql://scott:tiger@somehost:5000/test') + u = url.make_url("mssql+pymssql://scott:tiger@somehost:5000/test") connection = dialect.create_connect_args(u) eq_( - [[], {'host': 'somehost:5000', 'password': 'tiger', - 'user': 'scott', 'database': 'test'}], connection + [ + [], + { + "host": "somehost:5000", + "password": "tiger", + "user": "scott", + "database": "test", + }, + ], + connection, ) def test_pymssql_disconnect(self): dialect = pymssql.dialect() for error in [ - 'Adaptive Server connection timed out', - 'Net-Lib error during Connection reset by peer', - 'message 20003', - 'Error 10054', - 'Not connected to any MS SQL server', - 'Connection is closed' + "Adaptive Server connection timed out", + "Net-Lib error during Connection reset by peer", + "message 20003", + "Error 10054", + "Not connected to any MS SQL server", + "Connection is closed", ]: eq_(dialect.is_disconnect(error, None, None), True) @@ -216,24 +303,36 @@ class ParseConnectTest(fixtures.TestBase): pass dialect.dbapi = Mock( - Error=MockDBAPIError, ProgrammingError=MockProgrammingError) + Error=MockDBAPIError, ProgrammingError=MockProgrammingError + ) for error in [ MockDBAPIError("[%s] some pyodbc message" % code) for code in [ - '08S01', '01002', '08003', '08007', - '08S02', '08001', 'HYT00', 'HY010'] + "08S01", + "01002", + "08003", + "08007", + "08S02", + "08001", + "HYT00", + "HY010", + ] ] + [ MockProgrammingError(message) for message in [ "(some pyodbc stuff) The cursor's connection has been closed.", - "(some pyodbc stuff) Attempt to use a closed connection." + "(some pyodbc stuff) Attempt to use a closed connection.", ] ]: eq_(dialect.is_disconnect(error, None, None), True) - eq_(dialect.is_disconnect( - MockProgrammingError("not an error"), None, None), False) + eq_( + dialect.is_disconnect( + MockProgrammingError("not an error"), None, None + ), + False, + ) @testing.requires.mssql_freetds def test_bad_freetds_warning(self): @@ -243,33 +342,35 @@ class ParseConnectTest(fixtures.TestBase): return 95, 10, 255 engine.dialect._get_server_version_info = _bad_version - assert_raises_message(exc.SAWarning, - 'Unrecognized server version info', - engine.connect) + assert_raises_message( + exc.SAWarning, "Unrecognized server version info", engine.connect + ) class EngineFromConfigTest(fixtures.TestBase): def test_legacy_schema_flag(self): cfg = { "sqlalchemy.url": "mssql://foodsn", - "sqlalchemy.legacy_schema_aliasing": "false" + "sqlalchemy.legacy_schema_aliasing": "false", } e = engine_from_config( - cfg, module=Mock(version="MS SQL Server 11.0.92")) + cfg, module=Mock(version="MS SQL Server 11.0.92") + ) eq_(e.dialect.legacy_schema_aliasing, False) class FastExecutemanyTest(fixtures.TestBase): - __only_on__ = 'mssql' + __only_on__ = "mssql" __backend__ = True - __requires__ = ('pyodbc_fast_executemany', ) + __requires__ = ("pyodbc_fast_executemany",) @testing.provide_metadata def test_flag_on(self): t = Table( - 't', self.metadata, - Column('id', Integer, primary_key=True), - Column('data', String(50)) + "t", + self.metadata, + Column("id", Integer, primary_key=True), + Column("data", String(50)), ) t.create() @@ -277,20 +378,18 @@ class FastExecutemanyTest(fixtures.TestBase): @event.listens_for(eng, "after_cursor_execute") def after_cursor_execute( - conn, cursor, statement, parameters, context, executemany): + conn, cursor, statement, parameters, context, executemany + ): if executemany: assert cursor.fast_executemany with eng.connect() as conn: conn.execute( t.insert(), - [{"id": i, "data": "data_%d" % i} for i in range(100)] + [{"id": i, "data": "data_%d" % i} for i in range(100)], ) - conn.execute( - t.insert(), - {"id": 200, "data": "data_200"} - ) + conn.execute(t.insert(), {"id": 200, "data": "data_200"}) class VersionDetectionTest(fixtures.TestBase): @@ -302,22 +401,16 @@ class VersionDetectionTest(fixtures.TestBase): "Microsoft SQL Server (XYZ) - 11.0.9216.62 \n" "Jul 18 2014 22:00:21 \nCopyright (c) Microsoft Corporation", "Microsoft SQL Azure (RTM) - 11.0.9216.62 \n" - "Jul 18 2014 22:00:21 \nCopyright (c) Microsoft Corporation" + "Jul 18 2014 22:00:21 \nCopyright (c) Microsoft Corporation", ]: conn = Mock(scalar=Mock(return_value=vers)) - eq_( - dialect._get_server_version_info(conn), - (11, 0, 9216, 62) - ) + eq_(dialect._get_server_version_info(conn), (11, 0, 9216, 62)) def test_pyodbc_version_productversion(self): dialect = pyodbc.MSDialect_pyodbc() conn = Mock(scalar=Mock(return_value="11.0.9216.62")) - eq_( - dialect._get_server_version_info(conn), - (11, 0, 9216, 62) - ) + eq_(dialect._get_server_version_info(conn), (11, 0, 9216, 62)) def test_pyodbc_version_fallback(self): dialect = pyodbc.MSDialect_pyodbc() @@ -326,24 +419,19 @@ class VersionDetectionTest(fixtures.TestBase): for vers, expected in [ ("11.0.9216.62", (11, 0, 9216, 62)), ("notsqlserver.11.foo.0.9216.BAR.62", (11, 0, 9216, 62)), - ("Not SQL Server Version 10.5", (5, )) + ("Not SQL Server Version 10.5", (5,)), ]: conn = Mock( scalar=Mock( - side_effect=exc.DBAPIError("stmt", "params", None)), - connection=Mock( - getinfo=Mock(return_value=vers) - ) + side_effect=exc.DBAPIError("stmt", "params", None) + ), + connection=Mock(getinfo=Mock(return_value=vers)), ) - eq_( - dialect._get_server_version_info(conn), - expected - ) + eq_(dialect._get_server_version_info(conn), expected) class IsolationLevelDetectTest(fixtures.TestBase): - def _fixture(self, view): class Error(Exception): pass @@ -354,18 +442,17 @@ class IsolationLevelDetectTest(fixtures.TestBase): result = [] - def fail_on_exec(stmt, ): + def fail_on_exec(stmt,): if view is not None and view in stmt: - result.append(('SERIALIZABLE', )) + result.append(("SERIALIZABLE",)) else: raise Error("that didn't work") connection = Mock( cursor=Mock( return_value=Mock( - execute=fail_on_exec, - fetchone=lambda: result[0] - ), + execute=fail_on_exec, fetchone=lambda: result[0] + ) ) ) @@ -374,18 +461,12 @@ class IsolationLevelDetectTest(fixtures.TestBase): def test_dm_pdw_nodes(self): dialect, connection = self._fixture("dm_pdw_nodes_exec_sessions") - eq_( - dialect.get_isolation_level(connection), - "SERIALIZABLE" - ) + eq_(dialect.get_isolation_level(connection), "SERIALIZABLE") def test_exec_sessions(self): dialect, connection = self._fixture("exec_sessions") - eq_( - dialect.get_isolation_level(connection), - "SERIALIZABLE" - ) + eq_(dialect.get_isolation_level(connection), "SERIALIZABLE") def test_not_supported(self): dialect, connection = self._fixture(None) @@ -394,6 +475,6 @@ class IsolationLevelDetectTest(fixtures.TestBase): assert_raises_message( NotImplementedError, "Can't fetch isolation", - dialect.get_isolation_level, connection + dialect.get_isolation_level, + connection, ) - |
