)]}'
{"neutron/db/l3_db.py":[{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"56353e8087bf8a4e3818452621b1954f6325fb2c","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                            {\u0027router_interface\u0027: info})"},{"line_number":447,"context_line":"        return info"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _validate_interface_info_parameters(self, interface_info):"},{"line_number":450,"context_line":"        if (not \u0027port_id\u0027 in interface_info"},{"line_number":451,"context_line":"            and not \u0027subnet_id\u0027 in interface_info):"},{"line_number":452,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_9fb5ca7f","line":449,"updated":"2014-06-06 03:32:31.000000000","message":"self is not used, so this could be a static method or even a module-level function.","commit_id":"35e35a17205e7b0c90dfdfcae89d31e7dcbc0d12"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"11b146eae3869929ae0b7e6ef17877c1225ba35b","unresolved":false,"context_lines":[{"line_number":446,"context_line":"                            {\u0027router_interface\u0027: info})"},{"line_number":447,"context_line":"        return info"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _validate_interface_info_parameters(self, interface_info):"},{"line_number":450,"context_line":"        if (not \u0027port_id\u0027 in interface_info"},{"line_number":451,"context_line":"            and not \u0027subnet_id\u0027 in interface_info):"},{"line_number":452,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_b39ef561","line":449,"in_reply_to":"1ae5cdf2_9fb5ca7f","updated":"2014-06-09 17:12:05.000000000","message":"This is going to change with Armando\u0027s patch. Wait for the new version","commit_id":"35e35a17205e7b0c90dfdfcae89d31e7dcbc0d12"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2bc99cf8f2b139dff2464d393f804975f987eab4","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        return info"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _validate_interface_info_parameters(self, interface_info):"},{"line_number":450,"context_line":"        if (not \u0027port_id\u0027 in interface_info"},{"line_number":451,"context_line":"            and not \u0027subnet_id\u0027 in interface_info):"},{"line_number":452,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":453,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_2243baaf","line":450,"updated":"2014-06-06 07:53:47.000000000","message":"check interface_info for None first?","commit_id":"35e35a17205e7b0c90dfdfcae89d31e7dcbc0d12"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"11b146eae3869929ae0b7e6ef17877c1225ba35b","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        return info"},{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _validate_interface_info_parameters(self, interface_info):"},{"line_number":450,"context_line":"        if (not \u0027port_id\u0027 in interface_info"},{"line_number":451,"context_line":"            and not \u0027subnet_id\u0027 in interface_info):"},{"line_number":452,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":453,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_d39b8170","line":450,"in_reply_to":"1ae5cdf2_2243baaf","updated":"2014-06-09 17:12:05.000000000","message":"Done","commit_id":"35e35a17205e7b0c90dfdfcae89d31e7dcbc0d12"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"56353e8087bf8a4e3818452621b1954f6325fb2c","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _validate_interface_info_parameters(self, interface_info):"},{"line_number":450,"context_line":"        if (not \u0027port_id\u0027 in interface_info"},{"line_number":451,"context_line":"            and not \u0027subnet_id\u0027 in interface_info):"},{"line_number":452,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":453,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_3f8d96d3","line":451,"updated":"2014-06-06 03:32:31.000000000","message":"Nit: IMO the following is simpler and matches what the msg says:\n\n   if not (\u0027port_id\u0027 in interface_info or \u0027subnet_id\u0027 in interface_info):\n\n(Also it fits on one line.)","commit_id":"35e35a17205e7b0c90dfdfcae89d31e7dcbc0d12"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"11b146eae3869929ae0b7e6ef17877c1225ba35b","unresolved":false,"context_lines":[{"line_number":448,"context_line":""},{"line_number":449,"context_line":"    def _validate_interface_info_parameters(self, interface_info):"},{"line_number":450,"context_line":"        if (not \u0027port_id\u0027 in interface_info"},{"line_number":451,"context_line":"            and not \u0027subnet_id\u0027 in interface_info):"},{"line_number":452,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":453,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":454,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1ae5cdf2_f3879d10","line":451,"in_reply_to":"1ae5cdf2_3f8d96d3","updated":"2014-06-09 17:12:05.000000000","message":"good suggestion! Thanks!","commit_id":"35e35a17205e7b0c90dfdfcae89d31e7dcbc0d12"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"0308f5aee2ac6fdbbde2abcb314ca30074ddaca7","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        return DEVICE_OWNER_ROUTER_INTF"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def _validate_interface_info(self, interface_info):"},{"line_number":406,"context_line":"        if not (\u0027port_id\u0027 in interface_info or \u0027subnet_id\u0027 in interface_info"},{"line_number":407,"context_line":"                or interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":409,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_f29bbc15","line":406,"updated":"2014-06-11 15:48:48.000000000","message":"I don\u0027t understand this check. I think you want to check that:\n\n1) interface_info is not None\n2) port_id or subnet_id should be set but not both\n\nSo I can imagine something like that:\n\nif not (interface_info and (\u0027port_id\u0027 in interface_info ^ \u0027subnet_id\u0027 in interface_info))\n\nAm I missing something?","commit_id":"db9cdbce3ece62026a37cd625d0208886fcea418"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"2052e8ee7f786eec97a5fff8c27defd2dce7d748","unresolved":false,"context_lines":[{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def _validate_interface_info(self, interface_info):"},{"line_number":406,"context_line":"        if not (\u0027port_id\u0027 in interface_info or \u0027subnet_id\u0027 in interface_info"},{"line_number":407,"context_line":"                or interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":409,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":410,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_ba8d867e","line":407,"updated":"2014-06-11 18:07:05.000000000","message":"Edgar, sorry I didn\u0027t notice at first that you added \"... or interface_info\" here. It makes the logic wrong. It should be:\n\n        if not interface_info or not (\u0027port_id\u0027 in interface_info or\n                                      \u0027subnet_id\u0027 in interface_info):\n\nOr the following is equivalent even if it may cause the code to execute two checks if interface_info is null:\n\n        if not (\u0027port_id\u0027 in interface_info or \u0027subnet_id\u0027 in interface_info):","commit_id":"db9cdbce3ece62026a37cd625d0208886fcea418"},{"author":{"_account_id":9932,"name":"Franck Yelles","email":"franck110@gmail.com","username":"fyelles"},"change_message_id":"373b6dc40fadb223bca8d1d38d6eda6149eade6b","unresolved":false,"context_lines":[{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def _validate_interface_info(self, interface_info):"},{"line_number":406,"context_line":"        if not (\u0027port_id\u0027 in interface_info or \u0027subnet_id\u0027 in interface_info"},{"line_number":407,"context_line":"                or interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":409,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":410,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_511d64bd","line":407,"updated":"2014-06-11 05:48:53.000000000","message":"astechtical  any((k in interface_info for k in (\"port_id\", \u0027subnet_id\u0027))","commit_id":"db9cdbce3ece62026a37cd625d0208886fcea418"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"53f63ac9b99657505c50393c1a09272db82f1d01","unresolved":false,"context_lines":[{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def _validate_interface_info(self, interface_info):"},{"line_number":406,"context_line":"        if not (\u0027port_id\u0027 in interface_info or \u0027subnet_id\u0027 in interface_info"},{"line_number":407,"context_line":"                or interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":409,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":410,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_1089fb74","line":407,"in_reply_to":"1ae5cdf2_ba8d867e","updated":"2014-06-11 19:17:53.000000000","message":"Henry, I found this working on my tests but you and Rosella are right it could be misleading. Let me refactor it based on your suggestion.","commit_id":"db9cdbce3ece62026a37cd625d0208886fcea418"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"0308f5aee2ac6fdbbde2abcb314ca30074ddaca7","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    def _validate_interface_info(self, interface_info):"},{"line_number":406,"context_line":"        if not (\u0027port_id\u0027 in interface_info or \u0027subnet_id\u0027 in interface_info"},{"line_number":407,"context_line":"                or interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":409,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":410,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"},{"line_number":411,"context_line":"        subnet_id_specified \u003d \u0027subnet_id\u0027 in interface_info"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_7275ecc9","line":408,"updated":"2014-06-11 15:48:48.000000000","message":"I think you should add to the message \"but not both\"","commit_id":"db9cdbce3ece62026a37cd625d0208886fcea418"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"c72de1de054a0dec1f54c54efd19eef5a8766462","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    def _validate_interface_info(self, interface_info):"},{"line_number":406,"context_line":"        if not (\u0027port_id\u0027 in interface_info or \u0027subnet_id\u0027 in interface_info"},{"line_number":407,"context_line":"                or interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":409,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":410,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"},{"line_number":411,"context_line":"        subnet_id_specified \u003d \u0027subnet_id\u0027 in interface_info"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_3faec881","line":408,"in_reply_to":"1ae5cdf2_7275ecc9","updated":"2014-06-11 17:37:39.000000000","message":"Rosella, both ways work and this is why I added the unit test, based on previous suggestions I am using this one line input. Please, review Henry and Oleg suggestion and let me know if you want still a better explanation on this line","commit_id":"db9cdbce3ece62026a37cd625d0208886fcea418"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"2052e8ee7f786eec97a5fff8c27defd2dce7d748","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    def _validate_interface_info(self, interface_info):"},{"line_number":406,"context_line":"        if not (\u0027port_id\u0027 in interface_info or \u0027subnet_id\u0027 in interface_info"},{"line_number":407,"context_line":"                or interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":409,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":410,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"},{"line_number":411,"context_line":"        subnet_id_specified \u003d \u0027subnet_id\u0027 in interface_info"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_7a213e4c","line":408,"in_reply_to":"1ae5cdf2_7275ecc9","updated":"2014-06-11 18:07:05.000000000","message":"Rossella, from looking at the code if both are specified then port_id is used in preference to subnet_id.","commit_id":"db9cdbce3ece62026a37cd625d0208886fcea418"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"4598bda5e99fa770ec24fe477609cad197f22c3b","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    def _validate_interface_info(self, interface_info):"},{"line_number":406,"context_line":"        if not (\u0027port_id\u0027 in interface_info or \u0027subnet_id\u0027 in interface_info"},{"line_number":407,"context_line":"                or interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":409,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":410,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"},{"line_number":411,"context_line":"        subnet_id_specified \u003d \u0027subnet_id\u0027 in interface_info"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_67a4344b","line":408,"in_reply_to":"1ae5cdf2_7a213e4c","updated":"2014-06-12 09:08:03.000000000","message":"Henry, before this change, if you look at line 411-413 of Base, it throws an exception if both port_id and subnet_id are set. That\u0027s where my confusion comes from.","commit_id":"db9cdbce3ece62026a37cd625d0208886fcea418"},{"author":{"_account_id":6788,"name":"Rossella Sblendido","email":"rsblendido@suse.com","username":"rossella-o"},"change_message_id":"fb967eb4e16a7b32cbc18098ab8a45367b3ae2c6","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":409,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"},{"line_number":410,"context_line":"        subnet_id_specified \u003d \u0027subnet_id\u0027 in interface_info"},{"line_number":411,"context_line":"        if port_id_specified and subnet_id_specified:"},{"line_number":412,"context_line":"            msg \u003d _(\"Cannot specify both subnet-id and port-id\")"},{"line_number":413,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":414,"context_line":"        return port_id_specified, subnet_id_specified"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_0a69b5bd","side":"PARENT","line":411,"updated":"2014-06-12 09:16:40.000000000","message":"I assume that removing this check is on purpose, +1 for me then","commit_id":"c5169571bd6ebfadaf9fb61757efdcdaa24fd01b"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5cec9d145710480b983ea94a8c2fe3c2c06a583b","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":409,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"},{"line_number":410,"context_line":"        subnet_id_specified \u003d \u0027subnet_id\u0027 in interface_info"},{"line_number":411,"context_line":"        if port_id_specified and subnet_id_specified:"},{"line_number":412,"context_line":"            msg \u003d _(\"Cannot specify both subnet-id and port-id\")"},{"line_number":413,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":414,"context_line":"        return port_id_specified, subnet_id_specified"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_38287532","side":"PARENT","line":411,"in_reply_to":"1ae5cdf2_0a69b5bd","updated":"2014-06-12 20:53:14.000000000","message":"this shouldn\u0027t be removed.","commit_id":"c5169571bd6ebfadaf9fb61757efdcdaa24fd01b"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"d44cdb5c76974ceb3c67f29e04cec1c6ff4c80e6","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":409,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"},{"line_number":410,"context_line":"        subnet_id_specified \u003d \u0027subnet_id\u0027 in interface_info"},{"line_number":411,"context_line":"        if port_id_specified and subnet_id_specified:"},{"line_number":412,"context_line":"            msg \u003d _(\"Cannot specify both subnet-id and port-id\")"},{"line_number":413,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":414,"context_line":"        return port_id_specified, subnet_id_specified"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_f51c2f15","side":"PARENT","line":411,"in_reply_to":"1ae5cdf2_38287532","updated":"2014-06-13 22:45:08.000000000","message":"Armando, I sent you an email about this. I do not understand why we can not have both subnet_id and port_id specified, can you clarify?","commit_id":"c5169571bd6ebfadaf9fb61757efdcdaa24fd01b"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"465f09c08872ed0da073a20bce3619fb7af48a26","unresolved":false,"context_lines":[{"line_number":402,"context_line":"        # NOTE(armando-migliaccio): in the base case this is invariant"},{"line_number":403,"context_line":"        return DEVICE_OWNER_ROUTER_INTF"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def _validate_interface_info(self, interface_info):"},{"line_number":406,"context_line":"        if not interface_info or not (\u0027port_id\u0027 in interface_info or"},{"line_number":407,"context_line":"                                      \u0027subnet_id\u0027 in interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_64ffae02","line":405,"updated":"2014-06-13 07:52:24.000000000","message":"I think this should do what you\u0027re looking for.\n\nport_id_specified \u003d interface_info and \u0027port_id\u0027 in interface_info\nsubnet_id_specified \u003d interface_info and \u0027subnet_id\u0027 in interface_info\nif not port_id_specified ^ subnet_id_specified:\n    msg \u003d _(\"Either subnet_id or port_id must be specified\")\n    raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)\nreturn port_id_specified, subnet_id_specified","commit_id":"44ef0ada5e4e5e92c6587be4cbb7f5c574d07086"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"06c7ddb94976a1bedc13ae4b057039c15154d93f","unresolved":false,"context_lines":[{"line_number":402,"context_line":"        # NOTE(armando-migliaccio): in the base case this is invariant"},{"line_number":403,"context_line":"        return DEVICE_OWNER_ROUTER_INTF"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def _validate_interface_info(self, interface_info):"},{"line_number":406,"context_line":"        if not interface_info or not (\u0027port_id\u0027 in interface_info or"},{"line_number":407,"context_line":"                                      \u0027subnet_id\u0027 in interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_c9dc7f1b","line":405,"in_reply_to":"1ae5cdf2_64ffae02","updated":"2014-07-08 17:21:40.000000000","message":"Actually,  xor operator: ^  can\u0027t not be used by empty dictionaries which is the case for some use unit test cases, any other suggestion?","commit_id":"44ef0ada5e4e5e92c6587be4cbb7f5c574d07086"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"d44cdb5c76974ceb3c67f29e04cec1c6ff4c80e6","unresolved":false,"context_lines":[{"line_number":402,"context_line":"        # NOTE(armando-migliaccio): in the base case this is invariant"},{"line_number":403,"context_line":"        return DEVICE_OWNER_ROUTER_INTF"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def _validate_interface_info(self, interface_info):"},{"line_number":406,"context_line":"        if not interface_info or not (\u0027port_id\u0027 in interface_info or"},{"line_number":407,"context_line":"                                      \u0027subnet_id\u0027 in interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_b5b547ee","line":405,"in_reply_to":"1ae5cdf2_64ffae02","updated":"2014-06-13 22:45:08.000000000","message":"Good suggestion","commit_id":"44ef0ada5e4e5e92c6587be4cbb7f5c574d07086"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5cec9d145710480b983ea94a8c2fe3c2c06a583b","unresolved":false,"context_lines":[{"line_number":403,"context_line":"        return DEVICE_OWNER_ROUTER_INTF"},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"    def _validate_interface_info(self, interface_info):"},{"line_number":406,"context_line":"        if not interface_info or not (\u0027port_id\u0027 in interface_info or"},{"line_number":407,"context_line":"                                      \u0027subnet_id\u0027 in interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":409,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_78a03d90","line":406,"updated":"2014-06-12 20:53:14.000000000","message":"why doing it here","commit_id":"44ef0ada5e4e5e92c6587be4cbb7f5c574d07086"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"5cec9d145710480b983ea94a8c2fe3c2c06a583b","unresolved":false,"context_lines":[{"line_number":407,"context_line":"                                      \u0027subnet_id\u0027 in interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":409,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":410,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"},{"line_number":411,"context_line":"        subnet_id_specified \u003d \u0027subnet_id\u0027 in interface_info"},{"line_number":412,"context_line":"        return port_id_specified, subnet_id_specified"},{"line_number":413,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_98ab4974","line":410,"updated":"2014-06-12 20:53:14.000000000","message":"and then again here.","commit_id":"44ef0ada5e4e5e92c6587be4cbb7f5c574d07086"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"d44cdb5c76974ceb3c67f29e04cec1c6ff4c80e6","unresolved":false,"context_lines":[{"line_number":407,"context_line":"                                      \u0027subnet_id\u0027 in interface_info):"},{"line_number":408,"context_line":"            msg \u003d _(\"Either subnet_id or port_id must be specified\")"},{"line_number":409,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":410,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"},{"line_number":411,"context_line":"        subnet_id_specified \u003d \u0027subnet_id\u0027 in interface_info"},{"line_number":412,"context_line":"        return port_id_specified, subnet_id_specified"},{"line_number":413,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_55a323b1","line":410,"in_reply_to":"1ae5cdf2_98ab4974","updated":"2014-06-13 22:45:08.000000000","message":"following Kevin\u0027s suggestion will simplify this code","commit_id":"44ef0ada5e4e5e92c6587be4cbb7f5c574d07086"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bb78dae55ea7eced03a5505b93131d732fb36dcf","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":409,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"},{"line_number":410,"context_line":"        subnet_id_specified \u003d \u0027subnet_id\u0027 in interface_info"},{"line_number":411,"context_line":"        if port_id_specified and subnet_id_specified:"},{"line_number":412,"context_line":"            msg \u003d _(\"Cannot specify both subnet-id and port-id\")"},{"line_number":413,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":414,"context_line":"        return port_id_specified, subnet_id_specified"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_d6adf889","side":"PARENT","line":411,"updated":"2014-07-10 16:44:57.000000000","message":"DId you intentionally refused this check?","commit_id":"c5169571bd6ebfadaf9fb61757efdcdaa24fd01b"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"49a65555e6ae1e66a79c3278ed02f543f24b9c2d","unresolved":false,"context_lines":[{"line_number":408,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":409,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"},{"line_number":410,"context_line":"        subnet_id_specified \u003d \u0027subnet_id\u0027 in interface_info"},{"line_number":411,"context_line":"        if port_id_specified and subnet_id_specified:"},{"line_number":412,"context_line":"            msg \u003d _(\"Cannot specify both subnet-id and port-id\")"},{"line_number":413,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":414,"context_line":"        return port_id_specified, subnet_id_specified"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_741a3d70","side":"PARENT","line":411,"in_reply_to":"baada198_d6adf889","updated":"2014-07-11 14:14:46.000000000","message":"See my response to Aaron","commit_id":"c5169571bd6ebfadaf9fb61757efdcdaa24fd01b"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"085346ecb11cd1356711650e25f71c5614a19180","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"},{"line_number":410,"context_line":"        subnet_id_specified \u003d \u0027subnet_id\u0027 in interface_info"},{"line_number":411,"context_line":"        if port_id_specified and subnet_id_specified:"},{"line_number":412,"context_line":"            msg \u003d _(\"Cannot specify both subnet-id and port-id\")"},{"line_number":413,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":414,"context_line":"        return port_id_specified, subnet_id_specified"},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_ba077080","side":"PARENT","line":412,"updated":"2014-07-11 06:39:00.000000000","message":"I agree with Oleg now it looks like a bug has been introduced which allows one to specify both which should not be allowed.","commit_id":"c5169571bd6ebfadaf9fb61757efdcdaa24fd01b"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"49a65555e6ae1e66a79c3278ed02f543f24b9c2d","unresolved":false,"context_lines":[{"line_number":409,"context_line":"        port_id_specified \u003d \u0027port_id\u0027 in interface_info"},{"line_number":410,"context_line":"        subnet_id_specified \u003d \u0027subnet_id\u0027 in interface_info"},{"line_number":411,"context_line":"        if port_id_specified and subnet_id_specified:"},{"line_number":412,"context_line":"            msg \u003d _(\"Cannot specify both subnet-id and port-id\")"},{"line_number":413,"context_line":"            raise n_exc.BadRequest(resource\u003d\u0027router\u0027, msg\u003dmsg)"},{"line_number":414,"context_line":"        return port_id_specified, subnet_id_specified"},{"line_number":415,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_d937c4fd","side":"PARENT","line":412,"in_reply_to":"baada198_ba077080","updated":"2014-07-11 14:14:46.000000000","message":"Ah.. no test case for that... I will add the unit test and modify this one.. Thanks!","commit_id":"c5169571bd6ebfadaf9fb61757efdcdaa24fd01b"}],"neutron/tests/unit/test_l3_plugin.py":[{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"085346ecb11cd1356711650e25f71c5614a19180","unresolved":false,"context_lines":[{"line_number":786,"context_line":"                                              None,"},{"line_number":787,"context_line":"                                              p[\u0027port\u0027][\u0027id\u0027])"},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"    def test_router_add_interface_empty_port_and_subnet_ids(self):"},{"line_number":790,"context_line":"        with self.router() as r:"},{"line_number":791,"context_line":"            self._router_interface_action(\u0027add\u0027, r[\u0027router\u0027][\u0027id\u0027],"},{"line_number":792,"context_line":"                                          None, None,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_fa38083f","line":789,"updated":"2014-07-11 06:39:00.000000000","message":"Please also add a test for passing in both a port_id and subnet_id as it looks we\u0027re missing coverage there too.","commit_id":"0d62eb3c186106dc22f42a72978e099e3e47bf6d"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"216d21b0c380c708424c9419cf65988b3e92897b","unresolved":false,"context_lines":[{"line_number":786,"context_line":"                                              None,"},{"line_number":787,"context_line":"                                              p[\u0027port\u0027][\u0027id\u0027])"},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"    def test_router_add_interface_empty_port_and_subnet_ids(self):"},{"line_number":790,"context_line":"        with self.router() as r:"},{"line_number":791,"context_line":"            self._router_interface_action(\u0027add\u0027, r[\u0027router\u0027][\u0027id\u0027],"},{"line_number":792,"context_line":"                                          None, None,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_09dba74f","line":789,"in_reply_to":"baada198_fa38083f","updated":"2014-07-11 16:31:01.000000000","message":"After investigating the code, lines 366 - 369 filters port_id in case that we have both in the test case:\nif subnet_id:\n            interface_data.update({\u0027subnet_id\u0027: subnet_id})\n        if port_id and (action !\u003d \u0027add\u0027 or not subnet_id):\n            interface_data.update({\u0027port_id\u0027: port_id})","commit_id":"0d62eb3c186106dc22f42a72978e099e3e47bf6d"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"49a65555e6ae1e66a79c3278ed02f543f24b9c2d","unresolved":false,"context_lines":[{"line_number":786,"context_line":"                                              None,"},{"line_number":787,"context_line":"                                              p[\u0027port\u0027][\u0027id\u0027])"},{"line_number":788,"context_line":""},{"line_number":789,"context_line":"    def test_router_add_interface_empty_port_and_subnet_ids(self):"},{"line_number":790,"context_line":"        with self.router() as r:"},{"line_number":791,"context_line":"            self._router_interface_action(\u0027add\u0027, r[\u0027router\u0027][\u0027id\u0027],"},{"line_number":792,"context_line":"                                          None, None,"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_9417d144","line":789,"in_reply_to":"baada198_fa38083f","updated":"2014-07-11 14:14:46.000000000","message":"Done","commit_id":"0d62eb3c186106dc22f42a72978e099e3e47bf6d"}]}
