)]}'
{"oslo_utils/eventletutils.py":[{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"d432898bf50b87f710863efbc2d8ecc8e6d6e571","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        return self.is_set()"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"def Event():"},{"line_number":172,"context_line":"    if EVENTLET_AVAILABLE:"},{"line_number":173,"context_line":"        return _Event()"},{"line_number":174,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_b2268d14","line":171,"range":{"start_line":171,"start_character":9,"end_line":171,"end_character":12},"updated":"2016-10-21 19:54:47.000000000","message":"Your idea is great, but I think that Event should be a class, not a function.\n\nSo I suggest doing something like this instead:\n\nif EVENTLET_AVAILABLE:\n    # define eventlet-based event class\n    class Event(object):\n    # ...\nelse:\n    # use default threading-based event class\n    Event \u003d threading.Event\n\nWhat do you think?","commit_id":"0b1fcbbf573a2a78dff9c1cee999b8c5b9f861bb"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"853ce064e9de6fd6656f3c0df697482225b52542","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        return self.is_set()"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"def Event():"},{"line_number":172,"context_line":"    if EVENTLET_AVAILABLE:"},{"line_number":173,"context_line":"        return _Event()"},{"line_number":174,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_527fe8a9","line":171,"in_reply_to":"da6895a0_893797af","updated":"2016-10-22 07:01:37.000000000","message":"Probably you are right. I didn\u0027t think about testing of such an approach. So I am ok now.","commit_id":"0b1fcbbf573a2a78dff9c1cee999b8c5b9f861bb"},{"author":{"_account_id":9257,"name":"John Eckersberg","email":"jeckersb@redhat.com","username":"jeckersb"},"change_message_id":"49fa3e532c71a7c8c35bf6cc4eb742f95e397d57","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        return self.is_set()"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"def Event():"},{"line_number":172,"context_line":"    if EVENTLET_AVAILABLE:"},{"line_number":173,"context_line":"        return _Event()"},{"line_number":174,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_893797af","line":171,"in_reply_to":"da6895a0_b2268d14","updated":"2016-10-22 01:31:10.000000000","message":"This is actually *exactly* what I had at first.  I changed it this way only because it was much easier to test.  The other way felt awful because I had to mess around with sys.modules and force eventletutils to reload.  Even then it was breaking the other eventletutils tests for reasons that I didn\u0027t really understand.\n\nIf you can recommend a sane way to make this play nice with tests, I like it much better as well!","commit_id":"0b1fcbbf573a2a78dff9c1cee999b8c5b9f861bb"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"1f50406969b0578e76b05d0392917293b8f2d121","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"def Event():"},{"line_number":172,"context_line":"    if EVENTLET_AVAILABLE:"},{"line_number":173,"context_line":"        return _Event()"},{"line_number":174,"context_line":"    else:"},{"line_number":175,"context_line":"        return threading.Event()"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a629dbe_31954040","line":172,"range":{"start_line":172,"start_character":7,"end_line":172,"end_character":25},"updated":"2016-11-07 11:03:27.000000000","message":"I am not sure, but I think that this line is buggy. EVENTLET_AVAILABLE just says whether eventlet library is installed, but it doesn\u0027t say whether threading module is actually monkey patched. Currently this function almost always return _Event object (even despite absence of monkey patching), since many libraries have eventlet in their requirements. Sorry for missing this problem during code review.","commit_id":"d0cd71c1fcea97bbe29e5923756a0f5260683ab7"}],"oslo_utils/tests/test_eventletutils.py":[{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"d432898bf50b87f710863efbc2d8ecc8e6d6e571","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                          eventletutils.warn_eventlet_not_patched,"},{"line_number":124,"context_line":"                          [\u0027blah.blah\u0027])"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @mock.patch(\u0027oslo_utils.eventletutils._Event.clear\u0027)"},{"line_number":127,"context_line":"    def test_event_api_compat(self, mock_clear):"},{"line_number":128,"context_line":"        e_event \u003d eventletutils.Event()"},{"line_number":129,"context_line":"        self.assertIsInstance(e_event, eventletutils._Event)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_52cc5135","line":126,"range":{"start_line":126,"start_character":4,"end_line":126,"end_character":5},"updated":"2016-10-21 19:54:47.000000000","message":"Why do we need mock here? Is seems to be unused.","commit_id":"0b1fcbbf573a2a78dff9c1cee999b8c5b9f861bb"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"853ce064e9de6fd6656f3c0df697482225b52542","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                          eventletutils.warn_eventlet_not_patched,"},{"line_number":124,"context_line":"                          [\u0027blah.blah\u0027])"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @mock.patch(\u0027oslo_utils.eventletutils._Event.clear\u0027)"},{"line_number":127,"context_line":"    def test_event_api_compat(self, mock_clear):"},{"line_number":128,"context_line":"        e_event \u003d eventletutils.Event()"},{"line_number":129,"context_line":"        self.assertIsInstance(e_event, eventletutils._Event)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_d249388d","line":126,"in_reply_to":"da6895a0_49e65fb5","updated":"2016-10-22 07:01:37.000000000","message":"Ok, got it.","commit_id":"0b1fcbbf573a2a78dff9c1cee999b8c5b9f861bb"},{"author":{"_account_id":9257,"name":"John Eckersberg","email":"jeckersb@redhat.com","username":"jeckersb"},"change_message_id":"49fa3e532c71a7c8c35bf6cc4eb742f95e397d57","unresolved":false,"context_lines":[{"line_number":123,"context_line":"                          eventletutils.warn_eventlet_not_patched,"},{"line_number":124,"context_line":"                          [\u0027blah.blah\u0027])"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @mock.patch(\u0027oslo_utils.eventletutils._Event.clear\u0027)"},{"line_number":127,"context_line":"    def test_event_api_compat(self, mock_clear):"},{"line_number":128,"context_line":"        e_event \u003d eventletutils.Event()"},{"line_number":129,"context_line":"        self.assertIsInstance(e_event, eventletutils._Event)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_49e65fb5","line":126,"in_reply_to":"da6895a0_52cc5135","updated":"2016-10-22 01:31:10.000000000","message":"_Event.clear (called in __init__) creates the eventlet.event.Event object.  Eventlet isn\u0027t installed for the tests, so just mock out that method to avoid trying to use eventlet at test time.","commit_id":"0b1fcbbf573a2a78dff9c1cee999b8c5b9f861bb"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"d432898bf50b87f710863efbc2d8ecc8e6d6e571","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @mock.patch(\u0027oslo_utils.eventletutils._Event.clear\u0027)"},{"line_number":127,"context_line":"    def test_event_api_compat(self, mock_clear):"},{"line_number":128,"context_line":"        e_event \u003d eventletutils.Event()"},{"line_number":129,"context_line":"        self.assertIsInstance(e_event, eventletutils._Event)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        eventletutils.EVENTLET_AVAILABLE \u003d False"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_ed1d8467","line":128,"range":{"start_line":128,"start_character":8,"end_line":128,"end_character":15},"updated":"2016-10-21 19:54:47.000000000","message":"I think that it would be better to explicitly do eventletutils.EVENTLET_AVAILABLE \u003d True before this line, since I am not sure whether we can rely on enabled monkey patching before running tests.","commit_id":"0b1fcbbf573a2a78dff9c1cee999b8c5b9f861bb"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"853ce064e9de6fd6656f3c0df697482225b52542","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @mock.patch(\u0027oslo_utils.eventletutils._Event.clear\u0027)"},{"line_number":127,"context_line":"    def test_event_api_compat(self, mock_clear):"},{"line_number":128,"context_line":"        e_event \u003d eventletutils.Event()"},{"line_number":129,"context_line":"        self.assertIsInstance(e_event, eventletutils._Event)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        eventletutils.EVENTLET_AVAILABLE \u003d False"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_b244c474","line":128,"in_reply_to":"da6895a0_c9b6ef89","updated":"2016-10-22 07:01:37.000000000","message":"Sorry, I didn\u0027t notice it before.","commit_id":"0b1fcbbf573a2a78dff9c1cee999b8c5b9f861bb"},{"author":{"_account_id":9257,"name":"John Eckersberg","email":"jeckersb@redhat.com","username":"jeckersb"},"change_message_id":"49fa3e532c71a7c8c35bf6cc4eb742f95e397d57","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    @mock.patch(\u0027oslo_utils.eventletutils._Event.clear\u0027)"},{"line_number":127,"context_line":"    def test_event_api_compat(self, mock_clear):"},{"line_number":128,"context_line":"        e_event \u003d eventletutils.Event()"},{"line_number":129,"context_line":"        self.assertIsInstance(e_event, eventletutils._Event)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        eventletutils.EVENTLET_AVAILABLE \u003d False"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_c9b6ef89","line":128,"in_reply_to":"da6895a0_ed1d8467","updated":"2016-10-22 01:31:10.000000000","message":"The setUp method above explicitly sets it to True","commit_id":"0b1fcbbf573a2a78dff9c1cee999b8c5b9f861bb"},{"author":{"_account_id":20864,"name":"Gevorg Davoian","email":"gdavoian@gmail.com","username":"gdavoian"},"change_message_id":"d432898bf50b87f710863efbc2d8ecc8e6d6e571","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            t_event_cls \u003d threading._Event"},{"line_number":137,"context_line":"        self.assertIsInstance(t_event, t_event_cls)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        public_methods \u003d [m for m in dir(t_event) if m[0] !\u003d \"_\"]"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        for method in public_methods:"},{"line_number":142,"context_line":"            self.assertTrue(hasattr(e_event, method))"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_7244f573","line":139,"range":{"start_line":139,"start_character":53,"end_line":139,"end_character":64},"updated":"2016-10-21 19:54:47.000000000","message":"The condition here should be replaced with something like: not m.startswith(\u0027_\u0027) and callable(getattr(t_event, m)), because actually dir() returns a list of attributes (not necessarily methods).","commit_id":"0b1fcbbf573a2a78dff9c1cee999b8c5b9f861bb"},{"author":{"_account_id":9257,"name":"John Eckersberg","email":"jeckersb@redhat.com","username":"jeckersb"},"change_message_id":"49fa3e532c71a7c8c35bf6cc4eb742f95e397d57","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            t_event_cls \u003d threading._Event"},{"line_number":137,"context_line":"        self.assertIsInstance(t_event, t_event_cls)"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        public_methods \u003d [m for m in dir(t_event) if m[0] !\u003d \"_\"]"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        for method in public_methods:"},{"line_number":142,"context_line":"            self.assertTrue(hasattr(e_event, method))"}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_e972d3e4","line":139,"in_reply_to":"da6895a0_7244f573","updated":"2016-10-22 01:31:10.000000000","message":"Done","commit_id":"0b1fcbbf573a2a78dff9c1cee999b8c5b9f861bb"}]}
