)]}'
{"neutron_lib/api/validators.py":[{"author":{"_account_id":21273,"name":"Ilya Chukhnakov","email":"Ilya.chukhnakov@gmail.com","username":"ichukhnakov"},"change_message_id":"7fffee9ff4f910c4f1ef6e5a04f1971a12e9dea7","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            msg \u003d _(\"A valid port uuid must be specified\")"},{"line_number":508,"context_line":"            LOG.debug(msg)"},{"line_number":509,"context_line":"            return msg"},{"line_number":510,"context_line":"        elif validate_uuid(subport[\"port_id\"]):"},{"line_number":511,"context_line":"            msg \u003d _(\"Invalid uuid for subport: \u0027%s\u0027\") % subport[\"port_id\"]"},{"line_number":512,"context_line":"            return msg"},{"line_number":513,"context_line":"        elif subport[\"port_id\"] in subport_ids:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_ee9e9805","line":510,"range":{"start_line":510,"start_character":13,"end_line":510,"end_character":46},"updated":"2016-05-22 22:25:14.000000000","message":"Maybe we could validate \u0027trunk_id\u0027 as well?","commit_id":"079a0020730ddb8bae17988c8547f2ef6ee80dd5"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0285b0fb0afe05be94677168dc45394b86b6ced5","unresolved":false,"context_lines":[{"line_number":507,"context_line":"            msg \u003d _(\"A valid port uuid must be specified\")"},{"line_number":508,"context_line":"            LOG.debug(msg)"},{"line_number":509,"context_line":"            return msg"},{"line_number":510,"context_line":"        elif validate_uuid(subport[\"port_id\"]):"},{"line_number":511,"context_line":"            msg \u003d _(\"Invalid uuid for subport: \u0027%s\u0027\") % subport[\"port_id\"]"},{"line_number":512,"context_line":"            return msg"},{"line_number":513,"context_line":"        elif subport[\"port_id\"] in subport_ids:"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_70b8902b","line":510,"range":{"start_line":510,"start_character":13,"end_line":510,"end_character":46},"in_reply_to":"bab6814e_ee9e9805","updated":"2016-05-23 21:16:40.000000000","message":"trunk id is auto-generated, besides it\u0027s not part of this payload.","commit_id":"079a0020730ddb8bae17988c8547f2ef6ee80dd5"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0df19505bb3b87ac5156d4321392ef8d73c8aabd","unresolved":false,"context_lines":[{"line_number":529,"context_line":"        elif len(subport) \u003e 1:"},{"line_number":530,"context_line":"            msg \u003d _(\"Invalid subport details \u0027%s\u0027: missing parameters. Must \""},{"line_number":531,"context_line":"                    \"specify at least port_id or segmentation_id with \""},{"line_number":532,"context_line":"                    \"segmentation_type\") % subport"},{"line_number":533,"context_line":"            return msg"},{"line_number":534,"context_line":"        # only vlan is supported now"},{"line_number":535,"context_line":"        if (subport.get(\"segmentation_type\", \"\").lower() not in (\"vlan\",) and"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_42469b4f","line":532,"updated":"2016-05-22 08:55:43.000000000","message":"please add in the log message here","commit_id":"079a0020730ddb8bae17988c8547f2ef6ee80dd5"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0285b0fb0afe05be94677168dc45394b86b6ced5","unresolved":false,"context_lines":[{"line_number":529,"context_line":"        elif len(subport) \u003e 1:"},{"line_number":530,"context_line":"            msg \u003d _(\"Invalid subport details \u0027%s\u0027: missing parameters. Must \""},{"line_number":531,"context_line":"                    \"specify at least port_id or segmentation_id with \""},{"line_number":532,"context_line":"                    \"segmentation_type\") % subport"},{"line_number":533,"context_line":"            return msg"},{"line_number":534,"context_line":"        # only vlan is supported now"},{"line_number":535,"context_line":"        if (subport.get(\"segmentation_type\", \"\").lower() not in (\"vlan\",) and"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_1f85cfac","line":532,"in_reply_to":"bab6814e_42469b4f","updated":"2016-05-23 21:16:40.000000000","message":"Done","commit_id":"079a0020730ddb8bae17988c8547f2ef6ee80dd5"},{"author":{"_account_id":21273,"name":"Ilya Chukhnakov","email":"Ilya.chukhnakov@gmail.com","username":"ichukhnakov"},"change_message_id":"7fffee9ff4f910c4f1ef6e5a04f1971a12e9dea7","unresolved":false,"context_lines":[{"line_number":531,"context_line":"                    \"specify at least port_id or segmentation_id with \""},{"line_number":532,"context_line":"                    \"segmentation_type\") % subport"},{"line_number":533,"context_line":"            return msg"},{"line_number":534,"context_line":"        # only vlan is supported now"},{"line_number":535,"context_line":"        if (subport.get(\"segmentation_type\", \"\").lower() not in (\"vlan\",) and"},{"line_number":536,"context_line":"           \"segmentation_id\" in subport):"},{"line_number":537,"context_line":"            msg \u003d _(\"Segmentation type \u0027%(seg_type)s\u0027 for \u0027%(subport)s\u0027 is \""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_6e4e28c2","line":534,"range":{"start_line":534,"start_character":8,"end_line":534,"end_character":36},"updated":"2016-05-22 22:25:14.000000000","message":"I think we need to validate \u0027segmentation_id\u0027 here too (neutron.plugins.common.utils.is_valid_vlan_tag).","commit_id":"079a0020730ddb8bae17988c8547f2ef6ee80dd5"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0285b0fb0afe05be94677168dc45394b86b6ced5","unresolved":false,"context_lines":[{"line_number":531,"context_line":"                    \"specify at least port_id or segmentation_id with \""},{"line_number":532,"context_line":"                    \"segmentation_type\") % subport"},{"line_number":533,"context_line":"            return msg"},{"line_number":534,"context_line":"        # only vlan is supported now"},{"line_number":535,"context_line":"        if (subport.get(\"segmentation_type\", \"\").lower() not in (\"vlan\",) and"},{"line_number":536,"context_line":"           \"segmentation_id\" in subport):"},{"line_number":537,"context_line":"            msg \u003d _(\"Segmentation type \u0027%(seg_type)s\u0027 for \u0027%(subport)s\u0027 is \""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_70c37039","line":534,"range":{"start_line":534,"start_character":8,"end_line":534,"end_character":36},"in_reply_to":"bab6814e_6e4e28c2","updated":"2016-05-23 21:16:40.000000000","message":"I have actually been thinking more and more about segmentation type validation and, as suggested in [1], I am actually starting to think that validation of the type and id (besides uniqueness) should be left to the plugin, so neither the API nor the DB layer. That\u0027s because we may want to have different implementations of this API and by embedding this validation logic here we prevent use cases that go beyond vlan. I appreciate that to start with we\u0027re seeking just vlan as use case, but if we hard-code this here any other use case implemented differently is going to be precluded. Is this something we\u0027d want? I would rather err on the side of caution and relax the constraint here and defer to the plugin to raise Invalid if the support for the specific segmentation technology is not available for a given combination/release. \n\n[1] https://review.openstack.org/#/c/310410/13/neutron/objects/trunk.py@155","commit_id":"079a0020730ddb8bae17988c8547f2ef6ee80dd5"},{"author":{"_account_id":21273,"name":"Ilya Chukhnakov","email":"Ilya.chukhnakov@gmail.com","username":"ichukhnakov"},"change_message_id":"7fffee9ff4f910c4f1ef6e5a04f1971a12e9dea7","unresolved":false,"context_lines":[{"line_number":532,"context_line":"                    \"segmentation_type\") % subport"},{"line_number":533,"context_line":"            return msg"},{"line_number":534,"context_line":"        # only vlan is supported now"},{"line_number":535,"context_line":"        if (subport.get(\"segmentation_type\", \"\").lower() not in (\"vlan\",) and"},{"line_number":536,"context_line":"           \"segmentation_id\" in subport):"},{"line_number":537,"context_line":"            msg \u003d _(\"Segmentation type \u0027%(seg_type)s\u0027 for \u0027%(subport)s\u0027 is \""},{"line_number":538,"context_line":"                    \"invalid\") % {\"seg_type\": subport.get(\"segmentation_type\"),"},{"line_number":539,"context_line":"                    \"subport\": subport[\"port_id\"]}"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_4ef7e458","line":536,"range":{"start_line":535,"start_character":74,"end_line":536,"end_character":39},"updated":"2016-05-22 22:25:14.000000000","message":"Won\u0027t that lead to invalid \u0027segmentation_type\u0027 being silently accepted if \u0027segmentation_id\u0027 is not in \u0027subport\u0027?","commit_id":"079a0020730ddb8bae17988c8547f2ef6ee80dd5"},{"author":{"_account_id":16800,"name":"Rawlin Peters","email":"rawlin.peters@hpe.com","username":"rawlin"},"change_message_id":"bbf6b5775645ea3e35bd94a406b2fc6d6baebfdf","unresolved":false,"context_lines":[{"line_number":532,"context_line":"                    \"segmentation_type\") % subport"},{"line_number":533,"context_line":"            return msg"},{"line_number":534,"context_line":"        # only vlan is supported now"},{"line_number":535,"context_line":"        if (subport.get(\"segmentation_type\", \"\").lower() not in (\"vlan\",) and"},{"line_number":536,"context_line":"           \"segmentation_id\" in subport):"},{"line_number":537,"context_line":"            msg \u003d _(\"Segmentation type \u0027%(seg_type)s\u0027 for \u0027%(subport)s\u0027 is \""},{"line_number":538,"context_line":"                    \"invalid\") % {\"seg_type\": subport.get(\"segmentation_type\"),"},{"line_number":539,"context_line":"                    \"subport\": subport[\"port_id\"]}"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_f28127c4","line":536,"range":{"start_line":535,"start_character":74,"end_line":536,"end_character":39},"in_reply_to":"bab6814e_4ef7e458","updated":"2016-05-23 18:59:56.000000000","message":"@Ilya, the conditional on line 529 would be True in that case and would return the error message because the subport would have at least two keys without having segmentation_id (port_id and segmentation_type).\n\nI believe the conditional on 529 can be read as \"elif the subport has more than just a port_id\"","commit_id":"079a0020730ddb8bae17988c8547f2ef6ee80dd5"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0285b0fb0afe05be94677168dc45394b86b6ced5","unresolved":false,"context_lines":[{"line_number":532,"context_line":"                    \"segmentation_type\") % subport"},{"line_number":533,"context_line":"            return msg"},{"line_number":534,"context_line":"        # only vlan is supported now"},{"line_number":535,"context_line":"        if (subport.get(\"segmentation_type\", \"\").lower() not in (\"vlan\",) and"},{"line_number":536,"context_line":"           \"segmentation_id\" in subport):"},{"line_number":537,"context_line":"            msg \u003d _(\"Segmentation type \u0027%(seg_type)s\u0027 for \u0027%(subport)s\u0027 is \""},{"line_number":538,"context_line":"                    \"invalid\") % {\"seg_type\": subport.get(\"segmentation_type\"),"},{"line_number":539,"context_line":"                    \"subport\": subport[\"port_id\"]}"}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_2a3693e7","line":536,"range":{"start_line":535,"start_character":74,"end_line":536,"end_character":39},"in_reply_to":"bab6814e_f28127c4","updated":"2016-05-23 21:16:40.000000000","message":"correct, but I might get right of this check altogether.","commit_id":"079a0020730ddb8bae17988c8547f2ef6ee80dd5"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"0df19505bb3b87ac5156d4321392ef8d73c8aabd","unresolved":false,"context_lines":[{"line_number":536,"context_line":"           \"segmentation_id\" in subport):"},{"line_number":537,"context_line":"            msg \u003d _(\"Segmentation type \u0027%(seg_type)s\u0027 for \u0027%(subport)s\u0027 is \""},{"line_number":538,"context_line":"                    \"invalid\") % {\"seg_type\": subport.get(\"segmentation_type\"),"},{"line_number":539,"context_line":"                    \"subport\": subport[\"port_id\"]}"},{"line_number":540,"context_line":"            return msg"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_a277879e","line":539,"updated":"2016-05-22 08:55:43.000000000","message":"ditto","commit_id":"079a0020730ddb8bae17988c8547f2ef6ee80dd5"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"0285b0fb0afe05be94677168dc45394b86b6ced5","unresolved":false,"context_lines":[{"line_number":536,"context_line":"           \"segmentation_id\" in subport):"},{"line_number":537,"context_line":"            msg \u003d _(\"Segmentation type \u0027%(seg_type)s\u0027 for \u0027%(subport)s\u0027 is \""},{"line_number":538,"context_line":"                    \"invalid\") % {\"seg_type\": subport.get(\"segmentation_type\"),"},{"line_number":539,"context_line":"                    \"subport\": subport[\"port_id\"]}"},{"line_number":540,"context_line":"            return msg"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bab6814e_6a309be9","line":539,"in_reply_to":"bab6814e_a277879e","updated":"2016-05-23 21:16:40.000000000","message":"Done","commit_id":"079a0020730ddb8bae17988c8547f2ef6ee80dd5"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"e0196224a25d5994b0a4c1ddcf2d4989afde45b5","unresolved":false,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        # Expect a non duplicated and valid port_id for the subport"},{"line_number":506,"context_line":"        if \u0027port_id\u0027 not in subport:"},{"line_number":507,"context_line":"            msg \u003d _(\"A valid port uuid must be specified\")"},{"line_number":508,"context_line":"            LOG.debug(msg)"},{"line_number":509,"context_line":"            return msg"},{"line_number":510,"context_line":"        elif validate_uuid(subport[\"port_id\"]):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_e7c936ae","line":507,"range":{"start_line":507,"start_character":34,"end_line":507,"end_character":38},"updated":"2016-05-24 15:32:07.000000000","message":"Nit: UUID","commit_id":"a63dcf482daf9ddb9fe5d6c418ac34fed0abbc73"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"cd6b9bffed61e3dbf47bf50ea9c468e904d198b8","unresolved":false,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        # Expect a non duplicated and valid port_id for the subport"},{"line_number":506,"context_line":"        if \u0027port_id\u0027 not in subport:"},{"line_number":507,"context_line":"            msg \u003d _(\"A valid port uuid must be specified\")"},{"line_number":508,"context_line":"            LOG.debug(msg)"},{"line_number":509,"context_line":"            return msg"},{"line_number":510,"context_line":"        elif validate_uuid(subport[\"port_id\"]):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_cff520cc","line":507,"range":{"start_line":507,"start_character":34,"end_line":507,"end_character":38},"in_reply_to":"bab6814e_93a068a7","updated":"2016-05-24 18:59:12.000000000","message":"Done","commit_id":"a63dcf482daf9ddb9fe5d6c418ac34fed0abbc73"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"a74ecb138b390f8c92c94d85fc545d556480f3ff","unresolved":false,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        # Expect a non duplicated and valid port_id for the subport"},{"line_number":506,"context_line":"        if \u0027port_id\u0027 not in subport:"},{"line_number":507,"context_line":"            msg \u003d _(\"A valid port uuid must be specified\")"},{"line_number":508,"context_line":"            LOG.debug(msg)"},{"line_number":509,"context_line":"            return msg"},{"line_number":510,"context_line":"        elif validate_uuid(subport[\"port_id\"]):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_93a068a7","line":507,"range":{"start_line":507,"start_character":34,"end_line":507,"end_character":38},"in_reply_to":"bab6814e_982a47e6","updated":"2016-05-24 16:23:55.000000000","message":"It\u0027s an acronym is it not?\nAs per [1], \"A universally unique identifier (UUID) is an identifier standard...\". Also existing usage [2].\n\n\n[1] https://en.wikipedia.org/wiki/Universally_unique_identifier\n[2] https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/validators.py#L396","commit_id":"a63dcf482daf9ddb9fe5d6c418ac34fed0abbc73"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"bd03f262488ae759175cb46a1ae9ac8f1a425b0c","unresolved":false,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"        # Expect a non duplicated and valid port_id for the subport"},{"line_number":506,"context_line":"        if \u0027port_id\u0027 not in subport:"},{"line_number":507,"context_line":"            msg \u003d _(\"A valid port uuid must be specified\")"},{"line_number":508,"context_line":"            LOG.debug(msg)"},{"line_number":509,"context_line":"            return msg"},{"line_number":510,"context_line":"        elif validate_uuid(subport[\"port_id\"]):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_982a47e6","line":507,"range":{"start_line":507,"start_character":34,"end_line":507,"end_character":38},"in_reply_to":"bab6814e_e7c936ae","updated":"2016-05-24 16:09:57.000000000","message":"why would uuid be meant to be capitalized?","commit_id":"a63dcf482daf9ddb9fe5d6c418ac34fed0abbc73"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"e0196224a25d5994b0a4c1ddcf2d4989afde45b5","unresolved":false,"context_lines":[{"line_number":508,"context_line":"            LOG.debug(msg)"},{"line_number":509,"context_line":"            return msg"},{"line_number":510,"context_line":"        elif validate_uuid(subport[\"port_id\"]):"},{"line_number":511,"context_line":"            msg \u003d _(\"Invalid uuid for subport: \u0027%s\u0027\") % subport[\"port_id\"]"},{"line_number":512,"context_line":"            return msg"},{"line_number":513,"context_line":"        elif subport[\"port_id\"] in subport_ids:"},{"line_number":514,"context_line":"            msg \u003d _(\"Non unique uuid for subport: \u0027%s\u0027\") % subport[\"port_id\"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_c7ceb2b3","line":511,"range":{"start_line":511,"start_character":29,"end_line":511,"end_character":33},"updated":"2016-05-24 15:32:07.000000000","message":"Nit: UUID","commit_id":"a63dcf482daf9ddb9fe5d6c418ac34fed0abbc73"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"cd6b9bffed61e3dbf47bf50ea9c468e904d198b8","unresolved":false,"context_lines":[{"line_number":508,"context_line":"            LOG.debug(msg)"},{"line_number":509,"context_line":"            return msg"},{"line_number":510,"context_line":"        elif validate_uuid(subport[\"port_id\"]):"},{"line_number":511,"context_line":"            msg \u003d _(\"Invalid uuid for subport: \u0027%s\u0027\") % subport[\"port_id\"]"},{"line_number":512,"context_line":"            return msg"},{"line_number":513,"context_line":"        elif subport[\"port_id\"] in subport_ids:"},{"line_number":514,"context_line":"            msg \u003d _(\"Non unique uuid for subport: \u0027%s\u0027\") % subport[\"port_id\"]"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_0f00c8a9","line":511,"range":{"start_line":511,"start_character":29,"end_line":511,"end_character":33},"in_reply_to":"bab6814e_c7ceb2b3","updated":"2016-05-24 18:59:12.000000000","message":"Done","commit_id":"a63dcf482daf9ddb9fe5d6c418ac34fed0abbc73"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"e0196224a25d5994b0a4c1ddcf2d4989afde45b5","unresolved":false,"context_lines":[{"line_number":511,"context_line":"            msg \u003d _(\"Invalid uuid for subport: \u0027%s\u0027\") % subport[\"port_id\"]"},{"line_number":512,"context_line":"            return msg"},{"line_number":513,"context_line":"        elif subport[\"port_id\"] in subport_ids:"},{"line_number":514,"context_line":"            msg \u003d _(\"Non unique uuid for subport: \u0027%s\u0027\") % subport[\"port_id\"]"},{"line_number":515,"context_line":"            return msg"},{"line_number":516,"context_line":"        subport_ids.add(subport[\"port_id\"])"},{"line_number":517,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_a7360eb2","line":514,"range":{"start_line":514,"start_character":32,"end_line":514,"end_character":36},"updated":"2016-05-24 15:32:07.000000000","message":"Nit: UUID","commit_id":"a63dcf482daf9ddb9fe5d6c418ac34fed0abbc73"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"cd6b9bffed61e3dbf47bf50ea9c468e904d198b8","unresolved":false,"context_lines":[{"line_number":511,"context_line":"            msg \u003d _(\"Invalid uuid for subport: \u0027%s\u0027\") % subport[\"port_id\"]"},{"line_number":512,"context_line":"            return msg"},{"line_number":513,"context_line":"        elif subport[\"port_id\"] in subport_ids:"},{"line_number":514,"context_line":"            msg \u003d _(\"Non unique uuid for subport: \u0027%s\u0027\") % subport[\"port_id\"]"},{"line_number":515,"context_line":"            return msg"},{"line_number":516,"context_line":"        subport_ids.add(subport[\"port_id\"])"},{"line_number":517,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_6f2b5434","line":514,"range":{"start_line":514,"start_character":32,"end_line":514,"end_character":36},"in_reply_to":"bab6814e_a7360eb2","updated":"2016-05-24 18:59:12.000000000","message":"Done","commit_id":"a63dcf482daf9ddb9fe5d6c418ac34fed0abbc73"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"e0196224a25d5994b0a4c1ddcf2d4989afde45b5","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        segmentation_type \u003d subport.get(\"segmentation_type\")"},{"line_number":523,"context_line":"        if (not segmentation_id or not segmentation_type) and len(subport) \u003e 1:"},{"line_number":524,"context_line":"            msg \u003d _(\"Invalid subport details \u0027%s\u0027: missing parameters. Must \""},{"line_number":525,"context_line":"                    \"specify at least port_id or segmentation_id with \""},{"line_number":526,"context_line":"                    \"segmentation_type\") % subport"},{"line_number":527,"context_line":"            LOG.debug(msg)"},{"line_number":528,"context_line":"            return msg"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_27269e16","line":525,"range":{"start_line":525,"start_character":46,"end_line":525,"end_character":48},"updated":"2016-05-24 15:32:07.000000000","message":"Shouldn\u0027t this read \u0027and\u0027? When I read it with the \u0027or\u0027 to me it means you need port_id or seg ID, but based on my understanding you need both in this case.","commit_id":"a63dcf482daf9ddb9fe5d6c418ac34fed0abbc73"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"bd03f262488ae759175cb46a1ae9ac8f1a425b0c","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        segmentation_type \u003d subport.get(\"segmentation_type\")"},{"line_number":523,"context_line":"        if (not segmentation_id or not segmentation_type) and len(subport) \u003e 1:"},{"line_number":524,"context_line":"            msg \u003d _(\"Invalid subport details \u0027%s\u0027: missing parameters. Must \""},{"line_number":525,"context_line":"                    \"specify at least port_id or segmentation_id with \""},{"line_number":526,"context_line":"                    \"segmentation_type\") % subport"},{"line_number":527,"context_line":"            LOG.debug(msg)"},{"line_number":528,"context_line":"            return msg"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_985fe774","line":525,"range":{"start_line":525,"start_character":46,"end_line":525,"end_character":48},"in_reply_to":"bab6814e_27269e16","updated":"2016-05-24 16:09:57.000000000","message":"I can rephrase.","commit_id":"a63dcf482daf9ddb9fe5d6c418ac34fed0abbc73"},{"author":{"_account_id":16800,"name":"Rawlin Peters","email":"rawlin.peters@hpe.com","username":"rawlin"},"change_message_id":"2f2d92a3d2561fe9de4d111e6e5df0033aefc268","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        segmentation_type \u003d subport.get(\"segmentation_type\")"},{"line_number":523,"context_line":"        if (not segmentation_id or not segmentation_type) and len(subport) \u003e 1:"},{"line_number":524,"context_line":"            msg \u003d _(\"Invalid subport details \u0027%s\u0027: missing parameters. Must \""},{"line_number":525,"context_line":"                    \"specify at least port_id or segmentation_id with \""},{"line_number":526,"context_line":"                    \"segmentation_type\") % subport"},{"line_number":527,"context_line":"            LOG.debug(msg)"},{"line_number":528,"context_line":"            return msg"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_7e5dc8eb","line":525,"range":{"start_line":525,"start_character":46,"end_line":525,"end_character":48},"in_reply_to":"bab6814e_985fe774","updated":"2016-05-24 17:35:21.000000000","message":"Can we leave out the port_id part? That is validated on L506. Perhaps something simple like: \"... missing parameters. Must specify both segmentation_id and segmentation_type together\".","commit_id":"a63dcf482daf9ddb9fe5d6c418ac34fed0abbc73"},{"author":{"_account_id":21273,"name":"Ilya Chukhnakov","email":"Ilya.chukhnakov@gmail.com","username":"ichukhnakov"},"change_message_id":"efcf153c99f7f37a81d9f6503ff8bd5a25e046de","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        # ids"},{"line_number":521,"context_line":"        segmentation_id \u003d subport.get(\"segmentation_id\")"},{"line_number":522,"context_line":"        segmentation_type \u003d subport.get(\"segmentation_type\")"},{"line_number":523,"context_line":"        if (not segmentation_id or not segmentation_type) and len(subport) \u003e 1:"},{"line_number":524,"context_line":"            msg \u003d _(\"Invalid subport details \u0027%s\u0027: missing segmentation \""},{"line_number":525,"context_line":"                    \"information. Must specify both segmentation_id and \""},{"line_number":526,"context_line":"                    \"segmentation_type\") % subport"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_55d1a1fa","line":523,"range":{"start_line":523,"start_character":11,"end_line":523,"end_character":57},"updated":"2016-05-25 09:51:31.000000000","message":"nit: I think \u0027not(segmentation_id and segmentation_type)\u0027 would have slightly better readability, but that\u0027s just my opinion.","commit_id":"3d98abc769902b52798381f04a877f87006418fc"},{"author":{"_account_id":21273,"name":"Ilya Chukhnakov","email":"Ilya.chukhnakov@gmail.com","username":"ichukhnakov"},"change_message_id":"efcf153c99f7f37a81d9f6503ff8bd5a25e046de","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        segmentation_id \u003d subport.get(\"segmentation_id\")"},{"line_number":522,"context_line":"        segmentation_type \u003d subport.get(\"segmentation_type\")"},{"line_number":523,"context_line":"        if (not segmentation_id or not segmentation_type) and len(subport) \u003e 1:"},{"line_number":524,"context_line":"            msg \u003d _(\"Invalid subport details \u0027%s\u0027: missing segmentation \""},{"line_number":525,"context_line":"                    \"information. Must specify both segmentation_id and \""},{"line_number":526,"context_line":"                    \"segmentation_type\") % subport"},{"line_number":527,"context_line":"            LOG.debug(msg)"},{"line_number":528,"context_line":"            return msg"},{"line_number":529,"context_line":"        if segmentation_id in segmentation_ids:"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_b5628d3b","line":526,"range":{"start_line":524,"start_character":51,"end_line":526,"end_character":39},"updated":"2016-05-25 09:51:31.000000000","message":"nit: maybe remove \u0027missing segmentation information\u0027 and just leave the \u0027must specify\u0027 part after \":\"?","commit_id":"3d98abc769902b52798381f04a877f87006418fc"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4de8f19d37b3e63a679bf4e199dcb039d42e208c","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            LOG.debug(msg)"},{"line_number":528,"context_line":"            return msg"},{"line_number":529,"context_line":"        if segmentation_id in segmentation_ids:"},{"line_number":530,"context_line":"            msg \u003d _(\"Segmentation id \u0027%(seg_id)s\u0027 for\u0027%(subport)s\u0027 is not \""},{"line_number":531,"context_line":"                    \"unique\") % {\"seg_id\": segmentation_id,"},{"line_number":532,"context_line":"                    \"subport\": subport[\"port_id\"]}"},{"line_number":533,"context_line":"            LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9abb7d3a_30488187","line":530,"range":{"start_line":530,"start_character":50,"end_line":530,"end_character":66},"updated":"2016-05-30 06:48:31.000000000","message":"for \u0027%(subport)s\u0027","commit_id":"3d98abc769902b52798381f04a877f87006418fc"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"0082b9c7d39611832c261b7c6332aef05eb09a98","unresolved":false,"context_lines":[{"line_number":526,"context_line":"            LOG.debug(msg)"},{"line_number":527,"context_line":"            return msg"},{"line_number":528,"context_line":"        if segmentation_id in segmentation_ids:"},{"line_number":529,"context_line":"            msg \u003d _(\"Segmentation id \u0027%(seg_id)s\u0027 for \u0027%(subport)s\u0027 is not \""},{"line_number":530,"context_line":"                    \"unique\") % {\"seg_id\": segmentation_id,"},{"line_number":531,"context_line":"                    \"subport\": subport[\"port_id\"]}"},{"line_number":532,"context_line":"            LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_3dfbe87a","line":529,"range":{"start_line":529,"start_character":34,"end_line":529,"end_character":36},"updated":"2016-05-31 15:09:29.000000000","message":"Nit: Since \u0027id\u0027 is an acronym, it might be more proper to use \u0027ID\u0027.","commit_id":"60f9fb85c6048c7db4ecdf141291b021d91c4242"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ead9b928f464782179c232d35f2f6c888cd6787b","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        segmentation_type \u003d subport.get(\"segmentation_type\")"},{"line_number":523,"context_line":"        if (not segmentation_id or not segmentation_type) and len(subport) \u003e 1:"},{"line_number":524,"context_line":"            msg \u003d _(\"Invalid subport details \u0027%s\u0027: must specify both \""},{"line_number":525,"context_line":"                    \"segmentation_id and segmentation_type\") % subport"},{"line_number":526,"context_line":"            LOG.debug(msg)"},{"line_number":527,"context_line":"            return msg"},{"line_number":528,"context_line":"        if segmentation_id in segmentation_ids:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_16650cb4","line":525,"updated":"2016-06-01 01:35:59.000000000","message":"I think the message in https://review.openstack.org/320092 is better.","commit_id":"ba0ef9ee5251e4e2f27626831d60ef83a30c120c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"4aeea91a8c895f0c1c4575ff511f00604bd82684","unresolved":false,"context_lines":[{"line_number":522,"context_line":"        segmentation_type \u003d subport.get(\"segmentation_type\")"},{"line_number":523,"context_line":"        if (not segmentation_id or not segmentation_type) and len(subport) \u003e 1:"},{"line_number":524,"context_line":"            msg \u003d _(\"Invalid subport details \u0027%s\u0027: must specify both \""},{"line_number":525,"context_line":"                    \"segmentation_id and segmentation_type\") % subport"},{"line_number":526,"context_line":"            LOG.debug(msg)"},{"line_number":527,"context_line":"            return msg"},{"line_number":528,"context_line":"        if segmentation_id in segmentation_ids:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_a704cc49","line":525,"in_reply_to":"9abb7d3a_16650cb4","updated":"2016-06-01 04:19:39.000000000","message":"this was not meant to be different, and Ryan must have wiped my changeset.","commit_id":"ba0ef9ee5251e4e2f27626831d60ef83a30c120c"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"ead9b928f464782179c232d35f2f6c888cd6787b","unresolved":false,"context_lines":[{"line_number":528,"context_line":"        if segmentation_id in segmentation_ids:"},{"line_number":529,"context_line":"            msg \u003d _(\"Non unique segmentation_id \u0027%(seg_id)s\u0027 for \""},{"line_number":530,"context_line":"                    \"\u0027%(subport)s\u0027\") % {\"seg_id\": segmentation_id,"},{"line_number":531,"context_line":"                    \"subport\": subport[\"port_id\"]}"},{"line_number":532,"context_line":"            LOG.debug(msg)"},{"line_number":533,"context_line":"            return msg"},{"line_number":534,"context_line":"        if segmentation_id:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_765618cf","line":531,"updated":"2016-06-01 01:35:59.000000000","message":"I think the message in https://review.openstack.org/320092 is better.","commit_id":"ba0ef9ee5251e4e2f27626831d60ef83a30c120c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"4aeea91a8c895f0c1c4575ff511f00604bd82684","unresolved":false,"context_lines":[{"line_number":528,"context_line":"        if segmentation_id in segmentation_ids:"},{"line_number":529,"context_line":"            msg \u003d _(\"Non unique segmentation_id \u0027%(seg_id)s\u0027 for \""},{"line_number":530,"context_line":"                    \"\u0027%(subport)s\u0027\") % {\"seg_id\": segmentation_id,"},{"line_number":531,"context_line":"                    \"subport\": subport[\"port_id\"]}"},{"line_number":532,"context_line":"            LOG.debug(msg)"},{"line_number":533,"context_line":"            return msg"},{"line_number":534,"context_line":"        if segmentation_id:"}],"source_content_type":"text/x-python","patch_set":8,"id":"9abb7d3a_8701c83a","line":531,"in_reply_to":"9abb7d3a_765618cf","updated":"2016-06-01 04:19:39.000000000","message":"this was not meant to be different, and Ryan must have wiped my changeset.","commit_id":"ba0ef9ee5251e4e2f27626831d60ef83a30c120c"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"e7ee7a2aba75dc796b9b32ff647aa645eb2175f4","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            LOG.debug(msg)"},{"line_number":528,"context_line":"            return msg"},{"line_number":529,"context_line":"        if segmentation_id in segmentation_ids:"},{"line_number":530,"context_line":"            msg \u003d _(\"Segmentation ID \u0027%(seg_id)s\u0027 for\u0027%(subport)s\u0027 is not \""},{"line_number":531,"context_line":"                    \"unique\") % {\"seg_id\": segmentation_id,"},{"line_number":532,"context_line":"                    \"subport\": subport[\"port_id\"]}"},{"line_number":533,"context_line":"            LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_a3a4adb9","line":530,"range":{"start_line":530,"start_character":50,"end_line":530,"end_character":66},"updated":"2016-06-01 11:44:56.000000000","message":"Missing space","commit_id":"1a3f51f189bce8f5eb674ea66b40a5bff0075e02"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"2d2af450243c4cc6e129ffdd1fa3fd0ae187634b","unresolved":false,"context_lines":[{"line_number":527,"context_line":"            LOG.debug(msg)"},{"line_number":528,"context_line":"            return msg"},{"line_number":529,"context_line":"        if segmentation_id in segmentation_ids:"},{"line_number":530,"context_line":"            msg \u003d _(\"Segmentation ID \u0027%(seg_id)s\u0027 for\u0027%(subport)s\u0027 is not \""},{"line_number":531,"context_line":"                    \"unique\") % {\"seg_id\": segmentation_id,"},{"line_number":532,"context_line":"                    \"subport\": subport[\"port_id\"]}"},{"line_number":533,"context_line":"            LOG.debug(msg)"}],"source_content_type":"text/x-python","patch_set":9,"id":"9abb7d3a_90c70995","line":530,"range":{"start_line":530,"start_character":50,"end_line":530,"end_character":66},"in_reply_to":"9abb7d3a_a3a4adb9","updated":"2016-06-01 20:56:51.000000000","message":"ffs","commit_id":"1a3f51f189bce8f5eb674ea66b40a5bff0075e02"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"aa9778b0ba593a377e29ade3a52c2cb8ba2b90c4","unresolved":false,"context_lines":[{"line_number":490,"context_line":""},{"line_number":491,"context_line":"def validate_subports(data, valid_values\u003dNone):"},{"line_number":492,"context_line":"    if not isinstance(data, list):"},{"line_number":493,"context_line":"        msg \u003d _(\"Invalid data format for subports: \u0027%s\u0027\") % data"},{"line_number":494,"context_line":"        LOG.debug(msg)"},{"line_number":495,"context_line":"        return msg"},{"line_number":496,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_ca6e8495","line":493,"updated":"2016-06-07 10:15:01.000000000","message":"It is better to mention what is expected. list is expected here.","commit_id":"f54a138fbdb1ad9a79fc02bdfd87c396ea3cb55a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"aa9778b0ba593a377e29ade3a52c2cb8ba2b90c4","unresolved":false,"context_lines":[{"line_number":498,"context_line":"    segmentation_ids \u003d set()"},{"line_number":499,"context_line":"    for subport in data:"},{"line_number":500,"context_line":"        if not isinstance(subport, dict):"},{"line_number":501,"context_line":"            msg \u003d _(\"Invalid data format for subport: \u0027%s\u0027\") % subport"},{"line_number":502,"context_line":"            LOG.debug(msg)"},{"line_number":503,"context_line":"            return msg"},{"line_number":504,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_aade983c","line":501,"updated":"2016-06-07 10:15:01.000000000","message":"Same as the above: \"Each subport must be a dict\"","commit_id":"f54a138fbdb1ad9a79fc02bdfd87c396ea3cb55a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"aa9778b0ba593a377e29ade3a52c2cb8ba2b90c4","unresolved":false,"context_lines":[{"line_number":529,"context_line":"        if segmentation_id in segmentation_ids:"},{"line_number":530,"context_line":"            msg \u003d _(\"Segmentation ID \u0027%(seg_id)s\u0027 for \u0027%(subport)s\u0027 is not \""},{"line_number":531,"context_line":"                    \"unique\") % {\"seg_id\": segmentation_id,"},{"line_number":532,"context_line":"                    \"subport\": subport[\"port_id\"]}"},{"line_number":533,"context_line":"            LOG.debug(msg)"},{"line_number":534,"context_line":"            return msg"},{"line_number":535,"context_line":"        if segmentation_id:"}],"source_content_type":"text/x-python","patch_set":10,"id":"7aa08908_ca9fa44e","line":532,"updated":"2016-06-07 10:15:01.000000000","message":"Wrong indent level.","commit_id":"f54a138fbdb1ad9a79fc02bdfd87c396ea3cb55a"}]}
