)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"41c0eeaede1268814dcdea78c155e9f047463ed6","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I0179a3616689f39d93c337c730283e21a01677cf"},{"line_number":12,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"},{"line_number":13,"context_line":"Partial-Bug: #1541928"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"1a95cdbc_b1643fb9","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":21},"updated":"2016-10-07 15:38:39.000000000","message":"This tag is not required","commit_id":"79a009a946340d404bc5f8ac367d0f93ea7d5b4a"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"e8edcd7fa1bd21ae25f0114e40b31bfe3b895f67","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I0179a3616689f39d93c337c730283e21a01677cf"},{"line_number":12,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"},{"line_number":13,"context_line":"Partial-Bug: #1541928"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"1a95cdbc_5b478d76","line":13,"range":{"start_line":13,"start_character":0,"end_line":13,"end_character":21},"in_reply_to":"1a95cdbc_b1643fb9","updated":"2016-10-07 20:32:32.000000000","message":"will remove this in next patchset","commit_id":"79a009a946340d404bc5f8ac367d0f93ea7d5b4a"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"0483d0d46d9adba5d4eac939f31f01c48acb32a1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"OVO for Tag"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces OVO for Tag and integrates it."},{"line_number":10,"context_line":"Integration for StandardAttribute and Tag joins will"},{"line_number":11,"context_line":"be done in separate patch."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I0179a3616689f39d93c337c730283e21a01677cf"},{"line_number":14,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"3a71b18c_59284333","line":11,"range":{"start_line":10,"start_character":0,"end_line":11,"end_character":26},"updated":"2016-12-06 20:54:44.000000000","message":"nit: what is the reason behind this?","commit_id":"95c70d557bb9406af35489a07074e76b4e8ed6e2"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"ea44a55c146c172f42f8a1df8163bea1182c5775","unresolved":false,"context_lines":[{"line_number":7,"context_line":"OVO for Tag"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces OVO for Tag and integrates it."},{"line_number":10,"context_line":"Integration for StandardAttribute and Tag joins will"},{"line_number":11,"context_line":"be done in separate patch."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I0179a3616689f39d93c337c730283e21a01677cf"},{"line_number":14,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"3a71b18c_8bf6fa8c","line":11,"range":{"start_line":10,"start_character":0,"end_line":11,"end_character":26},"in_reply_to":"3a71b18c_59284333","updated":"2016-12-07 02:05:09.000000000","message":"In this case joins are between Tag and StandardAttribute model [1] . StandardAttribute OVO doesn\u0027t exist.\nNot sure how to do ovo integration for this situation. Thus there is a different patch [2]\n[1] https://github.com/openstack/neutron/blob/master/neutron/db/tag_db.py#L30-L92\n[2] https://review.openstack.org/#/c/369720/6/neutron/services/tag/tag_plugin.py","commit_id":"95c70d557bb9406af35489a07074e76b4e8ed6e2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a830d70bc605db2ffeeb8ea98b071bc8735c2819","unresolved":false,"context_lines":[{"line_number":7,"context_line":"OVO for Tag"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces OVO for Tag and integrates it."},{"line_number":10,"context_line":"Integration for StandardAttribute and Tag joins will"},{"line_number":11,"context_line":"be done in separate patch."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I0179a3616689f39d93c337c730283e21a01677cf"},{"line_number":14,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"3a71b18c_7b80708c","line":11,"range":{"start_line":10,"start_character":0,"end_line":11,"end_character":26},"in_reply_to":"3a71b18c_8bf6fa8c","updated":"2016-12-07 14:45:21.000000000","message":"I mean, can you include the reason in the commit message or give a little more context","commit_id":"95c70d557bb9406af35489a07074e76b4e8ed6e2"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5c90d36277c16789e6093d850282b5c18ab22e04","unresolved":false,"context_lines":[{"line_number":7,"context_line":"OVO for Tag"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces OVO for Tag and integrates it."},{"line_number":10,"context_line":"Integration for StandardAttribute and Tag joins will"},{"line_number":11,"context_line":"be done in separate patch."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I0179a3616689f39d93c337c730283e21a01677cf"},{"line_number":14,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"3a71b18c_1a592b8f","line":11,"range":{"start_line":10,"start_character":0,"end_line":11,"end_character":26},"updated":"2016-12-07 18:12:36.000000000","message":"I see that you could introduce using the new object type in some places in neutron/services/tag/tag_plugin.py so please include it.","commit_id":"870181288b69d69a53e176c6ef71898cd8632d1e"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"aaca15ccf20182ebc131bb4d6390275937a0d6f6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"OVO for Tag"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces OVO for Tag and integrates it."},{"line_number":10,"context_line":"Integration for StandardAttribute and Tag joins will"},{"line_number":11,"context_line":"be done in separate patch."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I0179a3616689f39d93c337c730283e21a01677cf"},{"line_number":14,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"3a71b18c_a066fe26","line":11,"range":{"start_line":10,"start_character":0,"end_line":11,"end_character":26},"in_reply_to":"3a71b18c_183bb0ec","updated":"2016-12-09 07:44:51.000000000","message":"I mean that you have not completed integration for \u0027simple\u0027 cases in tree it seems. I believe you should include that in this patch.","commit_id":"870181288b69d69a53e176c6ef71898cd8632d1e"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"9600238baa514caad207b09c6e7294c51022c528","unresolved":false,"context_lines":[{"line_number":7,"context_line":"OVO for Tag"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces OVO for Tag and integrates it."},{"line_number":10,"context_line":"Integration for StandardAttribute and Tag joins will"},{"line_number":11,"context_line":"be done in separate patch."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I0179a3616689f39d93c337c730283e21a01677cf"},{"line_number":14,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":24,"id":"3a71b18c_183bb0ec","line":11,"range":{"start_line":10,"start_character":0,"end_line":11,"end_character":26},"in_reply_to":"3a71b18c_1a592b8f","updated":"2016-12-09 02:29:57.000000000","message":"can you please elaborate this ?","commit_id":"870181288b69d69a53e176c6ef71898cd8632d1e"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"afa802923e5f85210b6134a87890b74b12fa91a8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"OVO for Tag"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces OVO for Tag and integrates it."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I0179a3616689f39d93c337c730283e21a01677cf"},{"line_number":12,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"ba5201f7_dc5560c2","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":52},"updated":"2017-01-11 22:17:19.000000000","message":"nit: This patch introduces and integrates Oslo-Versioned Object for Tag Model class.","commit_id":"ec2931760ad76fa8e65d456e50433e2b2a2183a1"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"370dbdc4879fdb4325b51bc1d62aaef623d22213","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"OVO for Tag"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces OVO for Tag and integrates it."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I0179a3616689f39d93c337c730283e21a01677cf"},{"line_number":12,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"7a3c09a3_945d0cef","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":52},"in_reply_to":"ba5201f7_dc5560c2","updated":"2017-01-13 00:06:56.000000000","message":"Done","commit_id":"ec2931760ad76fa8e65d456e50433e2b2a2183a1"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"b4f0091760e672e279624357369448744beefa75","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"OVO for Tag"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces and integrates Oslo-Versioned Object for Tag Model class."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I0179a3616689f39d93c337c730283e21a01677cf"},{"line_number":12,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"7a3c09a3_a1ec64c8","line":9,"range":{"start_line":9,"start_character":72,"end_line":9,"end_character":79},"updated":"2017-01-13 14:30:23.000000000","message":"nit: this exceeds the maximum number of characters in the description","commit_id":"c424821fee760f0674269dc0299ddcf394332d4e"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"632a0894631a5e594c522cc7a713d56de894f6d9","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"OVO for Tag"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch introduces and integrates Oslo-Versioned Object for Tag Model class."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I0179a3616689f39d93c337c730283e21a01677cf"},{"line_number":12,"context_line":"Partially-Implements: blueprint adopt-oslo-versioned-objects-for-db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":31,"id":"7a3c09a3_6835f844","line":9,"range":{"start_line":9,"start_character":72,"end_line":9,"end_character":79},"in_reply_to":"7a3c09a3_a1ec64c8","updated":"2017-01-13 16:59:12.000000000","message":"Done","commit_id":"c424821fee760f0674269dc0299ddcf394332d4e"}],"neutron/objects/tag.py":[{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"347db11087243cdc733446b93bc2e42c58ecffec","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    fields \u003d {"},{"line_number":31,"context_line":"        \u0027tag\u0027: obj_fields.StringField()"},{"line_number":32,"context_line":"#       \u0027standard_attr_id\u0027: "},{"line_number":33,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ac371cc_59c84c74","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":28},"updated":"2016-08-18 02:02:42.000000000","message":"Implementation for standard_attr_id in Tag model when compared to Port, SecurityGroup etc model is different.\nhttps://github.com/openstack/neutron/blob/master/neutron/db/tag_db.py#L23\nhttps://github.com/openstack/neutron/blob/master/neutron/db/models_v2.py#L117\nhttps://github.com/openstack/neutron/blob/master/neutron/db/models/securitygroup.py#L23\nWhy is standard_attr_id attribute in Tag is being treated differently? Does the model for tag need to be modified before ovo object is created for it?","commit_id":"6e350297ae9d73c8b4066fbb3c4792e1258f8613"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"dcd25e234244640060e417bb638df4e4b8822f3c","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    fields \u003d {"},{"line_number":28,"context_line":"        \u0027tag\u0027: obj_fields.StringField(),"},{"line_number":29,"context_line":"        \u0027standard_attr_id\u0027: obj_fields.IntegerField()"},{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    primary_keys \u003d [\u0027tag\u0027, \u0027standard_attr_id\u0027]"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ac06dbe_43dda741","line":29,"range":{"start_line":29,"start_character":8,"end_line":29,"end_character":53},"updated":"2016-08-19 17:51:59.000000000","message":"Model for Tag has standard_attr_id as BigInteger\nhttps://github.com/openstack/neutron/blob/master/neutron/db/tag_db.py#L23-L25\nCouldn\u0027t find a filed in oslo.versionedobjects which is for BigInteger. Used IntegerField instead. Please suggest.","commit_id":"76cb21d5dba409a348c9fe8cc4968803cbf90707"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"67814b2aa359e7c97f8a727d958c50105e828a44","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    primary_keys \u003d [\u0027tag\u0027, \u0027standard_attr_id\u0027]"},{"line_number":33,"context_line":"    foreign_keys \u003d {"},{"line_number":34,"context_line":"        \u0027StandardAttribute\u0027: {\u0027standard_attr_id\u0027: \u0027id\u0027}"},{"line_number":35,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_399d2966","line":34,"range":{"start_line":33,"start_character":4,"end_line":34,"end_character":55},"updated":"2016-08-20 00:30:19.000000000","message":"I don\u0027t think this is correct, it should be\nforeign_keys \u003d {\u0027standard_attr_id\u0027: \u0027id\u0027}","commit_id":"15a337615c22a3374a4a9105b914659cfcbe15d7"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"f1945c0ae62ba8f2d8f1ddaa7b91dcdb1aa7a71b","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    primary_keys \u003d [\u0027tag\u0027, \u0027standard_attr_id\u0027]"},{"line_number":33,"context_line":"    foreign_keys \u003d {"},{"line_number":34,"context_line":"        \u0027StandardAttribute\u0027: {\u0027standard_attr_id\u0027: \u0027id\u0027}"},{"line_number":35,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_30c3213a","line":34,"range":{"start_line":33,"start_character":4,"end_line":34,"end_character":55},"in_reply_to":"1ac06dbe_0daf0282","updated":"2016-08-22 21:58:26.000000000","message":"Done","commit_id":"15a337615c22a3374a4a9105b914659cfcbe15d7"},{"author":{"_account_id":19611,"name":"Brian Stajkowski","email":"brian.stajkowski@rackspace.com","username":"ski"},"change_message_id":"d1cc906525f10ac128378860b1e8ee4041a76b8a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    primary_keys \u003d [\u0027tag\u0027, \u0027standard_attr_id\u0027]"},{"line_number":33,"context_line":"    foreign_keys \u003d {"},{"line_number":34,"context_line":"        \u0027StandardAttribute\u0027: {\u0027standard_attr_id\u0027: \u0027id\u0027}"},{"line_number":35,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_0daf0282","line":34,"range":{"start_line":33,"start_character":4,"end_line":34,"end_character":55},"in_reply_to":"1ac06dbe_399d2966","updated":"2016-08-22 16:19:32.000000000","message":"Correct, use this as reference:\n\nhttps://github.com/openstack/neutron/blob/master/neutron/objects/subnet.py#L35","commit_id":"15a337615c22a3374a4a9105b914659cfcbe15d7"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"f1945c0ae62ba8f2d8f1ddaa7b91dcdb1aa7a71b","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    primary_keys \u003d [\u0027tag\u0027, \u0027standard_attr_id\u0027]"},{"line_number":33,"context_line":"    foreign_keys \u003d {"},{"line_number":34,"context_line":"        \u0027StandardAttribute\u0027: {\u0027standard_attr_id\u0027: \u0027id\u0027}"},{"line_number":35,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_d0da8de7","line":34,"range":{"start_line":33,"start_character":4,"end_line":34,"end_character":55},"in_reply_to":"1ac06dbe_399d2966","updated":"2016-08-22 21:58:26.000000000","message":"Done","commit_id":"15a337615c22a3374a4a9105b914659cfcbe15d7"},{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"6b8dccf975d3f37815d26cb24e0c4ef67eccfc99","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    primary_keys \u003d [\u0027tag\u0027, \u0027standard_attr_id\u0027]"},{"line_number":33,"context_line":"    foreign_keys \u003d {\u0027standard_attr_id\u0027: \u0027id\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_0e3d21c4","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":45},"updated":"2016-08-23 01:23:31.000000000","message":"I think  you may need to depend on https://review.openstack.org/#/c/357207/","commit_id":"42a1c744842ec7da898f7abefdbe042f599ba18f"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"669059a8105f7f841ecfb330236f3d6145a089e2","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    primary_keys \u003d [\u0027tag\u0027, \u0027standard_attr_id\u0027]"},{"line_number":33,"context_line":"    foreign_keys \u003d {\u0027standard_attr_id\u0027: \u0027id\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_95d3ac5f","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":45},"in_reply_to":"1ac06dbe_0e3d21c4","updated":"2016-08-23 15:53:20.000000000","message":"can you explain me why is this needed? afaik adding foreign key is already supported https://review.openstack.org/#/c/336518/8/doc/source/devref/objects_usage.rst@232","commit_id":"42a1c744842ec7da898f7abefdbe042f599ba18f"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5b95cab5c6e3684e2efba27f3fc4a0b60567f725","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    primary_keys \u003d [\u0027tag\u0027, \u0027standard_attr_id\u0027]"},{"line_number":33,"context_line":"    foreign_keys \u003d {\u0027standard_attr_id\u0027: \u0027id\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ac06dbe_f2d0a4cb","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":45},"in_reply_to":"1ac06dbe_95d3ac5f","updated":"2016-08-25 13:18:23.000000000","message":"But the format of foreign key definitions is now different. You will need to adopt.","commit_id":"42a1c744842ec7da898f7abefdbe042f599ba18f"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"d60e47eeabd60426ab7ff2dd060f7c80f09bea60","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    primary_keys \u003d [\u0027tag\u0027, \u0027standard_attr_id\u0027]"},{"line_number":33,"context_line":"    foreign_keys \u003d {\u0027standard_attr_id\u0027: \u0027id\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa7ab95a_ee46e879","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":45},"in_reply_to":"1ac06dbe_f2d0a4cb","updated":"2016-08-29 20:45:06.000000000","message":"Done","commit_id":"42a1c744842ec7da898f7abefdbe042f599ba18f"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"41c0eeaede1268814dcdea78c155e9f047463ed6","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    primary_keys \u003d [\u0027tag\u0027, \u0027standard_attr_id\u0027]"},{"line_number":33,"context_line":"    foreign_keys \u003d {\u0027StandardAttribute\u0027: {\u0027standard_attr_id\u0027: \u0027id\u0027}}"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_d1ad4b85","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":68},"updated":"2016-10-07 15:38:39.000000000","message":"Foreign keys in OVO are used to populate synthetic fields, adding this value means that StandardAttribute OVO class has a synthetic field of the Tag OVO class type.","commit_id":"79a009a946340d404bc5f8ac367d0f93ea7d5b4a"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"e8edcd7fa1bd21ae25f0114e40b31bfe3b895f67","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    primary_keys \u003d [\u0027tag\u0027, \u0027standard_attr_id\u0027]"},{"line_number":33,"context_line":"    foreign_keys \u003d {\u0027StandardAttribute\u0027: {\u0027standard_attr_id\u0027: \u0027id\u0027}}"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a95cdbc_7698e0c0","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":68},"in_reply_to":"1a95cdbc_d1ad4b85","updated":"2016-10-07 20:32:32.000000000","message":"afaik synthetic field is not required if there is a foreign key relationship.\nStandardAttribute ovo implementation [1] is pretty different than other OVOs. What would you suggest?\n[1] https://github.com/openstack/neutron/blob/master/neutron/objects/extensions/standardattributes.py","commit_id":"79a009a946340d404bc5f8ac367d0f93ea7d5b4a"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"418b6880beeacc62c3903f9fa36564fce377df29","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    primary_keys \u003d [\u0027tag\u0027, \u0027standard_attr_id\u0027]"},{"line_number":33,"context_line":"    foreign_keys \u003d {\u0027StandardAttribute\u0027: {\u0027standard_attr_id\u0027: \u0027id\u0027}}"}],"source_content_type":"text/x-python","patch_set":15,"id":"1a95cdbc_b0e402ac","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":68},"updated":"2016-10-10 12:06:04.000000000","message":"StandardAttribute is a special case, because the attributes are automagically loaded with DeclarativeObject and the standard attrs are declared and handled by neutron/db/standard_attr.py as declarative extensions. So here we need the standard_attr_id field as it reflects the relationship in DB, but it would not be used in OVO integration.\n\nIt can be removed.","commit_id":"4c89dc4dfce40ae1951790385f7bc6d301b81161"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"4e2119dce043003fd0d17d5c734a027001f84fc9","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    }"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    primary_keys \u003d [\u0027tag\u0027, \u0027standard_attr_id\u0027]"},{"line_number":33,"context_line":"    foreign_keys \u003d {\u0027StandardAttribute\u0027: {\u0027standard_attr_id\u0027: \u0027id\u0027}}"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa6399be_1cce3cb4","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":68},"in_reply_to":"1a95cdbc_b0e402ac","updated":"2016-10-12 15:49:11.000000000","message":"Done","commit_id":"4c89dc4dfce40ae1951790385f7bc6d301b81161"}],"neutron/services/tag/tag_plugin.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a72f60b794b8267a48da243398379a86493869ee","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def _get_resource(self, context, resource, resource_id):"},{"line_number":48,"context_line":"        resource_ovo \u003d resource_model_map[resource]"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            return resource_ovo.get_object(context, id\u003dresource_id)"},{"line_number":51,"context_line":"        except exc.NoResultFound:"},{"line_number":52,"context_line":"            raise tag_ext.TagResourceNotFound(resource\u003dresource,"},{"line_number":53,"context_line":"                                              resource_id\u003dresource_id)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_b05f1340","line":50,"range":{"start_line":50,"start_character":52,"end_line":50,"end_character":66},"updated":"2016-12-14 17:18:01.000000000","message":"not all the OVO has id as primary keys, maybe you can use _get_composite_keys  method for this.","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"32ab296fabb4f60e4ad5ddd424b876c7d4a79bad","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def _get_resource(self, context, resource, resource_id):"},{"line_number":48,"context_line":"        resource_ovo \u003d resource_model_map[resource]"},{"line_number":49,"context_line":"        try:"},{"line_number":50,"context_line":"            return resource_ovo.get_object(context, id\u003dresource_id)"},{"line_number":51,"context_line":"        except exc.NoResultFound:"},{"line_number":52,"context_line":"            raise tag_ext.TagResourceNotFound(resource\u003dresource,"},{"line_number":53,"context_line":"                                              resource_id\u003dresource_id)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_d1752c64","line":50,"range":{"start_line":50,"start_character":52,"end_line":50,"end_character":66},"in_reply_to":"1a6eadb0_b05f1340","updated":"2016-12-15 23:05:40.000000000","message":"Done","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a72f60b794b8267a48da243398379a86493869ee","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        tags_removed \u003d old_tags - new_tags"},{"line_number":77,"context_line":"        for tag_db in res.standard_attr.tags:"},{"line_number":78,"context_line":"            if tag_db.tag in tags_removed:"},{"line_number":79,"context_line":"                tag_obj.Tag.get_object(context, tag\u003dtag_db).delete()"},{"line_number":80,"context_line":"        for tag in tags_added:"},{"line_number":81,"context_line":"            tag_obj.Tag(standard_attr_id\u003dres.standard_attr_id,"},{"line_number":82,"context_line":"                        tag\u003dtag).create()"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_102c47aa","line":79,"range":{"start_line":79,"start_character":16,"end_line":79,"end_character":38},"updated":"2016-12-14 17:18:01.000000000","message":"You have to ensure that get_object returns something","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"32ab296fabb4f60e4ad5ddd424b876c7d4a79bad","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        tags_removed \u003d old_tags - new_tags"},{"line_number":77,"context_line":"        for tag_db in res.standard_attr.tags:"},{"line_number":78,"context_line":"            if tag_db.tag in tags_removed:"},{"line_number":79,"context_line":"                tag_obj.Tag.get_object(context, tag\u003dtag_db).delete()"},{"line_number":80,"context_line":"        for tag in tags_added:"},{"line_number":81,"context_line":"            tag_obj.Tag(standard_attr_id\u003dres.standard_attr_id,"},{"line_number":82,"context_line":"                        tag\u003dtag).create()"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_2b019106","line":79,"range":{"start_line":79,"start_character":16,"end_line":79,"end_character":38},"in_reply_to":"1a6eadb0_102c47aa","updated":"2016-12-15 23:05:40.000000000","message":"Replaced it with delete_objects method","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a72f60b794b8267a48da243398379a86493869ee","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    @log_helpers.log_method_call"},{"line_number":86,"context_line":"    def update_tag(self, context, resource, resource_id, tag):"},{"line_number":87,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        if any(tag \u003d\u003d tag_db.tag for tag_db in res.standard_attr.tags):"},{"line_number":90,"context_line":"            return"},{"line_number":91,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_9345c118","line":88,"updated":"2016-12-14 17:18:01.000000000","message":"This extra line is not needed","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"32ab296fabb4f60e4ad5ddd424b876c7d4a79bad","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    @log_helpers.log_method_call"},{"line_number":86,"context_line":"    def update_tag(self, context, resource, resource_id, tag):"},{"line_number":87,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        if any(tag \u003d\u003d tag_db.tag for tag_db in res.standard_attr.tags):"},{"line_number":90,"context_line":"            return"},{"line_number":91,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_67a2df9a","line":88,"in_reply_to":"1a6eadb0_9345c118","updated":"2016-12-15 23:05:40.000000000","message":"Done","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a72f60b794b8267a48da243398379a86493869ee","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"},{"line_number":93,"context_line":"                    tag\u003dtag).create()"},{"line_number":94,"context_line":"        except db_exc.DBDuplicateEntry:"},{"line_number":95,"context_line":"            pass"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @log_helpers.log_method_call"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_d3c0197f","line":94,"range":{"start_line":94,"start_character":22,"end_line":94,"end_character":38},"updated":"2016-12-14 17:18:01.000000000","message":"Given that you\u0027re using OVO, the possible exception retrieved can be a NeutronDbObjectDuplicateEntry","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"32ab296fabb4f60e4ad5ddd424b876c7d4a79bad","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"},{"line_number":93,"context_line":"                    tag\u003dtag).create()"},{"line_number":94,"context_line":"        except db_exc.DBDuplicateEntry:"},{"line_number":95,"context_line":"            pass"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @log_helpers.log_method_call"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_070a0b79","line":94,"range":{"start_line":94,"start_character":22,"end_line":94,"end_character":38},"in_reply_to":"1a6eadb0_6c4ac427","updated":"2016-12-15 23:05:40.000000000","message":"Done","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a89b5e45b597545d60f7fc67a657b931d4f1c48e","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"},{"line_number":93,"context_line":"                    tag\u003dtag).create()"},{"line_number":94,"context_line":"        except db_exc.DBDuplicateEntry:"},{"line_number":95,"context_line":"            pass"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @log_helpers.log_method_call"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_6c4ac427","line":94,"range":{"start_line":94,"start_character":22,"end_line":94,"end_character":38},"in_reply_to":"1a6eadb0_d3c0197f","updated":"2016-12-15 20:51:34.000000000","message":"+1","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"32ab296fabb4f60e4ad5ddd424b876c7d4a79bad","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        try:"},{"line_number":92,"context_line":"            tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"},{"line_number":93,"context_line":"                    tag\u003dtag).create()"},{"line_number":94,"context_line":"        except db_exc.DBDuplicateEntry:"},{"line_number":95,"context_line":"            pass"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @log_helpers.log_method_call"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_e718afd5","line":94,"range":{"start_line":94,"start_character":22,"end_line":94,"end_character":38},"in_reply_to":"1a6eadb0_d3c0197f","updated":"2016-12-15 23:05:40.000000000","message":"Done","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a72f60b794b8267a48da243398379a86493869ee","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def delete_tags(self, context, resource, resource_id):"},{"line_number":99,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":100,"context_line":"        for obj in tag_obj.Tag.get_objects(context,"},{"line_number":101,"context_line":"                                       standard_attr_id\u003dres.standard_attr_id):"},{"line_number":102,"context_line":"            obj.delete()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @log_helpers.log_method_call"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_f36d1599","line":101,"range":{"start_line":101,"start_character":39,"end_line":101,"end_character":55},"updated":"2016-12-14 17:18:01.000000000","message":"nit: Wrong indentation format","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"32ab296fabb4f60e4ad5ddd424b876c7d4a79bad","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    def delete_tags(self, context, resource, resource_id):"},{"line_number":99,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":100,"context_line":"        for obj in tag_obj.Tag.get_objects(context,"},{"line_number":101,"context_line":"                                       standard_attr_id\u003dres.standard_attr_id):"},{"line_number":102,"context_line":"            obj.delete()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @log_helpers.log_method_call"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_871e1bb9","line":101,"range":{"start_line":101,"start_character":39,"end_line":101,"end_character":55},"in_reply_to":"1a6eadb0_f36d1599","updated":"2016-12-15 23:05:40.000000000","message":"Done","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a89b5e45b597545d60f7fc67a657b931d4f1c48e","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":100,"context_line":"        for obj in tag_obj.Tag.get_objects(context,"},{"line_number":101,"context_line":"                                       standard_attr_id\u003dres.standard_attr_id):"},{"line_number":102,"context_line":"            obj.delete()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @log_helpers.log_method_call"},{"line_number":105,"context_line":"    def delete_tag(self, context, resource, resource_id, tag):"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_ecd6d44d","line":102,"updated":"2016-12-15 20:51:34.000000000","message":"You can use the delete_objects method here:\nhttps://review.openstack.org/#/c/403832/","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"32ab296fabb4f60e4ad5ddd424b876c7d4a79bad","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":100,"context_line":"        for obj in tag_obj.Tag.get_objects(context,"},{"line_number":101,"context_line":"                                       standard_attr_id\u003dres.standard_attr_id):"},{"line_number":102,"context_line":"            obj.delete()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @log_helpers.log_method_call"},{"line_number":105,"context_line":"    def delete_tag(self, context, resource, resource_id, tag):"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_8b08e529","line":102,"in_reply_to":"1a6eadb0_ecd6d44d","updated":"2016-12-15 23:05:40.000000000","message":"Done","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a72f60b794b8267a48da243398379a86493869ee","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        obj \u003d tag_obj.Tag.get_object(context, tag\u003dtag,"},{"line_number":109,"context_line":"                               standard_attr_id\u003dres.standard_attr_id).delete()"},{"line_number":110,"context_line":"        if obj:"},{"line_number":111,"context_line":"            obj.delete()"},{"line_number":112,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_b3fabdbb","line":109,"range":{"start_line":109,"start_character":31,"end_line":109,"end_character":47},"updated":"2016-12-14 17:18:01.000000000","message":"ditto: line 101","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"32ab296fabb4f60e4ad5ddd424b876c7d4a79bad","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        obj \u003d tag_obj.Tag.get_object(context, tag\u003dtag,"},{"line_number":109,"context_line":"                               standard_attr_id\u003dres.standard_attr_id).delete()"},{"line_number":110,"context_line":"        if obj:"},{"line_number":111,"context_line":"            obj.delete()"},{"line_number":112,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_278627db","line":109,"range":{"start_line":109,"start_character":31,"end_line":109,"end_character":47},"in_reply_to":"1a6eadb0_b3fabdbb","updated":"2016-12-15 23:05:40.000000000","message":"Done","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"a72f60b794b8267a48da243398379a86493869ee","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        obj \u003d tag_obj.Tag.get_object(context, tag\u003dtag,"},{"line_number":109,"context_line":"                               standard_attr_id\u003dres.standard_attr_id).delete()"},{"line_number":110,"context_line":"        if obj:"},{"line_number":111,"context_line":"            obj.delete()"},{"line_number":112,"context_line":"        else:"},{"line_number":113,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    # support only _apply_dict_extend_functions supported resources"},{"line_number":116,"context_line":"    # at the moment."}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_73de6540","line":113,"range":{"start_line":110,"start_character":8,"end_line":113,"end_character":46},"updated":"2016-12-14 17:18:01.000000000","message":"What about this:\n\nif not obj:\n     raise tag_ext.TagNotFound(tag\u003dtag)\nobj.delete()","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":22776,"name":"Nakul Dahiwade","email":"nakul.dahiwade@intel.com","username":"nakul.dahiwade"},"change_message_id":"a89b5e45b597545d60f7fc67a657b931d4f1c48e","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        obj \u003d tag_obj.Tag.get_object(context, tag\u003dtag,"},{"line_number":109,"context_line":"                               standard_attr_id\u003dres.standard_attr_id).delete()"},{"line_number":110,"context_line":"        if obj:"},{"line_number":111,"context_line":"            obj.delete()"},{"line_number":112,"context_line":"        else:"},{"line_number":113,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    # support only _apply_dict_extend_functions supported resources"},{"line_number":116,"context_line":"    # at the moment."}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_ecd97458","line":113,"range":{"start_line":110,"start_character":8,"end_line":113,"end_character":46},"in_reply_to":"1a6eadb0_73de6540","updated":"2016-12-15 20:51:34.000000000","message":"+1","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"32ab296fabb4f60e4ad5ddd424b876c7d4a79bad","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        obj \u003d tag_obj.Tag.get_object(context, tag\u003dtag,"},{"line_number":109,"context_line":"                               standard_attr_id\u003dres.standard_attr_id).delete()"},{"line_number":110,"context_line":"        if obj:"},{"line_number":111,"context_line":"            obj.delete()"},{"line_number":112,"context_line":"        else:"},{"line_number":113,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    # support only _apply_dict_extend_functions supported resources"},{"line_number":116,"context_line":"    # at the moment."}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_a772370f","line":113,"range":{"start_line":110,"start_character":8,"end_line":113,"end_character":46},"in_reply_to":"1a6eadb0_73de6540","updated":"2016-12-15 23:05:40.000000000","message":"Done","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"32ab296fabb4f60e4ad5ddd424b876c7d4a79bad","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        obj \u003d tag_obj.Tag.get_object(context, tag\u003dtag,"},{"line_number":109,"context_line":"                               standard_attr_id\u003dres.standard_attr_id).delete()"},{"line_number":110,"context_line":"        if obj:"},{"line_number":111,"context_line":"            obj.delete()"},{"line_number":112,"context_line":"        else:"},{"line_number":113,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    # support only _apply_dict_extend_functions supported resources"},{"line_number":116,"context_line":"    # at the moment."}],"source_content_type":"text/x-python","patch_set":26,"id":"1a6eadb0_e766ef4f","line":113,"range":{"start_line":110,"start_character":8,"end_line":113,"end_character":46},"in_reply_to":"1a6eadb0_ecd97458","updated":"2016-12-15 23:05:40.000000000","message":"Done","commit_id":"7a4b49909269e71f27effca1a6db3b33d5747a92"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"cfaf14a4f9118dbd27d87b8c326f9624948f95a6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        resource_ovo \u003d resource_model_map[resource]"},{"line_number":50,"context_line":"        try:"},{"line_number":51,"context_line":"            return resource_ovo.get_object(context,"},{"line_number":52,"context_line":"                **resource_ovo._get_composite_keys())"},{"line_number":53,"context_line":"        except exc.NoResultFound:"},{"line_number":54,"context_line":"            raise tag_ext.TagResourceNotFound(resource\u003dresource,"},{"line_number":55,"context_line":"                                              resource_id\u003dresource_id)"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba5201f7_3073194f","line":52,"range":{"start_line":52,"start_character":32,"end_line":52,"end_character":50},"updated":"2017-01-04 11:34:27.000000000","message":"It wont work, since you have to call get_composite_keys on object instance, not on class.","commit_id":"a680fd4e34dcf25a05c134f1b7c85c50fdeeb1d2"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"de41e423f34e577ba9e57643d2eab618680d4d82","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        resource_ovo \u003d resource_model_map[resource]"},{"line_number":50,"context_line":"        try:"},{"line_number":51,"context_line":"            return resource_ovo.get_object(context,"},{"line_number":52,"context_line":"                **resource_ovo._get_composite_keys())"},{"line_number":53,"context_line":"        except exc.NoResultFound:"},{"line_number":54,"context_line":"            raise tag_ext.TagResourceNotFound(resource\u003dresource,"},{"line_number":55,"context_line":"                                              resource_id\u003dresource_id)"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba5201f7_cd388540","line":52,"range":{"start_line":52,"start_character":32,"end_line":52,"end_character":50},"in_reply_to":"ba5201f7_3073194f","updated":"2017-01-11 03:44:24.000000000","message":"Done","commit_id":"a680fd4e34dcf25a05c134f1b7c85c50fdeeb1d2"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"cfaf14a4f9118dbd27d87b8c326f9624948f95a6","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    def delete_tag(self, context, resource, resource_id, tag):"},{"line_number":106,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":107,"context_line":"        obj \u003d tag_obj.Tag.get_object(context, tag\u003dtag,"},{"line_number":108,"context_line":"            standard_attr_id\u003dres.standard_attr_id).delete()"},{"line_number":109,"context_line":"        if not obj:"},{"line_number":110,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":111,"context_line":"        obj.delete()"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba5201f7_10dd350e","line":108,"range":{"start_line":108,"start_character":51,"end_line":108,"end_character":59},"updated":"2017-01-04 11:34:27.000000000","message":"It should be removed.","commit_id":"a680fd4e34dcf25a05c134f1b7c85c50fdeeb1d2"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"de41e423f34e577ba9e57643d2eab618680d4d82","unresolved":false,"context_lines":[{"line_number":105,"context_line":"    def delete_tag(self, context, resource, resource_id, tag):"},{"line_number":106,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":107,"context_line":"        obj \u003d tag_obj.Tag.get_object(context, tag\u003dtag,"},{"line_number":108,"context_line":"            standard_attr_id\u003dres.standard_attr_id).delete()"},{"line_number":109,"context_line":"        if not obj:"},{"line_number":110,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":111,"context_line":"        obj.delete()"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba5201f7_6ed3ba04","line":108,"range":{"start_line":108,"start_character":51,"end_line":108,"end_character":59},"in_reply_to":"ba5201f7_10dd350e","updated":"2017-01-11 03:44:24.000000000","message":"Done","commit_id":"a680fd4e34dcf25a05c134f1b7c85c50fdeeb1d2"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"cfaf14a4f9118dbd27d87b8c326f9624948f95a6","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":107,"context_line":"        obj \u003d tag_obj.Tag.get_object(context, tag\u003dtag,"},{"line_number":108,"context_line":"            standard_attr_id\u003dres.standard_attr_id).delete()"},{"line_number":109,"context_line":"        if not obj:"},{"line_number":110,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":111,"context_line":"        obj.delete()"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"ba5201f7_701681a8","line":109,"updated":"2017-01-04 11:34:27.000000000","message":"I would rework it to use delete_objects:\n\n    if not tag_obj.Tag.delete_objects(context, tag, std_attr_id):\n        raise ...","commit_id":"a680fd4e34dcf25a05c134f1b7c85c50fdeeb1d2"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"de41e423f34e577ba9e57643d2eab618680d4d82","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":107,"context_line":"        obj \u003d tag_obj.Tag.get_object(context, tag\u003dtag,"},{"line_number":108,"context_line":"            standard_attr_id\u003dres.standard_attr_id).delete()"},{"line_number":109,"context_line":"        if not obj:"},{"line_number":110,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":111,"context_line":"        obj.delete()"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"ba5201f7_2ee532db","line":109,"in_reply_to":"ba5201f7_701681a8","updated":"2017-01-11 03:44:24.000000000","message":"Done","commit_id":"a680fd4e34dcf25a05c134f1b7c85c50fdeeb1d2"},{"author":{"_account_id":15518,"name":"Artur Korzeniewski","email":"artur.korzen@wp.pl","username":"akorzeni"},"change_message_id":"cfaf14a4f9118dbd27d87b8c326f9624948f95a6","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            resource, [_extend_tags_dict])"},{"line_number":118,"context_line":"        common_db_mixin.CommonDbMixin.register_model_query_hook("},{"line_number":119,"context_line":"            resource_ovo.db_model, \"tag\", None, None,"},{"line_number":120,"context_line":"            functools.partial(tag_methods.apply_tag_filters, resource_ovo))"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba5201f7_d06e4d2e","line":120,"range":{"start_line":120,"start_character":61,"end_line":120,"end_character":73},"updated":"2017-01-04 11:34:27.000000000","message":"Not sure if this works.","commit_id":"a680fd4e34dcf25a05c134f1b7c85c50fdeeb1d2"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"de41e423f34e577ba9e57643d2eab618680d4d82","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            resource, [_extend_tags_dict])"},{"line_number":118,"context_line":"        common_db_mixin.CommonDbMixin.register_model_query_hook("},{"line_number":119,"context_line":"            resource_ovo.db_model, \"tag\", None, None,"},{"line_number":120,"context_line":"            functools.partial(tag_methods.apply_tag_filters, resource_ovo))"}],"source_content_type":"text/x-python","patch_set":28,"id":"ba5201f7_0ac83a73","line":120,"range":{"start_line":120,"start_character":61,"end_line":120,"end_character":73},"in_reply_to":"ba5201f7_d06e4d2e","updated":"2017-01-11 03:44:24.000000000","message":"resource_model_map dictionary currently maps resource and model[1].\nIn [2] model.standard_attr_id is being used . Made this change to check if replacing model with resource ovo would work. It seems that this approach doesn\u0027t work.\n[1] https://review.openstack.org/#/c/356825/28/neutron/services/tag/tag_plugin.py@32\n[2] https://github.com/openstack/neutron/blob/master/neutron/db/tag_db.py#L56,","commit_id":"a680fd4e34dcf25a05c134f1b7c85c50fdeeb1d2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"afa802923e5f85210b6134a87890b74b12fa91a8","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        max_retries\u003ddb_api.MAX_RETRIES,"},{"line_number":70,"context_line":"        exception_checker\u003dlambda e: isinstance(e, db_exc.DBDuplicateEntry))"},{"line_number":71,"context_line":"    def update_tags(self, context, resource, resource_id, body):"},{"line_number":72,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":73,"context_line":"            # We get and do all operations with objects in one session"},{"line_number":74,"context_line":"            res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":75,"context_line":"            new_tags \u003d set(body[\u0027tags\u0027])"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5201f7_fcb6a4f7","side":"PARENT","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":58},"updated":"2017-01-11 22:17:19.000000000","message":"Given that you need to delete and create objects in the same method you need to warranty that in a transaction, so you don\u0027t need to remove this.","commit_id":"937e9546f3b9b828a728b5d48023ee3b3baa6b5a"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"370dbdc4879fdb4325b51bc1d62aaef623d22213","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        max_retries\u003ddb_api.MAX_RETRIES,"},{"line_number":70,"context_line":"        exception_checker\u003dlambda e: isinstance(e, db_exc.DBDuplicateEntry))"},{"line_number":71,"context_line":"    def update_tags(self, context, resource, resource_id, body):"},{"line_number":72,"context_line":"        with db_api.context_manager.writer.using(context):"},{"line_number":73,"context_line":"            # We get and do all operations with objects in one session"},{"line_number":74,"context_line":"            res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":75,"context_line":"            new_tags \u003d set(body[\u0027tags\u0027])"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a3c09a3_d4dcf448","side":"PARENT","line":72,"range":{"start_line":72,"start_character":8,"end_line":72,"end_character":58},"in_reply_to":"ba5201f7_fcb6a4f7","updated":"2017-01-13 00:06:56.000000000","message":"Done","commit_id":"937e9546f3b9b828a728b5d48023ee3b3baa6b5a"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"afa802923e5f85210b6134a87890b74b12fa91a8","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    def delete_tag(self, context, resource, resource_id, tag):"},{"line_number":105,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":106,"context_line":"        filters \u003d {\"tag\": tag, \"standard_attr_id\": res.standard_attr_id}"},{"line_number":107,"context_line":"        if not tag_obj.Tag.delete_objects(context, **filters):"},{"line_number":108,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    # support only _apply_dict_extend_functions supported resources"}],"source_content_type":"text/x-python","patch_set":30,"id":"ba5201f7_5cc25035","line":107,"range":{"start_line":107,"start_character":15,"end_line":107,"end_character":62},"updated":"2017-01-11 22:17:19.000000000","message":"didn\u0027t this work without a dict?\n\n    tag_obj.Tag.delete_objects(context, tag\u003dtag, standard_attr_id\u003dres.standard_attr_id):","commit_id":"ec2931760ad76fa8e65d456e50433e2b2a2183a1"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"370dbdc4879fdb4325b51bc1d62aaef623d22213","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    def delete_tag(self, context, resource, resource_id, tag):"},{"line_number":105,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":106,"context_line":"        filters \u003d {\"tag\": tag, \"standard_attr_id\": res.standard_attr_id}"},{"line_number":107,"context_line":"        if not tag_obj.Tag.delete_objects(context, **filters):"},{"line_number":108,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    # support only _apply_dict_extend_functions supported resources"}],"source_content_type":"text/x-python","patch_set":30,"id":"7a3c09a3_553e3bb9","line":107,"range":{"start_line":107,"start_character":15,"end_line":107,"end_character":62},"in_reply_to":"ba5201f7_5cc25035","updated":"2017-01-13 00:06:56.000000000","message":"changed it not to use dictionary","commit_id":"ec2931760ad76fa8e65d456e50433e2b2a2183a1"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"1a8c23a69c73ea48cc238d0f13426a98679a1dbc","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            old_tags \u003d {tag_db.tag for tag_db in res.standard_attr.tags}"},{"line_number":78,"context_line":"            tags_added \u003d new_tags - old_tags"},{"line_number":79,"context_line":"            tags_removed \u003d old_tags - new_tags"},{"line_number":80,"context_line":"            for tag_db in res.standard_attr.tags:"},{"line_number":81,"context_line":"                if tag_db.tag in tags_removed:"},{"line_number":82,"context_line":"                    tag_obj.Tag.delete_objects(context, tag\u003dtag_db.tag)"},{"line_number":83,"context_line":"            for tag in tags_added:"},{"line_number":84,"context_line":"                tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"},{"line_number":85,"context_line":"                            tag\u003dtag).create()"}],"source_content_type":"text/x-python","patch_set":33,"id":"7a3c09a3_d515cb9b","line":82,"range":{"start_line":80,"start_character":12,"end_line":82,"end_character":71},"updated":"2017-01-18 20:06:48.000000000","message":"(No action required)\n\nA nice way of doing it would be:\n\ntag_obj.Tag.delete_objects(context, tag\u003d[\n    tag_db.tag\n    for tag_db in res.standard_attr.tags\n    if tag_db.tag in tags_removed\n])\n\nThat would give us a single call to database to fetch all relevant tag records.","commit_id":"fdbdff9dea0ee67247dd8fa0a8d2db2a6b4da884"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"1a8c23a69c73ea48cc238d0f13426a98679a1dbc","unresolved":false,"context_lines":[{"line_number":92,"context_line":"            return"},{"line_number":93,"context_line":"        try:"},{"line_number":94,"context_line":"            tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"},{"line_number":95,"context_line":"                    tag\u003dtag).create()"},{"line_number":96,"context_line":"        except obj_exc.NeutronDbObjectDuplicateEntry:"},{"line_number":97,"context_line":"            pass"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":33,"id":"7a3c09a3_d57cebed","line":95,"updated":"2017-01-18 20:06:48.000000000","message":"(nit) indentation is not ideal here","commit_id":"fdbdff9dea0ee67247dd8fa0a8d2db2a6b4da884"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5d759f18577a1843df70c767938d9ebea9113381","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            old_tags \u003d {tag_db.tag for tag_db in res.standard_attr.tags}"},{"line_number":88,"context_line":"            tags_added \u003d new_tags - old_tags"},{"line_number":89,"context_line":"            tags_removed \u003d old_tags - new_tags"},{"line_number":90,"context_line":"            for tag_db in res.standard_attr.tags:"},{"line_number":91,"context_line":"                if tag_db.tag in tags_removed:"},{"line_number":92,"context_line":"                    tag_obj.Tag.delete_objects(context, tag\u003dtag_db.tag)"},{"line_number":93,"context_line":"            for tag in tags_added:"},{"line_number":94,"context_line":"                tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"},{"line_number":95,"context_line":"                            tag\u003dtag).create()"}],"source_content_type":"text/x-python","patch_set":35,"id":"1a430d35_557a53f2","line":92,"range":{"start_line":90,"start_character":12,"end_line":92,"end_character":71},"updated":"2017-02-06 18:51:48.000000000","message":"Copying comment from a previous PS.\n\n(No action required)\nA nice way of doing it would be:\ntag_obj.Tag.delete_objects(context, tag\u003d[\n    tag_db.tag\n    for tag_db in res.standard_attr.tags\n    if tag_db.tag in tags_removed\n])\nThat would give us a single call to database to fetch all relevant tag records.","commit_id":"7193ebea78c425034f343c0ad06e293f99ebb9d0"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"6232a3d1a5b1e1484bd848aa71d3f5a553beb793","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            old_tags \u003d {tag_db.tag for tag_db in res.standard_attr.tags}"},{"line_number":88,"context_line":"            tags_added \u003d new_tags - old_tags"},{"line_number":89,"context_line":"            tags_removed \u003d old_tags - new_tags"},{"line_number":90,"context_line":"            for tag_db in res.standard_attr.tags:"},{"line_number":91,"context_line":"                if tag_db.tag in tags_removed:"},{"line_number":92,"context_line":"                    tag_obj.Tag.delete_objects(context, tag\u003dtag_db.tag)"},{"line_number":93,"context_line":"            for tag in tags_added:"},{"line_number":94,"context_line":"                tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"},{"line_number":95,"context_line":"                            tag\u003dtag).create()"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa31d9ce_e6e3d731","line":92,"range":{"start_line":90,"start_character":12,"end_line":92,"end_character":71},"in_reply_to":"1a430d35_2fc46a8f","updated":"2017-02-17 02:59:39.000000000","message":"Done","commit_id":"7193ebea78c425034f343c0ad06e293f99ebb9d0"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"6232a3d1a5b1e1484bd848aa71d3f5a553beb793","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            old_tags \u003d {tag_db.tag for tag_db in res.standard_attr.tags}"},{"line_number":88,"context_line":"            tags_added \u003d new_tags - old_tags"},{"line_number":89,"context_line":"            tags_removed \u003d old_tags - new_tags"},{"line_number":90,"context_line":"            for tag_db in res.standard_attr.tags:"},{"line_number":91,"context_line":"                if tag_db.tag in tags_removed:"},{"line_number":92,"context_line":"                    tag_obj.Tag.delete_objects(context, tag\u003dtag_db.tag)"},{"line_number":93,"context_line":"            for tag in tags_added:"},{"line_number":94,"context_line":"                tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"},{"line_number":95,"context_line":"                            tag\u003dtag).create()"}],"source_content_type":"text/x-python","patch_set":35,"id":"fa31d9ce_06cf0bb4","line":92,"range":{"start_line":90,"start_character":12,"end_line":92,"end_character":71},"in_reply_to":"1a430d35_557a53f2","updated":"2017-02-17 02:59:39.000000000","message":"Done","commit_id":"7193ebea78c425034f343c0ad06e293f99ebb9d0"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"f223ccea6c3dfae9d63191cf21a7e1059a3acdd3","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            old_tags \u003d {tag_db.tag for tag_db in res.standard_attr.tags}"},{"line_number":88,"context_line":"            tags_added \u003d new_tags - old_tags"},{"line_number":89,"context_line":"            tags_removed \u003d old_tags - new_tags"},{"line_number":90,"context_line":"            for tag_db in res.standard_attr.tags:"},{"line_number":91,"context_line":"                if tag_db.tag in tags_removed:"},{"line_number":92,"context_line":"                    tag_obj.Tag.delete_objects(context, tag\u003dtag_db.tag)"},{"line_number":93,"context_line":"            for tag in tags_added:"},{"line_number":94,"context_line":"                tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"},{"line_number":95,"context_line":"                            tag\u003dtag).create()"}],"source_content_type":"text/x-python","patch_set":35,"id":"1a430d35_2fc46a8f","line":92,"range":{"start_line":90,"start_character":12,"end_line":92,"end_character":71},"in_reply_to":"1a430d35_557a53f2","updated":"2017-02-07 16:04:13.000000000","message":"It seems like functional test \"_test_filter_tags\" is failing to retrieve any network with a blue tag.  Maybe it\u0027s a good time to explore this suggestion.","commit_id":"7193ebea78c425034f343c0ad06e293f99ebb9d0"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"5d759f18577a1843df70c767938d9ebea9113381","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            return"},{"line_number":103,"context_line":"        try:"},{"line_number":104,"context_line":"            tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"},{"line_number":105,"context_line":"                    tag\u003dtag).create()"},{"line_number":106,"context_line":"        except obj_exc.NeutronDbObjectDuplicateEntry:"},{"line_number":107,"context_line":"            pass"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"1a430d35_d5556350","line":105,"updated":"2017-02-06 18:51:48.000000000","message":"Copying comment from a previous PS.\n\n(nit) indentation is not ideal here","commit_id":"7193ebea78c425034f343c0ad06e293f99ebb9d0"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"6232a3d1a5b1e1484bd848aa71d3f5a553beb793","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            return"},{"line_number":103,"context_line":"        try:"},{"line_number":104,"context_line":"            tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"},{"line_number":105,"context_line":"                    tag\u003dtag).create()"},{"line_number":106,"context_line":"        except obj_exc.NeutronDbObjectDuplicateEntry:"},{"line_number":107,"context_line":"            pass"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":35,"id":"fa31d9ce_c6e6d343","line":105,"in_reply_to":"1a430d35_d5556350","updated":"2017-02-17 02:59:39.000000000","message":"Done","commit_id":"7193ebea78c425034f343c0ad06e293f99ebb9d0"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"c1b3cb3b670784bd4a6c42e4410a663f2f99617a","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            old_tags \u003d {tag_db.tag for tag_db in res.standard_attr.tags}"},{"line_number":88,"context_line":"            tags_added \u003d new_tags - old_tags"},{"line_number":89,"context_line":"            tags_removed \u003d old_tags - new_tags"},{"line_number":90,"context_line":"            tag_obj.Tag.delete_objects(context, tag\u003d["},{"line_number":91,"context_line":"                tag_db.tag"},{"line_number":92,"context_line":"                for tag_db in res.standard_attr.tags"},{"line_number":93,"context_line":"                if tag_db.tag in tags_removed"},{"line_number":94,"context_line":"            ])"},{"line_number":95,"context_line":"            for tag in tags_added:"},{"line_number":96,"context_line":"                tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_ec744337","line":93,"range":{"start_line":90,"start_character":48,"end_line":93,"end_character":45},"updated":"2017-03-02 17:42:37.000000000","message":"I doubt this will work because in object tag is string and here argument will be a list ? can you add a unit test to demonstrate this ?","commit_id":"2ca1b2561739377dc081b36ed6ce209c143da714"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"536633b4a298c07d90e6623a3b46455f4c961560","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            old_tags \u003d {tag_db.tag for tag_db in res.standard_attr.tags}"},{"line_number":88,"context_line":"            tags_added \u003d new_tags - old_tags"},{"line_number":89,"context_line":"            tags_removed \u003d old_tags - new_tags"},{"line_number":90,"context_line":"            tag_obj.Tag.delete_objects(context, tag\u003d["},{"line_number":91,"context_line":"                tag_db.tag"},{"line_number":92,"context_line":"                for tag_db in res.standard_attr.tags"},{"line_number":93,"context_line":"                if tag_db.tag in tags_removed"},{"line_number":94,"context_line":"            ])"},{"line_number":95,"context_line":"            for tag in tags_added:"},{"line_number":96,"context_line":"                tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_6e8040c1","line":93,"range":{"start_line":90,"start_character":48,"end_line":93,"end_character":45},"in_reply_to":"ba2be162_53dfa30c","updated":"2017-03-02 20:51:18.000000000","message":"that\u0027s why I\u0027ve raised concern here, tag is string field but here we\u0027re giving list of strings","commit_id":"2ca1b2561739377dc081b36ed6ce209c143da714"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"495db5d5da240c326110f51a1e696647fcbe40e9","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            old_tags \u003d {tag_db.tag for tag_db in res.standard_attr.tags}"},{"line_number":88,"context_line":"            tags_added \u003d new_tags - old_tags"},{"line_number":89,"context_line":"            tags_removed \u003d old_tags - new_tags"},{"line_number":90,"context_line":"            tag_obj.Tag.delete_objects(context, tag\u003d["},{"line_number":91,"context_line":"                tag_db.tag"},{"line_number":92,"context_line":"                for tag_db in res.standard_attr.tags"},{"line_number":93,"context_line":"                if tag_db.tag in tags_removed"},{"line_number":94,"context_line":"            ])"},{"line_number":95,"context_line":"            for tag in tags_added:"},{"line_number":96,"context_line":"                tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_4e337c14","line":93,"range":{"start_line":90,"start_character":48,"end_line":93,"end_character":45},"in_reply_to":"ba2be162_6e8040c1","updated":"2017-03-02 21:12:10.000000000","message":"please refer to\ndef _kwargs_to_filters(**kwargs):\n    return {k: v if isinstance(v, list) else [v] for k, v in kwargs.items()}\nIt can handle string as well as list of strings.","commit_id":"2ca1b2561739377dc081b36ed6ce209c143da714"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6c24688beea700b035a35cb1eeabf094b4ebfd0a","unresolved":false,"context_lines":[{"line_number":87,"context_line":"            old_tags \u003d {tag_db.tag for tag_db in res.standard_attr.tags}"},{"line_number":88,"context_line":"            tags_added \u003d new_tags - old_tags"},{"line_number":89,"context_line":"            tags_removed \u003d old_tags - new_tags"},{"line_number":90,"context_line":"            tag_obj.Tag.delete_objects(context, tag\u003d["},{"line_number":91,"context_line":"                tag_db.tag"},{"line_number":92,"context_line":"                for tag_db in res.standard_attr.tags"},{"line_number":93,"context_line":"                if tag_db.tag in tags_removed"},{"line_number":94,"context_line":"            ])"},{"line_number":95,"context_line":"            for tag in tags_added:"},{"line_number":96,"context_line":"                tag_obj.Tag(context, standard_attr_id\u003dres.standard_attr_id,"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_53dfa30c","line":93,"range":{"start_line":90,"start_character":48,"end_line":93,"end_character":45},"in_reply_to":"ba2be162_ec744337","updated":"2017-03-02 20:25:01.000000000","message":"This function is creating a list of strings filtered of those which are in tags_removed list","commit_id":"2ca1b2561739377dc081b36ed6ce209c143da714"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"4d28e36d8a9c7af0f3c4d3020ed8f5174c081562","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    @log_helpers.log_method_call"},{"line_number":112,"context_line":"    def delete_tags(self, context, resource, resource_id):"},{"line_number":113,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":114,"context_line":"        tag_obj.Tag.delete_objects(context,"},{"line_number":115,"context_line":"                                   standard_attr_id\u003dres.standard_attr_id)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @log_helpers.log_method_call"}],"source_content_type":"text/x-python","patch_set":37,"id":"da36d5c6_af355df8","line":114,"updated":"2017-02-17 21:20:53.000000000","message":"Good to see the standard_attr_id in OVOs which we discussed being used here. :)","commit_id":"2ca1b2561739377dc081b36ed6ce209c143da714"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"495db5d5da240c326110f51a1e696647fcbe40e9","unresolved":false,"context_lines":[{"line_number":111,"context_line":"    @log_helpers.log_method_call"},{"line_number":112,"context_line":"    def delete_tags(self, context, resource, resource_id):"},{"line_number":113,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":114,"context_line":"        tag_obj.Tag.delete_objects(context,"},{"line_number":115,"context_line":"                                   standard_attr_id\u003dres.standard_attr_id)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @log_helpers.log_method_call"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_29c4825d","line":114,"in_reply_to":"da36d5c6_af355df8","updated":"2017-03-02 21:12:10.000000000","message":":)","commit_id":"2ca1b2561739377dc081b36ed6ce209c143da714"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"c1b3cb3b670784bd4a6c42e4410a663f2f99617a","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    @log_helpers.log_method_call"},{"line_number":118,"context_line":"    def delete_tag(self, context, resource, resource_id, tag):"},{"line_number":119,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":120,"context_line":"        if not tag_obj.Tag.delete_objects(context,"},{"line_number":121,"context_line":"            tag\u003dtag, standard_attr_id\u003dres.standard_attr_id):"},{"line_number":122,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __new__(cls, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_27283486","line":121,"range":{"start_line":120,"start_character":7,"end_line":121,"end_character":60},"updated":"2017-03-02 17:42:37.000000000","message":"this condition needs to be updated, as I see in try it was calling one() so mean it should have exactly one result or raise an exception which this code does not ensures and delete_objects returns length of objects deleted.","commit_id":"2ca1b2561739377dc081b36ed6ce209c143da714"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6c24688beea700b035a35cb1eeabf094b4ebfd0a","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    @log_helpers.log_method_call"},{"line_number":118,"context_line":"    def delete_tag(self, context, resource, resource_id, tag):"},{"line_number":119,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":120,"context_line":"        if not tag_obj.Tag.delete_objects(context,"},{"line_number":121,"context_line":"            tag\u003dtag, standard_attr_id\u003dres.standard_attr_id):"},{"line_number":122,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __new__(cls, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_331cefc0","line":121,"range":{"start_line":120,"start_character":7,"end_line":121,"end_character":60},"in_reply_to":"ba2be162_27283486","updated":"2017-03-02 20:25:01.000000000","message":"For this case standard_attr_id and tag are the primary keys of the table, resulting in a unique possible returned value.","commit_id":"2ca1b2561739377dc081b36ed6ce209c143da714"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"536633b4a298c07d90e6623a3b46455f4c961560","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    @log_helpers.log_method_call"},{"line_number":118,"context_line":"    def delete_tag(self, context, resource, resource_id, tag):"},{"line_number":119,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":120,"context_line":"        if not tag_obj.Tag.delete_objects(context,"},{"line_number":121,"context_line":"            tag\u003dtag, standard_attr_id\u003dres.standard_attr_id):"},{"line_number":122,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __new__(cls, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_8e0ad477","line":121,"range":{"start_line":120,"start_character":7,"end_line":121,"end_character":60},"in_reply_to":"ba2be162_331cefc0","updated":"2017-03-02 20:51:18.000000000","message":"that is true, but then why not using the delete_object and it will also make sure primary key is passed or not.","commit_id":"2ca1b2561739377dc081b36ed6ce209c143da714"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"2f11a154eadc73f8b74b39d2dde4e7b4417c368a","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    @log_helpers.log_method_call"},{"line_number":118,"context_line":"    def delete_tag(self, context, resource, resource_id, tag):"},{"line_number":119,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":120,"context_line":"        if not tag_obj.Tag.delete_objects(context,"},{"line_number":121,"context_line":"            tag\u003dtag, standard_attr_id\u003dres.standard_attr_id):"},{"line_number":122,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __new__(cls, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_293df4c3","line":121,"range":{"start_line":120,"start_character":7,"end_line":121,"end_character":60},"in_reply_to":"ba2be162_690cbaed","updated":"2017-03-06 14:49:06.000000000","message":"Because .delete requires object construction, and it\u0027s not needed.","commit_id":"2ca1b2561739377dc081b36ed6ce209c143da714"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"495db5d5da240c326110f51a1e696647fcbe40e9","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    @log_helpers.log_method_call"},{"line_number":118,"context_line":"    def delete_tag(self, context, resource, resource_id, tag):"},{"line_number":119,"context_line":"        res \u003d self._get_resource(context, resource, resource_id)"},{"line_number":120,"context_line":"        if not tag_obj.Tag.delete_objects(context,"},{"line_number":121,"context_line":"            tag\u003dtag, standard_attr_id\u003dres.standard_attr_id):"},{"line_number":122,"context_line":"            raise tag_ext.TagNotFound(tag\u003dtag)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def __new__(cls, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":37,"id":"ba2be162_690cbaed","line":121,"range":{"start_line":120,"start_character":7,"end_line":121,"end_character":60},"in_reply_to":"ba2be162_8e0ad477","updated":"2017-03-02 21:12:10.000000000","message":"please refer to comment on patch 28 https://review.openstack.org/#/c/356825/28..37/neutron/services/tag/tag_plugin.py","commit_id":"2ca1b2561739377dc081b36ed6ce209c143da714"}],"neutron/tests/unit/objects/test_base.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"0483d0d46d9adba5d4eac939f31f01c48acb32a1","unresolved":false,"context_lines":[{"line_number":1186,"context_line":"             \u0027floating_network_id\u0027: ext_net[\u0027network_id\u0027],"},{"line_number":1187,"context_line":"             \u0027floating_port_id\u0027: test_port[\u0027id\u0027]})"},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":"    def _create_test_standard_attribute(self):"},{"line_number":1190,"context_line":"        attrs \u003d {"},{"line_number":1191,"context_line":"            \u0027id\u0027: tools.get_random_integer(),"},{"line_number":1192,"context_line":"            \u0027resource_type\u0027: tools.get_random_string(4),"},{"line_number":1193,"context_line":"            \u0027revision_number\u0027: tools.get_random_integer()"},{"line_number":1194,"context_line":"        }"},{"line_number":1195,"context_line":"        self._standard_attribute \u003d obj_db_api.create_object("},{"line_number":1196,"context_line":"            self.context,"},{"line_number":1197,"context_line":"            standard_attr.StandardAttribute,"},{"line_number":1198,"context_line":"            attrs)"},{"line_number":1199,"context_line":""},{"line_number":1200,"context_line":"    def _create_test_subnet(self, network):"},{"line_number":1201,"context_line":"        test_subnet \u003d {"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a71b18c_b9c79762","line":1198,"range":{"start_line":1189,"start_character":4,"end_line":1198,"end_character":18},"updated":"2016-12-06 20:54:44.000000000","message":"nit: this seems like only moving the block of code, isn\u0027t it?","commit_id":"95c70d557bb9406af35489a07074e76b4e8ed6e2"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"ea44a55c146c172f42f8a1df8163bea1182c5775","unresolved":false,"context_lines":[{"line_number":1186,"context_line":"             \u0027floating_network_id\u0027: ext_net[\u0027network_id\u0027],"},{"line_number":1187,"context_line":"             \u0027floating_port_id\u0027: test_port[\u0027id\u0027]})"},{"line_number":1188,"context_line":""},{"line_number":1189,"context_line":"    def _create_test_standard_attribute(self):"},{"line_number":1190,"context_line":"        attrs \u003d {"},{"line_number":1191,"context_line":"            \u0027id\u0027: tools.get_random_integer(),"},{"line_number":1192,"context_line":"            \u0027resource_type\u0027: tools.get_random_string(4),"},{"line_number":1193,"context_line":"            \u0027revision_number\u0027: tools.get_random_integer()"},{"line_number":1194,"context_line":"        }"},{"line_number":1195,"context_line":"        self._standard_attribute \u003d obj_db_api.create_object("},{"line_number":1196,"context_line":"            self.context,"},{"line_number":1197,"context_line":"            standard_attr.StandardAttribute,"},{"line_number":1198,"context_line":"            attrs)"},{"line_number":1199,"context_line":""},{"line_number":1200,"context_line":"    def _create_test_subnet(self, network):"},{"line_number":1201,"context_line":"        test_subnet \u003d {"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a71b18c_4bb6a2f9","line":1198,"range":{"start_line":1189,"start_character":4,"end_line":1198,"end_character":18},"in_reply_to":"3a71b18c_b9c79762","updated":"2016-12-07 02:05:09.000000000","message":"yup, it seems that _create_test_standard_attribute method was merged in a different patch. There is no point in moving the code around.\nDone","commit_id":"95c70d557bb9406af35489a07074e76b4e8ed6e2"}],"neutron/tests/unit/objects/test_tag.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"157423c57271eb83f016e3459351d220e871636a","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    _test_class \u003d tag.Tag"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TagDbObjectTestCase(obj_test_base.BaseDbObjectTestCase,"},{"line_number":24,"context_line":"                          testlib_api.SqlTestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    _test_class \u003d tag.Tag"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_da7e88ad","line":26,"range":{"start_line":23,"start_character":0,"end_line":26,"end_character":25},"updated":"2016-08-19 23:14:31.000000000","message":"This is going to fail base tests afaik due to Foreign key contraint not followed., standard attribute is a foreign it must created in setup() methods this class inorder to make base tests pass","commit_id":"15a337615c22a3374a4a9105b914659cfcbe15d7"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"f1945c0ae62ba8f2d8f1ddaa7b91dcdb1aa7a71b","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    _test_class \u003d tag.Tag"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TagDbObjectTestCase(obj_test_base.BaseDbObjectTestCase,"},{"line_number":24,"context_line":"                          testlib_api.SqlTestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    _test_class \u003d tag.Tag"}],"source_content_type":"text/x-python","patch_set":3,"id":"1ac06dbe_f0d34902","line":26,"range":{"start_line":23,"start_character":0,"end_line":26,"end_character":25},"in_reply_to":"1ac06dbe_da7e88ad","updated":"2016-08-22 21:58:26.000000000","message":"Done","commit_id":"15a337615c22a3374a4a9105b914659cfcbe15d7"},{"author":{"_account_id":22218,"name":"Sindhu Devale","email":"sindhu.devale@intel.com","username":"sindhudevale"},"change_message_id":"429c1d78e9083526eb15af618e1705f7296fa10e","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(TagDbObjectTestCase, self).setUp()"},{"line_number":32,"context_line":"        self._create_test_standard_attribute()"},{"line_number":33,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields):"},{"line_number":34,"context_line":"            obj[\u0027standard_attr_id\u0027] \u003d self._standard_attribute[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7ab95a_c68aab1a","line":34,"range":{"start_line":32,"start_character":7,"end_line":34,"end_character":68},"updated":"2016-08-30 16:37:03.000000000","message":"Hey, just wondering y this is needed?","commit_id":"633d78c7da3ba2c5c03241b525021114b0010ce2"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"64849cf9ab2a6f342fdef5793a57e26b9660c5b0","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(TagDbObjectTestCase, self).setUp()"},{"line_number":32,"context_line":"        self._create_test_standard_attribute()"},{"line_number":33,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields):"},{"line_number":34,"context_line":"            obj[\u0027standard_attr_id\u0027] \u003d self._standard_attribute[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa7ab95a_1c7b067c","line":34,"range":{"start_line":32,"start_character":7,"end_line":34,"end_character":68},"in_reply_to":"fa7ab95a_c68aab1a","updated":"2016-08-30 16:59:15.000000000","message":"standard attribute is a foreign key and if combined with tag_id both make a primary key, for tag and there might be some base tests which will be testing db transactions, it can not be null, so setup will do initial work of setting that field before testing any db transaction.","commit_id":"633d78c7da3ba2c5c03241b525021114b0010ce2"},{"author":{"_account_id":22774,"name":"Shashank Kumar Shankar","email":"shashank.kumar.shankar@intel.com","username":"skshankar"},"change_message_id":"8c4109b284da54ac5a0cf9c1608b1fe4772c7ad8","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(TagDbObjectTestCase, self).setUp()"},{"line_number":32,"context_line":"        self._create_test_standard_attribute()"},{"line_number":33,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"},{"line_number":34,"context_line":"            obj[\u0027standard_attr_id\u0027] \u003d self._standard_attribute[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a71b18c_03433c43","line":33,"updated":"2016-12-02 17:30:47.000000000","message":"A new method called update_obj_fields() was introduced [1] and merged. Use example [2] to change appropriately. \n\n[1] - https://review.openstack.org/#/c/404259/ \n[2] - https://github.com/openstack/neutron/blob/master/neutron/tests/unit/objects/test_provisioning_blocks.py#L32","commit_id":"d23c02f62546b12e0d530443b968a3cab6039678"},{"author":{"_account_id":20246,"name":"Aradhana Singh","email":"aradhanamailbox@gmail.com","username":"asingh"},"change_message_id":"321c554e431d9c2ca0eb8fec9cf44ebde86576cd","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    def setUp(self):"},{"line_number":31,"context_line":"        super(TagDbObjectTestCase, self).setUp()"},{"line_number":32,"context_line":"        self._create_test_standard_attribute()"},{"line_number":33,"context_line":"        for obj in itertools.chain(self.db_objs, self.obj_fields, self.objs):"},{"line_number":34,"context_line":"            obj[\u0027standard_attr_id\u0027] \u003d self._standard_attribute[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a71b18c_0fb19d47","line":33,"in_reply_to":"3a71b18c_03433c43","updated":"2016-12-02 19:15:01.000000000","message":"Done","commit_id":"d23c02f62546b12e0d530443b968a3cab6039678"}]}
