)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"b92ca89dde9d0c2d6e285bddd6e11f62ff728f50","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds \"list external networks\" test to non admin user"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For non-admin user verifies that Public networks are visible but their subnets"},{"line_number":10,"context_line":"are not."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I327bed82a9fe2bbd2d574900dbfd182d27892dc8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"5a890539_c1b584ce","line":9,"updated":"2014-11-10 12:02:20.000000000","message":"Let\u0027s use short strings (less than 80 characters per line) in commit messages.","commit_id":"3dbdd3d825feba9d4808e7d3f5e4fc7213e389aa"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"77e34f1895935e1f524d04002b8f19c1d3ffd921","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds \"list external networks\" test to non admin user"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"For non-admin user verifies that Public networks are visible but their subnets"},{"line_number":10,"context_line":"are not."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I327bed82a9fe2bbd2d574900dbfd182d27892dc8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"5a890539_ef7347e5","line":9,"in_reply_to":"5a890539_c1b584ce","updated":"2014-11-10 13:36:00.000000000","message":"Done","commit_id":"3dbdd3d825feba9d4808e7d3f5e4fc7213e389aa"}],"tempest/api/network/test_networks.py":[{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"c44645183f96ab1d926515b2e96368710bd0ad15","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                                  \"list\")"},{"line_number":246,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":247,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027]"},{"line_number":248,"context_line":"                        if network[\u0027router:external\u0027])"},{"line_number":249,"context_line":"        public_subnets \u003d [sub for subnets in subnets_list for sub in subnets]"},{"line_number":250,"context_line":"        _, body \u003d self.client.list_subnets()"},{"line_number":251,"context_line":"        subnets \u003d [sub[\u0027id\u0027] for sub in body[\u0027subnets\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9df570_f937effc","line":248,"updated":"2014-09-28 14:16:40.000000000","message":"Didn\u0027t we already determine that by now, all networks in body[\u0027networks\u0027] has their network[\u0027router:external\u0027] property set to True?","commit_id":"4750d8b6c6a1819382905a8146f5471b19d44403"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"91a526a5eed14ad4c361fb0db93a7e0fcdd8fe62","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                                  \"list\")"},{"line_number":246,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":247,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027]"},{"line_number":248,"context_line":"                        if network[\u0027router:external\u0027])"},{"line_number":249,"context_line":"        public_subnets \u003d [sub for subnets in subnets_list for sub in subnets]"},{"line_number":250,"context_line":"        _, body \u003d self.client.list_subnets()"},{"line_number":251,"context_line":"        subnets \u003d [sub[\u0027id\u0027] for sub in body[\u0027subnets\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9df570_bc7b95bc","line":248,"in_reply_to":"da9df570_f937effc","updated":"2014-09-28 17:42:56.000000000","message":"You are right.","commit_id":"4750d8b6c6a1819382905a8146f5471b19d44403"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"c44645183f96ab1d926515b2e96368710bd0ad15","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":247,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027]"},{"line_number":248,"context_line":"                        if network[\u0027router:external\u0027])"},{"line_number":249,"context_line":"        public_subnets \u003d [sub for subnets in subnets_list for sub in subnets]"},{"line_number":250,"context_line":"        _, body \u003d self.client.list_subnets()"},{"line_number":251,"context_line":"        subnets \u003d [sub[\u0027id\u0027] for sub in body[\u0027subnets\u0027]"},{"line_number":252,"context_line":"                   if sub[\u0027id\u0027] in public_subnets]"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9df570_5928fb99","line":249,"updated":"2014-09-28 14:16:40.000000000","message":"Please don\u0027t use 2 for statements in the same list comprehension. It makes the code really hard to read.","commit_id":"4750d8b6c6a1819382905a8146f5471b19d44403"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"4725f404ab6965b40f6f681f12886e0d3f0ded1d","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":247,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027]"},{"line_number":248,"context_line":"                        if network[\u0027router:external\u0027])"},{"line_number":249,"context_line":"        public_subnets \u003d [sub for subnets in subnets_list for sub in subnets]"},{"line_number":250,"context_line":"        _, body \u003d self.client.list_subnets()"},{"line_number":251,"context_line":"        subnets \u003d [sub[\u0027id\u0027] for sub in body[\u0027subnets\u0027]"},{"line_number":252,"context_line":"                   if sub[\u0027id\u0027] in public_subnets]"}],"source_content_type":"text/x-python","patch_set":1,"id":"baa201ad_3fd83353","line":249,"in_reply_to":"da9df570_1c44a172","updated":"2014-09-29 08:43:07.000000000","message":"How about itertools.chain?\n\n itertools.chain(*subnets_list)\n\nwill return a generator, each yield will return a single item, thus flattening the original list.\n\nSource: http://stackoverflow.com/questions/952914/making-a-flat-list-out-of-list-of-lists-in-python (second response)","commit_id":"4750d8b6c6a1819382905a8146f5471b19d44403"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"91a526a5eed14ad4c361fb0db93a7e0fcdd8fe62","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":247,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027]"},{"line_number":248,"context_line":"                        if network[\u0027router:external\u0027])"},{"line_number":249,"context_line":"        public_subnets \u003d [sub for subnets in subnets_list for sub in subnets]"},{"line_number":250,"context_line":"        _, body \u003d self.client.list_subnets()"},{"line_number":251,"context_line":"        subnets \u003d [sub[\u0027id\u0027] for sub in body[\u0027subnets\u0027]"},{"line_number":252,"context_line":"                   if sub[\u0027id\u0027] in public_subnets]"}],"source_content_type":"text/x-python","patch_set":1,"id":"da9df570_1c44a172","line":249,"in_reply_to":"da9df570_5928fb99","updated":"2014-09-28 17:42:56.000000000","message":"That\u0027s the best way I know to flatten a list. I\u0027ll add a comment to explain, though","commit_id":"4750d8b6c6a1819382905a8146f5471b19d44403"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"14833c777809d7cd8503ba38e2b6e66eea432538","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        external \u003d all(network[\u0027router:external\u0027]"},{"line_number":244,"context_line":"                       for network in body[\u0027networks\u0027])"},{"line_number":245,"context_line":"        self.assertTrue(external, \"Found non-external networks in filtered \""},{"line_number":246,"context_line":"                                  \"list\")"},{"line_number":247,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":248,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027])"},{"line_number":249,"context_line":"        # subnets_list is a list of lists. This flattens it to a list of UUIDs"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_b54b0d2a","line":246,"updated":"2014-10-02 06:05:22.000000000","message":"I guess this assertTrue checks whether we can get external network list after filtering.\nbut the message would be difficult for debugging because it doesn\u0027t contain wrong network. So how about getting non-external networks and writing them on the error message?\n\neg:\n internals \u003d [net for net in body[\u0027networks\u0027] if net[\u0027router:external\u0027] \u003d\u003d False]\n self.assertEmpty(internals, \"Found non-external networks in filtered list. (%s)\" % internal)","commit_id":"1aca18928470a5f3cc9bc73b42ef7317ddbf39d2"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"868f16019e90d51a46c0665887f47b7286161fc2","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        external \u003d all(network[\u0027router:external\u0027]"},{"line_number":244,"context_line":"                       for network in body[\u0027networks\u0027])"},{"line_number":245,"context_line":"        self.assertTrue(external, \"Found non-external networks in filtered \""},{"line_number":246,"context_line":"                                  \"list\")"},{"line_number":247,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":248,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027])"},{"line_number":249,"context_line":"        # subnets_list is a list of lists. This flattens it to a list of UUIDs"}],"source_content_type":"text/x-python","patch_set":4,"id":"baa201ad_6cb1a946","line":246,"in_reply_to":"baa201ad_b54b0d2a","updated":"2014-10-05 08:19:55.000000000","message":"Done","commit_id":"1aca18928470a5f3cc9bc73b42ef7317ddbf39d2"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12738e39596cdb0b02f7ed24c59deecae69d4369","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        \"\"\"Verifies user can see external networks but not subnets"},{"line_number":349,"context_line":"        \"\"\""},{"line_number":350,"context_line":"        _, body \u003d self.client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":351,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"},{"line_number":352,"context_line":"        self.assertNotEmpty(networks, \"No external networks found\")"},{"line_number":353,"context_line":"        internals \u003d [net for net in body[\u0027networks\u0027] if"},{"line_number":354,"context_line":"                     net[\u0027router:external\u0027] is not True]"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_876786e8","line":351,"updated":"2014-10-05 13:15:13.000000000","message":"I think that the list comprehension can be changed to a generator comprehension (ie. (x for x in mylist) instead of [x for x in mylist]).\n\nThe same goes for L353 and L362.","commit_id":"0cef231e469a1d15f20db6bec9da2f086c242b07"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"392aa820c17acd61f9ea147b84827dcd6721f29f","unresolved":false,"context_lines":[{"line_number":348,"context_line":"        \"\"\"Verifies user can see external networks but not subnets"},{"line_number":349,"context_line":"        \"\"\""},{"line_number":350,"context_line":"        _, body \u003d self.client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":351,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"},{"line_number":352,"context_line":"        self.assertNotEmpty(networks, \"No external networks found\")"},{"line_number":353,"context_line":"        internals \u003d [net for net in body[\u0027networks\u0027] if"},{"line_number":354,"context_line":"                     net[\u0027router:external\u0027] is not True]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_d02468c8","line":351,"in_reply_to":"baa201ad_876786e8","updated":"2014-10-20 10:51:25.000000000","message":"Done","commit_id":"0cef231e469a1d15f20db6bec9da2f086c242b07"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12738e39596cdb0b02f7ed24c59deecae69d4369","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        _, body \u003d self.client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":351,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"},{"line_number":352,"context_line":"        self.assertNotEmpty(networks, \"No external networks found\")"},{"line_number":353,"context_line":"        internals \u003d [net for net in body[\u0027networks\u0027] if"},{"line_number":354,"context_line":"                     net[\u0027router:external\u0027] is not True]"},{"line_number":355,"context_line":"        self.assertEmpty(internals, \"Found non-external networks\""},{"line_number":356,"context_line":"                                    \" in filtered list. (%s)\" % internals)"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_276dfacc","line":353,"updated":"2014-10-05 13:15:13.000000000","message":"nit: for consistency with L362, please move the \u0027if\u0027 above to L354 (one line down).","commit_id":"0cef231e469a1d15f20db6bec9da2f086c242b07"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"392aa820c17acd61f9ea147b84827dcd6721f29f","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        _, body \u003d self.client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":351,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"},{"line_number":352,"context_line":"        self.assertNotEmpty(networks, \"No external networks found\")"},{"line_number":353,"context_line":"        internals \u003d [net for net in body[\u0027networks\u0027] if"},{"line_number":354,"context_line":"                     net[\u0027router:external\u0027] is not True]"},{"line_number":355,"context_line":"        self.assertEmpty(internals, \"Found non-external networks\""},{"line_number":356,"context_line":"                                    \" in filtered list. (%s)\" % internals)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_302cd4ab","line":353,"in_reply_to":"baa201ad_276dfacc","updated":"2014-10-20 10:51:25.000000000","message":"Done","commit_id":"0cef231e469a1d15f20db6bec9da2f086c242b07"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12738e39596cdb0b02f7ed24c59deecae69d4369","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        self.assertNotEmpty(networks, \"No external networks found\")"},{"line_number":353,"context_line":"        internals \u003d [net for net in body[\u0027networks\u0027] if"},{"line_number":354,"context_line":"                     net[\u0027router:external\u0027] is not True]"},{"line_number":355,"context_line":"        self.assertEmpty(internals, \"Found non-external networks\""},{"line_number":356,"context_line":"                                    \" in filtered list. (%s)\" % internals)"},{"line_number":357,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":358,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_87406635","line":355,"updated":"2014-10-05 13:15:13.000000000","message":"I think that there is a consistency problem here: on one hand the variable is called \"internals\" but the user will see \"non-external\", which can be slightly confusing.","commit_id":"0cef231e469a1d15f20db6bec9da2f086c242b07"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"392aa820c17acd61f9ea147b84827dcd6721f29f","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        self.assertNotEmpty(networks, \"No external networks found\")"},{"line_number":353,"context_line":"        internals \u003d [net for net in body[\u0027networks\u0027] if"},{"line_number":354,"context_line":"                     net[\u0027router:external\u0027] is not True]"},{"line_number":355,"context_line":"        self.assertEmpty(internals, \"Found non-external networks\""},{"line_number":356,"context_line":"                                    \" in filtered list. (%s)\" % internals)"},{"line_number":357,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":358,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_b040c457","line":355,"in_reply_to":"baa201ad_87406635","updated":"2014-10-20 10:51:25.000000000","message":"Done","commit_id":"0cef231e469a1d15f20db6bec9da2f086c242b07"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12738e39596cdb0b02f7ed24c59deecae69d4369","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        internals \u003d [net for net in body[\u0027networks\u0027] if"},{"line_number":354,"context_line":"                     net[\u0027router:external\u0027] is not True]"},{"line_number":355,"context_line":"        self.assertEmpty(internals, \"Found non-external networks\""},{"line_number":356,"context_line":"                                    \" in filtered list. (%s)\" % internals)"},{"line_number":357,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":358,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027])"},{"line_number":359,"context_line":"        # subnets_list is a list of lists. This flattens it to a list of UUIDs"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_67438242","line":356,"updated":"2014-10-05 13:15:13.000000000","message":"nit:\n\n \"Found non-external networks in filtered list (%s).\" % internals","commit_id":"0cef231e469a1d15f20db6bec9da2f086c242b07"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"392aa820c17acd61f9ea147b84827dcd6721f29f","unresolved":false,"context_lines":[{"line_number":353,"context_line":"        internals \u003d [net for net in body[\u0027networks\u0027] if"},{"line_number":354,"context_line":"                     net[\u0027router:external\u0027] is not True]"},{"line_number":355,"context_line":"        self.assertEmpty(internals, \"Found non-external networks\""},{"line_number":356,"context_line":"                                    \" in filtered list. (%s)\" % internals)"},{"line_number":357,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":358,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027])"},{"line_number":359,"context_line":"        # subnets_list is a list of lists. This flattens it to a list of UUIDs"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_903bc0ea","line":356,"in_reply_to":"baa201ad_67438242","updated":"2014-10-20 10:51:25.000000000","message":"Done","commit_id":"0cef231e469a1d15f20db6bec9da2f086c242b07"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12738e39596cdb0b02f7ed24c59deecae69d4369","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        self.assertEmpty(internals, \"Found non-external networks\""},{"line_number":356,"context_line":"                                    \" in filtered list. (%s)\" % internals)"},{"line_number":357,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":358,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027])"},{"line_number":359,"context_line":"        # subnets_list is a list of lists. This flattens it to a list of UUIDs"},{"line_number":360,"context_line":"        public_subnets_iter \u003d itertools.chain(*subnets_list)"},{"line_number":361,"context_line":"        _, body \u003d self.client.list_subnets()"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_4772fead","line":358,"updated":"2014-10-05 13:15:13.000000000","message":"not: no need to suffix the variable\u0027s name with _list as it doesn\u0027t really matter (and also it\u0027s not a list, it\u0027s a generator).","commit_id":"0cef231e469a1d15f20db6bec9da2f086c242b07"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"392aa820c17acd61f9ea147b84827dcd6721f29f","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        self.assertEmpty(internals, \"Found non-external networks\""},{"line_number":356,"context_line":"                                    \" in filtered list. (%s)\" % internals)"},{"line_number":357,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":358,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027])"},{"line_number":359,"context_line":"        # subnets_list is a list of lists. This flattens it to a list of UUIDs"},{"line_number":360,"context_line":"        public_subnets_iter \u003d itertools.chain(*subnets_list)"},{"line_number":361,"context_line":"        _, body \u003d self.client.list_subnets()"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_5031580a","line":358,"in_reply_to":"baa201ad_4772fead","updated":"2014-10-20 10:51:25.000000000","message":"Done","commit_id":"0cef231e469a1d15f20db6bec9da2f086c242b07"},{"author":{"_account_id":12444,"name":"John Schwarz","email":"jschwarz@redhat.com","username":"jschwarz"},"change_message_id":"12738e39596cdb0b02f7ed24c59deecae69d4369","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":358,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027])"},{"line_number":359,"context_line":"        # subnets_list is a list of lists. This flattens it to a list of UUIDs"},{"line_number":360,"context_line":"        public_subnets_iter \u003d itertools.chain(*subnets_list)"},{"line_number":361,"context_line":"        _, body \u003d self.client.list_subnets()"},{"line_number":362,"context_line":"        subnets \u003d [sub[\u0027id\u0027] for sub in body[\u0027subnets\u0027]"},{"line_number":363,"context_line":"                   if sub[\u0027id\u0027] in public_subnets_iter]"}],"source_content_type":"text/x-python","patch_set":5,"id":"baa201ad_077c7682","line":360,"updated":"2014-10-05 13:15:13.000000000","message":"nit: no need to suffix the variable\u0027s name with _iter as it doesn\u0027t really matter.","commit_id":"0cef231e469a1d15f20db6bec9da2f086c242b07"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"392aa820c17acd61f9ea147b84827dcd6721f29f","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":358,"context_line":"        subnets_list \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027])"},{"line_number":359,"context_line":"        # subnets_list is a list of lists. This flattens it to a list of UUIDs"},{"line_number":360,"context_line":"        public_subnets_iter \u003d itertools.chain(*subnets_list)"},{"line_number":361,"context_line":"        _, body \u003d self.client.list_subnets()"},{"line_number":362,"context_line":"        subnets \u003d [sub[\u0027id\u0027] for sub in body[\u0027subnets\u0027]"},{"line_number":363,"context_line":"                   if sub[\u0027id\u0027] in public_subnets_iter]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9aa7fdbe_fb0f8d2c","line":360,"in_reply_to":"baa201ad_077c7682","updated":"2014-10-20 10:51:25.000000000","message":"it\u0027s clearer this way","commit_id":"0cef231e469a1d15f20db6bec9da2f086c242b07"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"3ee43c310f1888db0435c6e3c271853919e6aadd","unresolved":false,"context_lines":[{"line_number":344,"context_line":"            **self.subnet_dict([\u0027gateway\u0027, \u0027host_routes\u0027, \u0027dns_nameservers\u0027]))"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":347,"context_line":"    def test_external_network(self):"},{"line_number":348,"context_line":"        \"\"\"Verifies user can see external networks but not subnets"},{"line_number":349,"context_line":"        \"\"\""},{"line_number":350,"context_line":"        _, body \u003d self.client.list_networks(**{\u0027router:external\u0027: True})"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_12d03dc8","line":347,"updated":"2014-10-23 16:29:18.000000000","message":"The name of this test is not clear.","commit_id":"4253ac0247129a77266c3af1b8a12a93cc24b13d"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"7dc9f1e040d909519a6005d358005477fa1c7de0","unresolved":false,"context_lines":[{"line_number":344,"context_line":"            **self.subnet_dict([\u0027gateway\u0027, \u0027host_routes\u0027, \u0027dns_nameservers\u0027]))"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":347,"context_line":"    def test_external_network(self):"},{"line_number":348,"context_line":"        \"\"\"Verifies user can see external networks but not subnets"},{"line_number":349,"context_line":"        \"\"\""},{"line_number":350,"context_line":"        _, body \u003d self.client.list_networks(**{\u0027router:external\u0027: True})"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_a539bff3","line":347,"in_reply_to":"9aa7fdbe_12d03dc8","updated":"2014-10-26 09:41:47.000000000","message":"Done","commit_id":"4253ac0247129a77266c3af1b8a12a93cc24b13d"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"3ee43c310f1888db0435c6e3c271853919e6aadd","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"},{"line_number":352,"context_line":"        self.assertNotEmpty(networks, \"No external networks found\")"},{"line_number":353,"context_line":"        nonexternal \u003d [net for net in body[\u0027networks\u0027] if"},{"line_number":354,"context_line":"                       net[\u0027router:external\u0027] is not True]"},{"line_number":355,"context_line":"        self.assertEmpty(nonexternal, \"Found non-external networks\""},{"line_number":356,"context_line":"                                      \" in filtered list (%s).\" % nonexternal)"},{"line_number":357,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_f2f57957","line":354,"updated":"2014-10-23 16:29:18.000000000","message":"if not net[\u0027router:external\u0027]\n\nshould do, right ?","commit_id":"4253ac0247129a77266c3af1b8a12a93cc24b13d"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"7dc9f1e040d909519a6005d358005477fa1c7de0","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"},{"line_number":352,"context_line":"        self.assertNotEmpty(networks, \"No external networks found\")"},{"line_number":353,"context_line":"        nonexternal \u003d [net for net in body[\u0027networks\u0027] if"},{"line_number":354,"context_line":"                       net[\u0027router:external\u0027] is not True]"},{"line_number":355,"context_line":"        self.assertEmpty(nonexternal, \"Found non-external networks\""},{"line_number":356,"context_line":"                                      \" in filtered list (%s).\" % nonexternal)"},{"line_number":357,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_c53ec3d9","line":354,"in_reply_to":"9aa7fdbe_f2f57957","updated":"2014-10-26 09:41:47.000000000","message":"Done","commit_id":"4253ac0247129a77266c3af1b8a12a93cc24b13d"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"3ee43c310f1888db0435c6e3c271853919e6aadd","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                                      \" in filtered list (%s).\" % nonexternal)"},{"line_number":357,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":358,"context_line":"        subnets_iter \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027])"},{"line_number":359,"context_line":"        # subnets_list is a list of lists. This flattens it to a list of UUIDs"},{"line_number":360,"context_line":"        public_subnets_iter \u003d itertools.chain(*subnets_iter)"},{"line_number":361,"context_line":"        _, body \u003d self.client.list_subnets()"},{"line_number":362,"context_line":"        subnets \u003d [sub[\u0027id\u0027] for sub in body[\u0027subnets\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_92e34da3","line":359,"updated":"2014-10-23 16:29:18.000000000","message":"There is not subnets_list variable","commit_id":"4253ac0247129a77266c3af1b8a12a93cc24b13d"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"7dc9f1e040d909519a6005d358005477fa1c7de0","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                                      \" in filtered list (%s).\" % nonexternal)"},{"line_number":357,"context_line":"        self.assertIn(CONF.network.public_network_id, networks)"},{"line_number":358,"context_line":"        subnets_iter \u003d (network[\u0027subnets\u0027] for network in body[\u0027networks\u0027])"},{"line_number":359,"context_line":"        # subnets_list is a list of lists. This flattens it to a list of UUIDs"},{"line_number":360,"context_line":"        public_subnets_iter \u003d itertools.chain(*subnets_iter)"},{"line_number":361,"context_line":"        _, body \u003d self.client.list_subnets()"},{"line_number":362,"context_line":"        subnets \u003d [sub[\u0027id\u0027] for sub in body[\u0027subnets\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aa7fdbe_e52667cd","line":359,"in_reply_to":"9aa7fdbe_92e34da3","updated":"2014-10-26 09:41:47.000000000","message":"Done","commit_id":"4253ac0247129a77266c3af1b8a12a93cc24b13d"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"da67cb374582e868199b726f11af51cfad32ce73","unresolved":false,"context_lines":[{"line_number":344,"context_line":"            **self.subnet_dict([\u0027gateway\u0027, \u0027host_routes\u0027, \u0027dns_nameservers\u0027]))"},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":347,"context_line":"    def test_external_network_visibality(self):"},{"line_number":348,"context_line":"        \"\"\"Verifies user can see external networks but not subnets"},{"line_number":349,"context_line":"        \"\"\""},{"line_number":350,"context_line":"        _, body \u003d self.client.list_networks(**{\u0027router:external\u0027: True})"}],"source_content_type":"text/x-python","patch_set":8,"id":"9aa7fdbe_97194c24","line":347,"updated":"2014-10-26 21:00:22.000000000","message":"I am sorry to be a bit picky, but that should be \"visibility\"...","commit_id":"5081582dce28050739e5f567c728807226c67684"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"02974cea4ab11be9a95b14f748a4f7a9e6949e62","unresolved":false,"context_lines":[{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":347,"context_line":"    def test_external_network_visibility(self):"},{"line_number":348,"context_line":"        \"\"\"Verifies user can see external networks but not subnets"},{"line_number":349,"context_line":"        \"\"\""},{"line_number":350,"context_line":"        _, body \u003d self.client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":351,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_2a55461d","line":348,"updated":"2014-11-10 08:11:17.000000000","message":"Let\u0027s use common patterns for docstring:\n\n\"\"\"Verifies user can see external networks but not subnets.\"\"\"","commit_id":"006492627416712b438f01ff829ee05848f19d3f"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"e963ab8787bc27f70e6bbfcd47131a65d906a7a0","unresolved":false,"context_lines":[{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":347,"context_line":"    def test_external_network_visibility(self):"},{"line_number":348,"context_line":"        \"\"\"Verifies user can see external networks but not subnets. \"\"\""},{"line_number":349,"context_line":"        _, body \u003d self.client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":350,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"},{"line_number":351,"context_line":"        self.assertNotEmpty(networks, \"No external networks found\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_4117d4ed","line":348,"updated":"2014-11-10 12:01:03.000000000","message":"Let\u0027s remove extra white space after \u0027.\u0027 in the doc string.\n\nMore info:\nhttp://legacy.python.org/dev/peps/pep-0257/","commit_id":"3dbdd3d825feba9d4808e7d3f5e4fc7213e389aa"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"77e34f1895935e1f524d04002b8f19c1d3ffd921","unresolved":false,"context_lines":[{"line_number":345,"context_line":""},{"line_number":346,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":347,"context_line":"    def test_external_network_visibility(self):"},{"line_number":348,"context_line":"        \"\"\"Verifies user can see external networks but not subnets. \"\"\""},{"line_number":349,"context_line":"        _, body \u003d self.client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":350,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"},{"line_number":351,"context_line":"        self.assertNotEmpty(networks, \"No external networks found\")"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_8f6d6307","line":348,"in_reply_to":"5a890539_4117d4ed","updated":"2014-11-10 13:36:00.000000000","message":"Done","commit_id":"3dbdd3d825feba9d4808e7d3f5e4fc7213e389aa"},{"author":{"_account_id":7227,"name":"Timur Nurlygayanov","email":"tnurlygayanov@mirantis.com","username":"tnurlygayanov"},"change_message_id":"e963ab8787bc27f70e6bbfcd47131a65d906a7a0","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        _, body \u003d self.client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":350,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"},{"line_number":351,"context_line":"        self.assertNotEmpty(networks, \"No external networks found\")"},{"line_number":352,"context_line":"        nonexternal \u003d [net for net in body[\u0027networks\u0027] if"},{"line_number":353,"context_line":"                       not net[\u0027router:external\u0027]]"},{"line_number":354,"context_line":"        self.assertEmpty(nonexternal, \"Found non-external networks\""},{"line_number":355,"context_line":"                                      \" in filtered list (%s).\" % nonexternal)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_e1cd2088","line":352,"updated":"2014-11-10 12:01:03.000000000","message":"Let\u0027s add empty lines in this code also.","commit_id":"3dbdd3d825feba9d4808e7d3f5e4fc7213e389aa"},{"author":{"_account_id":8576,"name":"Yair Fried","email":"yfried@redhat.com","username":"yfried"},"change_message_id":"77e34f1895935e1f524d04002b8f19c1d3ffd921","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        _, body \u003d self.client.list_networks(**{\u0027router:external\u0027: True})"},{"line_number":350,"context_line":"        networks \u003d [network[\u0027id\u0027] for network in body[\u0027networks\u0027]]"},{"line_number":351,"context_line":"        self.assertNotEmpty(networks, \"No external networks found\")"},{"line_number":352,"context_line":"        nonexternal \u003d [net for net in body[\u0027networks\u0027] if"},{"line_number":353,"context_line":"                       not net[\u0027router:external\u0027]]"},{"line_number":354,"context_line":"        self.assertEmpty(nonexternal, \"Found non-external networks\""},{"line_number":355,"context_line":"                                      \" in filtered list (%s).\" % nonexternal)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5a890539_af721fe3","line":352,"in_reply_to":"5a890539_e1cd2088","updated":"2014-11-10 13:36:00.000000000","message":"Done","commit_id":"3dbdd3d825feba9d4808e7d3f5e4fc7213e389aa"}]}
