)]}'
{"oslo_utils/eventletutils.py":[{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"cc2cbd2a755a91863f36ca8e645a67977d90b280","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# These may or may not exist; so carefully import them if we can..."},{"line_number":22,"context_line":"_eventlet \u003d importutils.try_import(\u0027eventlet\u0027)"},{"line_number":23,"context_line":"_patcher \u003d importutils.try_import(\u0027eventlet.patcher\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# Attribute that can be used by others to see if eventlet is even currently"},{"line_number":26,"context_line":"# useable (can be used in unittests to skip test cases or test classes that"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_7f9dbb09","line":23,"updated":"2015-01-26 09:27:48.000000000","message":"just a question - what is the big sense of this import?","commit_id":"ccef0551f6cfacd914571cc0fb96ae942dde2dfa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"870e9decfe90a444f8a3b9209c58245b18bc60a5","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# These may or may not exist; so carefully import them if we can..."},{"line_number":22,"context_line":"_eventlet \u003d importutils.try_import(\u0027eventlet\u0027)"},{"line_number":23,"context_line":"_patcher \u003d importutils.try_import(\u0027eventlet.patcher\u0027)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# Attribute that can be used by others to see if eventlet is even currently"},{"line_number":26,"context_line":"# useable (can be used in unittests to skip test cases or test classes that"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_4be3cfa3","line":23,"in_reply_to":"1a930d6b_7f9dbb09","updated":"2015-01-26 17:36:41.000000000","message":"What means big sense? Since oslo.utils doesn\u0027t depend on eventlet we can\u0027t just normally import it; and since eventlet may not exist in the functions in this module they should do nothing when it doesn\u0027t exist (no warning, ...); does that make sense?","commit_id":"ccef0551f6cfacd914571cc0fb96ae942dde2dfa"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"cc2cbd2a755a91863f36ca8e645a67977d90b280","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# Taken from eventlet.py (v0.16.1) patcher code (it\u0027s not a accessible set"},{"line_number":31,"context_line":"# for some reason...)"},{"line_number":32,"context_line":"_ALL_PATCH \u003d frozenset([\u0027__builtin__\u0027, \u0027MySQLdb\u0027, \u0027os\u0027,"},{"line_number":33,"context_line":"                        \u0027psycopg\u0027, \u0027select\u0027, \u0027socket\u0027, \u0027thread\u0027, \u0027time\u0027])"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_3ff09366","line":32,"updated":"2015-01-26 09:27:48.000000000","message":"I have a few notes as for this list:\n\n- \u0027__builtin__\u0027 and \u0027MySQLdb\u0027 modules are not patched by default - with ``eventlet.monkey_patch()`` so this will raise a lot of warnings in all projects.\n\n- you probably should note, that \u0027thread\u0027 module was renamed in python3.","commit_id":"ccef0551f6cfacd914571cc0fb96ae942dde2dfa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"870e9decfe90a444f8a3b9209c58245b18bc60a5","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# Taken from eventlet.py (v0.16.1) patcher code (it\u0027s not a accessible set"},{"line_number":31,"context_line":"# for some reason...)"},{"line_number":32,"context_line":"_ALL_PATCH \u003d frozenset([\u0027__builtin__\u0027, \u0027MySQLdb\u0027, \u0027os\u0027,"},{"line_number":33,"context_line":"                        \u0027psycopg\u0027, \u0027select\u0027, \u0027socket\u0027, \u0027thread\u0027, \u0027time\u0027])"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_0b046748","line":32,"in_reply_to":"1a930d6b_3ff09366","updated":"2015-01-26 17:36:41.000000000","message":"Was it renamed in python3 as the eventlet \u0027name\u0027 being used? This isn\u0027t the threading module from python but eventlets name for it; idk why they used that name, ha.\n\nSee: https://github.com/eventlet/eventlet/blob/master/eventlet/patcher.py#L225\n\nAs for \u0027__builtin__\u0027 and \u0027MySQLdb\u0027 it seems fine, if people don\u0027t want them to emit warnings then they don\u0027t need to pass those 2 strings into the \u0027expected_patched_modules\u0027 argument below.","commit_id":"ccef0551f6cfacd914571cc0fb96ae942dde2dfa"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"9d4e606b157d64734c073e3920206e70275a846b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"def warn_eventlet_not_patched(expected_patched_modules, what\u003d\u0027this library\u0027):"},{"line_number":37,"context_line":"    \"\"\"Warns if eventlet is being used without patching provided modules."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    :param expected_patched_modules: list of modules to check to ensure that"},{"line_number":40,"context_line":"                                     they are patched (and to warn if they"},{"line_number":41,"context_line":"                                     are not); these names should correspond"},{"line_number":42,"context_line":"                                     to the names passed into the eventlet"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_c780f448","line":39,"updated":"2015-01-28 23:24:47.000000000","message":"We should document the magic value \u0027all\u0027 since the eventlet monkey_patch docs don\u0027t explicitly mention that one (although it looks like they have an all kwarg available too).\n\nEither that or we could default this behavior the same as they did and check all by default.","commit_id":"ccef0551f6cfacd914571cc0fb96ae942dde2dfa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"707c92c1f6b869cdcacce0cadc6d964dfb10d9e9","unresolved":false,"context_lines":[{"line_number":36,"context_line":"def warn_eventlet_not_patched(expected_patched_modules, what\u003d\u0027this library\u0027):"},{"line_number":37,"context_line":"    \"\"\"Warns if eventlet is being used without patching provided modules."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    :param expected_patched_modules: list of modules to check to ensure that"},{"line_number":40,"context_line":"                                     they are patched (and to warn if they"},{"line_number":41,"context_line":"                                     are not); these names should correspond"},{"line_number":42,"context_line":"                                     to the names passed into the eventlet"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_08dca6e3","line":39,"in_reply_to":"fa81d914_c780f448","updated":"2015-01-29 23:10:58.000000000","message":"Could be done. Will document it.","commit_id":"ccef0551f6cfacd914571cc0fb96ae942dde2dfa"},{"author":{"_account_id":7491,"name":"Viktor Serhieiev","email":"viktor.sergeyev@gmail.com","username":"vsergeyev"},"change_message_id":"cc2cbd2a755a91863f36ca8e645a67977d90b280","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                raise ValueError(\"Unknown module \u0027%s\u0027 requested to check\""},{"line_number":58,"context_line":"                                 \" if patched\" % m)"},{"line_number":59,"context_line":"            else:"},{"line_number":60,"context_line":"                expanded_patched_modules.append(m)"},{"line_number":61,"context_line":"    if EVENTLET_AVAILABLE:"},{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            # The patcher code stores a dictionary here of all modules"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_5f38ffee","line":60,"updated":"2015-01-26 09:27:48.000000000","message":"nit: its would be nice to check. if module in expanded_patched_modules at first.","commit_id":"ccef0551f6cfacd914571cc0fb96ae942dde2dfa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"870e9decfe90a444f8a3b9209c58245b18bc60a5","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                raise ValueError(\"Unknown module \u0027%s\u0027 requested to check\""},{"line_number":58,"context_line":"                                 \" if patched\" % m)"},{"line_number":59,"context_line":"            else:"},{"line_number":60,"context_line":"                expanded_patched_modules.append(m)"},{"line_number":61,"context_line":"    if EVENTLET_AVAILABLE:"},{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            # The patcher code stores a dictionary here of all modules"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_8bbe9763","line":60,"in_reply_to":"1a930d6b_5f38ffee","updated":"2015-01-26 17:36:41.000000000","message":"Ya, I thought about it but was more of \u0027meh\u0027; if someone wants to DOS this code they can do that at there own will, lol.\n\nThe \u0027checked_patched \u003d set()\u0027 from below will filter out duplicates anyway...","commit_id":"ccef0551f6cfacd914571cc0fb96ae942dde2dfa"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"9d4e606b157d64734c073e3920206e70275a846b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                raise ValueError(\"Unknown module \u0027%s\u0027 requested to check\""},{"line_number":58,"context_line":"                                 \" if patched\" % m)"},{"line_number":59,"context_line":"            else:"},{"line_number":60,"context_line":"                expanded_patched_modules.append(m)"},{"line_number":61,"context_line":"    if EVENTLET_AVAILABLE:"},{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            # The patcher code stores a dictionary here of all modules"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_07c04c7b","line":60,"in_reply_to":"1a930d6b_8bbe9763","updated":"2015-01-28 23:24:47.000000000","message":"You could probably eliminate all of the duplicate checks by simply making expanded_patched_modules a set in the first place.  We don\u0027t really care about ordering anywhere, do we?\n\nIn any case, I don\u0027t see this as a blocker.  More of a \"would be nice\".","commit_id":"ccef0551f6cfacd914571cc0fb96ae942dde2dfa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"707c92c1f6b869cdcacce0cadc6d964dfb10d9e9","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                raise ValueError(\"Unknown module \u0027%s\u0027 requested to check\""},{"line_number":58,"context_line":"                                 \" if patched\" % m)"},{"line_number":59,"context_line":"            else:"},{"line_number":60,"context_line":"                expanded_patched_modules.append(m)"},{"line_number":61,"context_line":"    if EVENTLET_AVAILABLE:"},{"line_number":62,"context_line":"        try:"},{"line_number":63,"context_line":"            # The patcher code stores a dictionary here of all modules"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_68e1a299","line":60,"in_reply_to":"fa81d914_07c04c7b","updated":"2015-01-29 23:10:58.000000000","message":"Ah, good point; might as well do it.","commit_id":"ccef0551f6cfacd914571cc0fb96ae942dde2dfa"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"9ee00c3b504061f75928f510bd9077c95014dbe2","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                                     monkey_patch() routine. If not provided"},{"line_number":45,"context_line":"                                     then *all* the modules that could be"},{"line_number":46,"context_line":"                                     patched are checked. The currently valid"},{"line_number":47,"context_line":"                                     selection is one/or multiple of of"},{"line_number":48,"context_line":"                                     [\u0027MySQLdb\u0027, \u0027__builtin__\u0027, \u0027all\u0027, \u0027os\u0027,"},{"line_number":49,"context_line":"                                     \u0027psycopg\u0027, \u0027select\u0027, \u0027socket\u0027, \u0027thread\u0027,"},{"line_number":50,"context_line":"                                     \u0027time\u0027] (where \u0027all\u0027 has an inherent"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_4ad85d7f","line":47,"updated":"2015-02-10 16:19:59.000000000","message":"Two \"of\"s\n\nI don\u0027t think you need the / between one and or either, but that\u0027s really nit picking. :-)","commit_id":"cb4567a723e8b2655a7bb9bca2a06febddb6bf21"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"04ccb86b7e33f54d372dc1b52a73927a54ba17d5","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                                     monkey_patch() routine. If not provided"},{"line_number":45,"context_line":"                                     then *all* the modules that could be"},{"line_number":46,"context_line":"                                     patched are checked. The currently valid"},{"line_number":47,"context_line":"                                     selection is one/or multiple of of"},{"line_number":48,"context_line":"                                     [\u0027MySQLdb\u0027, \u0027__builtin__\u0027, \u0027all\u0027, \u0027os\u0027,"},{"line_number":49,"context_line":"                                     \u0027psycopg\u0027, \u0027select\u0027, \u0027socket\u0027, \u0027thread\u0027,"},{"line_number":50,"context_line":"                                     \u0027time\u0027] (where \u0027all\u0027 has an inherent"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_7c7b25be","line":47,"in_reply_to":"da86d52c_4ad85d7f","updated":"2015-02-10 20:56:36.000000000","message":"Really really fixing, ha.","commit_id":"cb4567a723e8b2655a7bb9bca2a06febddb6bf21"}],"oslo_utils/tests/test_eventletutils.py":[{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"9d4e606b157d64734c073e3920206e70275a846b","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            eventletutils.warn_eventlet_not_patched([\u0027all\u0027])"},{"line_number":51,"context_line":"        self.assertEqual(1, len(capture))"},{"line_number":52,"context_line":"        w \u003d capture[0]"},{"line_number":53,"context_line":"        self.assertEqual(RuntimeWarning, w.category)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @mock.patch(\"oslo_utils.eventletutils._patcher\")"},{"line_number":56,"context_line":"    def test_no_warning(self, mock_patcher):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_47e16499","line":53,"updated":"2015-01-28 23:24:47.000000000","message":"Do we have access to the warning message here so we could verify all of the expected names ended up in the output?","commit_id":"ccef0551f6cfacd914571cc0fb96ae942dde2dfa"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"707c92c1f6b869cdcacce0cadc6d964dfb10d9e9","unresolved":false,"context_lines":[{"line_number":50,"context_line":"            eventletutils.warn_eventlet_not_patched([\u0027all\u0027])"},{"line_number":51,"context_line":"        self.assertEqual(1, len(capture))"},{"line_number":52,"context_line":"        w \u003d capture[0]"},{"line_number":53,"context_line":"        self.assertEqual(RuntimeWarning, w.category)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    @mock.patch(\"oslo_utils.eventletutils._patcher\")"},{"line_number":56,"context_line":"    def test_no_warning(self, mock_patcher):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_088ae6be","line":53,"in_reply_to":"fa81d914_47e16499","updated":"2015-01-29 23:10:58.000000000","message":"I do, will add; but somewhat of a flakey test of string stuff but sure will do.","commit_id":"ccef0551f6cfacd914571cc0fb96ae942dde2dfa"}]}
