)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"0943253b2bd146da861ed0dc7be6f5ef0ccc570f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Gordon Sim \u003cgsim@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-03-31 17:14:55 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add driver independent functional tests of the messaging API."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The url used to select (and configure) the driver is specified as an environment variable named TRANSPORT_URL."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAWH%2F93i4%3D","line":7,"updated":"2014-04-01 15:02:16.000000000","message":"remove the period :)\n\n./setup.py:1:1: H803  git commit title (\u0027Add driver independent functional tests of the messaging API.\u0027) should not end with period","commit_id":"5e7fb288c15d0207549244e349dec04f97d39b2a"},{"author":{"_account_id":8784,"name":"Gordon Sim","email":"gsim@redhat.com","username":"gordonsim"},"change_message_id":"f3689403b624ccd42f26eda448be7c7842166b90","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Gordon Sim \u003cgsim@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-03-31 17:14:55 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add driver independent functional tests of the messaging API."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The url used to select (and configure) the driver is specified as an environment variable named TRANSPORT_URL."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAWH%2F92hQ%3D","line":7,"in_reply_to":"AAAAWH%2F93i4%3D","updated":"2014-04-01 16:51:11.000000000","message":"Done","commit_id":"5e7fb288c15d0207549244e349dec04f97d39b2a"},{"author":{"_account_id":6928,"name":"Ben Nemec","email":"openstack@nemebean.com","username":"bnemec"},"change_message_id":"a623f219471f87f6e5d3e8e35622f1e7a2feaf3c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add driver independent functional tests of the messaging API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The url used to select (and configure) the driver is specified as an environment variable named TRANSPORT_URL."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I867001a15ffaca06ae831cfd0240ed3397bf6503"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAW3%2F%2FQ%2BA%3D","line":9,"updated":"2014-04-15 17:25:59.000000000","message":"Nit: Commit messages should be wrapped at 72 characters.","commit_id":"6c03c770e95f021e9c67c2241fa34aaddbc52bc2"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add driver independent functional tests of the messaging API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The url used to select (and configure) the driver is specified as an environment variable named TRANSPORT_URL."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I867001a15ffaca06ae831cfd0240ed3397bf6503"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"1ae5cdf2_1b99ee1e","line":9,"updated":"2014-06-27 18:44:24.000000000","message":"split this line (commit message should be under 80 symb per line)","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add driver independent functional tests of the messaging API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The url used to select (and configure) the driver is specified as an environment variable named TRANSPORT_URL."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I867001a15ffaca06ae831cfd0240ed3397bf6503"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"baa201ad_40746167","line":9,"in_reply_to":"1ae5cdf2_1b99ee1e","updated":"2014-10-22 14:58:49.000000000","message":"Done","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"}],"functional_tests/__init__.py":[{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"417b1ff87c01e43f26ecae33992602aed69919a8","unresolved":false,"context_lines":[{"line_number":1,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_61e31b05","line":1,"updated":"2014-06-20 12:05:39.000000000","message":"Is it blank line or it\u0027s just Gerrit shows that new file was created?","commit_id":"6c03c770e95f021e9c67c2241fa34aaddbc52bc2"},{"author":{"_account_id":8784,"name":"Gordon Sim","email":"gsim@redhat.com","username":"gordonsim"},"change_message_id":"9624dd2a0e8265abb7160cefabbfc68d02ae315c","unresolved":false,"context_lines":[{"line_number":1,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_ddd06355","line":1,"in_reply_to":"1ae5cdf2_61e31b05","updated":"2014-06-27 14:29:29.000000000","message":"Done","commit_id":"6c03c770e95f021e9c67c2241fa34aaddbc52bc2"}],"functional_tests/test_functional.py":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"0943253b2bd146da861ed0dc7be6f5ef0ccc570f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import fixtures"},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":"import threading"},{"line_number":17,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F93u4%3D","line":14,"updated":"2014-04-01 15:02:16.000000000","message":"fixtures is  third party library.","commit_id":"5e7fb288c15d0207549244e349dec04f97d39b2a"},{"author":{"_account_id":8784,"name":"Gordon Sim","email":"gsim@redhat.com","username":"gordonsim"},"change_message_id":"f3689403b624ccd42f26eda448be7c7842166b90","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"#    under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import fixtures"},{"line_number":15,"context_line":"import os"},{"line_number":16,"context_line":"import threading"},{"line_number":17,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F92hI%3D","line":14,"in_reply_to":"AAAAWH%2F93u4%3D","updated":"2014-04-01 16:51:11.000000000","message":"Done","commit_id":"5e7fb288c15d0207549244e349dec04f97d39b2a"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"0943253b2bd146da861ed0dc7be6f5ef0ccc570f","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo import messaging"},{"line_number":21,"context_line":"from oslo.messaging.notify import notifier"},{"line_number":22,"context_line":"from six import moves"},{"line_number":23,"context_line":"from tests import utils as test_utils"},{"line_number":24,"context_line":"from testtools import matchers"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F93t0%3D","line":23,"updated":"2014-04-01 15:02:16.000000000","message":"line 23 should in another group\n\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"5e7fb288c15d0207549244e349dec04f97d39b2a"},{"author":{"_account_id":8784,"name":"Gordon Sim","email":"gsim@redhat.com","username":"gordonsim"},"change_message_id":"f3689403b624ccd42f26eda448be7c7842166b90","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo import messaging"},{"line_number":21,"context_line":"from oslo.messaging.notify import notifier"},{"line_number":22,"context_line":"from six import moves"},{"line_number":23,"context_line":"from tests import utils as test_utils"},{"line_number":24,"context_line":"from testtools import matchers"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F92hA%3D","line":23,"in_reply_to":"AAAAWH%2F93t0%3D","updated":"2014-04-01 16:51:11.000000000","message":"Done","commit_id":"5e7fb288c15d0207549244e349dec04f97d39b2a"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"0943253b2bd146da861ed0dc7be6f5ef0ccc570f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.thread.join()"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def ping(self, ctxt):"},{"line_number":98,"context_line":"        None"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def sync(self, ctxt, item):"},{"line_number":101,"context_line":"        self.syncq.put(item)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F93nM%3D","line":98,"updated":"2014-04-01 15:02:16.000000000","message":"pass ?","commit_id":"5e7fb288c15d0207549244e349dec04f97d39b2a"},{"author":{"_account_id":8784,"name":"Gordon Sim","email":"gsim@redhat.com","username":"gordonsim"},"change_message_id":"f3689403b624ccd42f26eda448be7c7842166b90","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        self.thread.join()"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    def ping(self, ctxt):"},{"line_number":98,"context_line":"        None"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def sync(self, ctxt, item):"},{"line_number":101,"context_line":"        self.syncq.put(item)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F92gw%3D","line":98,"in_reply_to":"AAAAWH%2F93nM%3D","updated":"2014-04-01 16:51:11.000000000","message":"Done. Thanks very much for the review, I appreciate it!","commit_id":"5e7fb288c15d0207549244e349dec04f97d39b2a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"417b1ff87c01e43f26ecae33992602aed69919a8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":3,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":4,"context_line":"#    a copy of the License at"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_2145936e","line":1,"updated":"2014-06-20 12:05:39.000000000","message":"The path should be `tests/functional_tests/test_functional.py` only for real test cases, not fixtures and base test cases. For base test cases and fixtures could be found better place, at least `tests/functional_base/functional_test_base.py` (for example).","commit_id":"6c03c770e95f021e9c67c2241fa34aaddbc52bc2"},{"author":{"_account_id":8784,"name":"Gordon Sim","email":"gsim@redhat.com","username":"gordonsim"},"change_message_id":"9624dd2a0e8265abb7160cefabbfc68d02ae315c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":3,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":4,"context_line":"#    a copy of the License at"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_7dbf4ffc","line":1,"in_reply_to":"1ae5cdf2_2145936e","updated":"2014-06-27 14:29:29.000000000","message":"Done. I moved the fixtures and other utilitlities to functional_tests/utils.py","commit_id":"6c03c770e95f021e9c67c2241fa34aaddbc52bc2"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"417b1ff87c01e43f26ecae33992602aed69919a8","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.transport.wait()"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def cleanUp(self):"},{"line_number":124,"context_line":"        super(RpcServerGroupFixture, self).cleanUp()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _target(self, server\u003dNone, fanout\u003dFalse):"},{"line_number":127,"context_line":"        t \u003d messaging.Target(exchange\u003dself.exchange, topic\u003dself.topic)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_a1bc43b6","line":124,"updated":"2014-06-20 12:05:39.000000000","message":"What is done in `fixtures.Fixture.cleanUp`? It seems to me redundant.","commit_id":"6c03c770e95f021e9c67c2241fa34aaddbc52bc2"},{"author":{"_account_id":8784,"name":"Gordon Sim","email":"gsim@redhat.com","username":"gordonsim"},"change_message_id":"9624dd2a0e8265abb7160cefabbfc68d02ae315c","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.transport.wait()"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def cleanUp(self):"},{"line_number":124,"context_line":"        super(RpcServerGroupFixture, self).cleanUp()"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def _target(self, server\u003dNone, fanout\u003dFalse):"},{"line_number":127,"context_line":"        t \u003d messaging.Target(exchange\u003dself.exchange, topic\u003dself.topic)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_9d45fbb5","line":124,"in_reply_to":"1ae5cdf2_a1bc43b6","updated":"2014-06-27 14:29:29.000000000","message":"Done","commit_id":"6c03c770e95f021e9c67c2241fa34aaddbc52bc2"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"417b1ff87c01e43f26ecae33992602aed69919a8","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            self.skipTest(\"No transport url configured\")"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"class CallTests(Skippable):"},{"line_number":274,"context_line":"    def test_specific_server(self):"},{"line_number":275,"context_line":"        group \u003d self.useFixture(RpcServerGroupFixture(self.url))"},{"line_number":276,"context_line":"        client \u003d group.client(1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_c1c86f24","line":273,"updated":"2014-06-20 12:05:39.000000000","message":"Test cases should be separated from fixtures and base test cases (mix-ins).","commit_id":"6c03c770e95f021e9c67c2241fa34aaddbc52bc2"},{"author":{"_account_id":8784,"name":"Gordon Sim","email":"gsim@redhat.com","username":"gordonsim"},"change_message_id":"9624dd2a0e8265abb7160cefabbfc68d02ae315c","unresolved":false,"context_lines":[{"line_number":270,"context_line":"            self.skipTest(\"No transport url configured\")"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"class CallTests(Skippable):"},{"line_number":274,"context_line":"    def test_specific_server(self):"},{"line_number":275,"context_line":"        group \u003d self.useFixture(RpcServerGroupFixture(self.url))"},{"line_number":276,"context_line":"        client \u003d group.client(1)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_bd40f7a2","line":273,"in_reply_to":"1ae5cdf2_c1c86f24","updated":"2014-06-27 14:29:29.000000000","message":"Done","commit_id":"6c03c770e95f021e9c67c2241fa34aaddbc52bc2"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from functional_tests.utils import TransportFixture"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class CallTests(Skippable):"},{"line_number":27,"context_line":"    def test_specific_server(self):"},{"line_number":28,"context_line":"        group \u003d self.useFixture(RpcServerGroupFixture(self.url))"},{"line_number":29,"context_line":"        client \u003d group.client(1)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_71af73e3","line":26,"updated":"2014-06-27 18:44:24.000000000","message":"CallTestCase is more common name","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from functional_tests.utils import TransportFixture"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class CallTests(Skippable):"},{"line_number":27,"context_line":"    def test_specific_server(self):"},{"line_number":28,"context_line":"        group \u003d self.useFixture(RpcServerGroupFixture(self.url))"},{"line_number":29,"context_line":"        client \u003d group.client(1)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_ec2070f9","line":26,"in_reply_to":"1ae5cdf2_71af73e3","updated":"2014-10-22 14:58:49.000000000","message":"Done","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self.assertThat(f, matchers.raises(ValueError))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class CastTests(Skippable):"},{"line_number":112,"context_line":"    # Note: casts return immediately, so these tests utilise a special"},{"line_number":113,"context_line":"    # internal sync() cast to ensure prior casts are complete before"},{"line_number":114,"context_line":"    # making the necessary assertions."}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_f182a350","line":111,"updated":"2014-06-27 18:44:24.000000000","message":"CastTestCase","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self.assertThat(f, matchers.raises(ValueError))"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"class CastTests(Skippable):"},{"line_number":112,"context_line":"    # Note: casts return immediately, so these tests utilise a special"},{"line_number":113,"context_line":"    # internal sync() cast to ensure prior casts are complete before"},{"line_number":114,"context_line":"    # making the necessary assertions."}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_0c1cd4c0","line":111,"in_reply_to":"1ae5cdf2_f182a350","updated":"2014-10-22 14:58:49.000000000","message":"Done","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            self.assertEqual(12, s.instance.ival)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class NotifyTests(Skippable):"},{"line_number":159,"context_line":"    def test_simple(self):"},{"line_number":160,"context_line":"        transport \u003d self.useFixture(TransportFixture(self.url))"},{"line_number":161,"context_line":"        listener \u003d self.useFixture(NotificationFixture(transport.transport,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_31796b82","line":158,"updated":"2014-06-27 18:44:24.000000000","message":"NotifyTestCase","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            self.assertEqual(12, s.instance.ival)"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"class NotifyTests(Skippable):"},{"line_number":159,"context_line":"    def test_simple(self):"},{"line_number":160,"context_line":"        transport \u003d self.useFixture(TransportFixture(self.url))"},{"line_number":161,"context_line":"        listener \u003d self.useFixture(NotificationFixture(transport.transport,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_2c7a78f1","line":158,"in_reply_to":"1ae5cdf2_31796b82","updated":"2014-10-22 14:58:49.000000000","message":"Done","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"}],"functional_tests/utils.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from tests import utils as test_utils"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class TestServer(object):"},{"line_number":28,"context_line":"    def __init__(self):"},{"line_number":29,"context_line":"        self.ival \u003d 0"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_b15e5b11","line":26,"updated":"2014-06-27 18:44:24.000000000","message":"So as this is some kind of frameworks for oslo.messaging testing it will be better to add everywhere docstrings.","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def subtract(self, ctxt, increment):"},{"line_number":37,"context_line":"        if self.ival \u003c increment:"},{"line_number":38,"context_line":"            raise ValueError(\"ival can\u0027t go negative!\")"},{"line_number":39,"context_line":"        self.ival -\u003d increment"},{"line_number":40,"context_line":"        return self.ival"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_7b5e7246","line":38,"updated":"2014-06-27 18:44:24.000000000","message":"ival is \"private\" variable in this class not sure that this meesage will be clear to end user?","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4ab05173c06795bdd32ee728ad1da87d37adf5d5","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def subtract(self, ctxt, increment):"},{"line_number":37,"context_line":"        if self.ival \u003c increment:"},{"line_number":38,"context_line":"            raise ValueError(\"ival can\u0027t go negative!\")"},{"line_number":39,"context_line":"        self.ival -\u003d increment"},{"line_number":40,"context_line":"        return self.ival"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_37b40f81","line":38,"in_reply_to":"1ae5cdf2_7b5e7246","updated":"2014-07-21 13:40:57.000000000","message":"Please, describe what is really happened here, abstract enough to convey the meaning of what happened to a person who does not know your code.","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        super(TransportFixture, self).cleanUp()"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def wait(self):"},{"line_number":60,"context_line":"        if self.url.startswith(\"rabbit\")or self.url.startswith(\"qpid\"):"},{"line_number":61,"context_line":"            time.sleep(0.5)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_b619f17b","line":60,"updated":"2014-06-27 18:44:24.000000000","message":"missing space before or","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        super(TransportFixture, self).cleanUp()"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def wait(self):"},{"line_number":60,"context_line":"        if self.url.startswith(\"rabbit\")or self.url.startswith(\"qpid\"):"},{"line_number":61,"context_line":"            time.sleep(0.5)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_85a81b21","line":60,"in_reply_to":"1ae5cdf2_b619f17b","updated":"2014-10-22 14:58:49.000000000","message":"Done","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def wait(self):"},{"line_number":60,"context_line":"        if self.url.startswith(\"rabbit\")or self.url.startswith(\"qpid\"):"},{"line_number":61,"context_line":"            time.sleep(0.5)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class RpcServerFixture(fixtures.Fixture):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_361de162","line":61,"updated":"2014-06-27 18:44:24.000000000","message":"Could you left some comments here in code that answers on questions: \n\n1) Why only rabbit and qpid\n2) Why exactly 0.5 ?","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4ab05173c06795bdd32ee728ad1da87d37adf5d5","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def wait(self):"},{"line_number":60,"context_line":"        if self.url.startswith(\"rabbit\")or self.url.startswith(\"qpid\"):"},{"line_number":61,"context_line":"            time.sleep(0.5)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class RpcServerFixture(fixtures.Fixture):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_1a52d212","line":61,"in_reply_to":"1ae5cdf2_361de162","updated":"2014-07-21 13:40:57.000000000","message":"Use callback on success or retry on fail, while True, or something else more robust than sleep. Use sleep is bad practice, because if 0.5 is enough for your workstation, it can be not enough for any other computer.","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class RpcServerFixture(fixtures.Fixture):"},{"line_number":65,"context_line":"    def __init__(self, transport, target, obj\u003dNone, ctrl_target\u003dNone):"},{"line_number":66,"context_line":"        super(RpcServerFixture, self).__init__()"},{"line_number":67,"context_line":"        self.transport \u003d transport"},{"line_number":68,"context_line":"        self.target \u003d target"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_76c4c991","line":65,"updated":"2014-06-27 18:44:24.000000000","message":"not sure that obj is good name for instance of test server imho","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"class RpcServerFixture(fixtures.Fixture):"},{"line_number":65,"context_line":"    def __init__(self, transport, target, obj\u003dNone, ctrl_target\u003dNone):"},{"line_number":66,"context_line":"        super(RpcServerFixture, self).__init__()"},{"line_number":67,"context_line":"        self.transport \u003d transport"},{"line_number":68,"context_line":"        self.target \u003d target"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_a58c3fd8","line":65,"in_reply_to":"1ae5cdf2_76c4c991","updated":"2014-10-22 14:58:49.000000000","message":"Done","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                 transport\u003dNone, use_fanout_ctrl\u003dFalse):"},{"line_number":107,"context_line":"        self.url \u003d url"},{"line_number":108,"context_line":"        self.topic \u003d topic or \"test_topic\""},{"line_number":109,"context_line":"        self.names \u003d names or [\"server_%i\" % (i) for i in range(3)]"},{"line_number":110,"context_line":"        self.exchange \u003d exchange"},{"line_number":111,"context_line":"        self.targets \u003d [self._target(server\u003dn) for n in self.names]"},{"line_number":112,"context_line":"        self.transport \u003d transport"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_5626ed67","line":109,"updated":"2014-06-27 18:44:24.000000000","message":"it may be useful to be able to setup amount of servers via __init__","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        self.topic \u003d topic or \"test_topic\""},{"line_number":109,"context_line":"        self.names \u003d names or [\"server_%i\" % (i) for i in range(3)]"},{"line_number":110,"context_line":"        self.exchange \u003d exchange"},{"line_number":111,"context_line":"        self.targets \u003d [self._target(server\u003dn) for n in self.names]"},{"line_number":112,"context_line":"        self.transport \u003d transport"},{"line_number":113,"context_line":"        self.use_fanout_ctrl \u003d use_fanout_ctrl"},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_d6459d9b","line":111,"updated":"2014-06-27 18:44:24.000000000","message":"I would prefer to use here more OOP \n\nlet\u0027s make some structure: \n\n[\n  {\"name\": xxx, \"target\": yyy, \"client\": zzz}\n]\n\n{\"target\"}","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4ab05173c06795bdd32ee728ad1da87d37adf5d5","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        if not self.transport:"},{"line_number":118,"context_line":"            self.transport \u003d self.useFixture(TransportFixture(self.url))"},{"line_number":119,"context_line":"        self.servers \u003d [self.useFixture(self._server(t)) for t in self.targets]"},{"line_number":120,"context_line":"        self.transport.wait()"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def _target(self, server\u003dNone, fanout\u003dFalse):"},{"line_number":123,"context_line":"        t \u003d messaging.Target(exchange\u003dself.exchange, topic\u003dself.topic)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_3a7a3677","line":120,"updated":"2014-07-21 13:40:57.000000000","message":"Waiting without any conditions seems to me like some kind of magic.","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        if not self.transport:"},{"line_number":118,"context_line":"            self.transport \u003d self.useFixture(TransportFixture(self.url))"},{"line_number":119,"context_line":"        self.servers \u003d [self.useFixture(self._server(t)) for t in self.targets]"},{"line_number":120,"context_line":"        self.transport.wait()"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def _target(self, server\u003dNone, fanout\u003dFalse):"},{"line_number":123,"context_line":"        t \u003d messaging.Target(exchange\u003dself.exchange, topic\u003dself.topic)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_40970148","line":120,"in_reply_to":"baada198_3a7a3677","updated":"2014-10-22 14:58:49.000000000","message":"It\u0027s just the API of Transport object","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def _target(self, server\u003dNone, fanout\u003dFalse):"},{"line_number":123,"context_line":"        t \u003d messaging.Target(exchange\u003dself.exchange, topic\u003dself.topic)"},{"line_number":124,"context_line":"        t.server \u003d server if server else None"},{"line_number":125,"context_line":"        t.fanout \u003d fanout if fanout else False"},{"line_number":126,"context_line":"        return t"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_d6e83de1","line":124,"updated":"2014-06-27 18:44:24.000000000","message":"why not just: \n\n  t.server \u003d server \n  t.fanout \u003d fanout\n\n(they have default values...)","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def _target(self, server\u003dNone, fanout\u003dFalse):"},{"line_number":123,"context_line":"        t \u003d messaging.Target(exchange\u003dself.exchange, topic\u003dself.topic)"},{"line_number":124,"context_line":"        t.server \u003d server if server else None"},{"line_number":125,"context_line":"        t.fanout \u003d fanout if fanout else False"},{"line_number":126,"context_line":"        return t"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_40d0e11e","line":124,"in_reply_to":"1ae5cdf2_d6e83de1","updated":"2014-10-22 14:58:49.000000000","message":"Done","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return RpcServerFixture(self.transport.transport, target,"},{"line_number":133,"context_line":"                                ctrl_target\u003dctrl)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def client(self, server\u003dNone, cast\u003dFalse):"},{"line_number":136,"context_line":"        if server:"},{"line_number":137,"context_line":"            if server \u003d\u003d \u0027all\u0027:"},{"line_number":138,"context_line":"                target \u003d self._target(fanout\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_36a8818b","line":135,"updated":"2014-06-27 18:44:24.000000000","message":"maybe you should just add fanout argument?","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        return RpcServerFixture(self.transport.transport, target,"},{"line_number":133,"context_line":"                                ctrl_target\u003dctrl)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def client(self, server\u003dNone, cast\u003dFalse):"},{"line_number":136,"context_line":"        if server:"},{"line_number":137,"context_line":"            if server \u003d\u003d \u0027all\u0027:"},{"line_number":138,"context_line":"                target \u003d self._target(fanout\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_60f5e581","line":135,"in_reply_to":"1ae5cdf2_36a8818b","updated":"2014-10-22 14:58:49.000000000","message":"Could be added later if a test need it.","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        return ClientStub(self.transport.transport, target, cast\u003dcast,"},{"line_number":146,"context_line":"                          timeout\u003d5)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def sync(self, server\u003dNone):"},{"line_number":149,"context_line":"        if server:"},{"line_number":150,"context_line":"            if server \u003d\u003d \u0027all\u0027:"},{"line_number":151,"context_line":"                c \u003d self.client(server\u003d\u0027all\u0027, cast\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_b69bb171","line":148,"updated":"2014-06-27 18:44:24.000000000","message":"as well here","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        return ClientStub(self.transport.transport, target, cast\u003dcast,"},{"line_number":146,"context_line":"                          timeout\u003d5)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def sync(self, server\u003dNone):"},{"line_number":149,"context_line":"        if server:"},{"line_number":150,"context_line":"            if server \u003d\u003d \u0027all\u0027:"},{"line_number":151,"context_line":"                c \u003d self.client(server\u003d\u0027all\u0027, cast\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_00341948","line":148,"in_reply_to":"1ae5cdf2_b69bb171","updated":"2014-10-22 14:58:49.000000000","message":"Same here.","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                raise ValueError(\"Invalid value for server: %r\" % server)"},{"line_number":161,"context_line":"        else:"},{"line_number":162,"context_line":"            s \u003d len(self.servers)"},{"line_number":163,"context_line":"            for i in range(s):"},{"line_number":164,"context_line":"                self.client(i).ping()"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_767cc920","line":163,"updated":"2014-06-27 18:44:24.000000000","message":"imho it is better to avoid extra variables:\n\n  for i in range(len(self.servers)):\n     ...","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4ab05173c06795bdd32ee728ad1da87d37adf5d5","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                raise ValueError(\"Invalid value for server: %r\" % server)"},{"line_number":161,"context_line":"        else:"},{"line_number":162,"context_line":"            s \u003d len(self.servers)"},{"line_number":163,"context_line":"            for i in range(s):"},{"line_number":164,"context_line":"                self.client(i).ping()"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_babba60d","line":163,"in_reply_to":"1ae5cdf2_767cc920","updated":"2014-07-21 13:40:57.000000000","message":"Agree, furthermore, one-char variables allowed only inside of loops, when it is obvious what the data iterates with a sequence variable name.","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                raise ValueError(\"Invalid value for server: %r\" % server)"},{"line_number":161,"context_line":"        else:"},{"line_number":162,"context_line":"            s \u003d len(self.servers)"},{"line_number":163,"context_line":"            for i in range(s):"},{"line_number":164,"context_line":"                self.client(i).ping()"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_008179fa","line":163,"in_reply_to":"baada198_babba60d","updated":"2014-10-22 14:58:49.000000000","message":"Done","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        else:"},{"line_number":162,"context_line":"            s \u003d len(self.servers)"},{"line_number":163,"context_line":"            for i in range(s):"},{"line_number":164,"context_line":"                self.client(i).ping()"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"class RpcCall(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_96f3159e","line":164,"updated":"2014-06-27 18:44:24.000000000","message":"Hm it\u0027s very strange for me, why sync() method in case of not passed servers is pining all servers? seems like this should be in separated method","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"4ab05173c06795bdd32ee728ad1da87d37adf5d5","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        else:"},{"line_number":162,"context_line":"            s \u003d len(self.servers)"},{"line_number":163,"context_line":"            for i in range(s):"},{"line_number":164,"context_line":"                self.client(i).ping()"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"class RpcCall(object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_1a0ad2d1","line":164,"in_reply_to":"1ae5cdf2_96f3159e","updated":"2014-07-21 13:40:57.000000000","message":"DDoS bot?","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":187,"context_line":"class ClientStub(object):"},{"line_number":188,"context_line":"    def __init__(self, transport, target, cast\u003dFalse, name\u003dNone, **kwargs):"},{"line_number":189,"context_line":"        self.name \u003d name or \"functional-tests\""},{"line_number":190,"context_line":"        self.cast \u003d cast"},{"line_number":191,"context_line":"        self.client \u003d messaging.RPCClient(transport, target, **kwargs)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def __getattr__(self, name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_96ab151d","line":190,"updated":"2014-06-27 18:44:24.000000000","message":"Why instance of client can be used only for one type call or cast? probably it should be passed somehwere else?","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":187,"context_line":"class ClientStub(object):"},{"line_number":188,"context_line":"    def __init__(self, transport, target, cast\u003dFalse, name\u003dNone, **kwargs):"},{"line_number":189,"context_line":"        self.name \u003d name or \"functional-tests\""},{"line_number":190,"context_line":"        self.cast \u003d cast"},{"line_number":191,"context_line":"        self.client \u003d messaging.RPCClient(transport, target, **kwargs)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    def __getattr__(self, name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_4c7dfce6","line":190,"in_reply_to":"1ae5cdf2_96ab151d","updated":"2014-10-22 14:58:49.000000000","message":"Could be changed later if a test need it.","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        def _remove(obj, lists):"},{"line_number":240,"context_line":"            for l in lists:"},{"line_number":241,"context_line":"                if obj in l:"},{"line_number":242,"context_line":"                    front \u003d l[0]"},{"line_number":243,"context_line":"                    l.remove(obj)"},{"line_number":244,"context_line":"                    return front"},{"line_number":245,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_360fa13a","line":242,"updated":"2014-06-27 18:44:24.000000000","message":"could you explain what is front and why we are returing exactly it?","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                errors.wrong_order.append([item, o])"},{"line_number":253,"context_line":"        for l in received:"},{"line_number":254,"context_line":"            errors.extra +\u003d l"},{"line_number":255,"context_line":"        if errors:"},{"line_number":256,"context_line":"            return errors"},{"line_number":257,"context_line":"        else:"},{"line_number":258,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_760cc942","line":255,"updated":"2014-06-27 18:44:24.000000000","message":"255-258 can be replaced in single line\n\n  return errors\n\nor if you would like to return None even if errors is False or [] then:\n\n  return errors or None","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":252,"context_line":"                errors.wrong_order.append([item, o])"},{"line_number":253,"context_line":"        for l in received:"},{"line_number":254,"context_line":"            errors.extra +\u003d l"},{"line_number":255,"context_line":"        if errors:"},{"line_number":256,"context_line":"            return errors"},{"line_number":257,"context_line":"        else:"},{"line_number":258,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_2cb7d8d9","line":255,"in_reply_to":"1ae5cdf2_760cc942","updated":"2014-10-22 14:58:49.000000000","message":"done","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"bbc6bf271a95a1184485755ea7c36b61e541190e","unresolved":false,"context_lines":[{"line_number":258,"context_line":"            return None"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"class Skippable(test_utils.BaseTestCase):"},{"line_number":262,"context_line":"    def setUp(self):"},{"line_number":263,"context_line":"        super(Skippable, self).setUp()"},{"line_number":264,"context_line":"        self.url \u003d os.environ.get(\u0027TRANSPORT_URL\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_b1301bea","line":261,"updated":"2014-06-27 18:44:24.000000000","message":"hm not clear name.. imho, it skips only if there is no transport url","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"4e65e4c409e68bdd619f654dbe94ae5d434e2c36","unresolved":false,"context_lines":[{"line_number":258,"context_line":"            return None"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"class Skippable(test_utils.BaseTestCase):"},{"line_number":262,"context_line":"    def setUp(self):"},{"line_number":263,"context_line":"        super(Skippable, self).setUp()"},{"line_number":264,"context_line":"        self.url \u003d os.environ.get(\u0027TRANSPORT_URL\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aa7fdbe_4ce17ccf","line":261,"in_reply_to":"1ae5cdf2_b1301bea","updated":"2014-10-22 14:58:49.000000000","message":"Done","commit_id":"2b9528c43ccda84c8b7b345c5069fbb0f34d5056"}]}
