)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"70c550aa27bb51b4745184ba767ae0e2e0ee2dc0","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This refactors some of the DB layer to allow the nodes table to be"},{"line_number":10,"context_line":"joined to the port model. It:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"* refactors the DB API to accept a list of columns to join to the SELECT"},{"line_number":13,"context_line":"  queries for ports."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"* adds the \u0027node\u0027 field to the port model as a FK relationship to the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa69d971_ec39eaa4","line":12,"updated":"2016-01-07 08:02:07.000000000","message":"/columns/extra_attrs","commit_id":"cc43445da633e3c608339d6756ed427d07d4602a"}],"ironic/db/api.py":[{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"187be69ab224cf97b92a503d25d30d532d3dad86","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        \"\"\""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    @abc.abstractmethod"},{"line_number":277,"context_line":"    def update_port(self, port_id, values):"},{"line_number":278,"context_line":"        \"\"\"Update properties of an port."},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        :param port_id: The id or MAC of a port."}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_1bb6e1dc","line":277,"updated":"2015-12-30 08:54:44.000000000","message":"please add ``colums_to_join`` here or in your another patch","commit_id":"91c414d00a0bf3618575f93037c62642ef04dc95"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"53fe98bec424148567c39742aef6e87c4a6ba7dd","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        \"\"\""},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    @abc.abstractmethod"},{"line_number":277,"context_line":"    def update_port(self, port_id, values):"},{"line_number":278,"context_line":"        \"\"\"Update properties of an port."},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"        :param port_id: The id or MAC of a port."}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_a0042a15","line":277,"in_reply_to":"fa69d971_1bb6e1dc","updated":"2015-12-30 17:38:51.000000000","message":"Done","commit_id":"91c414d00a0bf3618575f93037c62642ef04dc95"}],"ironic/db/sqlalchemy/api.py":[{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"70c550aa27bb51b4745184ba767ae0e2e0ee2dc0","unresolved":false,"context_lines":[{"line_number":96,"context_line":"def _build_port_query(extra_attrs\u003dNone):"},{"line_number":97,"context_line":"    extra_attrs \u003d extra_attrs or []"},{"line_number":98,"context_line":"    query \u003d model_query(models.Port)"},{"line_number":99,"context_line":"    for column in extra_attrs:"},{"line_number":100,"context_line":"        query \u003d query.options(joinedload(column))"},{"line_number":101,"context_line":"    return query"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_8993805a","line":99,"updated":"2016-01-07 08:02:07.000000000","message":"nit: s/column/attr/","commit_id":"cc43445da633e3c608339d6756ed427d07d4602a"}],"ironic/db/sqlalchemy/models.py":[{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"187be69ab224cf97b92a503d25d30d532d3dad86","unresolved":false,"context_lines":[{"line_number":166,"context_line":"    address \u003d Column(String(18))"},{"line_number":167,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":168,"context_line":"    extra \u003d Column(db_types.JsonEncodedDict)"},{"line_number":169,"context_line":"    node \u003d orm.relationship(\u0027Node\u0027, foreign_keys\u003dnode_id)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class NodeTag(Base):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_be6f8391","line":169,"updated":"2015-12-30 08:54:44.000000000","message":"have you think add a backrefs\u003d\"ports\" here to support node.ports thing?","commit_id":"91c414d00a0bf3618575f93037c62642ef04dc95"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"53fe98bec424148567c39742aef6e87c4a6ba7dd","unresolved":false,"context_lines":[{"line_number":166,"context_line":"    address \u003d Column(String(18))"},{"line_number":167,"context_line":"    node_id \u003d Column(Integer, ForeignKey(\u0027nodes.id\u0027), nullable\u003dTrue)"},{"line_number":168,"context_line":"    extra \u003d Column(db_types.JsonEncodedDict)"},{"line_number":169,"context_line":"    node \u003d orm.relationship(\u0027Node\u0027, foreign_keys\u003dnode_id)"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"class NodeTag(Base):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa69d971_6025d2a9","line":169,"in_reply_to":"fa69d971_be6f8391","updated":"2015-12-30 17:38:51.000000000","message":"Yes, going to save that for a later patch :)","commit_id":"91c414d00a0bf3618575f93037c62642ef04dc95"}],"ironic/tests/unit/db/test_ports.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"85b2df9108965aa25f74e684b3fa5d4ba91848d9","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    def test_get_port_by_id_join_nodeforreal(self):"},{"line_number":47,"context_line":"        res \u003d self.dbapi.get_port_by_id(self.port.id, columns_to_join\u003d[\u0027node\u0027])"},{"line_number":48,"context_line":"        self.assertEqual(self.port.address, res.address)"},{"line_number":49,"context_line":"        self.assertEqual(self.node.uuid, res.node.uuid)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_get_port_by_uuid(self):"},{"line_number":52,"context_line":"        res \u003d self.dbapi.get_port_by_uuid(self.port.uuid)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a7b0d38_5947f7bb","line":49,"updated":"2015-12-29 01:25:34.000000000","message":"This actually breaks right now as sqlalchemy isn\u0027t eager loading things.","commit_id":"69e823882c256f1c80139259b4c4423cb25815d1"},{"author":{"_account_id":13362,"name":"Tan Lin","email":"lin.tan@intel.com","username":"zero"},"change_message_id":"70c550aa27bb51b4745184ba767ae0e2e0ee2dc0","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        res \u003d self.dbapi.update_port(self.port.id, {\u0027address\u0027: new_address},"},{"line_number":144,"context_line":"                                     extra_attrs\u003d[\u0027node\u0027])"},{"line_number":145,"context_line":"        self.assertEqual(new_address, res.address)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def test_update_port_uuid(self):"},{"line_number":148,"context_line":"        self.assertRaises(exception.InvalidParameterValue,"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa69d971_0c69def8","line":145,"updated":"2016-01-07 08:02:07.000000000","message":"There is no much different compare to normal test_update_port. What about add self.assertEqual(self.node.uuid, res.node.uuid) to test the extra_attrs is working and return node.","commit_id":"cc43445da633e3c608339d6756ed427d07d4602a"}]}
