)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"86d2cba7ae1f60974f359d867b7c8787aa482445","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds delete of a extra_dhcp_opt on a port"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add support for delete of extra_dhcp_opt(s) on a port. Using ithe"},{"line_number":10,"context_line":"neutron command port-update with opt_name\u003d\u003coption_you_want_deleted\u003e,"},{"line_number":11,"context_line":"opt_value\u003dnull, it will delete opt_name that is specific to the"},{"line_number":12,"context_line":"specified port."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAASn%2F%2FJi0%3D","line":9,"updated":"2013-09-11 05:54:12.000000000","message":"s/ithe/the/","commit_id":"060c76fd14a9e541382d4ed8af707beeac3b1fb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"35f8b19cbe15446093d0f19c97781068c2d28f92","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     dekehn \u003cdekehn@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-10-02 20:55:38 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds delete of a extra_dhcp_opt on a port"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add support for delete of extra_dhcp_opt(s) on a port. Where"},{"line_number":10,"context_line":"[{\u0027opt_name\u0027: \u0027opt_to_delete\u0027, \u0027opt_value\u0027: None}]."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAAS3%2F%2FKoY%3D","line":7,"updated":"2013-10-03 03:02:56.000000000","message":"We\u0027ll need to add a bug for this.","commit_id":"b7ae573e1e2c4c4f94fbb394f2029a6d6bc565e7"}],"neutron/db/extradhcpopt_db.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"1f8c5c8065186eb3e6d530a417d796e978bcfcaa","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                        context.session.add(db)"},{"line_number":101,"context_line":"            else:"},{"line_number":102,"context_line":"                for upd_rec in dopts:"},{"line_number":103,"context_line":"                    with context.session.begin(subtransactions\u003dTrue):"},{"line_number":104,"context_line":"                        for opt in opt_db:"},{"line_number":105,"context_line":"                            if opt[\u0027opt_name\u0027] \u003d\u003d upd_rec[\u0027opt_name\u0027]:"},{"line_number":106,"context_line":"                                # to handle deleting of a opt from the port."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAASn%2F%2FKfk%3D","line":103,"updated":"2013-09-10 19:42:24.000000000","message":"I know this is out of scope of the patch, but I think it\u0027s better to wrap loop in transaction rather then perform separate query per each iteration.","commit_id":"060c76fd14a9e541382d4ed8af707beeac3b1fb7"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"264e596f63b9945009cbcb7df5395600b3404e58","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                        context.session.add(db)"},{"line_number":101,"context_line":"            else:"},{"line_number":102,"context_line":"                for upd_rec in dopts:"},{"line_number":103,"context_line":"                    with context.session.begin(subtransactions\u003dTrue):"},{"line_number":104,"context_line":"                        for opt in opt_db:"},{"line_number":105,"context_line":"                            if opt[\u0027opt_name\u0027] \u003d\u003d upd_rec[\u0027opt_name\u0027]:"},{"line_number":106,"context_line":"                                # to handle deleting of a opt from the port."}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAASn%2F%2FEH4%3D","line":103,"in_reply_to":"AAAASn%2F%2FKfk%3D","updated":"2013-09-12 19:25:00.000000000","message":"sorry out of scope, but duely noted.","commit_id":"060c76fd14a9e541382d4ed8af707beeac3b1fb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7472d322065ae1f10b21d1b8210b50f39cb3aa90","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                        for opt in opt_db:"},{"line_number":105,"context_line":"                            if opt[\u0027opt_name\u0027] \u003d\u003d upd_rec[\u0027opt_name\u0027]:"},{"line_number":106,"context_line":"                                # to handle deleting of a opt from the port."},{"line_number":107,"context_line":"                                if upd_rec[\u0027opt_value\u0027].lower() \u003d\u003d \u0027null\u0027:"},{"line_number":108,"context_line":"                                    context.session.delete(opt)"},{"line_number":109,"context_line":"                                elif opt[\u0027opt_value\u0027] !\u003d upd_rec[\u0027opt_value\u0027]:"},{"line_number":110,"context_line":"                                    opt.update("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAASn%2F%2FHbQ%3D","line":107,"updated":"2013-09-11 18:26:41.000000000","message":"I prefer that we check for the value being None.  The opt_values are strings and passing a non-string makes it clear the intent is to blank the option.\n\nif upd_rec[\u0027opt_value\u0027] is not None:","commit_id":"060c76fd14a9e541382d4ed8af707beeac3b1fb7"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"1f8c5c8065186eb3e6d530a417d796e978bcfcaa","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                        for opt in opt_db:"},{"line_number":105,"context_line":"                            if opt[\u0027opt_name\u0027] \u003d\u003d upd_rec[\u0027opt_name\u0027]:"},{"line_number":106,"context_line":"                                # to handle deleting of a opt from the port."},{"line_number":107,"context_line":"                                if upd_rec[\u0027opt_value\u0027].lower() \u003d\u003d \u0027null\u0027:"},{"line_number":108,"context_line":"                                    context.session.delete(opt)"},{"line_number":109,"context_line":"                                elif opt[\u0027opt_value\u0027] !\u003d upd_rec[\u0027opt_value\u0027]:"},{"line_number":110,"context_line":"                                    opt.update("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAASn%2F%2FKe8%3D","line":107,"updated":"2013-09-10 19:42:24.000000000","message":"I\u0027m not sure it\u0027s a good way to delete anything.\n\nBut anyway, its better to introduce some method like\n def is_dhcpopt_null_value(self, val):\n    return val.lower() \u003d\u003d \u0027null\u0027\nand use it here and below","commit_id":"060c76fd14a9e541382d4ed8af707beeac3b1fb7"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"264e596f63b9945009cbcb7df5395600b3404e58","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                        for opt in opt_db:"},{"line_number":105,"context_line":"                            if opt[\u0027opt_name\u0027] \u003d\u003d upd_rec[\u0027opt_name\u0027]:"},{"line_number":106,"context_line":"                                # to handle deleting of a opt from the port."},{"line_number":107,"context_line":"                                if upd_rec[\u0027opt_value\u0027].lower() \u003d\u003d \u0027null\u0027:"},{"line_number":108,"context_line":"                                    context.session.delete(opt)"},{"line_number":109,"context_line":"                                elif opt[\u0027opt_value\u0027] !\u003d upd_rec[\u0027opt_value\u0027]:"},{"line_number":110,"context_line":"                                    opt.update("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAASn%2F%2FEKM%3D","line":107,"in_reply_to":"AAAASn%2F%2FHbQ%3D","updated":"2013-09-12 19:25:00.000000000","message":"will do.","commit_id":"060c76fd14a9e541382d4ed8af707beeac3b1fb7"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"264e596f63b9945009cbcb7df5395600b3404e58","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                        for opt in opt_db:"},{"line_number":105,"context_line":"                            if opt[\u0027opt_name\u0027] \u003d\u003d upd_rec[\u0027opt_name\u0027]:"},{"line_number":106,"context_line":"                                # to handle deleting of a opt from the port."},{"line_number":107,"context_line":"                                if upd_rec[\u0027opt_value\u0027].lower() \u003d\u003d \u0027null\u0027:"},{"line_number":108,"context_line":"                                    context.session.delete(opt)"},{"line_number":109,"context_line":"                                elif opt[\u0027opt_value\u0027] !\u003d upd_rec[\u0027opt_value\u0027]:"},{"line_number":110,"context_line":"                                    opt.update("}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAASn%2F%2FEKQ%3D","line":107,"in_reply_to":"AAAASn%2F%2FKe8%3D","updated":"2013-09-12 19:25:00.000000000","message":"see below, but basically since we are going to use None , I will leave the 2 compares as inline.","commit_id":"060c76fd14a9e541382d4ed8af707beeac3b1fb7"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"7472d322065ae1f10b21d1b8210b50f39cb3aa90","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                break"},{"line_number":113,"context_line":"                        # this handles the adding an option that didn\u0027t exist."},{"line_number":114,"context_line":"                        else:"},{"line_number":115,"context_line":"                            if upd_rec[\u0027opt_value\u0027].lower() !\u003d \u0027null\u0027:"},{"line_number":116,"context_line":"                                db \u003d ExtraDhcpOpt("},{"line_number":117,"context_line":"                                    port_id\u003did,"},{"line_number":118,"context_line":"                                    opt_name\u003dupd_rec[\u0027opt_name\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAASn%2F%2FHa4%3D","line":115,"updated":"2013-09-11 18:26:41.000000000","message":"if upd_rec[\u0027opt_value\u0027] is not None:","commit_id":"060c76fd14a9e541382d4ed8af707beeac3b1fb7"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"264e596f63b9945009cbcb7df5395600b3404e58","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                break"},{"line_number":113,"context_line":"                        # this handles the adding an option that didn\u0027t exist."},{"line_number":114,"context_line":"                        else:"},{"line_number":115,"context_line":"                            if upd_rec[\u0027opt_value\u0027].lower() !\u003d \u0027null\u0027:"},{"line_number":116,"context_line":"                                db \u003d ExtraDhcpOpt("},{"line_number":117,"context_line":"                                    port_id\u003did,"},{"line_number":118,"context_line":"                                    opt_name\u003dupd_rec[\u0027opt_name\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAASn%2F%2FEKI%3D","line":115,"in_reply_to":"AAAASn%2F%2FHa4%3D","updated":"2013-09-12 19:25:00.000000000","message":"will do","commit_id":"060c76fd14a9e541382d4ed8af707beeac3b1fb7"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"17c11c050452d87e85fb9475f038740a7f49bf0c","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                        for opt in opt_db:"},{"line_number":105,"context_line":"                            if opt[\u0027opt_name\u0027] \u003d\u003d upd_rec[\u0027opt_name\u0027]:"},{"line_number":106,"context_line":"                                # to handle deleting of a opt from the port."},{"line_number":107,"context_line":"                                if upd_rec[\u0027opt_value\u0027] is None:"},{"line_number":108,"context_line":"                                    context.session.delete(opt)"},{"line_number":109,"context_line":"                                elif opt[\u0027opt_value\u0027] !\u003d upd_rec[\u0027opt_value\u0027]:"},{"line_number":110,"context_line":"                                    opt.update("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FDL8%3D","line":107,"updated":"2013-09-12 22:10:55.000000000","message":"if not upd_rec[\u0027opt_value\u0027]:","commit_id":"26ddfd9ccc844dc9ae9eacd779486a994b525140"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"17c11c050452d87e85fb9475f038740a7f49bf0c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                break"},{"line_number":113,"context_line":"                        # this handles the adding an option that didn\u0027t exist."},{"line_number":114,"context_line":"                        else:"},{"line_number":115,"context_line":"                            if upd_rec[\u0027opt_value\u0027] is not None:"},{"line_number":116,"context_line":"                                db \u003d ExtraDhcpOpt("},{"line_number":117,"context_line":"                                    port_id\u003did,"},{"line_number":118,"context_line":"                                    opt_name\u003dupd_rec[\u0027opt_name\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2FDMA%3D","line":115,"updated":"2013-09-12 22:10:55.000000000","message":"if upd_rec[\u0027opt_value\u0027]:","commit_id":"26ddfd9ccc844dc9ae9eacd779486a994b525140"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"fd939a408345a6591b194e37667aae7a0eda70d3","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                        for opt in opt_db:"},{"line_number":105,"context_line":"                            if opt[\u0027opt_name\u0027] \u003d\u003d upd_rec[\u0027opt_name\u0027]:"},{"line_number":106,"context_line":"                                # to handle deleting of a opt from the port."},{"line_number":107,"context_line":"                                if not upd_rec[\u0027opt_value\u0027]:"},{"line_number":108,"context_line":"                                    context.session.delete(opt)"},{"line_number":109,"context_line":"                                elif opt[\u0027opt_value\u0027] !\u003d upd_rec[\u0027opt_value\u0027]:"},{"line_number":110,"context_line":"                                    opt.update("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2FAB4%3D","line":107,"updated":"2013-09-13 18:45:33.000000000","message":"This should be:\n\nif upd_rec[\u0027opt_value\u0027] is not None:","commit_id":"1e9dd786b077e1a28233ef45d8357c5e5973b83f"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"a46d312737fd43b1e3e23db4adc27bf11ba7658e","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                        for opt in opt_db:"},{"line_number":105,"context_line":"                            if opt[\u0027opt_name\u0027] \u003d\u003d upd_rec[\u0027opt_name\u0027]:"},{"line_number":106,"context_line":"                                # to handle deleting of a opt from the port."},{"line_number":107,"context_line":"                                if not upd_rec[\u0027opt_value\u0027]:"},{"line_number":108,"context_line":"                                    context.session.delete(opt)"},{"line_number":109,"context_line":"                                elif opt[\u0027opt_value\u0027] !\u003d upd_rec[\u0027opt_value\u0027]:"},{"line_number":110,"context_line":"                                    opt.update("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2FABk%3D","line":107,"in_reply_to":"AAAASn%2F%2FAB4%3D","updated":"2013-09-13 18:48:31.000000000","message":"you mean delete opt_value if it is exist?","commit_id":"1e9dd786b077e1a28233ef45d8357c5e5973b83f"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"a7570eaa99f52891bac1c37f44905e6f3f63cda1","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                        for opt in opt_db:"},{"line_number":105,"context_line":"                            if opt[\u0027opt_name\u0027] \u003d\u003d upd_rec[\u0027opt_name\u0027]:"},{"line_number":106,"context_line":"                                # to handle deleting of a opt from the port."},{"line_number":107,"context_line":"                                if not upd_rec[\u0027opt_value\u0027]:"},{"line_number":108,"context_line":"                                    context.session.delete(opt)"},{"line_number":109,"context_line":"                                elif opt[\u0027opt_value\u0027] !\u003d upd_rec[\u0027opt_value\u0027]:"},{"line_number":110,"context_line":"                                    opt.update("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2B%2FuA%3D","line":107,"in_reply_to":"AAAASn%2F%2FABk%3D","updated":"2013-09-13 21:29:01.000000000","message":"will change back","commit_id":"1e9dd786b077e1a28233ef45d8357c5e5973b83f"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"fd939a408345a6591b194e37667aae7a0eda70d3","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                break"},{"line_number":113,"context_line":"                        # this handles the adding an option that didn\u0027t exist."},{"line_number":114,"context_line":"                        else:"},{"line_number":115,"context_line":"                            if upd_rec[\u0027opt_value\u0027]:"},{"line_number":116,"context_line":"                                db \u003d ExtraDhcpOpt("},{"line_number":117,"context_line":"                                    port_id\u003did,"},{"line_number":118,"context_line":"                                    opt_name\u003dupd_rec[\u0027opt_name\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2FABw%3D","line":115,"updated":"2013-09-13 18:45:33.000000000","message":"collapse line114 and 115 into:\n\nelif upd_rec[\u0027opt_value\u0027] is not None:","commit_id":"1e9dd786b077e1a28233ef45d8357c5e5973b83f"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"a7570eaa99f52891bac1c37f44905e6f3f63cda1","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                break"},{"line_number":113,"context_line":"                        # this handles the adding an option that didn\u0027t exist."},{"line_number":114,"context_line":"                        else:"},{"line_number":115,"context_line":"                            if upd_rec[\u0027opt_value\u0027]:"},{"line_number":116,"context_line":"                                db \u003d ExtraDhcpOpt("},{"line_number":117,"context_line":"                                    port_id\u003did,"},{"line_number":118,"context_line":"                                    opt_name\u003dupd_rec[\u0027opt_name\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2B%2Ft8%3D","line":115,"in_reply_to":"AAAASn%2F%2FABc%3D","updated":"2013-09-13 21:29:01.000000000","message":"will change back, actuall mark is must work this way, because if the opt_name does not exist  it will insert a None, so this prevents that situation.","commit_id":"1e9dd786b077e1a28233ef45d8357c5e5973b83f"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"a46d312737fd43b1e3e23db4adc27bf11ba7658e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                break"},{"line_number":113,"context_line":"                        # this handles the adding an option that didn\u0027t exist."},{"line_number":114,"context_line":"                        else:"},{"line_number":115,"context_line":"                            if upd_rec[\u0027opt_value\u0027]:"},{"line_number":116,"context_line":"                                db \u003d ExtraDhcpOpt("},{"line_number":117,"context_line":"                                    port_id\u003did,"},{"line_number":118,"context_line":"                                    opt_name\u003dupd_rec[\u0027opt_name\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2FABc%3D","line":115,"in_reply_to":"AAAASn%2F%2FABw%3D","updated":"2013-09-13 18:48:31.000000000","message":"Ah you are true.\nupd_rec[\u0027opt_value\u0027] \u003d false or 0 should be valid option.\n\nDkhen: sorry for my wrong review in previous patch","commit_id":"1e9dd786b077e1a28233ef45d8357c5e5973b83f"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"f4d50cb99c3df330a265e09fa81d5283f4517104","unresolved":false,"context_lines":[{"line_number":112,"context_line":"                                break"},{"line_number":113,"context_line":"                        # this handles the adding an option that didn\u0027t exist."},{"line_number":114,"context_line":"                        else:"},{"line_number":115,"context_line":"                            if upd_rec[\u0027opt_value\u0027]:"},{"line_number":116,"context_line":"                                db \u003d ExtraDhcpOpt("},{"line_number":117,"context_line":"                                    port_id\u003did,"},{"line_number":118,"context_line":"                                    opt_name\u003dupd_rec[\u0027opt_name\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAASn%2F%2B%2Fm4%3D","line":115,"in_reply_to":"AAAASn%2F%2FABw%3D","updated":"2013-09-13 22:20:58.000000000","message":"Sorry no can do this results in a pep8 failure\n./neutron/db/extradhcpopt_db.py:114:29: E901 SyntaxError: invalid syntax\n                        elif upd_rec[\u0027opt_value\u0027] is not None:\n                            ^","commit_id":"1e9dd786b077e1a28233ef45d8357c5e5973b83f"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"ff5706a4fd2a36de643fe1ad3b2616ecf1b9b0ef","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                            port_id\u003did,"},{"line_number":98,"context_line":"                            opt_name\u003ddopt[\u0027opt_name\u0027],"},{"line_number":99,"context_line":"                            opt_value\u003ddopt[\u0027opt_value\u0027])"},{"line_number":100,"context_line":"                        context.session.add(db)"},{"line_number":101,"context_line":"            else:"},{"line_number":102,"context_line":"                for upd_rec in dopts:"},{"line_number":103,"context_line":"                    with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FXD0%3D","line":100,"updated":"2013-09-28 11:54:17.000000000","message":"If by mistake an option is provided having dopt[\u0027opt_value\u0027] None here, then you\u0027ll get sql exception since opt_value can\u0027t be NULL","commit_id":"b9b59fa59d36df71d534b9208817e09cb4102eda"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"0a0b37b599476a37c8b3e44fb1e3a321bbf922b0","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                            port_id\u003did,"},{"line_number":98,"context_line":"                            opt_name\u003ddopt[\u0027opt_name\u0027],"},{"line_number":99,"context_line":"                            opt_value\u003ddopt[\u0027opt_value\u0027])"},{"line_number":100,"context_line":"                        context.session.add(db)"},{"line_number":101,"context_line":"            else:"},{"line_number":102,"context_line":"                for upd_rec in dopts:"},{"line_number":103,"context_line":"                    with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FSMg%3D","line":100,"in_reply_to":"AAAAS3%2F%2FXD0%3D","updated":"2013-10-01 01:06:41.000000000","message":"Will add a check for the opt_valuie such that it can\u0027t be a None when creating to avoid a SQL constancy checks.","commit_id":"b9b59fa59d36df71d534b9208817e09cb4102eda"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"63f8029f9afdb55f6ee4244a33dd6f807094af02","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                        context.session.add(db)"},{"line_number":101,"context_line":"            else:"},{"line_number":102,"context_line":"                for upd_rec in dopts:"},{"line_number":103,"context_line":"                    with context.session.begin(subtransactions\u003dTrue):"},{"line_number":104,"context_line":"                        for opt in opt_db:"},{"line_number":105,"context_line":"                            if opt[\u0027opt_name\u0027] \u003d\u003d upd_rec[\u0027opt_name\u0027]:"},{"line_number":106,"context_line":"                                # to handle deleting of a opt from the port."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2Fg3Y%3D","line":103,"updated":"2013-09-25 12:59:34.000000000","message":"unrelated nit - can the subtransaction start outside of the loop over dopts?","commit_id":"b9b59fa59d36df71d534b9208817e09cb4102eda"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"ff5706a4fd2a36de643fe1ad3b2616ecf1b9b0ef","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                        context.session.add(db)"},{"line_number":101,"context_line":"            else:"},{"line_number":102,"context_line":"                for upd_rec in dopts:"},{"line_number":103,"context_line":"                    with context.session.begin(subtransactions\u003dTrue):"},{"line_number":104,"context_line":"                        for opt in opt_db:"},{"line_number":105,"context_line":"                            if opt[\u0027opt_name\u0027] \u003d\u003d upd_rec[\u0027opt_name\u0027]:"},{"line_number":106,"context_line":"                                # to handle deleting of a opt from the port."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FXDc%3D","line":103,"in_reply_to":"AAAAS3%2F%2Fg3Y%3D","updated":"2013-09-28 11:54:17.000000000","message":"+1 to this suggestion","commit_id":"b9b59fa59d36df71d534b9208817e09cb4102eda"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"0a0b37b599476a37c8b3e44fb1e3a321bbf922b0","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                        context.session.add(db)"},{"line_number":101,"context_line":"            else:"},{"line_number":102,"context_line":"                for upd_rec in dopts:"},{"line_number":103,"context_line":"                    with context.session.begin(subtransactions\u003dTrue):"},{"line_number":104,"context_line":"                        for opt in opt_db:"},{"line_number":105,"context_line":"                            if opt[\u0027opt_name\u0027] \u003d\u003d upd_rec[\u0027opt_name\u0027]:"},{"line_number":106,"context_line":"                                # to handle deleting of a opt from the port."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FSTA%3D","line":103,"in_reply_to":"AAAAS3%2F%2Fg3Y%3D","updated":"2013-10-01 01:06:41.000000000","message":"Will change to move the subtransaction outside the loop","commit_id":"b9b59fa59d36df71d534b9208817e09cb4102eda"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1848516954220475ca68854471151a216eb22c34","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            return port"},{"line_number":63,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":64,"context_line":"            for dopt in extra_dhcp_opts:"},{"line_number":65,"context_line":"                if dopt[\u0027opt_value\u0027]:"},{"line_number":66,"context_line":"                    db \u003d ExtraDhcpOpt("},{"line_number":67,"context_line":"                        port_id\u003dport[\u0027id\u0027],"},{"line_number":68,"context_line":"                        opt_name\u003ddopt[\u0027opt_name\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FRtg%3D","line":65,"updated":"2013-10-01 03:10:52.000000000","message":"We need to compare it with None explicitly:\n\n  if dopt[\u0027opt_value\u0027] is not None:","commit_id":"f3a1846aa524abb6304d05ccff385f6512ce3cad"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"095a5584856f4fb962d90009e401cfdea8032dbe","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            return port"},{"line_number":63,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":64,"context_line":"            for dopt in extra_dhcp_opts:"},{"line_number":65,"context_line":"                if dopt[\u0027opt_value\u0027]:"},{"line_number":66,"context_line":"                    db \u003d ExtraDhcpOpt("},{"line_number":67,"context_line":"                        port_id\u003dport[\u0027id\u0027],"},{"line_number":68,"context_line":"                        opt_name\u003ddopt[\u0027opt_name\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FLY8%3D","line":65,"in_reply_to":"AAAAS3%2F%2FRtg%3D","updated":"2013-10-03 01:03:53.000000000","message":"Will put the check in","commit_id":"f3a1846aa524abb6304d05ccff385f6512ce3cad"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1848516954220475ca68854471151a216eb22c34","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                                port_id\u003did,"},{"line_number":100,"context_line":"                                opt_name\u003ddopt[\u0027opt_name\u0027],"},{"line_number":101,"context_line":"                                opt_value\u003ddopt[\u0027opt_value\u0027])"},{"line_number":102,"context_line":"                            context.session.add(db)"},{"line_number":103,"context_line":"            else:"},{"line_number":104,"context_line":"                with context.session.begin(subtransactions\u003dTrue):"},{"line_number":105,"context_line":"                    for upd_rec in dopts:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FRsY%3D","line":102,"updated":"2013-10-01 03:10:52.000000000","message":"L.96-102 is actually same as L.116-122.\nPlease consider changing L.92-122 to the following:\n\n  with context.session.begin(subtransaction\u003dTrue):\n      for upd_rec in dopts:\n          for opt in opt_db:\n              \u003cLogic at L.107-114\u003e\n          else:\n              if upd_rec[\u0027opt_value\u0027] is not None:\n                  \u003cLogic at L.118-122\u003e","commit_id":"f3a1846aa524abb6304d05ccff385f6512ce3cad"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"095a5584856f4fb962d90009e401cfdea8032dbe","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                                port_id\u003did,"},{"line_number":100,"context_line":"                                opt_name\u003ddopt[\u0027opt_name\u0027],"},{"line_number":101,"context_line":"                                opt_value\u003ddopt[\u0027opt_value\u0027])"},{"line_number":102,"context_line":"                            context.session.add(db)"},{"line_number":103,"context_line":"            else:"},{"line_number":104,"context_line":"                with context.session.begin(subtransactions\u003dTrue):"},{"line_number":105,"context_line":"                    for upd_rec in dopts:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FLY4%3D","line":102,"in_reply_to":"AAAAS3%2F%2FRsY%3D","updated":"2013-10-03 01:03:53.000000000","message":"will refactor","commit_id":"f3a1846aa524abb6304d05ccff385f6512ce3cad"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"dc99aed305eaef7eaf974b49997bb5b595f50fdb","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            return port"},{"line_number":63,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":64,"context_line":"            for dopt in extra_dhcp_opts:"},{"line_number":65,"context_line":"                if dopt[\u0027opt_value\u0027]:"},{"line_number":66,"context_line":"                    db \u003d ExtraDhcpOpt("},{"line_number":67,"context_line":"                        port_id\u003dport[\u0027id\u0027],"},{"line_number":68,"context_line":"                        opt_name\u003ddopt[\u0027opt_name\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FJE8%3D","line":65,"updated":"2013-11-13 21:55:47.000000000","message":"just to be sure, we need to be careful that the following are never valid values for DHCP options:\n- 0\n- \u0027\u0027 (empty string)\n- false (boolean)","commit_id":"9f211b508db40262d4dba20e74e1f740d34e7453"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"18e087333db78453b18c596faee1f8a46ab4a08c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            return port"},{"line_number":63,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":64,"context_line":"            for dopt in extra_dhcp_opts:"},{"line_number":65,"context_line":"                if dopt[\u0027opt_value\u0027]:"},{"line_number":66,"context_line":"                    db \u003d ExtraDhcpOpt("},{"line_number":67,"context_line":"                        port_id\u003dport[\u0027id\u0027],"},{"line_number":68,"context_line":"                        opt_name\u003ddopt[\u0027opt_name\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FE8E%3D","line":65,"in_reply_to":"AAAATn%2F%2FJE8%3D","updated":"2013-11-14 20:08:42.000000000","message":"In the case of the empty string its not load the if  dopt[\u0027opt_value\u0027] catches that use case, but in the case of 0 or anything else, given that this was done to be generic in nature (i.e. can handle any dhcp options) are we actually sure that a \u00270\u0027 or \u0027false\u0027 would never be a valid case?","commit_id":"9f211b508db40262d4dba20e74e1f740d34e7453"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"dc99aed305eaef7eaf974b49997bb5b595f50fdb","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                    db \u003d ExtraDhcpOpt("},{"line_number":67,"context_line":"                        port_id\u003dport[\u0027id\u0027],"},{"line_number":68,"context_line":"                        opt_name\u003ddopt[\u0027opt_name\u0027],"},{"line_number":69,"context_line":"                        opt_value\u003ddopt[\u0027opt_value\u0027])"},{"line_number":70,"context_line":"                    context.session.add(db)"},{"line_number":71,"context_line":"        return self._extend_port_extra_dhcp_opts_dict(context, port)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FJEc%3D","line":69,"updated":"2013-11-13 21:55:47.000000000","message":"I am a bit undecided if a DHCP OPT with None value on create should be rejected with 400 or ignored as you do.\n\nI see the point for ignoring it.\n\nThe point for rejecting would be that ignoring incorrect input might lead to wrong assumptions on the client side. As an example (probably exaggerated) imagine the app on the client side has a bug and stores None in the value for a DHCP opt whereas an integer was expected. Since neutron ignores the wrong value, the app assumes the dhcp option has been sent to neutron correctly and the bug stays possibly dormant until it cause a different (and possibly hard to root-cause) failure.\n\nCan you help me explaining your process of thought?","commit_id":"9f211b508db40262d4dba20e74e1f740d34e7453"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"18e087333db78453b18c596faee1f8a46ab4a08c","unresolved":false,"context_lines":[{"line_number":66,"context_line":"                    db \u003d ExtraDhcpOpt("},{"line_number":67,"context_line":"                        port_id\u003dport[\u0027id\u0027],"},{"line_number":68,"context_line":"                        opt_name\u003ddopt[\u0027opt_name\u0027],"},{"line_number":69,"context_line":"                        opt_value\u003ddopt[\u0027opt_value\u0027])"},{"line_number":70,"context_line":"                    context.session.add(db)"},{"line_number":71,"context_line":"        return self._extend_port_extra_dhcp_opts_dict(context, port)"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FE38%3D","line":69,"in_reply_to":"AAAATn%2F%2FJEc%3D","updated":"2013-11-14 20:08:42.000000000","message":"The thought process was that when providing a generic dhcp options capability, there is no way I want to anticipate all the possibilities of potential options (names) or there valid option(s) possibilities. In the uses case where the option is set to an obvious invalid setting (blank string, db file violation, etc.) they are not loaded but the others would be. Given that these are only options and the possibility of potential combinations is quite large I reasoned that this was the best way to handle this situation, with the read capability it allows the user to check the validity of the option(s).","commit_id":"9f211b508db40262d4dba20e74e1f740d34e7453"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"dc99aed305eaef7eaf974b49997bb5b595f50fdb","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        if dopts:"},{"line_number":90,"context_line":"            opt_db \u003d self._model_query("},{"line_number":91,"context_line":"                context, ExtraDhcpOpt).filter_by(port_id\u003did).all()"},{"line_number":92,"context_line":"            # if there are currently no dhcp_options associated to"},{"line_number":93,"context_line":"            # this port, Then just insert the new ones and be done."},{"line_number":94,"context_line":"            with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FJEM%3D","line":91,"updated":"2013-11-13 21:55:47.000000000","message":"unrelated: as you\u0027re iterating over the query results later on, this all() is redundant.","commit_id":"9f211b508db40262d4dba20e74e1f740d34e7453"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"18e087333db78453b18c596faee1f8a46ab4a08c","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        if dopts:"},{"line_number":90,"context_line":"            opt_db \u003d self._model_query("},{"line_number":91,"context_line":"                context, ExtraDhcpOpt).filter_by(port_id\u003did).all()"},{"line_number":92,"context_line":"            # if there are currently no dhcp_options associated to"},{"line_number":93,"context_line":"            # this port, Then just insert the new ones and be done."},{"line_number":94,"context_line":"            with context.session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FEnk%3D","line":91,"in_reply_to":"AAAATn%2F%2FJEM%3D","updated":"2013-11-14 20:08:42.000000000","message":"In the loop below the otter loop iterates over the passed in values while the inner loop iterates over the opt_db(all), which determines if I\u0027m going to update the passed in value(s) against the opt_db or insert it.","commit_id":"9f211b508db40262d4dba20e74e1f740d34e7453"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"dc99aed305eaef7eaf974b49997bb5b595f50fdb","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                                    {\u0027opt_value\u0027: upd_rec[\u0027opt_value\u0027]})"},{"line_number":104,"context_line":"                            break"},{"line_number":105,"context_line":"                    else:"},{"line_number":106,"context_line":"                        if upd_rec[\u0027opt_value\u0027] is not None:"},{"line_number":107,"context_line":"                            db \u003d ExtraDhcpOpt("},{"line_number":108,"context_line":"                                port_id\u003did,"},{"line_number":109,"context_line":"                                opt_name\u003dupd_rec[\u0027opt_name\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FJC0%3D","line":106,"updated":"2013-11-13 21:55:47.000000000","message":"question related to the previous comment - if upd_rec[\u0027opt_name\u0027] does not exist in the db, should we return error or ignore?","commit_id":"9f211b508db40262d4dba20e74e1f740d34e7453"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"18e087333db78453b18c596faee1f8a46ab4a08c","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                                    {\u0027opt_value\u0027: upd_rec[\u0027opt_value\u0027]})"},{"line_number":104,"context_line":"                            break"},{"line_number":105,"context_line":"                    else:"},{"line_number":106,"context_line":"                        if upd_rec[\u0027opt_value\u0027] is not None:"},{"line_number":107,"context_line":"                            db \u003d ExtraDhcpOpt("},{"line_number":108,"context_line":"                                port_id\u003did,"},{"line_number":109,"context_line":"                                opt_name\u003dupd_rec[\u0027opt_name\u0027],"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FEn4%3D","line":106,"in_reply_to":"AAAATn%2F%2FJC0%3D","updated":"2013-11-14 20:08:42.000000000","message":"If it does exist we insert it.","commit_id":"9f211b508db40262d4dba20e74e1f740d34e7453"}],"neutron/tests/unit/test_extension_extradhcpopts.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"ff5706a4fd2a36de643fe1ad3b2616ecf1b9b0ef","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            self._check_opts(new_opts,"},{"line_number":158,"context_line":"                             port[\u0027port\u0027][edo_ext.EXTRADHCPOPTS])"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def test_update_port_with_extradhcpopt_delete(self):"},{"line_number":161,"context_line":"        opt_dict \u003d [{\u0027opt_name\u0027: \u0027bootfile-name\u0027, \u0027opt_value\u0027: \u0027pxelinux.0\u0027},"},{"line_number":162,"context_line":"                    {\u0027opt_name\u0027: \u0027tftp-server\u0027,"},{"line_number":163,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.123\u0027},"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FXDM%3D","line":160,"updated":"2013-09-28 11:54:17.000000000","message":"please also add test case when option {\u0027opt_name\u0027: \u0027name\u0027, \u0027opt_value\u0027: None} is used to update port with no dhcp options.","commit_id":"b9b59fa59d36df71d534b9208817e09cb4102eda"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"0a0b37b599476a37c8b3e44fb1e3a321bbf922b0","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            self._check_opts(new_opts,"},{"line_number":158,"context_line":"                             port[\u0027port\u0027][edo_ext.EXTRADHCPOPTS])"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def test_update_port_with_extradhcpopt_delete(self):"},{"line_number":161,"context_line":"        opt_dict \u003d [{\u0027opt_name\u0027: \u0027bootfile-name\u0027, \u0027opt_value\u0027: \u0027pxelinux.0\u0027},"},{"line_number":162,"context_line":"                    {\u0027opt_name\u0027: \u0027tftp-server\u0027,"},{"line_number":163,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.123\u0027},"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAS3%2F%2FR2E%3D","line":160,"in_reply_to":"AAAAS3%2F%2FXDM%3D","updated":"2013-10-01 01:06:41.000000000","message":"will add a test that performs that test.","commit_id":"b9b59fa59d36df71d534b9208817e09cb4102eda"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1848516954220475ca68854471151a216eb22c34","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                  \u0027arg_list\u0027: (edo_ext.EXTRADHCPOPTS,)}"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        with self.port(**params) as port:"},{"line_number":86,"context_line":"            self._check_opts(opt_dict,"},{"line_number":87,"context_line":"                             port[\u0027port\u0027][edo_ext.EXTRADHCPOPTS])"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def test_update_port_with_extradhcpopts_with_same(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FRqI%3D","line":86,"updated":"2013-10-01 03:10:52.000000000","message":"Please add a test to create a port with {\u0027opt_name\u0027: \u0027xxxx\u0027, \u0027opt_value\u0027: None}.","commit_id":"f3a1846aa524abb6304d05ccff385f6512ce3cad"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"095a5584856f4fb962d90009e401cfdea8032dbe","unresolved":false,"context_lines":[{"line_number":83,"context_line":"                  \u0027arg_list\u0027: (edo_ext.EXTRADHCPOPTS,)}"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        with self.port(**params) as port:"},{"line_number":86,"context_line":"            self._check_opts(opt_dict,"},{"line_number":87,"context_line":"                             port[\u0027port\u0027][edo_ext.EXTRADHCPOPTS])"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def test_update_port_with_extradhcpopts_with_same(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FKyA%3D","line":86,"in_reply_to":"AAAAS3%2F%2FRqI%3D","updated":"2013-10-03 01:03:53.000000000","message":"added in the next patch","commit_id":"f3a1846aa524abb6304d05ccff385f6512ce3cad"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1848516954220475ca68854471151a216eb22c34","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                             port[\u0027port\u0027][edo_ext.EXTRADHCPOPTS])"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def test_update_port_with_extradhcpopt_delete(self):"},{"line_number":161,"context_line":"        opt_dict \u003d [{\u0027opt_name\u0027: \u0027bootfile-name\u0027, \u0027opt_value\u0027: \u0027pxelinux.0\u0027},"},{"line_number":162,"context_line":"                    {\u0027opt_name\u0027: \u0027tftp-server\u0027,"},{"line_number":163,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.123\u0027},"},{"line_number":164,"context_line":"                    {\u0027opt_name\u0027: \u0027server-ip-address\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FRq8%3D","line":161,"updated":"2013-10-01 03:10:52.000000000","message":"opt_dict is a list of dict, so \u0027opt_list\u0027 is a better name than \u0027opt_dict\u0027.\nCould you replace opt_dict with opt_list through this file?","commit_id":"f3a1846aa524abb6304d05ccff385f6512ce3cad"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"095a5584856f4fb962d90009e401cfdea8032dbe","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                             port[\u0027port\u0027][edo_ext.EXTRADHCPOPTS])"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def test_update_port_with_extradhcpopt_delete(self):"},{"line_number":161,"context_line":"        opt_dict \u003d [{\u0027opt_name\u0027: \u0027bootfile-name\u0027, \u0027opt_value\u0027: \u0027pxelinux.0\u0027},"},{"line_number":162,"context_line":"                    {\u0027opt_name\u0027: \u0027tftp-server\u0027,"},{"line_number":163,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.123\u0027},"},{"line_number":164,"context_line":"                    {\u0027opt_name\u0027: \u0027server-ip-address\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FKxw%3D","line":161,"in_reply_to":"AAAAS3%2F%2FRq8%3D","updated":"2013-10-03 01:03:53.000000000","message":"will do","commit_id":"f3a1846aa524abb6304d05ccff385f6512ce3cad"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1848516954220475ca68854471151a216eb22c34","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        for opt in opt_dict:"},{"line_number":170,"context_line":"            if opt[\u0027opt_name\u0027] !\u003d \u0027bootfile-name\u0027:"},{"line_number":171,"context_line":"                new_opts.append(opt)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        params \u003d {edo_ext.EXTRADHCPOPTS: opt_dict,"},{"line_number":174,"context_line":"                  \u0027arg_list\u0027: (edo_ext.EXTRADHCPOPTS,)}"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FRrE%3D","line":171,"updated":"2013-10-01 03:10:52.000000000","message":"L.167-171 can be:\n\n  new_opts \u003d [opt for opt in opt_dict\n              if opt[\u0027opt_name\u0027] !\u003d \u0027bootfile-name\u0027]\n\nI believe it is easier to read.","commit_id":"f3a1846aa524abb6304d05ccff385f6512ce3cad"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"095a5584856f4fb962d90009e401cfdea8032dbe","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        for opt in opt_dict:"},{"line_number":170,"context_line":"            if opt[\u0027opt_name\u0027] !\u003d \u0027bootfile-name\u0027:"},{"line_number":171,"context_line":"                new_opts.append(opt)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        params \u003d {edo_ext.EXTRADHCPOPTS: opt_dict,"},{"line_number":174,"context_line":"                  \u0027arg_list\u0027: (edo_ext.EXTRADHCPOPTS,)}"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FKxI%3D","line":171,"in_reply_to":"AAAAS3%2F%2FRrE%3D","updated":"2013-10-03 01:03:53.000000000","message":"I will change, but this is a subjective view point.","commit_id":"f3a1846aa524abb6304d05ccff385f6512ce3cad"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"dc99aed305eaef7eaf974b49997bb5b595f50fdb","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.456\u0027},"},{"line_number":94,"context_line":"                    {\u0027opt_name\u0027: \u0027tftp-server\u0027,"},{"line_number":95,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.123\u0027}]"},{"line_number":96,"context_line":"        new_dict \u003d [{\u0027opt_name\u0027: \u0027server-ip-address\u0027,"},{"line_number":97,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.456\u0027},"},{"line_number":98,"context_line":"                    {\u0027opt_name\u0027: \u0027tftp-server\u0027,"},{"line_number":99,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.123\u0027}]"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FJDo%3D","line":96,"updated":"2013-11-13 21:55:47.000000000","message":"new_list?","commit_id":"9f211b508db40262d4dba20e74e1f740d34e7453"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"18e087333db78453b18c596faee1f8a46ab4a08c","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.456\u0027},"},{"line_number":94,"context_line":"                    {\u0027opt_name\u0027: \u0027tftp-server\u0027,"},{"line_number":95,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.123\u0027}]"},{"line_number":96,"context_line":"        new_dict \u003d [{\u0027opt_name\u0027: \u0027server-ip-address\u0027,"},{"line_number":97,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.456\u0027},"},{"line_number":98,"context_line":"                    {\u0027opt_name\u0027: \u0027tftp-server\u0027,"},{"line_number":99,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.123\u0027}]"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FEmE%3D","line":96,"in_reply_to":"AAAATn%2F%2FJDo%3D","updated":"2013-11-14 20:08:42.000000000","message":"Sure will change.","commit_id":"9f211b508db40262d4dba20e74e1f740d34e7453"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"dc99aed305eaef7eaf974b49997bb5b595f50fdb","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            self._check_opts(new_opts,"},{"line_number":156,"context_line":"                             port[\u0027port\u0027][edo_ext.EXTRADHCPOPTS])"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def test_update_port_with_extradhcpopt1(self):"},{"line_number":159,"context_line":"        opt_list \u003d [{\u0027opt_name\u0027: \u0027tftp-server\u0027,"},{"line_number":160,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.123\u0027},"},{"line_number":161,"context_line":"                    {\u0027opt_name\u0027: \u0027server-ip-address\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FJDY%3D","line":158,"updated":"2013-11-13 21:55:47.000000000","message":"unrelated nit - you might consider calling this test\ntest_update_port_with_additional_extradhcpopt","commit_id":"9f211b508db40262d4dba20e74e1f740d34e7453"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"18e087333db78453b18c596faee1f8a46ab4a08c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"            self._check_opts(new_opts,"},{"line_number":156,"context_line":"                             port[\u0027port\u0027][edo_ext.EXTRADHCPOPTS])"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def test_update_port_with_extradhcpopt1(self):"},{"line_number":159,"context_line":"        opt_list \u003d [{\u0027opt_name\u0027: \u0027tftp-server\u0027,"},{"line_number":160,"context_line":"                     \u0027opt_value\u0027: \u0027123.123.123.123\u0027},"},{"line_number":161,"context_line":"                    {\u0027opt_name\u0027: \u0027server-ip-address\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAATn%2F%2FEl8%3D","line":158,"in_reply_to":"AAAATn%2F%2FJDY%3D","updated":"2013-11-14 20:08:42.000000000","message":"will change the name.","commit_id":"9f211b508db40262d4dba20e74e1f740d34e7453"}]}
