)]}'
{"neutron/objects/utils.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"849022096707852115169596db888990a78ca0b5","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class StringMatchingFilterObj(object):"},{"line_number":29,"context_line":"    def __init__(self, contains\u003dNone, starts\u003dNone, ends\u003dNone):"},{"line_number":30,"context_line":"        super(StringMatchingFilterObj, self).__init__()"},{"line_number":31,"context_line":"        self.contains \u003d contains"},{"line_number":32,"context_line":"        self.starts \u003d starts"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_4cba336e","line":29,"range":{"start_line":29,"start_character":23,"end_line":29,"end_character":60},"updated":"2017-10-24 20:35:48.000000000","message":"I may be missing something, but wouldn\u0027t it be cleaner not to add these arguments that never get used and just add False as the default value to the getattr calls in L37, L41 and L45? Like this: http://paste.openstack.org/show/624517/. I ran the unit tests with this version and they pass","commit_id":"e77f3752c5dcf70043c24dc621d92b5050e1d550"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"106838b3de2c84d7bfa5f6a296088991f9537778","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class StringMatchingFilterObj(object):"},{"line_number":29,"context_line":"    def __init__(self, contains\u003dNone, starts\u003dNone, ends\u003dNone):"},{"line_number":30,"context_line":"        super(StringMatchingFilterObj, self).__init__()"},{"line_number":31,"context_line":"        self.contains \u003d contains"},{"line_number":32,"context_line":"        self.starts \u003d starts"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_22481b85","line":29,"range":{"start_line":29,"start_character":23,"end_line":29,"end_character":60},"in_reply_to":"3f4b6375_4cba336e","updated":"2017-10-25 01:04:13.000000000","message":"I agree. This approach is much cleaner. Will upload a new patch.","commit_id":"e77f3752c5dcf70043c24dc621d92b5050e1d550"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"849022096707852115169596db888990a78ca0b5","unresolved":false,"context_lines":[{"line_number":28,"context_line":"class StringMatchingFilterObj(object):"},{"line_number":29,"context_line":"    def __init__(self, contains\u003dNone, starts\u003dNone, ends\u003dNone):"},{"line_number":30,"context_line":"        super(StringMatchingFilterObj, self).__init__()"},{"line_number":31,"context_line":"        self.contains \u003d contains"},{"line_number":32,"context_line":"        self.starts \u003d starts"},{"line_number":33,"context_line":"        self.ends \u003d ends"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    @property"},{"line_number":36,"context_line":"    def is_contains(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f4b6375_8c694bfa","line":33,"range":{"start_line":31,"start_character":0,"end_line":33,"end_character":24},"updated":"2017-10-24 20:35:48.000000000","message":"Maybe we don\u0027t need this. See above comment","commit_id":"e77f3752c5dcf70043c24dc621d92b5050e1d550"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0167917636d5fe5e08686c28c65b488ae5766c19","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class StringMatchingFilterObj(object):"},{"line_number":29,"context_line":"    def __init__(self):"},{"line_number":30,"context_line":"        super(StringMatchingFilterObj, self).__init__()"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @property"},{"line_number":33,"context_line":"    def is_contains(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3f4b6375_bad2bccf","line":30,"updated":"2017-10-26 14:11:31.000000000","message":"the __init__ is of no use now","commit_id":"d01cffdb86d62678da54a2288f9d97686f9620d0"}],"neutron/tests/unit/objects/db/test_api.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"28be673741369b9e102b36eb5b8cb3a89d80d33a","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def test_get_objects_with_string_matching_filters_contains(self):"},{"line_number":103,"context_line":"        obj1 \u003d api.create_object(self.ctxt, self.model, {\u0027name\u0027: \u0027obj_con_1\u0027})"},{"line_number":104,"context_line":"        obj2 \u003d api.create_object(self.ctxt, self.model, {\u0027name\u0027: \u0027obj_con_2\u0027})"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        objs \u003d api.get_objects("},{"line_number":107,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringContains(\u0027con\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_55d336d6","line":104,"updated":"2017-10-31 08:11:20.000000000","message":"maybe You could add one object with \"different\" name and check that it\u0027s not returned","commit_id":"0f615567529e781fa16a35d4dff6b42a04a476bc"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"635538ff565d305a3c21af02ac48635f070e4a52","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def test_get_objects_with_string_matching_filters_contains(self):"},{"line_number":103,"context_line":"        obj1 \u003d api.create_object(self.ctxt, self.model, {\u0027name\u0027: \u0027obj_con_1\u0027})"},{"line_number":104,"context_line":"        obj2 \u003d api.create_object(self.ctxt, self.model, {\u0027name\u0027: \u0027obj_con_2\u0027})"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        objs \u003d api.get_objects("},{"line_number":107,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringContains(\u0027con\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_15ac9e33","line":104,"in_reply_to":"3f4b6375_55d336d6","updated":"2017-10-31 08:17:25.000000000","message":"Good point. Will upload a new patch.","commit_id":"0f615567529e781fa16a35d4dff6b42a04a476bc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"28be673741369b9e102b36eb5b8cb3a89d80d33a","unresolved":false,"context_lines":[{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def test_get_objects_with_string_matching_filters_starts(self):"},{"line_number":111,"context_line":"        obj1 \u003d api.create_object(self.ctxt, self.model, {\u0027name\u0027: \u0027pre_obj1\u0027})"},{"line_number":112,"context_line":"        obj2 \u003d api.create_object(self.ctxt, self.model, {\u0027name\u0027: \u0027pre_obj2\u0027})"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        objs \u003d api.get_objects("},{"line_number":115,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringStarts(\u0027pre\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_35dafae8","line":112,"updated":"2017-10-31 08:11:20.000000000","message":"maybe You could add one object with \"different\" name and check that it\u0027s not returned","commit_id":"0f615567529e781fa16a35d4dff6b42a04a476bc"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"28be673741369b9e102b36eb5b8cb3a89d80d33a","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def test_get_objects_with_string_matching_filters_ends(self):"},{"line_number":119,"context_line":"        obj1 \u003d api.create_object(self.ctxt, self.model, {\u0027name\u0027: \u0027obj1_end\u0027})"},{"line_number":120,"context_line":"        obj2 \u003d api.create_object(self.ctxt, self.model, {\u0027name\u0027: \u0027obj2_end\u0027})"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"        objs \u003d api.get_objects("},{"line_number":123,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringEnds(\u0027end\u0027))"}],"source_content_type":"text/x-python","patch_set":6,"id":"3f4b6375_15d5beb7","line":120,"updated":"2017-10-31 08:11:20.000000000","message":"maybe You could add one object with \"different\" name and check that it\u0027s not returned","commit_id":"0f615567529e781fa16a35d4dff6b42a04a476bc"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"94effd4c674107abc37436ea47cf55d8babe3181","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        objs \u003d api.get_objects("},{"line_number":108,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringContains(\u0027con\u0027))"},{"line_number":109,"context_line":"        self.assertEqual([obj1, obj2], objs)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_get_objects_with_string_matching_filters_starts(self):"},{"line_number":112,"context_line":"        obj1 \u003d api.create_object(self.ctxt, self.model, {\u0027name\u0027: \u0027pre_obj1\u0027})"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_38b77f89","line":109,"updated":"2017-10-31 20:47:32.000000000","message":"I think that the intent of Slawek\u0027s comment was to add also a line like this:\n\nself.assertNotIn(obj3, objs)\n\nThis will also fix the pep8 failure","commit_id":"1faec1e98f1601a26a6f4bde01e2bb2681a45892"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"ffc61df98369b9b798c1ec36372ad45412e0dd71","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        objs \u003d api.get_objects("},{"line_number":108,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringContains(\u0027con\u0027))"},{"line_number":109,"context_line":"        self.assertEqual([obj1, obj2], objs)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def test_get_objects_with_string_matching_filters_starts(self):"},{"line_number":112,"context_line":"        obj1 \u003d api.create_object(self.ctxt, self.model, {\u0027name\u0027: \u0027pre_obj1\u0027})"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_b94ece35","line":109,"in_reply_to":"3f4b6375_38b77f89","updated":"2017-11-01 01:25:25.000000000","message":"Oh, right. Thanks.","commit_id":"1faec1e98f1601a26a6f4bde01e2bb2681a45892"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"94effd4c674107abc37436ea47cf55d8babe3181","unresolved":false,"context_lines":[{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        objs \u003d api.get_objects("},{"line_number":117,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringStarts(\u0027pre\u0027))"},{"line_number":118,"context_line":"        self.assertEqual([obj1, obj2], objs)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def test_get_objects_with_string_matching_filters_ends(self):"},{"line_number":121,"context_line":"        obj1 \u003d api.create_object(self.ctxt, self.model, {\u0027name\u0027: \u0027obj1_end\u0027})"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_38453f71","line":118,"updated":"2017-10-31 20:47:32.000000000","message":"Ditto","commit_id":"1faec1e98f1601a26a6f4bde01e2bb2681a45892"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"94effd4c674107abc37436ea47cf55d8babe3181","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        objs \u003d api.get_objects("},{"line_number":126,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringEnds(\u0027end\u0027))"},{"line_number":127,"context_line":"        self.assertEqual([obj1, obj2], objs)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def test_get_object_create_update_delete(self):"},{"line_number":130,"context_line":"        obj \u003d api.create_object(self.ctxt, self.model, {\u0027name\u0027: \u0027foo\u0027})"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_18484385","line":127,"updated":"2017-10-31 20:47:32.000000000","message":"Ditto","commit_id":"1faec1e98f1601a26a6f4bde01e2bb2681a45892"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"dfbb1a05b3d8ec2e32059062f28085b90a8fd06c","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        objs \u003d api.get_objects("},{"line_number":108,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringContains(\u0027con\u0027))"},{"line_number":109,"context_line":"        self.assertEqual([obj1, obj2], objs)"},{"line_number":110,"context_line":"        self.assertNotIn(obj3, objs)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def test_get_objects_with_string_matching_filters_starts(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4b6375_0acfc27f","line":109,"range":{"start_line":109,"start_character":25,"end_line":109,"end_character":37},"updated":"2017-11-01 04:26:38.000000000","message":"is the order of obj1 and obj2 guaranteed? If not, assertIn looks better.","commit_id":"260aaa5763926689b36c8616d460caac08deaa8f"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"08150b32c65e86be1408b31881fe7f99a29e8733","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        objs \u003d api.get_objects("},{"line_number":108,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringContains(\u0027con\u0027))"},{"line_number":109,"context_line":"        self.assertEqual([obj1, obj2], objs)"},{"line_number":110,"context_line":"        self.assertNotIn(obj3, objs)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def test_get_objects_with_string_matching_filters_starts(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4b6375_4aca531a","line":109,"range":{"start_line":109,"start_character":25,"end_line":109,"end_character":37},"in_reply_to":"3f4b6375_0acfc27f","updated":"2017-11-01 09:44:45.000000000","message":"Yes, from what I have tested, the order is guaranteed. But if asserIn looks better for others too. I will upload a new patch.","commit_id":"260aaa5763926689b36c8616d460caac08deaa8f"},{"author":{"_account_id":17491,"name":"Lujin Luo","email":"luo.lujin@jp.fujitsu.com","username":"Lujin"},"change_message_id":"9fcc0df23560e925f271bb94142fe295e971a933","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        objs \u003d api.get_objects("},{"line_number":108,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringContains(\u0027con\u0027))"},{"line_number":109,"context_line":"        self.assertEqual([obj1, obj2], objs)"},{"line_number":110,"context_line":"        self.assertNotIn(obj3, objs)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def test_get_objects_with_string_matching_filters_starts(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4b6375_3274ec67","line":109,"range":{"start_line":109,"start_character":25,"end_line":109,"end_character":37},"in_reply_to":"3f4b6375_2831550c","updated":"2017-11-03 04:26:32.000000000","message":"Done.","commit_id":"260aaa5763926689b36c8616d460caac08deaa8f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"86978ddce8294496bbf5beb42f0ef5f199462bd2","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        objs \u003d api.get_objects("},{"line_number":108,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringContains(\u0027con\u0027))"},{"line_number":109,"context_line":"        self.assertEqual([obj1, obj2], objs)"},{"line_number":110,"context_line":"        self.assertNotIn(obj3, objs)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def test_get_objects_with_string_matching_filters_starts(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4b6375_2831550c","line":109,"range":{"start_line":109,"start_character":25,"end_line":109,"end_character":37},"in_reply_to":"3f4b6375_4aca531a","updated":"2017-11-01 17:07:49.000000000","message":"Let\u0027s not make that assumption. Let\u0027s do assertIn","commit_id":"260aaa5763926689b36c8616d460caac08deaa8f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"86978ddce8294496bbf5beb42f0ef5f199462bd2","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        objs \u003d api.get_objects("},{"line_number":118,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringStarts(\u0027pre\u0027))"},{"line_number":119,"context_line":"        self.assertEqual([obj1, obj2], objs)"},{"line_number":120,"context_line":"        self.assertNotIn(obj3, objs)"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def test_get_objects_with_string_matching_filters_ends(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4b6375_083459fa","line":119,"updated":"2017-11-01 17:07:49.000000000","message":"Ditto","commit_id":"260aaa5763926689b36c8616d460caac08deaa8f"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"86978ddce8294496bbf5beb42f0ef5f199462bd2","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        objs \u003d api.get_objects("},{"line_number":128,"context_line":"            self.ctxt, self.model, name\u003dobj_utils.StringEnds(\u0027end\u0027))"},{"line_number":129,"context_line":"        self.assertEqual([obj1, obj2], objs)"},{"line_number":130,"context_line":"        self.assertNotIn(obj3, objs)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_get_object_create_update_delete(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4b6375_e83a1de5","line":129,"updated":"2017-11-01 17:07:49.000000000","message":"Ditto","commit_id":"260aaa5763926689b36c8616d460caac08deaa8f"}]}
