)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"383ce14bd4980561c8ab2d0d8016e6643b90381f","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Spec available at:"},{"line_number":23,"context_line":"https://github.com/openstack/ironic-specs/blob/master/specs/"},{"line_number":24,"context_line":"liberty/ironic-ml2-integration.rst"},{"line_number":25,"context_line":"Note: this is an initial draft only and is still work in progress."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Implements: blueprint ironic-ml2-integration"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3a50d1a3_491004ac","line":24,"updated":"2015-07-30 12:31:43.000000000","message":"it\u0027s better to link to http://specs.openstack.org/openstack/ironic-specs/specs/liberty/ironic-ml2-integration.html","commit_id":"ce04a60d438c375f7b9d67a4e3c618d9e2b03204"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":22,"context_line":"Spec available at:"},{"line_number":23,"context_line":"http://specs.openstack.org/openstack/ironic-specs/specs/liberty/"},{"line_number":24,"context_line":"ironic-ml2-integration.html"},{"line_number":25,"context_line":"Note: this is an initial draft only and is still work in progress."},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Implements: blueprint ironic-ml2-integration"},{"line_number":28,"context_line":"DocImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"1a4dcd0f_63b111e1","line":25,"updated":"2015-08-05 07:06:16.000000000","message":"This is no longer an initial draft.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"b27069ec6139828fdb07a93beeb50df4be95f018","unresolved":false,"context_lines":[{"line_number":20,"context_line":"- the DB tests"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Spec available at:"},{"line_number":23,"context_line":"http://specs.openstack.org/openstack/ironic-specs/specs/liberty/"},{"line_number":24,"context_line":"ironic-ml2-integration.html"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Implements: blueprint ironic-ml2-integration"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"1a4dcd0f_989e9f61","line":23,"updated":"2015-08-06 21:16:49.000000000","message":"I kind of think this should be on one line","commit_id":"3942c6183c42b5b2f237133ade74e92346696a33"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"fe8388ea7d4397fed16f022ade309cbf5a8938d4","unresolved":false,"context_lines":[{"line_number":20,"context_line":"- the DB tests"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Spec available at:"},{"line_number":23,"context_line":"http://specs.openstack.org/openstack/ironic-specs/specs/liberty/"},{"line_number":24,"context_line":"ironic-ml2-integration.html"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Partial-bug: #1526403"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":45,"id":"1a7b0d38_5182eb53","line":23,"updated":"2015-12-23 11:53:32.000000000","message":"This is redundant, as the bug contains all the references.","commit_id":"7f68896768d2bc891943468975734f3da9b666f3"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"efa6335fcb878ce88a31dbf8758995175b4fcdaf","unresolved":false,"context_lines":[{"line_number":20,"context_line":"- the DB tests"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Spec available at:"},{"line_number":23,"context_line":"http://specs.openstack.org/openstack/ironic-specs/specs/liberty/"},{"line_number":24,"context_line":"ironic-ml2-integration.html"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Partial-bug: #1526403"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":45,"id":"1a7b0d38_e1bb89e3","line":23,"in_reply_to":"1a7b0d38_5182eb53","updated":"2016-01-05 17:47:19.000000000","message":"Removed, no need to duplicate information","commit_id":"7f68896768d2bc891943468975734f3da9b666f3"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"43ba0983613c4d36dffc088e9271b32aa8cef0e3","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Co-Authored-By: Laura Moore (laura.moore@sap.com)"},{"line_number":25,"context_line":"Co-Authored-By: Jenny Moorehead (jenny.moorehead@sap.com)"},{"line_number":26,"context_line":"Co-Authored-By: Will Stevenson (will.stevenson@sap.com)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ic028c316b0670c2d18de89111e83069f3441f476"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":57,"id":"5a5ae5dd_215fbee6","line":27,"updated":"2016-02-04 04:38:43.000000000","message":"If you do another version I think should add yourself as a Co-author.","commit_id":"c3dd7e915e68d7806b6a8440426953578cd31cf3"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2d0135df7117758a608521a093870b72566f5ad8","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Co-Authored-By: Laura Moore (laura.moore@sap.com)"},{"line_number":25,"context_line":"Co-Authored-By: Jenny Moorehead (jenny.moorehead@sap.com)"},{"line_number":26,"context_line":"Co-Authored-By: Will Stevenson (will.stevenson@sap.com)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ic028c316b0670c2d18de89111e83069f3441f476"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":57,"id":"5a5ae5dd_09bacec0","line":27,"in_reply_to":"5a5ae5dd_215fbee6","updated":"2016-02-04 13:25:14.000000000","message":"Thank you John, but I don\u0027t think that I did a lot in this patch ;)","commit_id":"c3dd7e915e68d7806b6a8440426953578cd31cf3"}],"ironic/db/api.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"383ce14bd4980561c8ab2d0d8016e6643b90381f","unresolved":false,"context_lines":[{"line_number":339,"context_line":"                       result set."},{"line_number":340,"context_line":"        :param sort_key: Attribute by which results should be sorted."},{"line_number":341,"context_line":"        :param sort_dir: direction in which results should be sorted."},{"line_number":342,"context_line":"                         (asc, desc)"},{"line_number":343,"context_line":"        \"\"\""},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a50d1a3_6915c099","line":342,"updated":"2015-07-30 12:31:43.000000000","message":"nit: missing :returns:","commit_id":"ce04a60d438c375f7b9d67a4e3c618d9e2b03204"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"68356b0612f9b1e059efdbdb171f05f3fda4ac30","unresolved":false,"context_lines":[{"line_number":339,"context_line":"                       result set."},{"line_number":340,"context_line":"        :param sort_key: Attribute by which results should be sorted."},{"line_number":341,"context_line":"        :param sort_dir: direction in which results should be sorted."},{"line_number":342,"context_line":"                         (asc, desc)"},{"line_number":343,"context_line":"        \"\"\""},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a4dcd0f_ab5e4374","line":342,"in_reply_to":"3a50d1a3_6915c099","updated":"2015-08-11 12:27:35.000000000","message":"Done","commit_id":"ce04a60d438c375f7b9d67a4e3c618d9e2b03204"},{"author":{"_account_id":6558,"name":"Sukhdev Kapur","email":"sukhdevkapur@gmail.com","username":"sukhdev-8"},"change_message_id":"c2fba5a09ac86f859160dd58a6613678c18d942b","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    @abc.abstractmethod"},{"line_number":301,"context_line":"    def get_portgroup_by_id(self, portgroup_id):"},{"line_number":302,"context_line":"        \"\"\"Return a network portgroup representation."},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        :param portgroup_id: The id of a portgroup."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_5d2b9c94","line":301,"updated":"2015-08-04 23:08:30.000000000","message":"What is the difference between portgroup_id and portgroup_uuid?","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        \"\"\""},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    @abc.abstractmethod"},{"line_number":301,"context_line":"    def get_portgroup_by_id(self, portgroup_id):"},{"line_number":302,"context_line":"        \"\"\"Return a network portgroup representation."},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"        :param portgroup_id: The id of a portgroup."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_e307611a","line":301,"in_reply_to":"1a4dcd0f_5d2b9c94","updated":"2015-08-05 07:06:16.000000000","message":"id is the primary key in the db and is used as foreign key across other tables and is not exposed to the outside world.\n\nuuid is the unique identifier for the entity exposed to the outside world.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":6558,"name":"Sukhdev Kapur","email":"sukhdevkapur@gmail.com","username":"sukhdev-8"},"change_message_id":"c2fba5a09ac86f859160dd58a6613678c18d942b","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        \"\"\""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    @abc.abstractmethod"},{"line_number":378,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":379,"context_line":"        \"\"\"Destroy an portgroup."},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_3d07b01d","line":378,"updated":"2015-08-04 23:08:30.000000000","message":"delete_portgroup() ???","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        \"\"\""},{"line_number":376,"context_line":""},{"line_number":377,"context_line":"    @abc.abstractmethod"},{"line_number":378,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":379,"context_line":"        \"\"\"Destroy an portgroup."},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_3637c5e4","line":378,"in_reply_to":"1a4dcd0f_3d07b01d","updated":"2015-08-05 07:06:16.000000000","message":"i think it\u0027s for consistency with other methods named like destroy_chassis, destroy_node, etc.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"a68e58ef351eb44e30cc76b25b466c2cf468bb6b","unresolved":false,"context_lines":[{"line_number":378,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":379,"context_line":"        \"\"\"Destroy an portgroup."},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":382,"context_line":"        \"\"\""},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_82f8024b","line":381,"updated":"2015-08-18 13:55:02.000000000","message":"Looking at the code it seems that it should be id or uuid of a portgroup","commit_id":"a9cf317ee27a8c16980fc5d117dfbf93fef4f07e"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"a3b8eaa1177aa4e95834648233c23ad68b6f9a4a","unresolved":false,"context_lines":[{"line_number":370,"context_line":"    def update_portgroup(self, portgroup_id, values):"},{"line_number":371,"context_line":"        \"\"\"Update properties of an portgroup."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":374,"context_line":"        :param values: Dict of values to update."},{"line_number":375,"context_line":"        :returns: A portgroup."},{"line_number":376,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_aef6bd5a","line":373,"updated":"2015-08-31 19:55:15.000000000","message":"There seems to be two different portgroup_id in this patch: one defined at line 305, the other in here. It would be more readable to use something else in here, I think. pgid_or_mac?","commit_id":"b3a675c323c768617b41eb29092aeb34c771d88d"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"a3b8eaa1177aa4e95834648233c23ad68b6f9a4a","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":380,"context_line":"        \"\"\"Destroy an portgroup."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":383,"context_line":"        \"\"\""},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_4e34c1fa","line":382,"updated":"2015-08-31 19:55:15.000000000","message":"ditto","commit_id":"b3a675c323c768617b41eb29092aeb34c771d88d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9fd4d8723f14f2b16f516578aeb8fd9c13691c98","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        \"\"\""},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    @abc.abstractmethod"},{"line_number":264,"context_line":"    def get_ports_by_portgroup_id(self, portgroup_id, limit\u003dNone, marker\u003dNone,"},{"line_number":265,"context_line":"                                  sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":266,"context_line":"        \"\"\"List all the ports for a given portgroup."},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"da20952f_b581b2c5","line":264,"updated":"2015-09-09 21:41:18.000000000","message":"we have a get_node_list(self, filters\u003dNone, limit\u003dNone, marker\u003dNone, sort_key\u003dNone, sort_dir\u003dNone).\n\nWhat do you think about modifying the above get_ports_list(self, filters\u003dNone, limit\u003dNone, marker\u003dNone, sort_key\u003dNone, sort_dir\u003dNone) where filters is a dictionary with possible keys: \u0027portgroup_id\u0027, \u0027node_id\u0027)\n\nAnd/or given the amount of work related to this series of patches, maybe we can do this afterwards.\n\nThis can make it extensible for portgroup_name or portgroup_uuid or address.","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"805039da765880affbe97e6885e40823f76eedbf","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        \"\"\""},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    @abc.abstractmethod"},{"line_number":264,"context_line":"    def get_ports_by_portgroup_id(self, portgroup_id, limit\u003dNone, marker\u003dNone,"},{"line_number":265,"context_line":"                                  sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":266,"context_line":"        \"\"\"List all the ports for a given portgroup."},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"1a26ad4f_0e839f99","line":264,"in_reply_to":"da20952f_b581b2c5","updated":"2015-11-16 15:14:48.000000000","message":"Diff temporarily viewable at\nhttps://github.com/yhvh/ironic/commit/f7b38e3b7173b269ce03069c5d24d5f9a37e053f","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9fd4d8723f14f2b16f516578aeb8fd9c13691c98","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                           sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":336,"context_line":"        \"\"\"Return a list of portgroups."},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        :param limit: Maximum number of ports to return."},{"line_number":339,"context_line":"        :param marker: the last item of the previous page; we return the next"},{"line_number":340,"context_line":"                       result set."},{"line_number":341,"context_line":"        :param sort_key: Attribute by which results should be sorted."}],"source_content_type":"text/x-python","patch_set":22,"id":"da20952f_f5ec0a94","line":338,"updated":"2015-09-09 21:41:18.000000000","message":"s/ports/portgroups/","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9fd4d8723f14f2b16f516578aeb8fd9c13691c98","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        \"\"\"List all the portgroups for a given node."},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        :param node_id: The integer node ID."},{"line_number":353,"context_line":"        :param limit: Maximum number of ports to return."},{"line_number":354,"context_line":"        :param marker: the last item of the previous page; we return the next"},{"line_number":355,"context_line":"                       result set."},{"line_number":356,"context_line":"        :param sort_key: Attribute by which results should be sorted"}],"source_content_type":"text/x-python","patch_set":22,"id":"da20952f_b5e692ae","line":353,"updated":"2015-09-09 21:41:18.000000000","message":"s/ports/portgroups/","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9fd4d8723f14f2b16f516578aeb8fd9c13691c98","unresolved":false,"context_lines":[{"line_number":363,"context_line":"    def create_portgroup(self, values):"},{"line_number":364,"context_line":"        \"\"\"Create a new portgroup."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        :param values: Dict of values."},{"line_number":367,"context_line":"        \"\"\""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":22,"id":"da20952f_b5421267","line":366,"updated":"2015-09-09 21:41:18.000000000","message":"Would be nice to have a description of what kind of values can be in the dictionary","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9fd4d8723f14f2b16f516578aeb8fd9c13691c98","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        \"\"\"Create a new portgroup."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        :param values: Dict of values."},{"line_number":367,"context_line":"        \"\"\""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    @abc.abstractmethod"},{"line_number":370,"context_line":"    def update_portgroup(self, portgroup_id, values):"}],"source_content_type":"text/x-python","patch_set":22,"id":"da20952f_f5616a12","line":367,"updated":"2015-09-09 21:41:18.000000000","message":"Does this return a portgroup?","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9fd4d8723f14f2b16f516578aeb8fd9c13691c98","unresolved":false,"context_lines":[{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    @abc.abstractmethod"},{"line_number":370,"context_line":"    def update_portgroup(self, portgroup_id, values):"},{"line_number":371,"context_line":"        \"\"\"Update properties of an portgroup."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":374,"context_line":"        :param values: Dict of values to update."}],"source_content_type":"text/x-python","patch_set":22,"id":"da20952f_7588fac6","line":371,"updated":"2015-09-09 21:41:18.000000000","message":"s/an/a/","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9fd4d8723f14f2b16f516578aeb8fd9c13691c98","unresolved":false,"context_lines":[{"line_number":370,"context_line":"    def update_portgroup(self, portgroup_id, values):"},{"line_number":371,"context_line":"        \"\"\"Update properties of an portgroup."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":374,"context_line":"        :param values: Dict of values to update."},{"line_number":375,"context_line":"        :returns: A portgroup."},{"line_number":376,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"da20952f_b5b45282","line":373,"updated":"2015-09-09 21:41:18.000000000","message":"not UUID?","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9fd4d8723f14f2b16f516578aeb8fd9c13691c98","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        \"\"\"Update properties of an portgroup."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":374,"context_line":"        :param values: Dict of values to update."},{"line_number":375,"context_line":"        :returns: A portgroup."},{"line_number":376,"context_line":"        \"\"\""},{"line_number":377,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"da20952f_d545466f","line":374,"updated":"2015-09-09 21:41:18.000000000","message":"Would be nice to have a description of what kind of values can be in the dictionary","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9fd4d8723f14f2b16f516578aeb8fd9c13691c98","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    @abc.abstractmethod"},{"line_number":379,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":380,"context_line":"        \"\"\"Destroy an portgroup."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":383,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":22,"id":"da20952f_b56bf2f0","line":380,"updated":"2015-09-09 21:41:18.000000000","message":"s/an/a/","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9fd4d8723f14f2b16f516578aeb8fd9c13691c98","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":380,"context_line":"        \"\"\"Destroy an portgroup."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":383,"context_line":"        \"\"\""},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":22,"id":"da20952f_d56ea6ff","line":382,"updated":"2015-09-09 21:41:18.000000000","message":"not UUID?","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c54b512d4588f514a9ce79814acf27a634bb52c2","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                       result set."},{"line_number":272,"context_line":"        :param sort_key: Attribute by which results should be sorted"},{"line_number":273,"context_line":"        :param sort_dir: direction in which results should be sorted"},{"line_number":274,"context_line":"                         (asc, desc)"},{"line_number":275,"context_line":"        :returns: A list of ports."},{"line_number":276,"context_line":"        \"\"\""},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"7a2fa921_d38040fa","line":274,"updated":"2015-10-12 13:26:23.000000000","message":"nit: please be consistent in when you use capital letters in the beginning for the param description","commit_id":"ba3e72b7c8fc077c74c83b24ab18971f7b2500aa"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"ab542a16a232cc63727865ca0458a7185db6144d","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    def get_portgroup_by_id(self, portgroup_id):"},{"line_number":303,"context_line":"        \"\"\"Return a network portgroup representation."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        :param portgroup_id: The id of a portgroup."},{"line_number":306,"context_line":"        :returns: A portgroup."},{"line_number":307,"context_line":"        \"\"\""},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":40,"id":"1a26ad4f_6dd3fd04","line":305,"updated":"2015-11-02 14:56:21.000000000","message":"There are no :raises: in docstrings for this methods, but they raise PortgroupNotFound etc.,\n(like for *_port, the same no raises). Maybe better add :raises: here?","commit_id":"82cd21a3ff7c676614b2aa1835a43cad7d171e15"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                       result set."},{"line_number":272,"context_line":"        :param sort_key: Attribute by which results should be sorted"},{"line_number":273,"context_line":"        :param sort_dir: direction in which results should be sorted"},{"line_number":274,"context_line":"                         (asc, desc)"},{"line_number":275,"context_line":"        :returns: A list of ports."},{"line_number":276,"context_line":"        \"\"\""},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_8077bbd3","line":274,"updated":"2015-12-14 22:30:40.000000000","message":"from Dmitry, revision 35: nit: please be consistent in when you use capital letters in the beginning for the param description","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":271,"context_line":"                       result set."},{"line_number":272,"context_line":"        :param sort_key: Attribute by which results should be sorted"},{"line_number":273,"context_line":"        :param sort_dir: direction in which results should be sorted"},{"line_number":274,"context_line":"                         (asc, desc)"},{"line_number":275,"context_line":"        :returns: A list of ports."},{"line_number":276,"context_line":"        \"\"\""},{"line_number":277,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_03affe81","line":274,"in_reply_to":"5a710552_8077bbd3","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    def get_portgroup_by_id(self, portgroup_id):"},{"line_number":303,"context_line":"        \"\"\"Return a network portgroup representation."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        :param portgroup_id: The id of a portgroup."},{"line_number":306,"context_line":"        :returns: A portgroup."},{"line_number":307,"context_line":"        \"\"\""},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_1b949e35","line":305,"updated":"2015-12-14 22:30:40.000000000","message":"From Yuriy (revision 40): There are no :raises: in docstrings for this methods, but they raise PortgroupNotFound etc., (like for *_port, the same no raises). Maybe better add :raises: here?","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":302,"context_line":"    def get_portgroup_by_id(self, portgroup_id):"},{"line_number":303,"context_line":"        \"\"\"Return a network portgroup representation."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        :param portgroup_id: The id of a portgroup."},{"line_number":306,"context_line":"        :returns: A portgroup."},{"line_number":307,"context_line":"        \"\"\""},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_d24c6172","line":305,"in_reply_to":"5a710552_1b949e35","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                           sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":336,"context_line":"        \"\"\"Return a list of portgroups."},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        :param limit: Maximum number of ports to return."},{"line_number":339,"context_line":"        :param marker: the last item of the previous page; we return the next"},{"line_number":340,"context_line":"                       result set."},{"line_number":341,"context_line":"        :param sort_key: Attribute by which results should be sorted."}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_452005f8","line":338,"updated":"2015-12-14 22:30:40.000000000","message":"s/ports/portgroups/","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":335,"context_line":"                           sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":336,"context_line":"        \"\"\"Return a list of portgroups."},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        :param limit: Maximum number of ports to return."},{"line_number":339,"context_line":"        :param marker: the last item of the previous page; we return the next"},{"line_number":340,"context_line":"                       result set."},{"line_number":341,"context_line":"        :param sort_key: Attribute by which results should be sorted."}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_23ef9ab1","line":338,"in_reply_to":"5a710552_452005f8","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        \"\"\"List all the portgroups for a given node."},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        :param node_id: The integer node ID."},{"line_number":353,"context_line":"        :param limit: Maximum number of ports to return."},{"line_number":354,"context_line":"        :param marker: the last item of the previous page; we return the next"},{"line_number":355,"context_line":"                       result set."},{"line_number":356,"context_line":"        :param sort_key: Attribute by which results should be sorted"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_c582b5c8","line":353,"updated":"2015-12-14 22:30:40.000000000","message":"s/ports/portgroups/","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        \"\"\"List all the portgroups for a given node."},{"line_number":351,"context_line":""},{"line_number":352,"context_line":"        :param node_id: The integer node ID."},{"line_number":353,"context_line":"        :param limit: Maximum number of ports to return."},{"line_number":354,"context_line":"        :param marker: the last item of the previous page; we return the next"},{"line_number":355,"context_line":"                       result set."},{"line_number":356,"context_line":"        :param sort_key: Attribute by which results should be sorted"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_a3394a43","line":353,"in_reply_to":"5a710552_c582b5c8","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":363,"context_line":"    def create_portgroup(self, values):"},{"line_number":364,"context_line":"        \"\"\"Create a new portgroup."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        :param values: Dict of values."},{"line_number":367,"context_line":"        \"\"\""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_8554ad54","line":366,"updated":"2015-12-14 22:30:40.000000000","message":"Would be nice to have a description of what kind of values can be in the dictionary","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":363,"context_line":"    def create_portgroup(self, values):"},{"line_number":364,"context_line":"        \"\"\"Create a new portgroup."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        :param values: Dict of values."},{"line_number":367,"context_line":"        \"\"\""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_b27d15e9","line":366,"in_reply_to":"5a710552_8554ad54","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        \"\"\"Create a new portgroup."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        :param values: Dict of values."},{"line_number":367,"context_line":"        \"\"\""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    @abc.abstractmethod"},{"line_number":370,"context_line":"    def update_portgroup(self, portgroup_id, values):"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_25ccd934","line":367,"updated":"2015-12-14 22:30:40.000000000","message":"Does this return a portgroup?","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        \"\"\"Create a new portgroup."},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"        :param values: Dict of values."},{"line_number":367,"context_line":"        \"\"\""},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    @abc.abstractmethod"},{"line_number":370,"context_line":"    def update_portgroup(self, portgroup_id, values):"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_5284f1d2","line":367,"in_reply_to":"5a710552_25ccd934","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    @abc.abstractmethod"},{"line_number":370,"context_line":"    def update_portgroup(self, portgroup_id, values):"},{"line_number":371,"context_line":"        \"\"\"Update properties of an portgroup."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":374,"context_line":"        :param values: Dict of values to update."}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_85db4ded","line":371,"updated":"2015-12-14 22:30:40.000000000","message":"s/an/a/","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    @abc.abstractmethod"},{"line_number":370,"context_line":"    def update_portgroup(self, portgroup_id, values):"},{"line_number":371,"context_line":"        \"\"\"Update properties of an portgroup."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":374,"context_line":"        :param values: Dict of values to update."}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_c37a56f1","line":371,"in_reply_to":"5a710552_85db4ded","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":370,"context_line":"    def update_portgroup(self, portgroup_id, values):"},{"line_number":371,"context_line":"        \"\"\"Update properties of an portgroup."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":374,"context_line":"        :param values: Dict of values to update."},{"line_number":375,"context_line":"        :returns: A portgroup."},{"line_number":376,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_65e2e1a1","line":373,"updated":"2015-12-14 22:30:40.000000000","message":"not s/id/UUID/?","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":370,"context_line":"    def update_portgroup(self, portgroup_id, values):"},{"line_number":371,"context_line":"        \"\"\"Update properties of an portgroup."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":374,"context_line":"        :param values: Dict of values to update."},{"line_number":375,"context_line":"        :returns: A portgroup."},{"line_number":376,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_4356665d","line":373,"in_reply_to":"5a710552_65e2e1a1","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        \"\"\"Update properties of an portgroup."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":374,"context_line":"        :param values: Dict of values to update."},{"line_number":375,"context_line":"        :returns: A portgroup."},{"line_number":376,"context_line":"        \"\"\""},{"line_number":377,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_a5ff6933","line":374,"updated":"2015-12-14 22:30:40.000000000","message":"Would be nice to have a description of what kind of values can be in the dictionary","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        \"\"\"Update properties of an portgroup."},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":374,"context_line":"        :param values: Dict of values to update."},{"line_number":375,"context_line":"        :returns: A portgroup."},{"line_number":376,"context_line":"        \"\"\""},{"line_number":377,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_f254fd21","line":374,"in_reply_to":"5a710552_a5ff6933","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    @abc.abstractmethod"},{"line_number":379,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":380,"context_line":"        \"\"\"Destroy an portgroup."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":383,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_2565b944","line":380,"updated":"2015-12-14 22:30:40.000000000","message":"s/an/a/","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    @abc.abstractmethod"},{"line_number":379,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":380,"context_line":"        \"\"\"Destroy an portgroup."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":383,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_03e7feb0","line":380,"in_reply_to":"5a710552_2565b944","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":380,"context_line":"        \"\"\"Destroy an portgroup."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":383,"context_line":"        \"\"\""},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_259a9915","line":382,"updated":"2015-12-14 22:30:40.000000000","message":"not s/id/UUID/?","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":379,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":380,"context_line":"        \"\"\"Destroy an portgroup."},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"        :param portgroup_id: The id or MAC of a portgroup."},{"line_number":383,"context_line":"        \"\"\""},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_43042649","line":382,"in_reply_to":"5a710552_259a9915","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":16066,"name":"xiexs","email":"xiexs@cn.fujitsu.com","username":"simen"},"change_message_id":"e256db24b386f3147fedfd260ad0440fa52295da","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        :param marker: The last item of the previous page; we return the next"},{"line_number":344,"context_line":"                       result set."},{"line_number":345,"context_line":"        :param sort_key: Attribute by which results should be sorted."},{"line_number":346,"context_line":"        :param sort_dir: direction in which results should be sorted."},{"line_number":347,"context_line":"                         (asc, desc)"},{"line_number":348,"context_line":"        :returns: A list of portgroups."},{"line_number":349,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":51,"id":"da6ed579_d6168ea6","line":346,"range":{"start_line":346,"start_character":25,"end_line":346,"end_character":34},"updated":"2016-01-13 13:39:24.000000000","message":"s/direction/Direction, just for a unified comment.","commit_id":"2f11bd845feae79afffb509a6839e4a55208cae8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"60936886e7738648b8921e54c016f0215c7b959f","unresolved":false,"context_lines":[{"line_number":343,"context_line":"        :param marker: The last item of the previous page; we return the next"},{"line_number":344,"context_line":"                       result set."},{"line_number":345,"context_line":"        :param sort_key: Attribute by which results should be sorted."},{"line_number":346,"context_line":"        :param sort_dir: direction in which results should be sorted."},{"line_number":347,"context_line":"                         (asc, desc)"},{"line_number":348,"context_line":"        :returns: A list of portgroups."},{"line_number":349,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":51,"id":"da6ed579_0e363052","line":346,"range":{"start_line":346,"start_character":25,"end_line":346,"end_character":34},"in_reply_to":"da6ed579_d6168ea6","updated":"2016-01-13 23:22:22.000000000","message":"Done","commit_id":"2f11bd845feae79afffb509a6839e4a55208cae8"}],"ironic/db/sqlalchemy/alembic/versions/5ea1b0d310e_added_port_group_table_and_altered_ports.py":[{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"20c4728446adf0c8245c223452877d9ce5956a58","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    op.add_column(u\u0027ports\u0027, sa.Column(\u0027portgroup_id\u0027, sa.Integer(),"},{"line_number":50,"context_line":"                                      nullable\u003dTrue))"},{"line_number":51,"context_line":"    op.add_column(u\u0027ports\u0027, sa.Column(\u0027pxe_enabled\u0027, sa.Boolean(),"},{"line_number":52,"context_line":"                                      nullable\u003dTrue))"},{"line_number":53,"context_line":"    op.create_foreign_key(\u0027fk_portgroups_ports\u0027, \u0027ports\u0027, \u0027portgroups\u0027,"},{"line_number":54,"context_line":"                          [\u0027portgroup_id\u0027], [\u0027id\u0027])"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_cc4a8dc5","line":52,"updated":"2015-08-05 09:26:51.000000000","message":"According to the spec [1], \"Migration Value\" of \u0027pxe_enabled\u0027 is \"True\", so  \"default\u003dTrue\" must be correct instead of \"nullable\u003dTrue\", I believe.\n\n Field Name \tField Type \tMigration Value\n local_link_connection \tdict_or_none \tNone\n portgroup_id \tint_or_none \tNone\n pxe_enabled \tbool \tTrue\n\n [1] http://specs.openstack.org/openstack/ironic-specs/specs/liberty/ironic-ml2-integration.html","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"260cae935043fd1b8881e387a693e111d628aae5","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    op.add_column(u\u0027ports\u0027, sa.Column(\u0027portgroup_id\u0027, sa.Integer(),"},{"line_number":50,"context_line":"                                      nullable\u003dTrue))"},{"line_number":51,"context_line":"    op.add_column(u\u0027ports\u0027, sa.Column(\u0027pxe_enabled\u0027, sa.Boolean(),"},{"line_number":52,"context_line":"                                      nullable\u003dTrue))"},{"line_number":53,"context_line":"    op.create_foreign_key(\u0027fk_portgroups_ports\u0027, \u0027ports\u0027, \u0027portgroups\u0027,"},{"line_number":54,"context_line":"                          [\u0027portgroup_id\u0027], [\u0027id\u0027])"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_31d498bb","line":52,"in_reply_to":"1a4dcd0f_cc4a8dc5","updated":"2015-08-05 14:08:29.000000000","message":"+1, no need for this to be nullable, either. Good catch.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"a67aec309f506e5d77bbd8f22a02e26f9d3580cf","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    op.add_column(u\u0027ports\u0027, sa.Column(\u0027portgroup_id\u0027, sa.Integer(),"},{"line_number":50,"context_line":"                                      nullable\u003dTrue))"},{"line_number":51,"context_line":"    op.add_column(u\u0027ports\u0027, sa.Column(\u0027pxe_enabled\u0027, sa.Boolean(),"},{"line_number":52,"context_line":"                                      nullable\u003dTrue))"},{"line_number":53,"context_line":"    op.create_foreign_key(\u0027fk_portgroups_ports\u0027, \u0027ports\u0027, \u0027portgroups\u0027,"},{"line_number":54,"context_line":"                          [\u0027portgroup_id\u0027], [\u0027id\u0027])"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_af5585c2","line":52,"updated":"2015-08-06 02:37:52.000000000","message":"Carmelo,\n\nI\u0027m expecting some feedback here regarding the comment Jim and I made in Patch Set #6.","commit_id":"25ed9c09e8246230afd9dd236c564e81d1d0fb91"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"eedec12094c30a9402d56b91af0374637f355761","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    op.add_column(u\u0027ports\u0027, sa.Column(\u0027portgroup_id\u0027, sa.Integer(),"},{"line_number":50,"context_line":"                                      nullable\u003dTrue))"},{"line_number":51,"context_line":"    op.add_column(u\u0027ports\u0027, sa.Column(\u0027pxe_enabled\u0027, sa.Boolean(),"},{"line_number":52,"context_line":"                                      nullable\u003dTrue))"},{"line_number":53,"context_line":"    op.create_foreign_key(\u0027fk_portgroups_ports\u0027, \u0027ports\u0027, \u0027portgroups\u0027,"},{"line_number":54,"context_line":"                          [\u0027portgroup_id\u0027], [\u0027id\u0027])"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_43433f13","line":52,"in_reply_to":"1a4dcd0f_0a86d0da","updated":"2015-08-07 06:10:04.000000000","message":"Carmelo,\n\nI see. Yeah, it takes time to understand the complicated gerrit procedure :-)\n\nIn terms of the gate-ironic-pep8 error, you can verify locally by \u0027tox -epep8\u0027.\n\nhttp://docs.openstack.org/developer/ironic/dev/dev-quickstart.html\n\nBest regards,\nNaohiro","commit_id":"25ed9c09e8246230afd9dd236c564e81d1d0fb91"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"4f10ca483f29e9a1c4f3a7c766c700666444fec7","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    op.add_column(u\u0027ports\u0027, sa.Column(\u0027portgroup_id\u0027, sa.Integer(),"},{"line_number":50,"context_line":"                                      nullable\u003dTrue))"},{"line_number":51,"context_line":"    op.add_column(u\u0027ports\u0027, sa.Column(\u0027pxe_enabled\u0027, sa.Boolean(),"},{"line_number":52,"context_line":"                                      nullable\u003dTrue))"},{"line_number":53,"context_line":"    op.create_foreign_key(\u0027fk_portgroups_ports\u0027, \u0027ports\u0027, \u0027portgroups\u0027,"},{"line_number":54,"context_line":"                          [\u0027portgroup_id\u0027], [\u0027id\u0027])"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_0a86d0da","line":52,"in_reply_to":"1a4dcd0f_af5585c2","updated":"2015-08-06 15:21:24.000000000","message":"Naohiro,\nI just joined this project. My previous commit was to get me started on the system and check that things were working for me. We\u0027ll provide due feedback on those and other comments soon.","commit_id":"25ed9c09e8246230afd9dd236c564e81d1d0fb91"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"add1a6ad6257c24726fd2e6007ca716846f8967d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\"\"\"Added portgroups table and altered ports"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Revision ID: 5ea1b0d310e"},{"line_number":16,"context_line":"Revises: 789acc877671"},{"line_number":17,"context_line":"Create Date: 2015-06-30 14:14:26.972368"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"9a1a9d01_7316c9f2","line":16,"updated":"2015-09-28 08:12:45.000000000","message":"This is wrong.","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":10375,"name":"Om Kumar","email":"om.kumar@hpe.com","username":"lazy_prince"},"change_message_id":"4b2caeaedbc1a697f60a028ed62471deafbed788","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\"\"\"Added portgroups table and altered ports"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Revision ID: 5ea1b0d310e"},{"line_number":16,"context_line":"Revises: 789acc877671"},{"line_number":17,"context_line":"Create Date: 2015-06-30 14:14:26.972368"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":26,"id":"9a1a9d01_0925b0bf","line":16,"in_reply_to":"9a1a9d01_7316c9f2","updated":"2015-09-29 05:09:31.000000000","message":"Done","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"add1a6ad6257c24726fd2e6007ca716846f8967d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                    sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":40,"context_line":"                    sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":41,"context_line":"                    sa.UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_portgroups0uuid\u0027),"},{"line_number":42,"context_line":"                    sa.UniqueConstraint(\u0027address\u0027,"},{"line_number":43,"context_line":"                                        name\u003d\u0027uniq_portgroups0address\u0027),"},{"line_number":44,"context_line":"                    sa.UniqueConstraint(\u0027name\u0027, name\u003d\u0027uniq_portgroups0name\u0027),"},{"line_number":45,"context_line":"                    mysql_ENGINE\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a1a9d01_534aa5c6","line":42,"updated":"2015-09-28 08:12:45.000000000","message":"Question: Doesn\u0027t this mac address need to be unique across the ports table as well ?","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"dd1c0a2fd982f838cf39ededa6b6936c0ebb9a93","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                    sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":40,"context_line":"                    sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":41,"context_line":"                    sa.UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_portgroups0uuid\u0027),"},{"line_number":42,"context_line":"                    sa.UniqueConstraint(\u0027address\u0027,"},{"line_number":43,"context_line":"                                        name\u003d\u0027uniq_portgroups0address\u0027),"},{"line_number":44,"context_line":"                    sa.UniqueConstraint(\u0027name\u0027, name\u003d\u0027uniq_portgroups0name\u0027),"},{"line_number":45,"context_line":"                    mysql_ENGINE\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a26ad4f_9b9d81be","line":42,"in_reply_to":"3a29b11f_bbb9cf30","updated":"2015-11-02 06:20:17.000000000","message":"My vote is for the intermediate table to store the MAC address and enforce unique constraint on the mac address field.  No need of extra triggers when it can be solved in a simple way and no need to add extra code to handle it.","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"9243d4858fa79594bce97a7d4ed84d6284907f4e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                    sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":40,"context_line":"                    sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":41,"context_line":"                    sa.UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_portgroups0uuid\u0027),"},{"line_number":42,"context_line":"                    sa.UniqueConstraint(\u0027address\u0027,"},{"line_number":43,"context_line":"                                        name\u003d\u0027uniq_portgroups0address\u0027),"},{"line_number":44,"context_line":"                    sa.UniqueConstraint(\u0027name\u0027, name\u003d\u0027uniq_portgroups0name\u0027),"},{"line_number":45,"context_line":"                    mysql_ENGINE\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a29b11f_bbb9cf30","line":42,"in_reply_to":"9a1a9d01_534aa5c6","updated":"2015-10-19 10:15:49.000000000","message":"This is still in progress,  I think it is valid but I don\u0027t see a good way to enforce this. Do you know how it can be done?","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                    sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":40,"context_line":"                    sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":41,"context_line":"                    sa.UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_portgroups0uuid\u0027),"},{"line_number":42,"context_line":"                    sa.UniqueConstraint(\u0027address\u0027,"},{"line_number":43,"context_line":"                                        name\u003d\u0027uniq_portgroups0address\u0027),"},{"line_number":44,"context_line":"                    sa.UniqueConstraint(\u0027name\u0027, name\u003d\u0027uniq_portgroups0name\u0027),"},{"line_number":45,"context_line":"                    mysql_ENGINE\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_5bb6a63e","line":42,"updated":"2015-12-14 22:30:40.000000000","message":"Ramesh commented (revision 26) about whether the mac address needed to be unique across the ports table as well. He suggested \"My vote is for the intermediate table to store the MAC address and enforce unique constraint on the mac address field. No need of extra triggers when it can be solved in a simple way and no need to add extra code to handle it.\"\n\nI think we should consider this.","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                    sa.ForeignKeyConstraint([\u0027node_id\u0027], [\u0027nodes.id\u0027], ),"},{"line_number":40,"context_line":"                    sa.PrimaryKeyConstraint(\u0027id\u0027),"},{"line_number":41,"context_line":"                    sa.UniqueConstraint(\u0027uuid\u0027, name\u003d\u0027uniq_portgroups0uuid\u0027),"},{"line_number":42,"context_line":"                    sa.UniqueConstraint(\u0027address\u0027,"},{"line_number":43,"context_line":"                                        name\u003d\u0027uniq_portgroups0address\u0027),"},{"line_number":44,"context_line":"                    sa.UniqueConstraint(\u0027name\u0027, name\u003d\u0027uniq_portgroups0name\u0027),"},{"line_number":45,"context_line":"                    mysql_ENGINE\u003d\u0027InnoDB\u0027,"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_48a67e11","line":42,"in_reply_to":"5a710552_5bb6a63e","updated":"2015-12-17 09:05:26.000000000","message":"If not explicitly configured with ifconfig, the MAC address of the bonding device is taken from its first slave device.\nQuestion 8 from https://www.kernel.org/pub/linux/kernel/people/marcelo/linux-2.4/Documentation/networking/bonding.txt\nIt means that portgroup mac address shouldn\u0027t be unique across ports table.","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"004500a906b000f887485a355fc7bb67d62b1a13","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                          [\u0027portgroup_id\u0027], [\u0027id\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def downgrade():"},{"line_number":58,"context_line":"    op.drop_constraint(\u0027fk_portgroups_ports\u0027, \u0027ports\u0027, type_\u003d\u0027foreignkey\u0027)"},{"line_number":59,"context_line":"    op.drop_column(u\u0027ports\u0027, \u0027pxe_enabled\u0027)"},{"line_number":60,"context_line":"    op.drop_column(u\u0027ports\u0027, \u0027portgroup_id\u0027)"}],"source_content_type":"text/x-python","patch_set":46,"id":"fa69d971_2e29a1e6","line":57,"range":{"start_line":57,"start_character":4,"end_line":57,"end_character":13},"updated":"2016-01-05 09:06:02.000000000","message":"Pls remove this, as we are trying to remove downgrade support from migrations, and the openstack spec[0] proposed do not add future migrations with downgrade functions\n\n[0] https://github.com/openstack/openstack-specs/blob/master/specs/no-downward-sql-migration.rst","commit_id":"ea5f097ca85ecbb5a9915204006a01fbf602d3ba"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"319ec1a9f1c2f9524253306e87ae8b0880bb80c7","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                          [\u0027portgroup_id\u0027], [\u0027id\u0027])"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def downgrade():"},{"line_number":58,"context_line":"    op.drop_constraint(\u0027fk_portgroups_ports\u0027, \u0027ports\u0027, type_\u003d\u0027foreignkey\u0027)"},{"line_number":59,"context_line":"    op.drop_column(u\u0027ports\u0027, \u0027pxe_enabled\u0027)"},{"line_number":60,"context_line":"    op.drop_column(u\u0027ports\u0027, \u0027portgroup_id\u0027)"}],"source_content_type":"text/x-python","patch_set":46,"id":"fa69d971_b9f06ffe","line":57,"range":{"start_line":57,"start_character":4,"end_line":57,"end_character":13},"in_reply_to":"fa69d971_2e29a1e6","updated":"2016-01-05 17:47:28.000000000","message":"Done","commit_id":"ea5f097ca85ecbb5a9915204006a01fbf602d3ba"}],"ironic/db/sqlalchemy/api.py":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        return query.filter(models.Node.uuid \u003d\u003d value)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"def add_port_filter_by_portgroup(query, value):"},{"line_number":120,"context_line":"    if strutils.is_int_like(value):"},{"line_number":121,"context_line":"        return query.filter_by(portgroup_id\u003dvalue)"},{"line_number":122,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_59108201","line":119,"updated":"2015-08-05 07:06:16.000000000","message":"This is not used anywhere ??","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        return add_identity_filter(query, value)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"def add_portgroup_filter_by_node(query, value):"},{"line_number":145,"context_line":"    if strutils.is_int_like(value):"},{"line_number":146,"context_line":"        return query.filter_by(node_id\u003dvalue)"},{"line_number":147,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_59de4240","line":144,"updated":"2015-08-05 07:06:16.000000000","message":"Today we don\u0027t have a use case of getting a portgroup it by the node uuid, and so we don\u0027t actually need this method, instead we can just replace it inline by \n\n  query.filter_by(node_id\u003dvalue)","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"260cae935043fd1b8881e387a693e111d628aae5","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        return add_identity_filter(query, value)"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"def add_portgroup_filter_by_node(query, value):"},{"line_number":145,"context_line":"    if strutils.is_int_like(value):"},{"line_number":146,"context_line":"        return query.filter_by(node_id\u003dvalue)"},{"line_number":147,"context_line":"    else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_71c300ee","line":144,"in_reply_to":"1a4dcd0f_59de4240","updated":"2015-08-05 14:08:29.000000000","message":"I think the spec has an api endpoint for \"get portgroups by node uuid\"","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b42c61b0c044640cda9457bc3301b97afcd53544","unresolved":false,"context_lines":[{"line_number":355,"context_line":"            port_query \u003d add_port_filter_by_node(port_query, node_id)"},{"line_number":356,"context_line":"            port_query.delete()"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"            portgroup_query \u003d model_query(models.Portgroup)"},{"line_number":359,"context_line":"            portgroup_query \u003d add_portgroup_filter_by_node(portgroup_query,"},{"line_number":360,"context_line":"                                                           node_id)"},{"line_number":361,"context_line":"            portgroup_query.delete()"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_6d6f93c4","line":358,"updated":"2015-08-03 10:05:15.000000000","message":"This code (358-361) is not covered by unit test.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        return _paginate_query(models.Port, limit, marker,"},{"line_number":446,"context_line":"                               sort_key, sort_dir, query)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def get_ports_by_portgroup_id(self, portgroup_id, limit\u003dNone, marker\u003dNone,"},{"line_number":449,"context_line":"                                  sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":450,"context_line":"        query \u003d model_query(models.Port)"},{"line_number":451,"context_line":"        query \u003d query.filter_by(portgroup_id\u003dportgroup_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_59cba2a5","line":448,"updated":"2015-08-05 07:06:16.000000000","message":"Missing unit tests for this method.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"21fe86d5a7a5fe153e7d4a872d8fd4d1b3182c73","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        return _paginate_query(models.Port, limit, marker,"},{"line_number":446,"context_line":"                               sort_key, sort_dir, query)"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    def get_ports_by_portgroup_id(self, portgroup_id, limit\u003dNone, marker\u003dNone,"},{"line_number":449,"context_line":"                                  sort_key\u003dNone, sort_dir\u003dNone):"},{"line_number":450,"context_line":"        query \u003d model_query(models.Port)"},{"line_number":451,"context_line":"        query \u003d query.filter_by(portgroup_id\u003dportgroup_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_1390c9eb","line":448,"in_reply_to":"1a4dcd0f_59cba2a5","updated":"2015-08-11 12:27:50.000000000","message":"Done","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":495,"context_line":"            if count \u003d\u003d 0:"},{"line_number":496,"context_line":"                raise exception.PortNotFound(port\u003dport_id)"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def get_portgroup_by_id(self, portgroup_id):"},{"line_number":499,"context_line":"        query \u003d model_query(models.Portgroup).filter_by(id\u003dportgroup_id)"},{"line_number":500,"context_line":"        try:"},{"line_number":501,"context_line":"            return query.one()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_b92ae67c","line":498,"updated":"2015-08-05 07:06:16.000000000","message":"No negative test case for this method.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"21fe86d5a7a5fe153e7d4a872d8fd4d1b3182c73","unresolved":false,"context_lines":[{"line_number":495,"context_line":"            if count \u003d\u003d 0:"},{"line_number":496,"context_line":"                raise exception.PortNotFound(port\u003dport_id)"},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"    def get_portgroup_by_id(self, portgroup_id):"},{"line_number":499,"context_line":"        query \u003d model_query(models.Portgroup).filter_by(id\u003dportgroup_id)"},{"line_number":500,"context_line":"        try:"},{"line_number":501,"context_line":"            return query.one()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_b330f508","line":498,"in_reply_to":"1a4dcd0f_b92ae67c","updated":"2015-08-11 12:27:50.000000000","message":"Done","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":502,"context_line":"        except NoResultFound:"},{"line_number":503,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003dportgroup_id)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def get_portgroup_by_uuid(self, portgroup_uuid):"},{"line_number":506,"context_line":"        query \u003d model_query(models.Portgroup).filter_by(uuid\u003dportgroup_uuid)"},{"line_number":507,"context_line":"        try:"},{"line_number":508,"context_line":"            return query.one()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_5921629e","line":505,"updated":"2015-08-05 07:06:16.000000000","message":"No negative test case for this method.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"21fe86d5a7a5fe153e7d4a872d8fd4d1b3182c73","unresolved":false,"context_lines":[{"line_number":502,"context_line":"        except NoResultFound:"},{"line_number":503,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003dportgroup_id)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def get_portgroup_by_uuid(self, portgroup_uuid):"},{"line_number":506,"context_line":"        query \u003d model_query(models.Portgroup).filter_by(uuid\u003dportgroup_uuid)"},{"line_number":507,"context_line":"        try:"},{"line_number":508,"context_line":"            return query.one()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_ae73acb3","line":505,"in_reply_to":"1a4dcd0f_5921629e","updated":"2015-08-11 12:27:50.000000000","message":"Done","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        except NoResultFound:"},{"line_number":510,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003dportgroup_uuid)"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"    def get_portgroup_by_address(self, address):"},{"line_number":513,"context_line":"        query \u003d model_query(models.Portgroup).filter_by(address\u003daddress)"},{"line_number":514,"context_line":"        try:"},{"line_number":515,"context_line":"            return query.one()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_193c3ac7","line":512,"updated":"2015-08-05 07:06:16.000000000","message":"No negative test case for this method.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        except NoResultFound:"},{"line_number":517,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003daddress)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def get_portgroup_by_name(self, name):"},{"line_number":520,"context_line":"        query \u003d model_query(models.Portgroup).filter_by(name\u003dname)"},{"line_number":521,"context_line":"        try:"},{"line_number":522,"context_line":"            return query.one()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_d93572da","line":519,"updated":"2015-08-05 07:06:16.000000000","message":"No tests for this method.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"21fe86d5a7a5fe153e7d4a872d8fd4d1b3182c73","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        except NoResultFound:"},{"line_number":517,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003daddress)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"    def get_portgroup_by_name(self, name):"},{"line_number":520,"context_line":"        query \u003d model_query(models.Portgroup).filter_by(name\u003dname)"},{"line_number":521,"context_line":"        try:"},{"line_number":522,"context_line":"            return query.one()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_2e4b1c2d","line":519,"in_reply_to":"1a4dcd0f_d93572da","updated":"2015-08-11 12:27:50.000000000","message":"Done","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b42c61b0c044640cda9457bc3301b97afcd53544","unresolved":false,"context_lines":[{"line_number":564,"context_line":"                query \u003d add_portgroup_filter(query, portgroup_id)"},{"line_number":565,"context_line":"                ref \u003d query.one()"},{"line_number":566,"context_line":"                ref.update(values)"},{"line_number":567,"context_line":"                session.flush()"},{"line_number":568,"context_line":"        except NoResultFound:"},{"line_number":569,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003dportgroup_id)"},{"line_number":570,"context_line":"        except db_exc.DBDuplicateEntry as exc:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_2df66b8f","line":567,"updated":"2015-08-03 10:05:15.000000000","message":"Looks like this flush() not needed because we do out from session context manager.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8e83106ea911301d9732b8c9c49c7268c2764b45","unresolved":false,"context_lines":[{"line_number":564,"context_line":"                query \u003d add_portgroup_filter(query, portgroup_id)"},{"line_number":565,"context_line":"                ref \u003d query.one()"},{"line_number":566,"context_line":"                ref.update(values)"},{"line_number":567,"context_line":"                session.flush()"},{"line_number":568,"context_line":"        except NoResultFound:"},{"line_number":569,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003dportgroup_id)"},{"line_number":570,"context_line":"        except db_exc.DBDuplicateEntry as exc:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_f9d417be","line":567,"in_reply_to":"3a50d1a3_2df66b8f","updated":"2015-08-04 14:28:19.000000000","message":"Isn\u0027t it necessary to run the query and catch the possible failure cases below?","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"ca57138640d67b05f407e63de8605e2203bc36e6","unresolved":false,"context_lines":[{"line_number":564,"context_line":"                query \u003d add_portgroup_filter(query, portgroup_id)"},{"line_number":565,"context_line":"                ref \u003d query.one()"},{"line_number":566,"context_line":"                ref.update(values)"},{"line_number":567,"context_line":"                session.flush()"},{"line_number":568,"context_line":"        except NoResultFound:"},{"line_number":569,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003dportgroup_id)"},{"line_number":570,"context_line":"        except db_exc.DBDuplicateEntry as exc:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_cf1c7268","line":567,"in_reply_to":"3a50d1a3_2df66b8f","updated":"2015-08-12 15:30:03.000000000","message":"from our tests seems needed as changes don\u0027t get pushed therefore the following exceptions are not captured","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":569,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003dportgroup_id)"},{"line_number":570,"context_line":"        except db_exc.DBDuplicateEntry as exc:"},{"line_number":571,"context_line":"            if \u0027name\u0027 in exc.columns:"},{"line_number":572,"context_line":"                raise exception.DuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":573,"context_line":"            elif \u0027address\u0027 in exc.columns:"},{"line_number":574,"context_line":"                raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":575,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_99836a56","line":572,"updated":"2015-08-05 07:06:16.000000000","message":"Missing test case for this path.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"ca57138640d67b05f407e63de8605e2203bc36e6","unresolved":false,"context_lines":[{"line_number":569,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003dportgroup_id)"},{"line_number":570,"context_line":"        except db_exc.DBDuplicateEntry as exc:"},{"line_number":571,"context_line":"            if \u0027name\u0027 in exc.columns:"},{"line_number":572,"context_line":"                raise exception.DuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":573,"context_line":"            elif \u0027address\u0027 in exc.columns:"},{"line_number":574,"context_line":"                raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":575,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_20b3e09b","line":572,"in_reply_to":"1a4dcd0f_99836a56","updated":"2015-08-12 15:30:03.000000000","message":"Done. Added a test for name in test_update_portgroup","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b42c61b0c044640cda9457bc3301b97afcd53544","unresolved":false,"context_lines":[{"line_number":572,"context_line":"                raise exception.DuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":573,"context_line":"            elif \u0027address\u0027 in exc.columns:"},{"line_number":574,"context_line":"                raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":575,"context_line":"            else:"},{"line_number":576,"context_line":"                raise exc"},{"line_number":577,"context_line":"        return ref"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_cd734715","line":575,"updated":"2015-08-03 10:05:15.000000000","message":"Is another DBDuplicateEntry possible here? We should not raise db native exceptions from API in normal conditions.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"ca57138640d67b05f407e63de8605e2203bc36e6","unresolved":false,"context_lines":[{"line_number":572,"context_line":"                raise exception.DuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":573,"context_line":"            elif \u0027address\u0027 in exc.columns:"},{"line_number":574,"context_line":"                raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":575,"context_line":"            else:"},{"line_number":576,"context_line":"                raise exc"},{"line_number":577,"context_line":"        return ref"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_a0a7f04e","line":575,"in_reply_to":"1a4dcd0f_76eb0db1","updated":"2015-08-12 15:30:03.000000000","message":"Done","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":572,"context_line":"                raise exception.DuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":573,"context_line":"            elif \u0027address\u0027 in exc.columns:"},{"line_number":574,"context_line":"                raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":575,"context_line":"            else:"},{"line_number":576,"context_line":"                raise exc"},{"line_number":577,"context_line":"        return ref"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_76eb0db1","line":575,"in_reply_to":"1a4dcd0f_798fa7cc","updated":"2015-08-05 07:06:16.000000000","message":"I guess another DBDuplicateEntry  is not possible here unless there is a programming error.  +1 to wrapping it in IronicException","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8e83106ea911301d9732b8c9c49c7268c2764b45","unresolved":false,"context_lines":[{"line_number":572,"context_line":"                raise exception.DuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":573,"context_line":"            elif \u0027address\u0027 in exc.columns:"},{"line_number":574,"context_line":"                raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":575,"context_line":"            else:"},{"line_number":576,"context_line":"                raise exc"},{"line_number":577,"context_line":"        return ref"},{"line_number":578,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_798fa7cc","line":575,"in_reply_to":"3a50d1a3_cd734715","updated":"2015-08-04 14:28:19.000000000","message":"+1, I\u0027d rather raise an ironic exception here. Would PortgroupAlreadyExists be appropriate?","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b42c61b0c044640cda9457bc3301b97afcd53544","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        return ref"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":580,"context_line":"        def portgroup_not_empty(session):"},{"line_number":581,"context_line":"            \"\"\"Checks whether the portgroup does not have ports.\"\"\""},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"        with _session_for_write() as session:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_0ddccfe2","line":580,"updated":"2015-08-03 10:05:15.000000000","message":"Missing body of func, TODO?","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"ca57138640d67b05f407e63de8605e2203bc36e6","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        return ref"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":580,"context_line":"        def portgroup_not_empty(session):"},{"line_number":581,"context_line":"            \"\"\"Checks whether the portgroup does not have ports.\"\"\""},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"        with _session_for_write() as session:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_ca66d6ba","line":580,"in_reply_to":"1a4dcd0f_b95a0f4f","updated":"2015-08-12 15:30:03.000000000","message":"Done","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8e83106ea911301d9732b8c9c49c7268c2764b45","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        return ref"},{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":580,"context_line":"        def portgroup_not_empty(session):"},{"line_number":581,"context_line":"            \"\"\"Checks whether the portgroup does not have ports.\"\"\""},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"        with _session_for_write() as session:"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_b95a0f4f","line":580,"in_reply_to":"3a50d1a3_0ddccfe2","updated":"2015-08-04 14:28:19.000000000","message":"+1, I also assume there\u0027s no test coverage for this case, then.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"b27069ec6139828fdb07a93beeb50df4be95f018","unresolved":false,"context_lines":[{"line_number":499,"context_line":"        query \u003d model_query(models.Portgroup).filter_by(id\u003dportgroup_id)"},{"line_number":500,"context_line":"        try:"},{"line_number":501,"context_line":"            return query.one()"},{"line_number":502,"context_line":"        except NoResultFound:"},{"line_number":503,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003dportgroup_id)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def get_portgroup_by_uuid(self, portgroup_uuid):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_18b5af7c","line":502,"updated":"2015-08-06 21:16:49.000000000","message":"Are there any test cases to test these exception paths?","commit_id":"3942c6183c42b5b2f237133ade74e92346696a33"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"81d1d8a086620e02ff1264ca589ef8b807bbac2a","unresolved":false,"context_lines":[{"line_number":499,"context_line":"        query \u003d model_query(models.Portgroup).filter_by(id\u003dportgroup_id)"},{"line_number":500,"context_line":"        try:"},{"line_number":501,"context_line":"            return query.one()"},{"line_number":502,"context_line":"        except NoResultFound:"},{"line_number":503,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003dportgroup_id)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def get_portgroup_by_uuid(self, portgroup_uuid):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_1abe7fff","line":502,"in_reply_to":"1a4dcd0f_18b5af7c","updated":"2015-08-10 20:51:06.000000000","message":"Done. There is now, test_get_portgroup_by_id_that_does_not_exist","commit_id":"3942c6183c42b5b2f237133ade74e92346696a33"},{"author":{"_account_id":6685,"name":"Baodong (Robert) Li","email":"baoli@cisco.com","username":"baoli"},"change_message_id":"a3b8eaa1177aa4e95834648233c23ad68b6f9a4a","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":578,"context_line":"                    raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":579,"context_line":"                else:"},{"line_number":580,"context_line":"                    raise exception.PortgroupAlreadyExists(uuid\u003dvalues[\u0027uuid\u0027])"},{"line_number":581,"context_line":"            return ref"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def destroy_portgroup(self, portgroup_id):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_393d19dd","line":580,"updated":"2015-08-31 19:55:15.000000000","message":"exception handling for DBDuplicateEntry seems to be identical with that in create_portgroup except for added \"else:\" here. would be nice not to duplicate.","commit_id":"b3a675c323c768617b41eb29092aeb34c771d88d"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"add1a6ad6257c24726fd2e6007ca716846f8967d","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        except NoResultFound:"},{"line_number":521,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003daddress)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def get_portgroup_by_name(self, name):"},{"line_number":524,"context_line":"        query \u003d model_query(models.Portgroup).filter_by(name\u003dname)"},{"line_number":525,"context_line":"        try:"},{"line_number":526,"context_line":"            return query.one()"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a1a9d01_8e26d4cc","line":523,"updated":"2015-09-28 08:12:45.000000000","message":"Missing test cases for this method.","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"9243d4858fa79594bce97a7d4ed84d6284907f4e","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        except NoResultFound:"},{"line_number":521,"context_line":"            raise exception.PortgroupNotFound(portgroup\u003daddress)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":"    def get_portgroup_by_name(self, name):"},{"line_number":524,"context_line":"        query \u003d model_query(models.Portgroup).filter_by(name\u003dname)"},{"line_number":525,"context_line":"        try:"},{"line_number":526,"context_line":"            return query.one()"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a29b11f_1ad32b3a","line":523,"in_reply_to":"9a1a9d01_8e26d4cc","updated":"2015-10-19 10:15:49.000000000","message":"Done","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"add1a6ad6257c24726fd2e6007ca716846f8967d","unresolved":false,"context_lines":[{"line_number":551,"context_line":"                session.flush()"},{"line_number":552,"context_line":"            except db_exc.DBDuplicateEntry as exc:"},{"line_number":553,"context_line":"                if \u0027name\u0027 in exc.columns:"},{"line_number":554,"context_line":"                    raise exception.DuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":555,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":556,"context_line":"                    raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":557,"context_line":"                raise exception.PortgroupAlreadyExists(uuid\u003dvalues[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a1a9d01_13050d79","line":554,"updated":"2015-09-28 08:12:45.000000000","message":"This doesn\u0027t seem to be right. It will print an exception like\n\n  \"A node with name \u003c\u003e already exists.\"\n\nI think we need to define a new exception or somehow modify and do s/node/portgroup/ in that exception message.\n\nAlso missing test cases for this code path.","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"9243d4858fa79594bce97a7d4ed84d6284907f4e","unresolved":false,"context_lines":[{"line_number":551,"context_line":"                session.flush()"},{"line_number":552,"context_line":"            except db_exc.DBDuplicateEntry as exc:"},{"line_number":553,"context_line":"                if \u0027name\u0027 in exc.columns:"},{"line_number":554,"context_line":"                    raise exception.DuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":555,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":556,"context_line":"                    raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":557,"context_line":"                raise exception.PortgroupAlreadyExists(uuid\u003dvalues[\u0027uuid\u0027])"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a29b11f_dadcd348","line":554,"in_reply_to":"9a1a9d01_13050d79","updated":"2015-10-19 10:15:49.000000000","message":"Done","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"add1a6ad6257c24726fd2e6007ca716846f8967d","unresolved":false,"context_lines":[{"line_number":553,"context_line":"                if \u0027name\u0027 in exc.columns:"},{"line_number":554,"context_line":"                    raise exception.DuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":555,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":556,"context_line":"                    raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":557,"context_line":"                raise exception.PortgroupAlreadyExists(uuid\u003dvalues[\u0027uuid\u0027])"},{"line_number":558,"context_line":"            return portgroup"},{"line_number":559,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"9a1a9d01_d3355546","line":556,"updated":"2015-09-28 08:12:45.000000000","message":"This one too.\n\n  A port with MAC address %(mac)s already exists.\n\nI think based on DB, we know that another portgroup with the same MAC exists, not another port.","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"9243d4858fa79594bce97a7d4ed84d6284907f4e","unresolved":false,"context_lines":[{"line_number":553,"context_line":"                if \u0027name\u0027 in exc.columns:"},{"line_number":554,"context_line":"                    raise exception.DuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":555,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":556,"context_line":"                    raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":557,"context_line":"                raise exception.PortgroupAlreadyExists(uuid\u003dvalues[\u0027uuid\u0027])"},{"line_number":558,"context_line":"            return portgroup"},{"line_number":559,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"3a29b11f_9ae73b12","line":556,"in_reply_to":"9a1a9d01_d3355546","updated":"2015-10-19 10:15:49.000000000","message":"Done","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"add1a6ad6257c24726fd2e6007ca716846f8967d","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                raise exception.PortgroupNotFound(portgroup\u003dportgroup_id)"},{"line_number":574,"context_line":"            except db_exc.DBDuplicateEntry as exc:"},{"line_number":575,"context_line":"                if \u0027name\u0027 in exc.columns:"},{"line_number":576,"context_line":"                    raise exception.DuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":577,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":578,"context_line":"                    raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":579,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a1a9d01_b3222100","line":576,"updated":"2015-09-28 08:12:45.000000000","message":"Ditto with name and port.","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"9243d4858fa79594bce97a7d4ed84d6284907f4e","unresolved":false,"context_lines":[{"line_number":573,"context_line":"                raise exception.PortgroupNotFound(portgroup\u003dportgroup_id)"},{"line_number":574,"context_line":"            except db_exc.DBDuplicateEntry as exc:"},{"line_number":575,"context_line":"                if \u0027name\u0027 in exc.columns:"},{"line_number":576,"context_line":"                    raise exception.DuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":577,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":578,"context_line":"                    raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":579,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a29b11f_bae4770d","line":576,"in_reply_to":"9a1a9d01_b3222100","updated":"2015-10-19 10:15:49.000000000","message":"Done","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"add1a6ad6257c24726fd2e6007ca716846f8967d","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":578,"context_line":"                    raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":579,"context_line":"                else:"},{"line_number":580,"context_line":"                    raise exception.PortgroupAlreadyExists(uuid\u003dvalues[\u0027uuid\u0027])"},{"line_number":581,"context_line":"            return ref"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def destroy_portgroup(self, portgroup_id):"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a1a9d01_731c89c1","line":580,"updated":"2015-09-28 08:12:45.000000000","message":"I think this is not required.  We can\u0027t change UUID anyway.","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"9243d4858fa79594bce97a7d4ed84d6284907f4e","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":578,"context_line":"                    raise exception.MACAlreadyExists(mac\u003dvalues[\u0027address\u0027])"},{"line_number":579,"context_line":"                else:"},{"line_number":580,"context_line":"                    raise exception.PortgroupAlreadyExists(uuid\u003dvalues[\u0027uuid\u0027])"},{"line_number":581,"context_line":"            return ref"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def destroy_portgroup(self, portgroup_id):"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a29b11f_5af1a3cc","line":580,"in_reply_to":"9a1a9d01_731c89c1","updated":"2015-10-19 10:15:49.000000000","message":"Done","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c54b512d4588f514a9ce79814acf27a634bb52c2","unresolved":false,"context_lines":[{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":584,"context_line":"        def portgroup_not_empty(session):"},{"line_number":585,"context_line":"            \"\"\"Checks whether the portgroup does not have ports.\"\"\""},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"            query \u003d model_query(models.Port)"},{"line_number":588,"context_line":"            query \u003d add_port_filter_by_portgroup(query, portgroup_id)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7a2fa921_338c1435","line":585,"updated":"2015-10-12 13:26:23.000000000","message":"not sure why you need a separate function for this","commit_id":"ba3e72b7c8fc077c74c83b24ab18971f7b2500aa"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"7c371bf0a4519890a9fe0df19384f192fef97476","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    \"\"\""},{"line_number":130,"context_line":"    if utils.is_valid_mac(value):"},{"line_number":131,"context_line":"        return query.filter_by(address\u003dvalue)"},{"line_number":132,"context_line":"    else:"},{"line_number":133,"context_line":"        return add_identity_filter(query, value)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"fa80f949_dded45f0","line":132,"updated":"2015-12-01 22:19:01.000000000","message":"else not needed, since return is done in line above.\n\nif utils.is_valid_mac(value):\n    return query.filter_by(address\u003dvalue)\nreturn add_identity_filter(query, value)","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    \"\"\""},{"line_number":130,"context_line":"    if utils.is_valid_mac(value):"},{"line_number":131,"context_line":"        return query.filter_by(address\u003dvalue)"},{"line_number":132,"context_line":"    else:"},{"line_number":133,"context_line":"        return add_identity_filter(query, value)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_a86282ab","line":132,"in_reply_to":"fa80f949_dded45f0","updated":"2015-12-17 09:05:26.000000000","message":"Filters results by address, if supplied value is a valid MAC address. Otherwise attempts to filter results by identity.","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    \"\"\""},{"line_number":130,"context_line":"    if utils.is_valid_mac(value):"},{"line_number":131,"context_line":"        return query.filter_by(address\u003dvalue)"},{"line_number":132,"context_line":"    else:"},{"line_number":133,"context_line":"        return add_identity_filter(query, value)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_80ca5b4e","line":132,"in_reply_to":"fa80f949_dded45f0","updated":"2015-12-14 22:30:40.000000000","message":"That\u0027s true, but if you look at the rest of this file, this follows a similar pattern so I\u0027d just leave it as-is so it is consistent.","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":584,"context_line":"        def portgroup_not_empty(session):"},{"line_number":585,"context_line":"            \"\"\"Checks whether the portgroup does not have ports.\"\"\""},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"            query \u003d model_query(models.Port)"},{"line_number":588,"context_line":"            query \u003d add_port_filter_by_portgroup(query, portgroup_id)"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_e016bf54","line":585,"updated":"2015-12-14 22:30:40.000000000","message":"not sure why you need a separate function for this","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":584,"context_line":"        def portgroup_not_empty(session):"},{"line_number":585,"context_line":"            \"\"\"Checks whether the portgroup does not have ports.\"\"\""},{"line_number":586,"context_line":""},{"line_number":587,"context_line":"            query \u003d model_query(models.Port)"},{"line_number":588,"context_line":"            query \u003d add_port_filter_by_portgroup(query, portgroup_id)"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_4b0d188f","line":585,"in_reply_to":"5a710552_e016bf54","updated":"2015-12-17 09:05:26.000000000","message":"I think separate function were created for better reading.","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"43ba0983613c4d36dffc088e9271b32aa8cef0e3","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                    raise exception.PortgroupDuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":578,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":579,"context_line":"                    raise exception.PortgroupMACAlreadyExists("},{"line_number":580,"context_line":"                        mac\u003dvalues[\u0027address\u0027])"},{"line_number":581,"context_line":"            return ref"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def destroy_portgroup(self, portgroup_id):"}],"source_content_type":"text/x-python","patch_set":57,"id":"5a5ae5dd_22bd7c68","line":580,"updated":"2016-02-04 04:38:43.000000000","message":"What happens if there is no \u0027address\u0027 in exc.columns?\n\nDoes the exception go uncaught?\n\nIf this is an issue, I\u0027m fine with it being a follow-up patch.","commit_id":"c3dd7e915e68d7806b6a8440426953578cd31cf3"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2d0135df7117758a608521a093870b72566f5ad8","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                    raise exception.PortgroupDuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":578,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":579,"context_line":"                    raise exception.PortgroupMACAlreadyExists("},{"line_number":580,"context_line":"                        mac\u003dvalues[\u0027address\u0027])"},{"line_number":581,"context_line":"            return ref"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def destroy_portgroup(self, portgroup_id):"}],"source_content_type":"text/x-python","patch_set":57,"id":"5a5ae5dd_a9ab7a88","line":580,"in_reply_to":"5a5ae5dd_22bd7c68","updated":"2016-02-04 13:25:14.000000000","message":"According to schema we have 3 uniq fields (uuid, address and name). https://review.openstack.org/#/c/206232/57/ironic/db/sqlalchemy/models.py\n\nWe cannot update uuid, please have look at line 562.\nSo db_exc.DBDuplicateEntry might occur only in 2 cases:\nduplicate name and address.","commit_id":"c3dd7e915e68d7806b6a8440426953578cd31cf3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"c6387dc801dda25b64b272639d56d87168a0d317","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                    raise exception.PortgroupDuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":578,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":579,"context_line":"                    raise exception.PortgroupMACAlreadyExists("},{"line_number":580,"context_line":"                        mac\u003dvalues[\u0027address\u0027])"},{"line_number":581,"context_line":"            return ref"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def destroy_portgroup(self, portgroup_id):"}],"source_content_type":"text/x-python","patch_set":57,"id":"5a5ae5dd_8e09cddf","line":580,"in_reply_to":"5a5ae5dd_899d505b","updated":"2016-02-04 19:59:45.000000000","message":"Oops, I missed this. John is right (and if in doubt, take a look at existing code to see if there is a consistent way that we are handling things).\n\nIf you look at update_node(), it\u0027ll raise the exception, line 387.\n\nIf you do another revision, it\u0027d be good to update this. Otherwise, make the change in a separate patch. Thanks.","commit_id":"c3dd7e915e68d7806b6a8440426953578cd31cf3"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"e8e7ec7c8d1339e3a4e9ec1b3ebfc2061e093f2d","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                    raise exception.PortgroupDuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":578,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":579,"context_line":"                    raise exception.PortgroupMACAlreadyExists("},{"line_number":580,"context_line":"                        mac\u003dvalues[\u0027address\u0027])"},{"line_number":581,"context_line":"            return ref"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def destroy_portgroup(self, portgroup_id):"}],"source_content_type":"text/x-python","patch_set":57,"id":"5a5ae5dd_94780091","line":580,"in_reply_to":"5a5ae5dd_8e09cddf","updated":"2016-02-04 20:41:50.000000000","message":"Done","commit_id":"c3dd7e915e68d7806b6a8440426953578cd31cf3"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"675761985fa7cb0429c29223d60b6156f4f40f9c","unresolved":false,"context_lines":[{"line_number":577,"context_line":"                    raise exception.PortgroupDuplicateName(name\u003dvalues[\u0027name\u0027])"},{"line_number":578,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":579,"context_line":"                    raise exception.PortgroupMACAlreadyExists("},{"line_number":580,"context_line":"                        mac\u003dvalues[\u0027address\u0027])"},{"line_number":581,"context_line":"            return ref"},{"line_number":582,"context_line":""},{"line_number":583,"context_line":"    def destroy_portgroup(self, portgroup_id):"}],"source_content_type":"text/x-python","patch_set":57,"id":"5a5ae5dd_899d505b","line":580,"in_reply_to":"5a5ae5dd_a9ab7a88","updated":"2016-02-04 17:09:04.000000000","message":"I think for defensive purposes a generic raise after if/elif block would be good. So just in case the exception gets raised. If what you say is true it will never be reached.\n\nBut as I said I would think it would be a follow-on patch.","commit_id":"c3dd7e915e68d7806b6a8440426953578cd31cf3"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"0c848c35504b0ef7b3c3223e8e07b10b37e2f8cf","unresolved":false,"context_lines":[{"line_number":578,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":579,"context_line":"                    raise exception.PortgroupMACAlreadyExists("},{"line_number":580,"context_line":"                        mac\u003dvalues[\u0027address\u0027])"},{"line_number":581,"context_line":"                else:"},{"line_number":582,"context_line":"                    raise exc"},{"line_number":583,"context_line":"            return ref"},{"line_number":584,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"5a5ae5dd_99c32f89","line":581,"updated":"2016-02-05 17:08:33.000000000","message":"You could just do\n\n raise\n\ninstead of L581-582\n\nAlso, this will raise non-ironic exception so I\u0027m not sure if it\u0027s good.","commit_id":"1740ab79708fa6578db7bf4c607ab046b7fc215d"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4af4fc59ca5bf85af521ae70fc2c040265a965f7","unresolved":false,"context_lines":[{"line_number":578,"context_line":"                elif \u0027address\u0027 in exc.columns:"},{"line_number":579,"context_line":"                    raise exception.PortgroupMACAlreadyExists("},{"line_number":580,"context_line":"                        mac\u003dvalues[\u0027address\u0027])"},{"line_number":581,"context_line":"                else:"},{"line_number":582,"context_line":"                    raise exc"},{"line_number":583,"context_line":"            return ref"},{"line_number":584,"context_line":""}],"source_content_type":"text/x-python","patch_set":58,"id":"5a5ae5dd_8d1bd772","line":581,"in_reply_to":"5a5ae5dd_99c32f89","updated":"2016-02-05 23:27:51.000000000","message":"It is similar to pre-existing code on L387. Not that it means it is best solution :)\n\nI think raising a non-Ironic exception is better than letting the exception go by uncaught.\n\nBut making this better, if desired, would be for a follow-up patch.","commit_id":"1740ab79708fa6578db7bf4c607ab046b7fc215d"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"0c848c35504b0ef7b3c3223e8e07b10b37e2f8cf","unresolved":false,"context_lines":[{"line_number":583,"context_line":"            return ref"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":586,"context_line":"        def portgroup_not_empty(session):"},{"line_number":587,"context_line":"            \"\"\"Checks whether the portgroup does not have ports.\"\"\""},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"            query \u003d model_query(models.Port)"}],"source_content_type":"text/x-python","patch_set":58,"id":"5a5ae5dd_42e5bc35","line":586,"updated":"2016-02-05 17:08:33.000000000","message":"session is not used anywhere in this function so can be removed. Also, I don\u0027t know why you need it as a separate function.","commit_id":"1740ab79708fa6578db7bf4c607ab046b7fc215d"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4af4fc59ca5bf85af521ae70fc2c040265a965f7","unresolved":false,"context_lines":[{"line_number":583,"context_line":"            return ref"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    def destroy_portgroup(self, portgroup_id):"},{"line_number":586,"context_line":"        def portgroup_not_empty(session):"},{"line_number":587,"context_line":"            \"\"\"Checks whether the portgroup does not have ports.\"\"\""},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"            query \u003d model_query(models.Port)"}],"source_content_type":"text/x-python","patch_set":58,"id":"5a5ae5dd_4d287f86","line":586,"in_reply_to":"5a5ae5dd_42e5bc35","updated":"2016-02-05 23:27:51.000000000","message":"+1 for fixing this in follow-up patch","commit_id":"1740ab79708fa6578db7bf4c607ab046b7fc215d"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"0c848c35504b0ef7b3c3223e8e07b10b37e2f8cf","unresolved":false,"context_lines":[{"line_number":595,"context_line":"            if portgroup_not_empty(session):"},{"line_number":596,"context_line":"                raise exception.PortgroupNotEmpty(portgroup\u003dportgroup_id)"},{"line_number":597,"context_line":""},{"line_number":598,"context_line":"            query \u003d model_query(models.Portgroup, session\u003dsession)"},{"line_number":599,"context_line":"            query \u003d add_identity_filter(query, portgroup_id)"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"            count \u003d query.delete()"}],"source_content_type":"text/x-python","patch_set":58,"id":"5a5ae5dd_62b9d814","line":598,"updated":"2016-02-05 17:08:33.000000000","message":"IIUC there is no point in passing session to model_query, it will be just ignored.","commit_id":"1740ab79708fa6578db7bf4c607ab046b7fc215d"}],"ironic/db/sqlalchemy/models.py":[{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"20c4728446adf0c8245c223452877d9ce5956a58","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    address \u003d Column(String(18))"},{"line_number":202,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":203,"context_line":"    extra \u003d Column(JSONEncodedDict)"},{"line_number":204,"context_line":"    local_link_connection \u003d Column(JSONEncodedDict)"},{"line_number":205,"context_line":"    portgroup_id \u003d Column(Integer, ForeignKey(\u0027portgroups.id\u0027), nullable\u003dTrue)"},{"line_number":206,"context_line":"    pxe_enabled \u003d Column(Boolean, default\u003dTrue)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_4c7d1d6d","line":204,"updated":"2015-08-05 09:26:51.000000000","message":"Isn\u0027t it necessary to add \u0027nullable\u003dTrue\u0027?\n\nBecause spec [1] says \"Field Type\" is \"dict_or_none\".\n\n Field Name \tField Type \tMigration Value\n local_link_connection \tdict_or_none \tNone\n\n [1] http://specs.openstack.org/openstack/ironic-specs/specs/liberty/ironic-ml2-integration.html","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"260cae935043fd1b8881e387a693e111d628aae5","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    address \u003d Column(String(18))"},{"line_number":202,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":203,"context_line":"    extra \u003d Column(JSONEncodedDict)"},{"line_number":204,"context_line":"    local_link_connection \u003d Column(JSONEncodedDict)"},{"line_number":205,"context_line":"    portgroup_id \u003d Column(Integer, ForeignKey(\u0027portgroups.id\u0027), nullable\u003dTrue)"},{"line_number":206,"context_line":"    pxe_enabled \u003d Column(Boolean, default\u003dTrue)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_511a847e","line":204,"in_reply_to":"1a4dcd0f_4c7d1d6d","updated":"2015-08-05 14:08:29.000000000","message":"I think I\u0027d prefer making this not nullable, and the default as \"{}\". Either works though.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"21fe86d5a7a5fe153e7d4a872d8fd4d1b3182c73","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    address \u003d Column(String(18))"},{"line_number":202,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":203,"context_line":"    extra \u003d Column(JSONEncodedDict)"},{"line_number":204,"context_line":"    local_link_connection \u003d Column(JSONEncodedDict)"},{"line_number":205,"context_line":"    portgroup_id \u003d Column(Integer, ForeignKey(\u0027portgroups.id\u0027), nullable\u003dTrue)"},{"line_number":206,"context_line":"    pxe_enabled \u003d Column(Boolean, default\u003dTrue)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_a87cf720","line":204,"in_reply_to":"1a4dcd0f_511a847e","updated":"2015-08-11 12:27:50.000000000","message":"Done","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"20c4728446adf0c8245c223452877d9ce5956a58","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":221,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":222,"context_line":"    address \u003d Column(String(18))"},{"line_number":223,"context_line":"    extra \u003d Column(JSONEncodedDict)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_0c74f565","line":223,"updated":"2015-08-05 09:26:51.000000000","message":"According the spec [1], it seems \u0027uuid\u0027, \u0027address\u0027 and \u0027extra\u0027 fields also require \u0027nullable\u003dTrue\u0027. \n\n Field Name \tField Type\n id \tint\n uuid \tstr_or_none\n name \tstr_or_none\n node_id \tint_or_none\n address \tstr_or_none\n extra \tdict_or_none\n created_at \tdatetime_or_str_or_none\n updated_at \tdatetime_or_str_or_none\n\n\n [1] http://specs.openstack.org/openstack/ironic-specs/specs/liberty/ironic-ml2-integration.html","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"21fe86d5a7a5fe153e7d4a872d8fd4d1b3182c73","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":221,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":222,"context_line":"    address \u003d Column(String(18))"},{"line_number":223,"context_line":"    extra \u003d Column(JSONEncodedDict)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_48153399","line":223,"in_reply_to":"1a4dcd0f_0b54ae1e","updated":"2015-08-11 12:27:50.000000000","message":"Done","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"260cae935043fd1b8881e387a693e111d628aae5","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":221,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":222,"context_line":"    address \u003d Column(String(18))"},{"line_number":223,"context_line":"    extra \u003d Column(JSONEncodedDict)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_342326a9","line":223,"in_reply_to":"1a4dcd0f_0c74f565","updated":"2015-08-05 14:08:29.000000000","message":"UUID should never be null, same for address, I think.\n\nFor extra, I think I\u0027d prefer making this not nullable, and the default as \"{}\". Either works though.\n\nWe can always update the spec :)","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"21fe86d5a7a5fe153e7d4a872d8fd4d1b3182c73","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":221,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":222,"context_line":"    address \u003d Column(String(18))"},{"line_number":223,"context_line":"    extra \u003d Column(JSONEncodedDict)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_080f2b89","line":223,"in_reply_to":"1a4dcd0f_342326a9","updated":"2015-08-11 12:27:50.000000000","message":"Done","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"20aded992911456b2d42ad0a92b13fb940c87e3a","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":221,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":222,"context_line":"    address \u003d Column(String(18))"},{"line_number":223,"context_line":"    extra \u003d Column(JSONEncodedDict)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_0b54ae1e","line":223,"in_reply_to":"1a4dcd0f_342326a9","updated":"2015-08-06 02:19:50.000000000","message":"Jim, Laura,\n\nI submitted a patch to revise \u0027uuid\u0027 and \u0027address\u0027 constraint. Please review it if you have time.\n\nhttps://review.openstack.org/#/c/209729/\n\nThanks.\nNaohiro.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"a67aec309f506e5d77bbd8f22a02e26f9d3580cf","unresolved":false,"context_lines":[{"line_number":201,"context_line":"    address \u003d Column(String(18))"},{"line_number":202,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":203,"context_line":"    extra \u003d Column(JSONEncodedDict)"},{"line_number":204,"context_line":"    local_link_connection \u003d Column(JSONEncodedDict)"},{"line_number":205,"context_line":"    portgroup_id \u003d Column(Integer, ForeignKey(\u0027portgroups.id\u0027), nullable\u003dTrue)"},{"line_number":206,"context_line":"    pxe_enabled \u003d Column(Boolean, default\u003dTrue)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_afc7c596","line":204,"updated":"2015-08-06 02:37:52.000000000","message":"Carmelo,\n\nI\u0027m expecting some feedback here regarding the comment Jim and I made in Patch Set #6.\n\nI\u0027m both fine either \u0027nullable\u003dTrue\u0027 or  \"default\u003d{}\".","commit_id":"25ed9c09e8246230afd9dd236c564e81d1d0fb91"},{"author":{"_account_id":13719,"name":"Naohiro Tamura","email":"naohirot.openstack@gmail.com","username":"nao"},"change_message_id":"a67aec309f506e5d77bbd8f22a02e26f9d3580cf","unresolved":false,"context_lines":[{"line_number":220,"context_line":"    name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":221,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":222,"context_line":"    address \u003d Column(String(18))"},{"line_number":223,"context_line":"    extra \u003d Column(JSONEncodedDict)"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a4dcd0f_6f4d3d3d","line":223,"updated":"2015-08-06 02:37:52.000000000","message":"Carmelo,\n\nI\u0027m expecting some feedback here regarding the comment about \u0027extra\u0027 Jim and I made in Patch Set #6.\n\nI\u0027m both fine either \u0027nullable\u003dTrue\u0027 or  \"default\u003d{}\".","commit_id":"25ed9c09e8246230afd9dd236c564e81d1d0fb91"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9fd4d8723f14f2b16f516578aeb8fd9c13691c98","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    address \u003d Column(String(18))"},{"line_number":166,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":167,"context_line":"    extra \u003d Column(db_types.JsonEncodedDict)"},{"line_number":168,"context_line":"    local_link_connection \u003d Column(db_types.JsonEncodedDict, default\u003d{})"},{"line_number":169,"context_line":"    portgroup_id \u003d Column(Integer, ForeignKey(\u0027portgroups.id\u0027), nullable\u003dTrue)"},{"line_number":170,"context_line":"    pxe_enabled \u003d Column(Boolean, default\u003dTrue)"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"da20952f_75dc7a74","line":168,"updated":"2015-09-09 21:41:18.000000000","message":"we didn\u0027t specify default\u003d{} for other columns of this type; do we need to that here? (Just for consistency.)","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"805039da765880affbe97e6885e40823f76eedbf","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    address \u003d Column(String(18))"},{"line_number":166,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":167,"context_line":"    extra \u003d Column(db_types.JsonEncodedDict)"},{"line_number":168,"context_line":"    local_link_connection \u003d Column(db_types.JsonEncodedDict, default\u003d{})"},{"line_number":169,"context_line":"    portgroup_id \u003d Column(Integer, ForeignKey(\u0027portgroups.id\u0027), nullable\u003dTrue)"},{"line_number":170,"context_line":"    pxe_enabled \u003d Column(Boolean, default\u003dTrue)"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"ba8a016a_0b03e774","line":168,"in_reply_to":"da20952f_75dc7a74","updated":"2015-11-16 15:14:48.000000000","message":"Diff viewable at\nhttps://github.com/yhvh/ironic/commit/687fc10035dd81075d21ddea99201134a0b6415b","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9fd4d8723f14f2b16f516578aeb8fd9c13691c98","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":185,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":186,"context_line":"    address \u003d Column(String(18))"},{"line_number":187,"context_line":"    extra \u003d Column(db_types.JsonEncodedDict, default\u003d{})"}],"source_content_type":"text/x-python","patch_set":22,"id":"da20952f_d5b546ed","line":187,"updated":"2015-09-09 21:41:18.000000000","message":"ditto","commit_id":"e4a45f16a03a9de235ce74a790e4aacd1408809b"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c54b512d4588f514a9ce79814acf27a634bb52c2","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    address \u003d Column(String(18))"},{"line_number":166,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":167,"context_line":"    extra \u003d Column(db_types.JsonEncodedDict)"},{"line_number":168,"context_line":"    local_link_connection \u003d Column(db_types.JsonEncodedDict, default\u003d{})"},{"line_number":169,"context_line":"    portgroup_id \u003d Column(Integer, ForeignKey(\u0027portgroups.id\u0027), nullable\u003dTrue)"},{"line_number":170,"context_line":"    pxe_enabled \u003d Column(Boolean, default\u003dTrue)"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"7a2fa921_739b6c73","line":168,"updated":"2015-10-12 13:26:23.000000000","message":"\u0027default\u0027 is redundant, {} is already the default for a JsonEncodedDict","commit_id":"ba3e72b7c8fc077c74c83b24ab18971f7b2500aa"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"6df38f67e30dad7881557f379d887f1af3caacfa","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    address \u003d Column(String(18))"},{"line_number":166,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":167,"context_line":"    extra \u003d Column(db_types.JsonEncodedDict)"},{"line_number":168,"context_line":"    local_link_connection \u003d Column(db_types.JsonEncodedDict, default\u003d{})"},{"line_number":169,"context_line":"    portgroup_id \u003d Column(Integer, ForeignKey(\u0027portgroups.id\u0027), nullable\u003dTrue)"},{"line_number":170,"context_line":"    pxe_enabled \u003d Column(Boolean, default\u003dTrue)"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"ba8a016a_a82501c3","line":168,"in_reply_to":"7a2fa921_739b6c73","updated":"2015-11-16 15:15:52.000000000","message":"Diff can be viewed temporarily here:\nhttps://github.com/yhvh/ironic/commit/687fc10035dd81075d21ddea99201134a0b6415b","commit_id":"ba3e72b7c8fc077c74c83b24ab18971f7b2500aa"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c54b512d4588f514a9ce79814acf27a634bb52c2","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":185,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":186,"context_line":"    address \u003d Column(String(18))"},{"line_number":187,"context_line":"    extra \u003d Column(db_types.JsonEncodedDict, default\u003d{})"}],"source_content_type":"text/x-python","patch_set":35,"id":"7a2fa921_13879813","line":187,"updated":"2015-10-12 13:26:23.000000000","message":"ditto","commit_id":"ba3e72b7c8fc077c74c83b24ab18971f7b2500aa"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    address \u003d Column(String(18))"},{"line_number":166,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":167,"context_line":"    extra \u003d Column(db_types.JsonEncodedDict)"},{"line_number":168,"context_line":"    local_link_connection \u003d Column(db_types.JsonEncodedDict, default\u003d{})"},{"line_number":169,"context_line":"    portgroup_id \u003d Column(Integer, ForeignKey(\u0027portgroups.id\u0027), nullable\u003dTrue)"},{"line_number":170,"context_line":"    pxe_enabled \u003d Column(Boolean, default\u003dTrue)"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_60bbaf0f","line":168,"updated":"2015-12-14 22:30:40.000000000","message":"Both Dmitry (rev 35) and I (rev 22) commented on this: \u0027default\u0027 is redundant, {} is already the default for a JsonEncodedDict. Also, we don\u0027t do this for others like \u0027extra\u0027, so it is inconsistent.","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":165,"context_line":"    address \u003d Column(String(18))"},{"line_number":166,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":167,"context_line":"    extra \u003d Column(db_types.JsonEncodedDict)"},{"line_number":168,"context_line":"    local_link_connection \u003d Column(db_types.JsonEncodedDict, default\u003d{})"},{"line_number":169,"context_line":"    portgroup_id \u003d Column(Integer, ForeignKey(\u0027portgroups.id\u0027), nullable\u003dTrue)"},{"line_number":170,"context_line":"    pxe_enabled \u003d Column(Boolean, default\u003dTrue)"},{"line_number":171,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_66ffeb67","line":168,"in_reply_to":"5a710552_60bbaf0f","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ff9545df513e4f0d28e01242f54d3eff3a534cce","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":185,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":186,"context_line":"    address \u003d Column(String(18))"},{"line_number":187,"context_line":"    extra \u003d Column(db_types.JsonEncodedDict, default\u003d{})"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"class NodeTag(Base):"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_203cc792","line":187,"updated":"2015-12-14 22:30:40.000000000","message":"ditto","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    name \u003d Column(String(255), nullable\u003dTrue)"},{"line_number":185,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":186,"context_line":"    address \u003d Column(String(18))"},{"line_number":187,"context_line":"    extra \u003d Column(db_types.JsonEncodedDict, default\u003d{})"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"class NodeTag(Base):"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_26fa4376","line":187,"in_reply_to":"5a710552_203cc792","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"}],"ironic/tests/api/utils.py":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"add1a6ad6257c24726fd2e6007ca716846f8967d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    port \u003d utils.get_test_port(**kw)"},{"line_number":104,"context_line":"    # node_id is not part of the API object"},{"line_number":105,"context_line":"    port.pop(\u0027node_id\u0027)"},{"line_number":106,"context_line":"    # Remove for now to silence unit tests"},{"line_number":107,"context_line":"    port.pop(\u0027local_link_connection\u0027)"},{"line_number":108,"context_line":"    port.pop(\u0027pxe_enabled\u0027)"},{"line_number":109,"context_line":"    # portgroup_id is not part of the API object"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a1a9d01_d39f9501","line":106,"updated":"2015-09-28 08:12:45.000000000","message":"nit: May be worth making it a TODO note.  I assume this is to be removed after your patch series is merged.","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"9243d4858fa79594bce97a7d4ed84d6284907f4e","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    port \u003d utils.get_test_port(**kw)"},{"line_number":104,"context_line":"    # node_id is not part of the API object"},{"line_number":105,"context_line":"    port.pop(\u0027node_id\u0027)"},{"line_number":106,"context_line":"    # Remove for now to silence unit tests"},{"line_number":107,"context_line":"    port.pop(\u0027local_link_connection\u0027)"},{"line_number":108,"context_line":"    port.pop(\u0027pxe_enabled\u0027)"},{"line_number":109,"context_line":"    # portgroup_id is not part of the API object"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a29b11f_bacb1772","line":106,"in_reply_to":"9a1a9d01_d39f9501","updated":"2015-10-19 10:15:49.000000000","message":"This is removed in a patch before the end of this patch series.","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"}],"ironic/tests/db/sqlalchemy/test_migrations.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"b42c61b0c044640cda9457bc3301b97afcd53544","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        node \u003d nodes.select(nodes.c.uuid \u003d\u003d uuid).execute().first()"},{"line_number":385,"context_line":"        self.assertEqual(bigstring, node[\u0027name\u0027])"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def _check_5ea1b0d310e(self, engine, data):"},{"line_number":388,"context_line":"        ports \u003d db_utils.get_table(engine, \u0027ports\u0027)"},{"line_number":389,"context_line":"        col_names \u003d [column.name for column in ports.c]"},{"line_number":390,"context_line":"        self.assertIn(\u0027pxe_enabled\u0027, col_names)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_93ff9c00","line":387,"updated":"2015-08-03 10:05:15.000000000","message":"Please add test that \u0027portgroups\u0027 table is created.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8e83106ea911301d9732b8c9c49c7268c2764b45","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        node \u003d nodes.select(nodes.c.uuid \u003d\u003d uuid).execute().first()"},{"line_number":385,"context_line":"        self.assertEqual(bigstring, node[\u0027name\u0027])"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def _check_5ea1b0d310e(self, engine, data):"},{"line_number":388,"context_line":"        ports \u003d db_utils.get_table(engine, \u0027ports\u0027)"},{"line_number":389,"context_line":"        col_names \u003d [column.name for column in ports.c]"},{"line_number":390,"context_line":"        self.assertIn(\u0027pxe_enabled\u0027, col_names)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_9c42a13d","line":387,"in_reply_to":"3a50d1a3_93ff9c00","updated":"2015-08-04 14:28:19.000000000","message":"+1","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"1e64bd6f651fd12b2aeef861ab3b9544f161dbec","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        node \u003d nodes.select(nodes.c.uuid \u003d\u003d uuid).execute().first()"},{"line_number":385,"context_line":"        self.assertEqual(bigstring, node[\u0027name\u0027])"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def _check_5ea1b0d310e(self, engine, data):"},{"line_number":388,"context_line":"        ports \u003d db_utils.get_table(engine, \u0027ports\u0027)"},{"line_number":389,"context_line":"        col_names \u003d [column.name for column in ports.c]"},{"line_number":390,"context_line":"        self.assertIn(\u0027pxe_enabled\u0027, col_names)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_332d0aa8","line":387,"updated":"2015-08-13 13:29:14.000000000","message":"Please add test that \u0027portgroups\u0027 table is created.","commit_id":"484b898211d327cc38fdc4f8452a0afbb9e41b95"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"4d54b3ba3eb8ae5bac0d415b6ebc6d2bc8d05d90","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        node \u003d nodes.select(nodes.c.uuid \u003d\u003d uuid).execute().first()"},{"line_number":385,"context_line":"        self.assertEqual(bigstring, node[\u0027name\u0027])"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def _check_5ea1b0d310e(self, engine, data):"},{"line_number":388,"context_line":"        ports \u003d db_utils.get_table(engine, \u0027ports\u0027)"},{"line_number":389,"context_line":"        col_names \u003d [column.name for column in ports.c]"},{"line_number":390,"context_line":"        self.assertIn(\u0027pxe_enabled\u0027, col_names)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a4dcd0f_c43df4de","line":387,"in_reply_to":"1a4dcd0f_332d0aa8","updated":"2015-08-13 17:13:54.000000000","message":"Done, thanks","commit_id":"484b898211d327cc38fdc4f8452a0afbb9e41b95"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"c642e1bbf1eca1058f51cc562bdffdcf4fbd4499","unresolved":false,"context_lines":[{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def _check_5ea1b0d310e(self, engine, data):"},{"line_number":388,"context_line":"        # TODO: For now, commenting it out to keep ci pleased."},{"line_number":389,"context_line":"        # portgroup \u003d db_utils.get_table(engine, \u0027portgroups\u0027)"},{"line_number":390,"context_line":"        ports \u003d db_utils.get_table(engine, \u0027ports\u0027)"},{"line_number":391,"context_line":"        col_names \u003d [column.name for column in ports.c]"},{"line_number":392,"context_line":"        self.assertIn(\u0027pxe_enabled\u0027, col_names)"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a4dcd0f_cd0dd536","line":389,"updated":"2015-08-14 20:33:13.000000000","message":"Can we add some asserts to make sure the right columns etc exist in this table?","commit_id":"a9cf317ee27a8c16980fc5d117dfbf93fef4f07e"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"c642e1bbf1eca1058f51cc562bdffdcf4fbd4499","unresolved":false,"context_lines":[{"line_number":391,"context_line":"        col_names \u003d [column.name for column in ports.c]"},{"line_number":392,"context_line":"        self.assertIn(\u0027pxe_enabled\u0027, col_names)"},{"line_number":393,"context_line":"        self.assertIn(\u0027portgroup_id\u0027, col_names)"},{"line_number":394,"context_line":"        self.assertIn(\u0027local_link_connection\u0027, col_names)"},{"line_number":395,"context_line":"        self.assertIsInstance(ports.c.portgroup_id.type,"},{"line_number":396,"context_line":"                              sqlalchemy.types.Integer)"},{"line_number":397,"context_line":"        # in some backends bool type is integer"}],"source_content_type":"text/x-python","patch_set":19,"id":"1a4dcd0f_ad3969da","line":394,"updated":"2015-08-14 20:33:13.000000000","message":"I think we should create a port before doing the migration, and then ensure these new field are set to the correct default.","commit_id":"a9cf317ee27a8c16980fc5d117dfbf93fef4f07e"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"add1a6ad6257c24726fd2e6007ca716846f8967d","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        # in some backends bool type is integer"},{"line_number":432,"context_line":"        self.assertTrue(isinstance(ports.c.pxe_enabled.type,"},{"line_number":433,"context_line":"                                   sqlalchemy.types.Boolean) or"},{"line_number":434,"context_line":"                        isinstance(ports.c.pxe_enabled.type,"},{"line_number":435,"context_line":"                                   sqlalchemy.types.Integer))"},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"    def test_upgrade_and_version(self):"}],"source_content_type":"text/x-python","patch_set":26,"id":"9a1a9d01_f3b9797a","line":434,"updated":"2015-09-28 08:12:45.000000000","message":"This is strange.  Didn\u0027t we define pxe_enabled as a boolean in models.py ? When does it fail ?","commit_id":"16612bc2ba3f03527935808d303566ee98bc96cf"}],"ironic/tests/db/test_portgroups.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8e83106ea911301d9732b8c9c49c7268c2764b45","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual(sorted(uuids), res_uuids)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":71,"context_line":"                          self.dbapi.get_portgroup_list, sort_key\u003d\u0027foo\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_get_portgroups_by_node_id(self):"},{"line_number":74,"context_line":"        res \u003d self.dbapi.get_portgroups_by_node_id(self.node.id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_3ca58db4","line":71,"updated":"2015-08-04 14:28:19.000000000","message":"Should we also have a test with a valid sort_key? (is there a valid sort_key?)","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"260cae935043fd1b8881e387a693e111d628aae5","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual(sorted(uuids), res_uuids)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":71,"context_line":"                          self.dbapi.get_portgroup_list, sort_key\u003d\u0027foo\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_get_portgroups_by_node_id(self):"},{"line_number":74,"context_line":"        res \u003d self.dbapi.get_portgroups_by_node_id(self.node.id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_f4405e36","line":71,"in_reply_to":"1a4dcd0f_1943da43","updated":"2015-08-05 14:08:29.000000000","message":"Oops, you\u0027re right. Both in the same test case confused me :)","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        self.assertEqual(sorted(uuids), res_uuids)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"},{"line_number":71,"context_line":"                          self.dbapi.get_portgroup_list, sort_key\u003d\u0027foo\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_get_portgroups_by_node_id(self):"},{"line_number":74,"context_line":"        res \u003d self.dbapi.get_portgroups_by_node_id(self.node.id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_1943da43","line":71,"in_reply_to":"1a4dcd0f_3ca58db4","updated":"2015-08-05 07:06:16.000000000","message":"Didn\u0027t we are already test sorting by uuid above ? \n\nI think the test for invalid sort key ought to be a separate test case.","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"b4971dd66a75e01ae309c307b588f3380e538b53","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_destroy_portgroup(self):"},{"line_number":81,"context_line":"        self.dbapi.destroy_portgroup(self.portgroup.id)"},{"line_number":82,"context_line":"        self.assertRaises(exception.PortgroupNotFound,"},{"line_number":83,"context_line":"                          self.dbapi.destroy_portgroup, self.portgroup.id)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def test_update_portgroup(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_7980de46","line":82,"updated":"2015-08-05 07:06:16.000000000","message":"Better if the negative test case was a separate test case. Also need to test with:\n\n  self.dbapi.destroy_portgroup(self.portgroup.uuid)","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"43f39522882286d9dec443395d10983fbc80310c","unresolved":false,"context_lines":[{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_destroy_portgroup(self):"},{"line_number":81,"context_line":"        self.dbapi.destroy_portgroup(self.portgroup.id)"},{"line_number":82,"context_line":"        self.assertRaises(exception.PortgroupNotFound,"},{"line_number":83,"context_line":"                          self.dbapi.destroy_portgroup, self.portgroup.id)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def test_update_portgroup(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_17626c0a","line":82,"in_reply_to":"1a4dcd0f_7980de46","updated":"2015-08-06 16:19:55.000000000","message":"Done","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8e83106ea911301d9732b8c9c49c7268c2764b45","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def test_update_portgroup(self):"},{"line_number":86,"context_line":"        old_address \u003d self.portgroup.address"},{"line_number":87,"context_line":"        new_address \u003d \u0027ff.ee.dd.cc.bb.aa\u0027"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        self.assertNotEqual(old_address, new_address)"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_1cde9111","line":87,"updated":"2015-08-04 14:28:19.000000000","message":"Can we make this \u0027ff:ee:dd:cc:bb:aa\u0027 to make it \"look\" right, even though we don\u0027t validate the MAC address at this layer?","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"3a93582e1c3048cf7f3f43b17cce40f241adf5bd","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def test_update_portgroup(self):"},{"line_number":86,"context_line":"        old_address \u003d self.portgroup.address"},{"line_number":87,"context_line":"        new_address \u003d \u0027ff.ee.dd.cc.bb.aa\u0027"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        self.assertNotEqual(old_address, new_address)"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_0870460a","line":87,"in_reply_to":"1a4dcd0f_1cde9111","updated":"2015-08-06 15:21:07.000000000","message":"Done","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8e83106ea911301d9732b8c9c49c7268c2764b45","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def test_update_portgroup_duplicated_address(self):"},{"line_number":101,"context_line":"        address1 \u003d self.portgroup.address"},{"line_number":102,"context_line":"        address2 \u003d \u0027aa-bb-cc-11-22-33\u0027"},{"line_number":103,"context_line":"        portgroup2 \u003d db_utils.create_test_portgroup("},{"line_number":104,"context_line":"            uuid\u003duuidutils.generate_uuid(),"},{"line_number":105,"context_line":"            node_id\u003dself.node.id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_fc38853f","line":102,"updated":"2015-08-04 14:28:19.000000000","message":"Ditto for a valid mac","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"3a93582e1c3048cf7f3f43b17cce40f241adf5bd","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def test_update_portgroup_duplicated_address(self):"},{"line_number":101,"context_line":"        address1 \u003d self.portgroup.address"},{"line_number":102,"context_line":"        address2 \u003d \u0027aa-bb-cc-11-22-33\u0027"},{"line_number":103,"context_line":"        portgroup2 \u003d db_utils.create_test_portgroup("},{"line_number":104,"context_line":"            uuid\u003duuidutils.generate_uuid(),"},{"line_number":105,"context_line":"            node_id\u003dself.node.id,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_8862163d","line":102,"in_reply_to":"1a4dcd0f_fc38853f","updated":"2015-08-06 15:21:07.000000000","message":"Done","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"8e83106ea911301d9732b8c9c49c7268c2764b45","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                          db_utils.create_test_portgroup,"},{"line_number":121,"context_line":"                          uuid\u003dself.portgroup.uuid,"},{"line_number":122,"context_line":"                          node_id\u003dself.node.id,"},{"line_number":123,"context_line":"                          address\u003d\u0027aa-bb-cc-33-11-22\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_7c4555b1","line":123,"updated":"2015-08-04 14:28:19.000000000","message":"Ditto for a valid mac","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12366,"name":"Carmelo Ragusa","email":"carmelo.ragusa@sap.com","username":"ragmel"},"change_message_id":"3a93582e1c3048cf7f3f43b17cce40f241adf5bd","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                          db_utils.create_test_portgroup,"},{"line_number":121,"context_line":"                          uuid\u003dself.portgroup.uuid,"},{"line_number":122,"context_line":"                          node_id\u003dself.node.id,"},{"line_number":123,"context_line":"                          address\u003d\u0027aa-bb-cc-33-11-22\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_685d4a78","line":123,"in_reply_to":"1a4dcd0f_7c4555b1","updated":"2015-08-06 15:21:07.000000000","message":"Done","commit_id":"071b05fef9fc5a6ebe9cf813bd72890b58b80ebc"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"a68e58ef351eb44e30cc76b25b466c2cf468bb6b","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self.assertRaises(exception.PortgroupNotEmpty,"},{"line_number":110,"context_line":"                          self.dbapi.destroy_portgroup, self.portgroup.id)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def test_update_portgroup(self):"},{"line_number":113,"context_line":"        old_address \u003d self.portgroup.address"},{"line_number":114,"context_line":"        new_address \u003d \u0027ff:ee:dd:cc:bb:aa\u0027"},{"line_number":115,"context_line":"        self.assertNotEqual(old_address, new_address)"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa1b9901_852b2c94","line":112,"updated":"2015-08-18 13:55:02.000000000","message":"Missing tests for updating by uuid and mac","commit_id":"a9cf317ee27a8c16980fc5d117dfbf93fef4f07e"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"90d3bac6de832e8c82c1332358af8a09695c8650","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        self.assertRaises(exception.PortgroupNotEmpty,"},{"line_number":110,"context_line":"                          self.dbapi.destroy_portgroup, self.portgroup.id)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def test_update_portgroup(self):"},{"line_number":113,"context_line":"        old_address \u003d self.portgroup.address"},{"line_number":114,"context_line":"        new_address \u003d \u0027ff:ee:dd:cc:bb:aa\u0027"},{"line_number":115,"context_line":"        self.assertNotEqual(old_address, new_address)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ba8a016a_6b34f3dd","line":112,"in_reply_to":"fa1b9901_852b2c94","updated":"2015-11-16 15:13:01.000000000","message":"Diff can be viewed temporarily at\nhttps://github.com/yhvh/ironic/commit/70188936182fb0a37806122be97e39da2c4da867","commit_id":"a9cf317ee27a8c16980fc5d117dfbf93fef4f07e"}],"ironic/tests/db/utils.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"b27069ec6139828fdb07a93beeb50df4be95f018","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        \u0027created_at\u0027: kw.get(\u0027created_at\u0027),"},{"line_number":255,"context_line":"        \u0027updated_at\u0027: kw.get(\u0027updated_at\u0027),"},{"line_number":256,"context_line":"        \u0027local_link_connection\u0027: kw.get(\u0027local_link_connection\u0027, {}),"},{"line_number":257,"context_line":"        \u0027portgroup_id\u0027: kw.get(\u0027portgroup_id\u0027, None),"},{"line_number":258,"context_line":"        \u0027pxe_enabled\u0027: kw.get(\u0027pxe_enabled\u0027, True),"},{"line_number":259,"context_line":"    }"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_98f1bf97","line":257,"updated":"2015-08-06 21:16:49.000000000","message":"nit: \u0027None\u0027 is not needed","commit_id":"3942c6183c42b5b2f237133ade74e92346696a33"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"81d1d8a086620e02ff1264ca589ef8b807bbac2a","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        \u0027created_at\u0027: kw.get(\u0027created_at\u0027),"},{"line_number":255,"context_line":"        \u0027updated_at\u0027: kw.get(\u0027updated_at\u0027),"},{"line_number":256,"context_line":"        \u0027local_link_connection\u0027: kw.get(\u0027local_link_connection\u0027, {}),"},{"line_number":257,"context_line":"        \u0027portgroup_id\u0027: kw.get(\u0027portgroup_id\u0027, None),"},{"line_number":258,"context_line":"        \u0027pxe_enabled\u0027: kw.get(\u0027pxe_enabled\u0027, True),"},{"line_number":259,"context_line":"    }"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_ba7e6b68","line":257,"in_reply_to":"1a4dcd0f_98f1bf97","updated":"2015-08-10 20:51:06.000000000","message":"Done","commit_id":"3942c6183c42b5b2f237133ade74e92346696a33"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"b27069ec6139828fdb07a93beeb50df4be95f018","unresolved":false,"context_lines":[{"line_number":327,"context_line":"    return {"},{"line_number":328,"context_line":"        \u0027id\u0027: kw.get(\u0027id\u0027, 654),"},{"line_number":329,"context_line":"        \u0027uuid\u0027: kw.get(\u0027uuid\u0027, \u00276eb02b44-18a3-4659-8c0b-8d2802581ae4\u0027),"},{"line_number":330,"context_line":"        \u0027name\u0027: kw.get(\u0027name\u0027, None),"},{"line_number":331,"context_line":"        \u0027node_id\u0027: kw.get(\u0027node_id\u0027, 123),"},{"line_number":332,"context_line":"        \u0027address\u0027: kw.get(\u0027address\u0027, \u002752:54:00:cf:2d:31\u0027),"},{"line_number":333,"context_line":"        \u0027extra\u0027: kw.get(\u0027extra\u0027, {}),"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_d8d427ed","line":330,"updated":"2015-08-06 21:16:49.000000000","message":"nit: \u0027None\u0027 is not needed","commit_id":"3942c6183c42b5b2f237133ade74e92346696a33"},{"author":{"_account_id":17465,"name":"William Stevenson","email":"will.stevenson@sap.com","username":"yhvh"},"change_message_id":"81d1d8a086620e02ff1264ca589ef8b807bbac2a","unresolved":false,"context_lines":[{"line_number":327,"context_line":"    return {"},{"line_number":328,"context_line":"        \u0027id\u0027: kw.get(\u0027id\u0027, 654),"},{"line_number":329,"context_line":"        \u0027uuid\u0027: kw.get(\u0027uuid\u0027, \u00276eb02b44-18a3-4659-8c0b-8d2802581ae4\u0027),"},{"line_number":330,"context_line":"        \u0027name\u0027: kw.get(\u0027name\u0027, None),"},{"line_number":331,"context_line":"        \u0027node_id\u0027: kw.get(\u0027node_id\u0027, 123),"},{"line_number":332,"context_line":"        \u0027address\u0027: kw.get(\u0027address\u0027, \u002752:54:00:cf:2d:31\u0027),"},{"line_number":333,"context_line":"        \u0027extra\u0027: kw.get(\u0027extra\u0027, {}),"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_5a964795","line":330,"in_reply_to":"1a4dcd0f_d8d427ed","updated":"2015-08-10 20:51:06.000000000","message":"Done","commit_id":"3942c6183c42b5b2f237133ade74e92346696a33"}],"ironic/tests/unit/api/utils.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"4758ad40abad95710c6843e7d2ab6bddeadebe3b","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    port \u003d utils.get_test_port(**kw)"},{"line_number":104,"context_line":"    # node_id is not part of the API object"},{"line_number":105,"context_line":"    port.pop(\u0027node_id\u0027)"},{"line_number":106,"context_line":"    # Remove for now to silence unit tests"},{"line_number":107,"context_line":"    port.pop(\u0027local_link_connection\u0027)"},{"line_number":108,"context_line":"    port.pop(\u0027pxe_enabled\u0027)"},{"line_number":109,"context_line":"    # portgroup_id is not part of the API object"}],"source_content_type":"text/x-python","patch_set":46,"id":"fa69d971_3a29f137","line":106,"updated":"2016-01-04 21:55:49.000000000","message":"Not the best comment, what is \u0027for now\u0027 supposed to mean. a NOTE or TODO would be useful. I\u0027ll assume it will be addressed before the last patch in this series :)","commit_id":"ea5f097ca85ecbb5a9915204006a01fbf602d3ba"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"319ec1a9f1c2f9524253306e87ae8b0880bb80c7","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    port \u003d utils.get_test_port(**kw)"},{"line_number":104,"context_line":"    # node_id is not part of the API object"},{"line_number":105,"context_line":"    port.pop(\u0027node_id\u0027)"},{"line_number":106,"context_line":"    # Remove for now to silence unit tests"},{"line_number":107,"context_line":"    port.pop(\u0027local_link_connection\u0027)"},{"line_number":108,"context_line":"    port.pop(\u0027pxe_enabled\u0027)"},{"line_number":109,"context_line":"    # portgroup_id is not part of the API object"}],"source_content_type":"text/x-python","patch_set":46,"id":"fa69d971_564900b6","line":106,"in_reply_to":"fa69d971_3a29f137","updated":"2016-01-05 17:47:28.000000000","message":"Done","commit_id":"ea5f097ca85ecbb5a9915204006a01fbf602d3ba"}],"ironic/tests/unit/db/sqlalchemy/test_migrations.py":[{"author":{"_account_id":9315,"name":"ramesh","email":"rameshg87@gmail.com","username":"rameshg87"},"change_message_id":"90306d6f673c006a8b143a07477d8b7e4206ad92","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        # in some backends bool type is integer"},{"line_number":446,"context_line":"        self.assertTrue(isinstance(ports.c.pxe_enabled.type,"},{"line_number":447,"context_line":"                                   sqlalchemy.types.Boolean) or"},{"line_number":448,"context_line":"                        isinstance(ports.c.pxe_enabled.type,"},{"line_number":449,"context_line":"                                   sqlalchemy.types.Integer))"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def test_upgrade_and_version(self):"}],"source_content_type":"text/x-python","patch_set":40,"id":"1a26ad4f_fb1595e4","line":448,"updated":"2015-11-02 06:42:32.000000000","message":"I had a comment on PS26 which seems not replied.  Worth mentioning why this is required or for what backends this is required.","commit_id":"82cd21a3ff7c676614b2aa1835a43cad7d171e15"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3803d37318e279a23983a192d8e3440344a53a71","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        # in some backends bool type is integer"},{"line_number":446,"context_line":"        self.assertTrue(isinstance(ports.c.pxe_enabled.type,"},{"line_number":447,"context_line":"                                   sqlalchemy.types.Boolean) or"},{"line_number":448,"context_line":"                        isinstance(ports.c.pxe_enabled.type,"},{"line_number":449,"context_line":"                                   sqlalchemy.types.Integer))"},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"    def test_upgrade_and_version(self):"}],"source_content_type":"text/x-python","patch_set":40,"id":"5a710552_9b23ae05","line":448,"in_reply_to":"1a26ad4f_fb1595e4","updated":"2015-12-14 22:30:55.000000000","message":"I see that this is done in another test too (L291) so this is probably fine. But yeah, I\u0027m curious :)","commit_id":"82cd21a3ff7c676614b2aa1835a43cad7d171e15"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"e6483441fcc715b0a8ab5b2d66723c50171f6de4","unresolved":false,"context_lines":[{"line_number":407,"context_line":"        tag \u003d node_tags.select(node_tags.c.node_id \u003d\u003d \u0027123\u0027).execute().first()"},{"line_number":408,"context_line":"        self.assertEqual(\u0027tag1\u0027, tag[\u0027tag\u0027])"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def _check_5ea1b0d310e(self, engine, data):"},{"line_number":411,"context_line":"        portgroup \u003d db_utils.get_table(engine, \u0027portgroups\u0027)"},{"line_number":412,"context_line":"        col_names \u003d [column.name for column in portgroup.c]"},{"line_number":413,"context_line":"        self.assertIn(\u0027created_at\u0027, col_names)"}],"source_content_type":"text/x-python","patch_set":42,"id":"fa80f949_648a95c1","line":410,"updated":"2015-11-05 09:59:21.000000000","message":"Proper unit tests should fail for exactly one reason. \nIf you have multiple asserts, the first one to fail tends to end the test; perhaps 2 or more assertions would have failed but you only get information about one.","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"e66e82decea70eaab2eaab5a87057fcb66a330d0","unresolved":false,"context_lines":[{"line_number":407,"context_line":"        tag \u003d node_tags.select(node_tags.c.node_id \u003d\u003d \u0027123\u0027).execute().first()"},{"line_number":408,"context_line":"        self.assertEqual(\u0027tag1\u0027, tag[\u0027tag\u0027])"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def _check_5ea1b0d310e(self, engine, data):"},{"line_number":411,"context_line":"        portgroup \u003d db_utils.get_table(engine, \u0027portgroups\u0027)"},{"line_number":412,"context_line":"        col_names \u003d [column.name for column in portgroup.c]"},{"line_number":413,"context_line":"        self.assertIn(\u0027created_at\u0027, col_names)"}],"source_content_type":"text/x-python","patch_set":42,"id":"7a740942_3c31bd5a","line":410,"updated":"2015-12-11 22:52:39.000000000","message":"Sergii, you will find that there are many places where a unit test contains multiple assertions to test the behavior of something.\n\nSure - this unit test could be rewritten as 20 different unit tests, each asserting the presence of a single column. But is that actually helpful? NO.\n\nThe collection of all of these assertions is a valid single unit test: it asserts that the migration named 5ea1b0d310e has been run and created the schema we expect it to create.","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"ffbdfac5442c383606407f1438dd3693e0d0bb64","unresolved":false,"context_lines":[{"line_number":410,"context_line":"    def _check_5ea1b0d310e(self, engine, data):"},{"line_number":411,"context_line":"        portgroup \u003d db_utils.get_table(engine, \u0027portgroups\u0027)"},{"line_number":412,"context_line":"        col_names \u003d [column.name for column in portgroup.c]"},{"line_number":413,"context_line":"        self.assertIn(\u0027created_at\u0027, col_names)"},{"line_number":414,"context_line":"        self.assertIn(\u0027updated_at\u0027, col_names)"},{"line_number":415,"context_line":"        self.assertIn(\u0027id\u0027, col_names)"},{"line_number":416,"context_line":"        self.assertIn(\u0027uuid\u0027, col_names)"},{"line_number":417,"context_line":"        self.assertIn(\u0027name\u0027, col_names)"},{"line_number":418,"context_line":"        self.assertIn(\u0027node_id\u0027, col_names)"},{"line_number":419,"context_line":"        self.assertIn(\u0027address\u0027, col_names)"},{"line_number":420,"context_line":"        self.assertIn(\u0027extra\u0027, col_names)"},{"line_number":421,"context_line":"        self.assertIsInstance(portgroup.c.created_at.type,"},{"line_number":422,"context_line":"                              sqlalchemy.types.DateTime)"},{"line_number":423,"context_line":"        self.assertIsInstance(portgroup.c.updated_at.type,"}],"source_content_type":"text/x-python","patch_set":45,"id":"1a7b0d38_11fea36b","line":420,"range":{"start_line":413,"start_character":0,"end_line":420,"end_character":41},"updated":"2015-12-23 12:03:42.000000000","message":"I recommend do this in that way:\n\n self.assertEqual([\u0027created_at\u0027, \u0027created_at\u0027, \u0027id\u0027 ... ], map(lambda x: x[\u0027names\u0027], col_names)\n\nJust make one assert for all this stuff.","commit_id":"7f68896768d2bc891943468975734f3da9b666f3"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"efa6335fcb878ce88a31dbf8758995175b4fcdaf","unresolved":false,"context_lines":[{"line_number":410,"context_line":"    def _check_5ea1b0d310e(self, engine, data):"},{"line_number":411,"context_line":"        portgroup \u003d db_utils.get_table(engine, \u0027portgroups\u0027)"},{"line_number":412,"context_line":"        col_names \u003d [column.name for column in portgroup.c]"},{"line_number":413,"context_line":"        self.assertIn(\u0027created_at\u0027, col_names)"},{"line_number":414,"context_line":"        self.assertIn(\u0027updated_at\u0027, col_names)"},{"line_number":415,"context_line":"        self.assertIn(\u0027id\u0027, col_names)"},{"line_number":416,"context_line":"        self.assertIn(\u0027uuid\u0027, col_names)"},{"line_number":417,"context_line":"        self.assertIn(\u0027name\u0027, col_names)"},{"line_number":418,"context_line":"        self.assertIn(\u0027node_id\u0027, col_names)"},{"line_number":419,"context_line":"        self.assertIn(\u0027address\u0027, col_names)"},{"line_number":420,"context_line":"        self.assertIn(\u0027extra\u0027, col_names)"},{"line_number":421,"context_line":"        self.assertIsInstance(portgroup.c.created_at.type,"},{"line_number":422,"context_line":"                              sqlalchemy.types.DateTime)"},{"line_number":423,"context_line":"        self.assertIsInstance(portgroup.c.updated_at.type,"}],"source_content_type":"text/x-python","patch_set":45,"id":"1a7b0d38_7cc65c9b","line":420,"range":{"start_line":413,"start_character":0,"end_line":420,"end_character":41},"in_reply_to":"1a7b0d38_11fea36b","updated":"2016-01-05 17:47:19.000000000","message":"Done","commit_id":"7f68896768d2bc891943468975734f3da9b666f3"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"ffbdfac5442c383606407f1438dd3693e0d0bb64","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        self.assertIn(\u0027node_id\u0027, col_names)"},{"line_number":419,"context_line":"        self.assertIn(\u0027address\u0027, col_names)"},{"line_number":420,"context_line":"        self.assertIn(\u0027extra\u0027, col_names)"},{"line_number":421,"context_line":"        self.assertIsInstance(portgroup.c.created_at.type,"},{"line_number":422,"context_line":"                              sqlalchemy.types.DateTime)"},{"line_number":423,"context_line":"        self.assertIsInstance(portgroup.c.updated_at.type,"},{"line_number":424,"context_line":"                              sqlalchemy.types.DateTime)"},{"line_number":425,"context_line":"        self.assertIsInstance(portgroup.c.id.type,"},{"line_number":426,"context_line":"                              sqlalchemy.types.Integer)"},{"line_number":427,"context_line":"        self.assertIsInstance(portgroup.c.uuid.type,"},{"line_number":428,"context_line":"                              sqlalchemy.types.String)"},{"line_number":429,"context_line":"        self.assertIsInstance(portgroup.c.name.type,"},{"line_number":430,"context_line":"                              sqlalchemy.types.String)"},{"line_number":431,"context_line":"        self.assertIsInstance(portgroup.c.node_id.type,"},{"line_number":432,"context_line":"                              sqlalchemy.types.Integer)"},{"line_number":433,"context_line":"        self.assertIsInstance(portgroup.c.address.type,"},{"line_number":434,"context_line":"                              sqlalchemy.types.String)"},{"line_number":435,"context_line":"        self.assertIsInstance(portgroup.c.extra.type,"},{"line_number":436,"context_line":"                              sqlalchemy.types.TEXT)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"        ports \u003d db_utils.get_table(engine, \u0027ports\u0027)"},{"line_number":439,"context_line":"        col_names \u003d [column.name for column in ports.c]"}],"source_content_type":"text/x-python","patch_set":45,"id":"1a7b0d38_31115fad","line":436,"range":{"start_line":421,"start_character":0,"end_line":436,"end_character":52},"updated":"2015-12-23 12:03:42.000000000","message":"Ditto","commit_id":"7f68896768d2bc891943468975734f3da9b666f3"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"ffbdfac5442c383606407f1438dd3693e0d0bb64","unresolved":false,"context_lines":[{"line_number":410,"context_line":"    def _check_5ea1b0d310e(self, engine, data):"},{"line_number":411,"context_line":"        portgroup \u003d db_utils.get_table(engine, \u0027portgroups\u0027)"},{"line_number":412,"context_line":"        col_names \u003d [column.name for column in portgroup.c]"},{"line_number":413,"context_line":"        self.assertIn(\u0027created_at\u0027, col_names)"},{"line_number":414,"context_line":"        self.assertIn(\u0027updated_at\u0027, col_names)"},{"line_number":415,"context_line":"        self.assertIn(\u0027id\u0027, col_names)"},{"line_number":416,"context_line":"        self.assertIn(\u0027uuid\u0027, col_names)"},{"line_number":417,"context_line":"        self.assertIn(\u0027name\u0027, col_names)"},{"line_number":418,"context_line":"        self.assertIn(\u0027node_id\u0027, col_names)"},{"line_number":419,"context_line":"        self.assertIn(\u0027address\u0027, col_names)"},{"line_number":420,"context_line":"        self.assertIn(\u0027extra\u0027, col_names)"},{"line_number":421,"context_line":"        self.assertIsInstance(portgroup.c.created_at.type,"},{"line_number":422,"context_line":"                              sqlalchemy.types.DateTime)"},{"line_number":423,"context_line":"        self.assertIsInstance(portgroup.c.updated_at.type,"},{"line_number":424,"context_line":"                              sqlalchemy.types.DateTime)"},{"line_number":425,"context_line":"        self.assertIsInstance(portgroup.c.id.type,"},{"line_number":426,"context_line":"                              sqlalchemy.types.Integer)"},{"line_number":427,"context_line":"        self.assertIsInstance(portgroup.c.uuid.type,"},{"line_number":428,"context_line":"                              sqlalchemy.types.String)"},{"line_number":429,"context_line":"        self.assertIsInstance(portgroup.c.name.type,"},{"line_number":430,"context_line":"                              sqlalchemy.types.String)"},{"line_number":431,"context_line":"        self.assertIsInstance(portgroup.c.node_id.type,"},{"line_number":432,"context_line":"                              sqlalchemy.types.Integer)"},{"line_number":433,"context_line":"        self.assertIsInstance(portgroup.c.address.type,"},{"line_number":434,"context_line":"                              sqlalchemy.types.String)"},{"line_number":435,"context_line":"        self.assertIsInstance(portgroup.c.extra.type,"},{"line_number":436,"context_line":"                              sqlalchemy.types.TEXT)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"        ports \u003d db_utils.get_table(engine, \u0027ports\u0027)"},{"line_number":439,"context_line":"        col_names \u003d [column.name for column in ports.c]"}],"source_content_type":"text/x-python","patch_set":45,"id":"1a7b0d38_118303ce","line":436,"range":{"start_line":413,"start_character":0,"end_line":436,"end_character":52},"updated":"2015-12-23 12:03:42.000000000","message":"Too many asserts for one test","commit_id":"7f68896768d2bc891943468975734f3da9b666f3"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"efa6335fcb878ce88a31dbf8758995175b4fcdaf","unresolved":false,"context_lines":[{"line_number":418,"context_line":"        self.assertIn(\u0027node_id\u0027, col_names)"},{"line_number":419,"context_line":"        self.assertIn(\u0027address\u0027, col_names)"},{"line_number":420,"context_line":"        self.assertIn(\u0027extra\u0027, col_names)"},{"line_number":421,"context_line":"        self.assertIsInstance(portgroup.c.created_at.type,"},{"line_number":422,"context_line":"                              sqlalchemy.types.DateTime)"},{"line_number":423,"context_line":"        self.assertIsInstance(portgroup.c.updated_at.type,"},{"line_number":424,"context_line":"                              sqlalchemy.types.DateTime)"},{"line_number":425,"context_line":"        self.assertIsInstance(portgroup.c.id.type,"},{"line_number":426,"context_line":"                              sqlalchemy.types.Integer)"},{"line_number":427,"context_line":"        self.assertIsInstance(portgroup.c.uuid.type,"},{"line_number":428,"context_line":"                              sqlalchemy.types.String)"},{"line_number":429,"context_line":"        self.assertIsInstance(portgroup.c.name.type,"},{"line_number":430,"context_line":"                              sqlalchemy.types.String)"},{"line_number":431,"context_line":"        self.assertIsInstance(portgroup.c.node_id.type,"},{"line_number":432,"context_line":"                              sqlalchemy.types.Integer)"},{"line_number":433,"context_line":"        self.assertIsInstance(portgroup.c.address.type,"},{"line_number":434,"context_line":"                              sqlalchemy.types.String)"},{"line_number":435,"context_line":"        self.assertIsInstance(portgroup.c.extra.type,"},{"line_number":436,"context_line":"                              sqlalchemy.types.TEXT)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"        ports \u003d db_utils.get_table(engine, \u0027ports\u0027)"},{"line_number":439,"context_line":"        col_names \u003d [column.name for column in ports.c]"}],"source_content_type":"text/x-python","patch_set":45,"id":"1a7b0d38_7c4dfc3c","line":436,"range":{"start_line":421,"start_character":0,"end_line":436,"end_character":52},"in_reply_to":"1a7b0d38_31115fad","updated":"2016-01-05 17:47:19.000000000","message":"types are different it is hard to generalize this code. I prefer to keep better readability.","commit_id":"7f68896768d2bc891943468975734f3da9b666f3"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4af4fc59ca5bf85af521ae70fc2c040265a965f7","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        col_names \u003d [column.name for column in portgroup.c]"},{"line_number":413,"context_line":"        expected_names \u003d [\u0027created_at\u0027, \u0027updated_at\u0027, \u0027id\u0027, \u0027uuid\u0027, \u0027name\u0027,"},{"line_number":414,"context_line":"                          \u0027node_id\u0027, \u0027address\u0027, \u0027extra\u0027]"},{"line_number":415,"context_line":"        self.assertEqual(sorted(expected_names), sorted(col_names))"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        self.assertIsInstance(portgroup.c.created_at.type,"},{"line_number":418,"context_line":"                              sqlalchemy.types.DateTime)"}],"source_content_type":"text/x-python","patch_set":58,"id":"5a5ae5dd_4a338514","line":415,"updated":"2016-02-05 23:27:51.000000000","message":"nit: This can be:\n\n self.assertCountEqual(expected_names, col_names)\n\nhttps://docs.python.org/3/library/unittest.html#unittest.TestCase.assertCountEqual","commit_id":"1740ab79708fa6578db7bf4c607ab046b7fc215d"}],"ironic/tests/unit/db/test_portgroups.py":[{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"7c371bf0a4519890a9fe0df19384f192fef97476","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        res \u003d self.dbapi.get_portgroup_list()"},{"line_number":77,"context_line":"        res_uuids \u003d [r.uuid for r in res]"},{"line_number":78,"context_line":"        six.assertCountEqual(self, uuids, res_uuids)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_get_portgroup_list_sorted(self):"},{"line_number":81,"context_line":"        uuids \u003d []"},{"line_number":82,"context_line":"        for i in range(1, 6):"}],"source_content_type":"text/x-python","patch_set":42,"id":"fa80f949_065f0e0f","line":79,"updated":"2015-12-01 22:19:01.000000000","message":"I think it would be better to encapsulate for loop intest_get_portgroup_list() and test_get_portgroup_list_sorted()  in base class:\n\nuuids \u003d []\nfor i in range(1, 6):\n    portgroup \u003d db_utils.create_test_portgroup(\t69\n        uuid\u003duuidutils.generate_uuid(),\n        name\u003dstr(uuidutils.generate_uuid()),\n        address\u003d\u002752:54:00:cf:2d:4%s\u0027 % i)\n        uuids.append(six.text_type(portgroup.uuid))","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        res \u003d self.dbapi.get_portgroup_list()"},{"line_number":77,"context_line":"        res_uuids \u003d [r.uuid for r in res]"},{"line_number":78,"context_line":"        six.assertCountEqual(self, uuids, res_uuids)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def test_get_portgroup_list_sorted(self):"},{"line_number":81,"context_line":"        uuids \u003d []"},{"line_number":82,"context_line":"        for i in range(1, 6):"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_b71bbe1a","line":79,"in_reply_to":"fa80f949_065f0e0f","updated":"2015-12-17 09:05:26.000000000","message":"Done","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"96824c68b62e34097b62baba8eac8c53b93bf378","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                          self.dbapi.destroy_portgroup, self.portgroup.id)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_update_portgroup(self):"},{"line_number":133,"context_line":"        old_address \u003d self.portgroup.address"},{"line_number":134,"context_line":"        new_address \u003d \u0027ff:ee:dd:cc:bb:aa\u0027"},{"line_number":135,"context_line":"        self.assertNotEqual(old_address, new_address)"},{"line_number":136,"context_line":"        old_name \u003d self.portgroup.name"},{"line_number":137,"context_line":"        new_name \u003d \u0027newname\u0027"},{"line_number":138,"context_line":"        self.assertNotEqual(old_name, new_name)"}],"source_content_type":"text/x-python","patch_set":45,"id":"1a7b0d38_cc48825e","line":135,"range":{"start_line":133,"start_character":0,"end_line":135,"end_character":53},"updated":"2015-12-23 12:11:59.000000000","message":"It is not a good idea to check new and old addresses in the test. If they are equal each other then test will fail.","commit_id":"7f68896768d2bc891943468975734f3da9b666f3"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"efa6335fcb878ce88a31dbf8758995175b4fcdaf","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                          self.dbapi.destroy_portgroup, self.portgroup.id)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_update_portgroup(self):"},{"line_number":133,"context_line":"        old_address \u003d self.portgroup.address"},{"line_number":134,"context_line":"        new_address \u003d \u0027ff:ee:dd:cc:bb:aa\u0027"},{"line_number":135,"context_line":"        self.assertNotEqual(old_address, new_address)"},{"line_number":136,"context_line":"        old_name \u003d self.portgroup.name"},{"line_number":137,"context_line":"        new_name \u003d \u0027newname\u0027"},{"line_number":138,"context_line":"        self.assertNotEqual(old_name, new_name)"}],"source_content_type":"text/x-python","patch_set":45,"id":"1a7b0d38_21abd176","line":135,"range":{"start_line":133,"start_character":0,"end_line":135,"end_character":53},"in_reply_to":"1a7b0d38_cc48825e","updated":"2016-01-05 17:47:19.000000000","message":"Since port is created with default address, the following check is needed in order to make sure that address we want to update is not equal to current address. If this test fail, there is no sense to proceed. Address will not be updated since new_address contains port current address value.","commit_id":"7f68896768d2bc891943468975734f3da9b666f3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"3eebf23b4c04662ba54aed7a849c755682634774","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                          self.dbapi.destroy_portgroup, self.portgroup.id)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def test_update_portgroup(self):"},{"line_number":133,"context_line":"        old_address \u003d self.portgroup.address"},{"line_number":134,"context_line":"        new_address \u003d \u0027ff:ee:dd:cc:bb:aa\u0027"},{"line_number":135,"context_line":"        self.assertNotEqual(old_address, new_address)"},{"line_number":136,"context_line":"        old_name \u003d self.portgroup.name"},{"line_number":137,"context_line":"        new_name \u003d \u0027newname\u0027"},{"line_number":138,"context_line":"        self.assertNotEqual(old_name, new_name)"}],"source_content_type":"text/x-python","patch_set":45,"id":"fa69d971_ba53a138","line":135,"range":{"start_line":133,"start_character":0,"end_line":135,"end_character":53},"in_reply_to":"1a7b0d38_cc48825e","updated":"2016-01-04 21:58:35.000000000","message":"Yes, that\u0027s true. both strings are hardcoded though, so we know they aren\u0027t the same. This line isn\u0027t needed but it isn\u0027t wrong to put it here either so I don\u0027t think it warrants a -1. It can be fixed in a followup if anyone wants to do so.","commit_id":"7f68896768d2bc891943468975734f3da9b666f3"},{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"96824c68b62e34097b62baba8eac8c53b93bf378","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        old_address \u003d self.portgroup.address"},{"line_number":134,"context_line":"        new_address \u003d \u0027ff:ee:dd:cc:bb:aa\u0027"},{"line_number":135,"context_line":"        self.assertNotEqual(old_address, new_address)"},{"line_number":136,"context_line":"        old_name \u003d self.portgroup.name"},{"line_number":137,"context_line":"        new_name \u003d \u0027newname\u0027"},{"line_number":138,"context_line":"        self.assertNotEqual(old_name, new_name)"},{"line_number":139,"context_line":"        res \u003d self.dbapi.update_portgroup(self.portgroup.id,"},{"line_number":140,"context_line":"                                          {\u0027address\u0027: new_address,"},{"line_number":141,"context_line":"                                           \u0027name\u0027: new_name})"}],"source_content_type":"text/x-python","patch_set":45,"id":"1a7b0d38_8c791a96","line":138,"range":{"start_line":136,"start_character":0,"end_line":138,"end_character":47},"updated":"2015-12-23 12:11:59.000000000","message":"See my pervious comment","commit_id":"7f68896768d2bc891943468975734f3da9b666f3"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"efa6335fcb878ce88a31dbf8758995175b4fcdaf","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        old_address \u003d self.portgroup.address"},{"line_number":134,"context_line":"        new_address \u003d \u0027ff:ee:dd:cc:bb:aa\u0027"},{"line_number":135,"context_line":"        self.assertNotEqual(old_address, new_address)"},{"line_number":136,"context_line":"        old_name \u003d self.portgroup.name"},{"line_number":137,"context_line":"        new_name \u003d \u0027newname\u0027"},{"line_number":138,"context_line":"        self.assertNotEqual(old_name, new_name)"},{"line_number":139,"context_line":"        res \u003d self.dbapi.update_portgroup(self.portgroup.id,"},{"line_number":140,"context_line":"                                          {\u0027address\u0027: new_address,"},{"line_number":141,"context_line":"                                           \u0027name\u0027: new_name})"}],"source_content_type":"text/x-python","patch_set":45,"id":"1a7b0d38_c1b20de5","line":138,"range":{"start_line":136,"start_character":0,"end_line":138,"end_character":47},"in_reply_to":"1a7b0d38_8c791a96","updated":"2016-01-05 17:47:19.000000000","message":"same as previous reply.","commit_id":"7f68896768d2bc891943468975734f3da9b666f3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"4758ad40abad95710c6843e7d2ab6bddeadebe3b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        for i in range(1, count):"},{"line_number":44,"context_line":"            portgroup \u003d db_utils.create_test_portgroup("},{"line_number":45,"context_line":"                uuid\u003duuidutils.generate_uuid(),"},{"line_number":46,"context_line":"                name\u003dstr(uuidutils.generate_uuid()),"},{"line_number":47,"context_line":"                address\u003d\u002752:54:00:cf:2d:4%s\u0027 % i)"},{"line_number":48,"context_line":"            uuids.append(six.text_type(portgroup.uuid))"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"fa69d971_da7e9518","line":46,"updated":"2016-01-04 21:55:49.000000000","message":"are you sure you want to do this, vs name \u003d str(uuid)? Not that it really matters, but eg name\u003d\u0027portgroup\u0027+str(i) would be more meaningful :)","commit_id":"ea5f097ca85ecbb5a9915204006a01fbf602d3ba"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"319ec1a9f1c2f9524253306e87ae8b0880bb80c7","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        for i in range(1, count):"},{"line_number":44,"context_line":"            portgroup \u003d db_utils.create_test_portgroup("},{"line_number":45,"context_line":"                uuid\u003duuidutils.generate_uuid(),"},{"line_number":46,"context_line":"                name\u003dstr(uuidutils.generate_uuid()),"},{"line_number":47,"context_line":"                address\u003d\u002752:54:00:cf:2d:4%s\u0027 % i)"},{"line_number":48,"context_line":"            uuids.append(six.text_type(portgroup.uuid))"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"fa69d971_f9ea670e","line":46,"in_reply_to":"fa69d971_da7e9518","updated":"2016-01-05 17:47:28.000000000","message":"I agree, it is convenient way.","commit_id":"ea5f097ca85ecbb5a9915204006a01fbf602d3ba"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"0c848c35504b0ef7b3c3223e8e07b10b37e2f8cf","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        uuids \u003d []"},{"line_number":43,"context_line":"        for i in range(1, count):"},{"line_number":44,"context_line":"            portgroup \u003d db_utils.create_test_portgroup("},{"line_number":45,"context_line":"                uuid\u003duuidutils.generate_uuid(),"},{"line_number":46,"context_line":"                name\u003d\u0027portgroup\u0027 + str(i),"}],"source_content_type":"text/x-python","patch_set":58,"id":"5a5ae5dd_c241ac64","line":43,"updated":"2016-02-05 17:08:33.000000000","message":"This should be range(count), otherwise it will be 1 less than requested :)","commit_id":"1740ab79708fa6578db7bf4c607ab046b7fc215d"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"4af4fc59ca5bf85af521ae70fc2c040265a965f7","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        uuids \u003d []"},{"line_number":43,"context_line":"        for i in range(1, count):"},{"line_number":44,"context_line":"            portgroup \u003d db_utils.create_test_portgroup("},{"line_number":45,"context_line":"                uuid\u003duuidutils.generate_uuid(),"},{"line_number":46,"context_line":"                name\u003d\u0027portgroup\u0027 + str(i),"}],"source_content_type":"text/x-python","patch_set":58,"id":"5a5ae5dd_0aa90d90","line":43,"in_reply_to":"5a5ae5dd_c241ac64","updated":"2016-02-05 23:27:51.000000000","message":"+1\n\nBut yes can wait for follow up patch","commit_id":"1740ab79708fa6578db7bf4c607ab046b7fc215d"}],"ironic/tests/unit/db/test_ports.py":[{"author":{"_account_id":17270,"name":"Sergii Turivnyi","email":"sturivnyi@mirantis.com","username":"sturivnyi"},"change_message_id":"7c371bf0a4519890a9fe0df19384f192fef97476","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.portgroup \u003d db_utils.create_test_portgroup(node_id\u003dself.node.id)"},{"line_number":34,"context_line":"        self.port \u003d db_utils.create_test_port(node_id\u003dself.node.id,"},{"line_number":35,"context_line":"                                              portgroup_id\u003dself.portgroup.id)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_get_port_by_id(self):"},{"line_number":38,"context_line":"        res \u003d self.dbapi.get_port_by_id(self.port.id)"},{"line_number":39,"context_line":"        self.assertEqual(self.port.address, res.address)"}],"source_content_type":"text/x-python","patch_set":42,"id":"fa80f949_e6076a1a","line":36,"updated":"2015-12-01 22:19:01.000000000","message":"Couldn\u0027t found tearDown().","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"423ab5124e7477c44d2cf1753781146a2217dff7","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.portgroup \u003d db_utils.create_test_portgroup(node_id\u003dself.node.id)"},{"line_number":34,"context_line":"        self.port \u003d db_utils.create_test_port(node_id\u003dself.node.id,"},{"line_number":35,"context_line":"                                              portgroup_id\u003dself.portgroup.id)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def test_get_port_by_id(self):"},{"line_number":38,"context_line":"        res \u003d self.dbapi.get_port_by_id(self.port.id)"},{"line_number":39,"context_line":"        self.assertEqual(self.port.address, res.address)"}],"source_content_type":"text/x-python","patch_set":42,"id":"5a710552_b793bf4e","line":36,"in_reply_to":"fa80f949_e6076a1a","updated":"2015-12-17 09:05:26.000000000","message":"Could you please be more specific here.","commit_id":"4a4d94b57abab6d61450aa51a42bd924f6a29deb"}]}
