)]}'
{"oslo/db/sqlalchemy/session.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"acec95958dc3f7839244780f67b8e1eb01d904d9","unresolved":false,"context_lines":[{"line_number":675,"context_line":"            # mysqlconnector engine (\u003c1.0) incorrectly defaults to"},{"line_number":676,"context_line":"            # raise_on_warnings\u003dTrue"},{"line_number":677,"context_line":"            #  https://bitbucket.org/zzzeek/sqlalchemy/issue/2515"},{"line_number":678,"context_line":"            engine_args[\u0027raise_on_warnings\u0027] \u003d False"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    engine \u003d sqlalchemy.create_engine(sql_connection, **engine_args)"},{"line_number":681,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_7d04ba14","line":678,"updated":"2014-07-21 01:40:01.000000000","message":"isn\u0027t it simpler to specify it unconditionally?","commit_id":"6e9eb639e3d583a0f6cacc81a8d52a87391533d3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"fa805f055d6d5f3001744a1b03cf87d39e4bae2f","unresolved":false,"context_lines":[{"line_number":675,"context_line":"            # mysqlconnector engine (\u003c1.0) incorrectly defaults to"},{"line_number":676,"context_line":"            # raise_on_warnings\u003dTrue"},{"line_number":677,"context_line":"            #  https://bitbucket.org/zzzeek/sqlalchemy/issue/2515"},{"line_number":678,"context_line":"            engine_args[\u0027raise_on_warnings\u0027] \u003d False"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    engine \u003d sqlalchemy.create_engine(sql_connection, **engine_args)"},{"line_number":681,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_4c9586e2","line":678,"in_reply_to":"baada198_3da32244","updated":"2014-07-21 08:20:53.000000000","message":"mysqldb surely doesn\u0027t support the option.\n\nThat said, have you really checked that the code works? I\u0027ve made a similar change locally before, and it failed. See: http://eavesdrop.openstack.org/irclogs/%23openstack-oslo/%23openstack-oslo.2014-07-11.log , starting from \u00272014-07-11T13:53:34\u0027","commit_id":"6e9eb639e3d583a0f6cacc81a8d52a87391533d3"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"4f456ecce8edc247a6d3965fece919f2fee0c0e8","unresolved":false,"context_lines":[{"line_number":675,"context_line":"            # mysqlconnector engine (\u003c1.0) incorrectly defaults to"},{"line_number":676,"context_line":"            # raise_on_warnings\u003dTrue"},{"line_number":677,"context_line":"            #  https://bitbucket.org/zzzeek/sqlalchemy/issue/2515"},{"line_number":678,"context_line":"            engine_args[\u0027raise_on_warnings\u0027] \u003d False"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    engine \u003d sqlalchemy.create_engine(sql_connection, **engine_args)"},{"line_number":681,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_3da32244","line":678,"in_reply_to":"baada198_3df5e250","updated":"2014-07-21 02:38:03.000000000","message":"makes sense.  thank you for explanation.","commit_id":"6e9eb639e3d583a0f6cacc81a8d52a87391533d3"},{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"214382889003b7e92564859a7413fdf83036441c","unresolved":false,"context_lines":[{"line_number":675,"context_line":"            # mysqlconnector engine (\u003c1.0) incorrectly defaults to"},{"line_number":676,"context_line":"            # raise_on_warnings\u003dTrue"},{"line_number":677,"context_line":"            #  https://bitbucket.org/zzzeek/sqlalchemy/issue/2515"},{"line_number":678,"context_line":"            engine_args[\u0027raise_on_warnings\u0027] \u003d False"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"    engine \u003d sqlalchemy.create_engine(sql_connection, **engine_args)"},{"line_number":681,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_3df5e250","line":678,"in_reply_to":"baada198_7d04ba14","updated":"2014-07-21 02:32:27.000000000","message":"Yes.  However, I don\u0027t think it\u0027s guaranteed that all mysql drivers support the same options - and unrecognised options are treated as fatal errors.","commit_id":"6e9eb639e3d583a0f6cacc81a8d52a87391533d3"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"d7ee01cd39b337a2754c5a19124889092c07c0d2","unresolved":false,"context_lines":[{"line_number":480,"context_line":"            # mysqlconnector engine (\u003c1.0) incorrectly defaults to"},{"line_number":481,"context_line":"            # raise_on_warnings\u003dTrue"},{"line_number":482,"context_line":"            #  https://bitbucket.org/zzzeek/sqlalchemy/issue/2515"},{"line_number":483,"context_line":"            engine_args[\u0027connect_args\u0027] \u003d {\u0027raise_on_warnings\u0027: False}"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    engine \u003d sqlalchemy.create_engine(sql_connection, **engine_args)"},{"line_number":486,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_15352ada","line":483,"updated":"2014-07-28 12:55:09.000000000","message":"This should work, but I\u0027m worried about the fact that we override *all* other options here: e.g. if I pass something like \u0027mysql+mysqlconnector://devel:devel@localhost/devel?charset\u003dutf-8\u0027, charset\u003dutf-8 will be ignored here","commit_id":"3bf8941cca8e03e83a1f9810300f6c60f351e1ae"},{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"ace2a7b358c15e4dec892fcdb1145cd0e04b70ec","unresolved":false,"context_lines":[{"line_number":480,"context_line":"            # mysqlconnector engine (\u003c1.0) incorrectly defaults to"},{"line_number":481,"context_line":"            # raise_on_warnings\u003dTrue"},{"line_number":482,"context_line":"            #  https://bitbucket.org/zzzeek/sqlalchemy/issue/2515"},{"line_number":483,"context_line":"            engine_args[\u0027connect_args\u0027] \u003d {\u0027raise_on_warnings\u0027: False}"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    engine \u003d sqlalchemy.create_engine(sql_connection, **engine_args)"},{"line_number":486,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_48ec5629","line":483,"in_reply_to":"baada198_15352ada","updated":"2014-07-28 22:07:07.000000000","message":"A good concern, but thankfully connect_args doesn\u0027t work like that.\n\n\u003csqlalchemy\u003e/engine/strategies.py:DefaultEngineStrategy.create()\n        u \u003d url.make_url(name_or_url)\n          ...\n        # assemble connection arguments\n        (cargs, cparams) \u003d dialect.create_connect_args(u)\n        cparams.update(pop_kwarg(\u0027connect_args\u0027, {}))\n\nIn other words, create_engine(connect_args\u003d{}) are merged with (and override) any arguments given as URL parameters.  Your ?charset\u003dutf8 example will work just fine.","commit_id":"3bf8941cca8e03e83a1f9810300f6c60f351e1ae"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"ed6d132c212ecfdf303544b4a1a74ddcd0ea2e88","unresolved":false,"context_lines":[{"line_number":480,"context_line":"            # mysqlconnector engine (\u003c1.0) incorrectly defaults to"},{"line_number":481,"context_line":"            # raise_on_warnings\u003dTrue"},{"line_number":482,"context_line":"            #  https://bitbucket.org/zzzeek/sqlalchemy/issue/2515"},{"line_number":483,"context_line":"            engine_args[\u0027connect_args\u0027] \u003d {\u0027raise_on_warnings\u0027: False}"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":"    engine \u003d sqlalchemy.create_engine(sql_connection, **engine_args)"},{"line_number":486,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_e26ff7f8","line":483,"in_reply_to":"baada198_48ec5629","updated":"2014-07-29 08:38:23.000000000","message":"oh, nice!","commit_id":"3bf8941cca8e03e83a1f9810300f6c60f351e1ae"}],"tests/sqlalchemy/test_sqlalchemy.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"fa805f055d6d5f3001744a1b03cf87d39e4bae2f","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    @mock.patch(\u0027sqlalchemy.create_engine\u0027)"},{"line_number":503,"context_line":"    def test_create_engine(self, sqla_create_engine):"},{"line_number":504,"context_line":"        connection \u003d \u0027mysql+mysqlconnector://user:pass@host/path?foo\u003dbar\u0027"},{"line_number":505,"context_line":"        session.create_engine(connection,"},{"line_number":506,"context_line":"                              max_pool_size\u003d10,"},{"line_number":507,"context_line":"                              max_overflow\u003d5,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_4cbca66c","line":504,"updated":"2014-07-21 08:20:53.000000000","message":"create_engine will fail, that way of passing engine options is not working. Instead, the right approach is: https://review.openstack.org/#/c/106800/","commit_id":"6e9eb639e3d583a0f6cacc81a8d52a87391533d3"},{"author":{"_account_id":11279,"name":"Angus Lees","email":"gus@inodes.org","username":"gus"},"change_message_id":"fd9a9a89e3887ad1a579555078ef6165f46667bb","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    @mock.patch(\u0027sqlalchemy.create_engine\u0027)"},{"line_number":503,"context_line":"    def test_create_engine(self, sqla_create_engine):"},{"line_number":504,"context_line":"        connection \u003d \u0027mysql+mysqlconnector://user:pass@host/path?foo\u003dbar\u0027"},{"line_number":505,"context_line":"        session.create_engine(connection,"},{"line_number":506,"context_line":"                              max_pool_size\u003d10,"},{"line_number":507,"context_line":"                              max_overflow\u003d5,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_4e78fa2a","line":504,"in_reply_to":"baada198_27b22b49","updated":"2014-07-21 21:32:22.000000000","message":"Urgh, sorry.\nYes, I completely agree with you about the dangers of mocking.","commit_id":"6e9eb639e3d583a0f6cacc81a8d52a87391533d3"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5056ba437cbeefa4fdefa18463b26d708c58f3a0","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    @mock.patch(\u0027sqlalchemy.create_engine\u0027)"},{"line_number":503,"context_line":"    def test_create_engine(self, sqla_create_engine):"},{"line_number":504,"context_line":"        connection \u003d \u0027mysql+mysqlconnector://user:pass@host/path?foo\u003dbar\u0027"},{"line_number":505,"context_line":"        session.create_engine(connection,"},{"line_number":506,"context_line":"                              max_pool_size\u003d10,"},{"line_number":507,"context_line":"                              max_overflow\u003d5,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_27b22b49","line":504,"in_reply_to":"baada198_4cbca66c","updated":"2014-07-21 08:32:10.000000000","message":"And btw, that test clearly shows how mocking kills most benefits of testing.","commit_id":"6e9eb639e3d583a0f6cacc81a8d52a87391533d3"},{"author":{"_account_id":11816,"name":"mike bayer","display_name":"Mike Bayer","email":"mike_mp@zzzcomputing.com","username":"zzzeek","status":"Red Hat"},"change_message_id":"46dac9a2e2ee29b8e8949dd219752a9861ab15ea","unresolved":false,"context_lines":[{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    @mock.patch(\u0027sqlalchemy.create_engine\u0027)"},{"line_number":503,"context_line":"    def test_create_engine(self, sqla_create_engine):"},{"line_number":504,"context_line":"        connection \u003d \u0027mysql+mysqlconnector://user:pass@host/path?foo\u003dbar\u0027"},{"line_number":505,"context_line":"        session.create_engine(connection,"},{"line_number":506,"context_line":"                              max_pool_size\u003d10,"},{"line_number":507,"context_line":"                              max_overflow\u003d5,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_6eef7eb1","line":504,"in_reply_to":"baada198_4e78fa2a","updated":"2014-07-21 21:36:24.000000000","message":"to be fair, mocking is used for the parts of the code that you *don\u0027t* need to test, within a given test.    They are used to help isolate those lines that are important for the particular test.   The things you mock would ideally be tested explicitly somewhere else.  \n\nthere\u0027s great value in what I call \"thick\" tests that test all the way from one end of something to another, but there\u0027s also value in \"thin\" tests that test just one little thing.  ideally there should be plenty of both.","commit_id":"6e9eb639e3d583a0f6cacc81a8d52a87391533d3"}]}
