)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"6537c82ce0a865139db987775ec4a1af91277414","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch enhances the tag mechanism for subnet, port, subnetpool,"},{"line_number":10,"context_line":"router resources."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"APIImpact"},{"line_number":13,"context_line":"DocImpact: allow users to set tags on some resources"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I3ab8c2f47f283bee7219f39f20b07361b8e0c5f1"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3a461143_fe037474","line":12,"updated":"2017-01-25 22:10:09.000000000","message":"maybe describe what\u0027s the impact, so that whoever is going to tackle the LP doc bug will have the needed stub text","commit_id":"d81e1711ccdc352731808a5b06c802b7c9270ac9"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enhance tag mechanism"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch enhances the tag mechanism for subnet, port, subnetpool,"},{"line_number":10,"context_line":"router resources."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"APIImpact: Adds tag support to subnet, port, subnetpool, router"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"3a461143_a66f65fa","line":9,"range":{"start_line":9,"start_character":11,"end_line":9,"end_character":19},"updated":"2017-01-31 17:12:54.000000000","message":"Maybe this description is ambiguous, I\u0027d spec some information about how is this enhancement achieved","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"c3ac76a7c12235fa6785abb6deaab7bb13f6239d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"DocImpact: allow users to set tags on some resources"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I3ab8c2f47f283bee7219f39f20b07361b8e0c5f1"},{"line_number":17,"context_line":"Related-Bug: #1489291"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3a461143_a78e1cce","line":17,"updated":"2017-02-02 19:42:13.000000000","message":"I believe we may want to use a new bug for that patch; and to target it accordingly for Ocata/Pike.","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"59ac169fef6c8a8c6949a59adcd8dae1cad9f23d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"DocImpact: allow users to set tags on some resources"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I3ab8c2f47f283bee7219f39f20b07361b8e0c5f1"},{"line_number":17,"context_line":"Related-Bug: #1489291"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"1a430d35_e62cd1ad","line":17,"in_reply_to":"3a461143_a78e1cce","updated":"2017-02-03 14:01:04.000000000","message":"Done","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"}],"neutron/extensions/l3.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"ROUTER \u003d \u0027router\u0027"},{"line_number":88,"context_line":"ROUTERS \u003d \u0027routers\u0027"},{"line_number":89,"context_line":"FLOATINGIP \u003d \u0027floatingip\u0027"},{"line_number":90,"context_line":"FLOATINGIPS \u003d \u0027%ss\u0027 % FLOATINGIP"},{"line_number":91,"context_line":"EXTERNAL_GW_INFO \u003d \u0027external_gateway_info\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_6105670f","line":88,"range":{"start_line":88,"start_character":11,"end_line":88,"end_character":19},"updated":"2017-01-31 17:12:54.000000000","message":"Following the same pattern than line 90: \n\nROUTERS \u003d \u0027%ss\u0027 % ROUTER","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"}],"neutron/extensions/tag.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"0d2ced43ec8cda1786271b01afff385999fc74b8","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    @classmethod"},{"line_number":174,"context_line":"    def get_description(cls):"},{"line_number":175,"context_line":"        return (\"Enables to set tag on network, subnet, port, subnetpool \""},{"line_number":176,"context_line":"                \"and router resources.\")"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    @classmethod"},{"line_number":179,"context_line":"    def get_updated(cls):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_d319517b","line":176,"range":{"start_line":175,"start_character":39,"end_line":176,"end_character":27},"updated":"2017-01-25 06:20:22.000000000","message":"if you would maket this part built from TAG_SUPPORTED_RESOURCES, it will support future changes if more resources will be taggable.","commit_id":"02a5d041ec7761c92bcec7348f4dcf1ad94f0dc3"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"8f42703e4b56ab2cd7161f9d94b1b70cd407e9b0","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    @classmethod"},{"line_number":174,"context_line":"    def get_description(cls):"},{"line_number":175,"context_line":"        return (\"Enables to set tag on network, subnet, port, subnetpool \""},{"line_number":176,"context_line":"                \"and router resources.\")"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    @classmethod"},{"line_number":179,"context_line":"    def get_updated(cls):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_f3ce4db6","line":176,"range":{"start_line":175,"start_character":39,"end_line":176,"end_character":27},"in_reply_to":"5a3905b3_d319517b","updated":"2017-01-25 06:31:04.000000000","message":"Agree, @Hirofumi Ichihara, how about like this:\nhttps://review.openstack.org/#/c/417275/","commit_id":"02a5d041ec7761c92bcec7348f4dcf1ad94f0dc3"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"afa9af83b0de4788fadc27c56c95cf012af639e6","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    @classmethod"},{"line_number":174,"context_line":"    def get_description(cls):"},{"line_number":175,"context_line":"        return (\"Enables to set tag on network, subnet, port, subnetpool \""},{"line_number":176,"context_line":"                \"and router resources.\")"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    @classmethod"},{"line_number":179,"context_line":"    def get_updated(cls):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a3905b3_8992369e","line":176,"range":{"start_line":175,"start_character":39,"end_line":176,"end_character":27},"in_reply_to":"5a3905b3_f3ce4db6","updated":"2017-01-25 07:30:55.000000000","message":"Thanks for your point. I considered Kuryr easily can use the information.","commit_id":"02a5d041ec7761c92bcec7348f4dcf1ad94f0dc3"}],"neutron/extensions/tag_ext.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"233b3cb3d51bd4b0cf93cc5d49863061e9b9201a","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @classmethod"},{"line_number":42,"context_line":"    def get_name(cls):"},{"line_number":43,"context_line":"        return \"Tag support for ext resources\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def get_alias(cls):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_440c9642","line":43,"range":{"start_line":43,"start_character":32,"end_line":43,"end_character":35},"updated":"2017-02-02 19:41:23.000000000","message":"ext? you mean \u0027for more resources\u0027? \u0027for other resources\u0027?","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"59ac169fef6c8a8c6949a59adcd8dae1cad9f23d","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @classmethod"},{"line_number":42,"context_line":"    def get_name(cls):"},{"line_number":43,"context_line":"        return \"Tag support for ext resources\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def get_alias(cls):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_463be5eb","line":43,"range":{"start_line":43,"start_character":32,"end_line":43,"end_character":35},"in_reply_to":"3a461143_440c9642","updated":"2017-02-03 14:01:04.000000000","message":"I guess that \u0027more\u0027 is better.","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3d8520c04adf29a0e17e974fb1a3e7e4cbcd0105","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.extensions import l3"},{"line_number":22,"context_line":"from neutron.extensions import tag as tag_base"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"TAG_SUPPORTED_RESOURCES \u003d {"},{"line_number":25,"context_line":"    attributes.SUBNETS: attributes.SUBNET,"},{"line_number":26,"context_line":"    attributes.PORTS: attributes.PORT,"},{"line_number":27,"context_line":"    attributes.SUBNETPOOLS: attributes.SUBNETPOOL,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a430d35_f262c2d7","line":24,"updated":"2017-02-03 17:20:50.000000000","message":"We should document here that this is not to be modified if more resources need to be tagged. But rather a new extension must be added.","commit_id":"a7ffff407cc6d789794b777e03bf34f2bf94724c"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"0c6c1f2a3b30cb2bfea294e3900d3734ac56e54f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from neutron.extensions import l3"},{"line_number":22,"context_line":"from neutron.extensions import tag as tag_base"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"TAG_SUPPORTED_RESOURCES \u003d {"},{"line_number":25,"context_line":"    attributes.SUBNETS: attributes.SUBNET,"},{"line_number":26,"context_line":"    attributes.PORTS: attributes.PORT,"},{"line_number":27,"context_line":"    attributes.SUBNETPOOLS: attributes.SUBNETPOOL,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a430d35_a72b8c81","line":24,"in_reply_to":"1a430d35_f262c2d7","updated":"2017-02-04 02:07:53.000000000","message":"Done","commit_id":"a7ffff407cc6d789794b777e03bf34f2bf94724c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3d8520c04adf29a0e17e974fb1a3e7e4cbcd0105","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @classmethod"},{"line_number":42,"context_line":"    def get_name(cls):"},{"line_number":43,"context_line":"        return \"Tag support for more resources\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def get_alias(cls):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a430d35_f2f1e2ce","line":43,"updated":"2017-02-03 17:20:50.000000000","message":"Although the openstack CLI shows the description, the neutron client doesn\u0027t, I\u0027d rather be a bit more descriptive here. How about:\n\nSupport for resources  TAG_SUPPORTED_RESOURCES\n\nand then for description I\u0027d say:\n\n\u0027Extends tag support to more L2 and L3 resources.\n\nJust a suggestion.","commit_id":"a7ffff407cc6d789794b777e03bf34f2bf94724c"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"0c6c1f2a3b30cb2bfea294e3900d3734ac56e54f","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    @classmethod"},{"line_number":42,"context_line":"    def get_name(cls):"},{"line_number":43,"context_line":"        return \"Tag support for more resources\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @classmethod"},{"line_number":46,"context_line":"    def get_alias(cls):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a430d35_47bae824","line":43,"in_reply_to":"1a430d35_f2f1e2ce","updated":"2017-02-04 02:07:53.000000000","message":"I\u0027m OK although I feel long a bit.","commit_id":"a7ffff407cc6d789794b777e03bf34f2bf94724c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"fdd3fef58601e0915384193888344f9f23abbdf1","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                collection_methods\u003dcollection_methods))"},{"line_number":76,"context_line":"        return exts"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def get_optional_extensions(self):"},{"line_number":79,"context_line":"        return [\u0027router\u0027]"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def get_extended_resources(self, version):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a430d35_6f6d0d04","line":78,"updated":"2017-02-03 17:12:16.000000000","message":"shouldn\u0027t this be required instead? I think it should.","commit_id":"a7ffff407cc6d789794b777e03bf34f2bf94724c"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"0c6c1f2a3b30cb2bfea294e3900d3734ac56e54f","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                collection_methods\u003dcollection_methods))"},{"line_number":76,"context_line":"        return exts"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def get_optional_extensions(self):"},{"line_number":79,"context_line":"        return [\u0027router\u0027]"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def get_extended_resources(self, version):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a430d35_4477463a","line":78,"in_reply_to":"1a430d35_6f6d0d04","updated":"2017-02-04 02:07:53.000000000","message":"Do you mean we don\u0027t allow users to use this tag mechanism in environment without l3?","commit_id":"a7ffff407cc6d789794b777e03bf34f2bf94724c"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"fdd3fef58601e0915384193888344f9f23abbdf1","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            return {}"},{"line_number":84,"context_line":"        EXTENDED_ATTRIBUTES_2_0 \u003d {}"},{"line_number":85,"context_line":"        for collection_name in TAG_SUPPORTED_RESOURCES:"},{"line_number":86,"context_line":"            EXTENDED_ATTRIBUTES_2_0[collection_name] \u003d \\"},{"line_number":87,"context_line":"                tag_base.TAG_ATTRIBUTE_MAP"},{"line_number":88,"context_line":"        return EXTENDED_ATTRIBUTES_2_0"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a430d35_0f7f29ab","line":86,"updated":"2017-02-03 17:12:16.000000000","message":"use () to break over multiple lines.","commit_id":"a7ffff407cc6d789794b777e03bf34f2bf94724c"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"0c6c1f2a3b30cb2bfea294e3900d3734ac56e54f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            return {}"},{"line_number":84,"context_line":"        EXTENDED_ATTRIBUTES_2_0 \u003d {}"},{"line_number":85,"context_line":"        for collection_name in TAG_SUPPORTED_RESOURCES:"},{"line_number":86,"context_line":"            EXTENDED_ATTRIBUTES_2_0[collection_name] \u003d \\"},{"line_number":87,"context_line":"                tag_base.TAG_ATTRIBUTE_MAP"},{"line_number":88,"context_line":"        return EXTENDED_ATTRIBUTES_2_0"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a430d35_24879ab6","line":86,"in_reply_to":"1a430d35_0f7f29ab","updated":"2017-02-04 02:07:53.000000000","message":"Done","commit_id":"a7ffff407cc6d789794b777e03bf34f2bf94724c"}],"neutron/services/tag/tag_plugin.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def _extend_tags_dict(plugin, response_data, db_data):"},{"line_number":45,"context_line":"    if not directory.get_plugin(tag_ext.TAG_PLUGIN_TYPE):"},{"line_number":46,"context_line":"        return"},{"line_number":47,"context_line":"    tags \u003d [tag_db.tag for tag_db in db_data.standard_attr.tags]"},{"line_number":48,"context_line":"    response_data[\u0027tags\u0027] \u003d tags"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class TagPlugin(common_db_mixin.CommonDbMixin, tag_ext.TagPluginBase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_61e3a7d9","line":48,"range":{"start_line":45,"start_character":4,"end_line":48,"end_character":32},"updated":"2017-01-31 17:12:54.000000000","message":"nit: Given that there is only two lines that I could be skipped, maybe it should be better to add them in the if sentence like\n\n    if directory.get_plugin(tag_ext.TAG_PLUGIN_TYPE):\n        tags \u003d [tag_db.tag for tag_db in db_data.standard_attr.tags]\n        response_data[\u0027tags\u0027] \u003d tags","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"233b3cb3d51bd4b0cf93cc5d49863061e9b9201a","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def _extend_tags_dict(plugin, response_data, db_data):"},{"line_number":45,"context_line":"    if not directory.get_plugin(tag_ext.TAG_PLUGIN_TYPE):"},{"line_number":46,"context_line":"        return"},{"line_number":47,"context_line":"    tags \u003d [tag_db.tag for tag_db in db_data.standard_attr.tags]"},{"line_number":48,"context_line":"    response_data[\u0027tags\u0027] \u003d tags"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_27b78cf6","line":45,"updated":"2017-02-02 19:41:23.000000000","message":"that\u0027s a nice enhancement, but how is it related to the patch? seems like it would also apply to base tag extension?","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"59ac169fef6c8a8c6949a59adcd8dae1cad9f23d","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def _extend_tags_dict(plugin, response_data, db_data):"},{"line_number":45,"context_line":"    if not directory.get_plugin(tag_ext.TAG_PLUGIN_TYPE):"},{"line_number":46,"context_line":"        return"},{"line_number":47,"context_line":"    tags \u003d [tag_db.tag for tag_db in db_data.standard_attr.tags]"},{"line_number":48,"context_line":"    response_data[\u0027tags\u0027] \u003d tags"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_a9f53a84","line":45,"in_reply_to":"3a461143_27b78cf6","updated":"2017-02-03 14:01:04.000000000","message":"This prevents an UT failure in TestMl2DvrPortsV2. You may understand if you see a code I added into test_plugin in PS2.","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"3d8520c04adf29a0e17e974fb1a3e7e4cbcd0105","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    attributes.PORTS: models_v2.Port,"},{"line_number":38,"context_line":"    attributes.SUBNETPOOLS: models_v2.SubnetPool,"},{"line_number":39,"context_line":"    l3_ext.ROUTERS: l3_model.Router,"},{"line_number":40,"context_line":"    # other resources can be added"},{"line_number":41,"context_line":"}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a430d35_b2411a3c","line":40,"updated":"2017-02-03 17:20:50.000000000","message":"I\u0027d add here a note to remind future developers to do so but not forgetting the discovery mechanism we have so far.","commit_id":"a7ffff407cc6d789794b777e03bf34f2bf94724c"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"0c6c1f2a3b30cb2bfea294e3900d3734ac56e54f","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    attributes.PORTS: models_v2.Port,"},{"line_number":38,"context_line":"    attributes.SUBNETPOOLS: models_v2.SubnetPool,"},{"line_number":39,"context_line":"    l3_ext.ROUTERS: l3_model.Router,"},{"line_number":40,"context_line":"    # other resources can be added"},{"line_number":41,"context_line":"}"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1a430d35_67efe4e8","line":40,"in_reply_to":"1a430d35_b2411a3c","updated":"2017-02-04 02:07:53.000000000","message":"Done","commit_id":"a7ffff407cc6d789794b777e03bf34f2bf94724c"}],"neutron/tests/contrib/hooks/api_all_extensions":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"17cce20b1f3a5c8c5efa6eb666ae6d0c9849b779","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    standard-attr-timestamp, \\"},{"line_number":40,"context_line":"    subnet_allocation, \\"},{"line_number":41,"context_line":"    tag, \\"},{"line_number":42,"context_line":"    tag-ext, \\"},{"line_number":43,"context_line":"    trunk, \\"},{"line_number":44,"context_line":"    trunk-details\""},{"line_number":45,"context_line":"NETWORK_API_EXTENSIONS\u003d\"$(echo $NETWORK_API_EXTENSIONS | tr -d \u0027 \u0027)\""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"1a430d35_1c312aa3","line":42,"updated":"2017-02-03 14:21:16.000000000","message":"(No action required) we tend to keep api_*_extensions files in sync (except dvr being disabled in dvrskip). So maybe it\u0027s worth configuring the new extension there too, even if we don\u0027t currently have scenarios that would utilize this extension).","commit_id":"ff9acfa8bca8caecb2624fcb55723bc1203e7229"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"a3cb5b13e0431c018965e1f02f2b4e3c824f2cc1","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    standard-attr-timestamp, \\"},{"line_number":40,"context_line":"    subnet_allocation, \\"},{"line_number":41,"context_line":"    tag, \\"},{"line_number":42,"context_line":"    tag-ext, \\"},{"line_number":43,"context_line":"    trunk, \\"},{"line_number":44,"context_line":"    trunk-details\""},{"line_number":45,"context_line":"NETWORK_API_EXTENSIONS\u003d\"$(echo $NETWORK_API_EXTENSIONS | tr -d \u0027 \u0027)\""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"1a430d35_1f4f5c93","line":42,"in_reply_to":"1a430d35_1c312aa3","updated":"2017-02-03 15:03:52.000000000","message":"I\u0027m OK. Done.","commit_id":"ff9acfa8bca8caecb2624fcb55723bc1203e7229"}],"neutron/tests/tempest/api/test_tag.py":[{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    @test.requires_ext(extension\u003d\"tag\", service\u003d\"network\")"},{"line_number":23,"context_line":"    def resource_setup(cls):"},{"line_number":24,"context_line":"        super(TagTestJSON, cls).resource_setup()"},{"line_number":25,"context_line":"        cls.res_id \u003d cls._create_resource()"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def _get_and_compare_tags(self, tags):"},{"line_number":28,"context_line":"        res_body \u003d self.client.get_tags(self.resource, self.res_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_1715c1e3","line":25,"range":{"start_line":25,"start_character":25,"end_line":25,"end_character":41},"updated":"2017-01-31 17:12:54.000000000","message":"Given that the child classes must override the _create_resource method, I think that we should enforce that \n\n    @classmethod\n    def _create_resource(self):\n        raise NotImplemented","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    @classmethod"},{"line_number":90,"context_line":"    def _create_resource(cls):"},{"line_number":91,"context_line":"        network \u003d cls.create_network()"},{"line_number":92,"context_line":"        subnet \u003d cls.create_subnet(network)"},{"line_number":93,"context_line":"        return subnet[\u0027id\u0027]"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":96,"context_line":"    @test.idempotent_id(\u00272805aabf-a94c-4e70-a0b2-9814f06beb03\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_7cfd0c6d","line":93,"range":{"start_line":92,"start_character":8,"end_line":93,"end_character":27},"updated":"2017-01-31 17:12:54.000000000","message":"nit: Given that there is other operation on subnet variable. These lines can be merged in one\n\n    return cls.create_subnet(network)[\u0027id\u0027]","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    @classmethod"},{"line_number":105,"context_line":"    def _create_resource(cls):"},{"line_number":106,"context_line":"        network \u003d cls.create_network()"},{"line_number":107,"context_line":"        port \u003d cls.create_port(network)"},{"line_number":108,"context_line":"        return port[\u0027id\u0027]"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":111,"context_line":"    @test.idempotent_id(\u0027c7c44f2c-edb0-4ebd-a386-d37cec155c34\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_fcf1fc95","line":108,"range":{"start_line":107,"start_character":8,"end_line":108,"end_character":25},"updated":"2017-01-31 17:12:54.000000000","message":"ditto: line 92","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @classmethod"},{"line_number":120,"context_line":"    def _create_resource(cls):"},{"line_number":121,"context_line":"        subnetpool \u003d cls.create_subnetpool(\u0027subnetpool\u0027, default_prefixlen\u003d24,"},{"line_number":122,"context_line":"                                           prefixes\u003d[\u002710.0.0.0/8\u0027])"},{"line_number":123,"context_line":"        return subnetpool[\u0027id\u0027]"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":126,"context_line":"    @test.idempotent_id(\u0027bdc1c24b-c0b5-4835-953c-8f67dc11edfe\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_9c37184c","line":123,"range":{"start_line":121,"start_character":8,"end_line":123,"end_character":31},"updated":"2017-01-31 17:12:54.000000000","message":"ditto: line 92","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    @classmethod"},{"line_number":135,"context_line":"    def _create_resource(cls):"},{"line_number":136,"context_line":"        router \u003d cls.create_router(router_name\u003d\u0027test\u0027)"},{"line_number":137,"context_line":"        return router[\u0027id\u0027]"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":140,"context_line":"    @test.idempotent_id(\u0027b898ff92-dc33-4232-8ab9-2c6158c80d28\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_bc70540c","line":137,"range":{"start_line":136,"start_character":8,"end_line":137,"end_character":27},"updated":"2017-01-31 17:12:54.000000000","message":"ditto: liine 92","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":176,"context_line":"    def _test_filter_tags(self):"},{"line_number":177,"context_line":"        # tags single"},{"line_number":178,"context_line":"        filters \u003d {\u0027tags\u0027: \u0027red\u0027}"},{"line_number":179,"context_line":"        res \u003d self._list_resource(filters)"},{"line_number":180,"context_line":"        self._assertEqualResources([\u0027tag-res1\u0027, \u0027tag-res2\u0027, \u0027tag-res3\u0027], res)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # tags multi"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_f7c75561","line":179,"range":{"start_line":179,"start_character":19,"end_line":179,"end_character":33},"updated":"2017-01-31 17:12:54.000000000","message":"Same thing here \n\n    @classmethod\n    def _create_resource(self):\n        raise NotImplemented\n\n    @classmethod\n    def _list_resource(self):\n        raise NotImplemented","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    @classmethod"},{"line_number":240,"context_line":"    def _create_resource(cls, name):"},{"line_number":241,"context_line":"        network \u003d cls.create_network()"},{"line_number":242,"context_line":"        res \u003d cls.create_subnet(network, name\u003dname)"},{"line_number":243,"context_line":"        return res[\u0027id\u0027]"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def _list_resource(self, filters):"},{"line_number":246,"context_line":"        res \u003d self.client.list_subnets(**filters)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_bcde94da","line":243,"range":{"start_line":242,"start_character":8,"end_line":243,"end_character":24},"updated":"2017-01-31 17:12:54.000000000","message":"ditto: line 92","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        return res[\u0027id\u0027]"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def _list_resource(self, filters):"},{"line_number":246,"context_line":"        res \u003d self.client.list_subnets(**filters)"},{"line_number":247,"context_line":"        return res[self.resource]"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":250,"context_line":"    @test.idempotent_id(\u0027dd8f9ba7-bcf6-496f-bead-714bd3daac10\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_fce49cac","line":247,"range":{"start_line":246,"start_character":8,"end_line":247,"end_character":33},"updated":"2017-01-31 17:12:54.000000000","message":"ditto: line 92","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    @classmethod"},{"line_number":259,"context_line":"    def _create_resource(cls, name):"},{"line_number":260,"context_line":"        network \u003d cls.create_network()"},{"line_number":261,"context_line":"        res \u003d cls.create_port(network, name\u003dname)"},{"line_number":262,"context_line":"        return res[\u0027id\u0027]"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def _list_resource(self, filters):"},{"line_number":265,"context_line":"        res \u003d self.client.list_ports(**filters)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_9ceab872","line":262,"range":{"start_line":261,"start_character":8,"end_line":262,"end_character":24},"updated":"2017-01-31 17:12:54.000000000","message":"ditto: line 92","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        return res[\u0027id\u0027]"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"    def _list_resource(self, filters):"},{"line_number":265,"context_line":"        res \u003d self.client.list_ports(**filters)"},{"line_number":266,"context_line":"        return res[self.resource]"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":269,"context_line":"    @test.idempotent_id(\u002709c036b8-c8d0-4bee-b776-7f4601512898\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_1cf7a859","line":266,"range":{"start_line":265,"start_character":8,"end_line":266,"end_character":33},"updated":"2017-01-31 17:12:54.000000000","message":"ditto: line 92","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    @classmethod"},{"line_number":278,"context_line":"    def _create_resource(cls, name):"},{"line_number":279,"context_line":"        res \u003d cls.create_subnetpool(name, default_prefixlen\u003d24,"},{"line_number":280,"context_line":"                                    prefixes\u003d[\u002710.0.0.0/8\u0027])"},{"line_number":281,"context_line":"        return res[\u0027id\u0027]"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def _list_resource(self, filters):"},{"line_number":284,"context_line":"        res \u003d self.client.list_subnetpools(**filters)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_5cc210ea","line":281,"range":{"start_line":279,"start_character":8,"end_line":281,"end_character":24},"updated":"2017-01-31 17:12:54.000000000","message":"ditto: line 92","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":281,"context_line":"        return res[\u0027id\u0027]"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"    def _list_resource(self, filters):"},{"line_number":284,"context_line":"        res \u003d self.client.list_subnetpools(**filters)"},{"line_number":285,"context_line":"        return res[self.resource]"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":288,"context_line":"    @test.idempotent_id(\u002716ae7ad2-55c2-4821-9195-bfd04ab245b7\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_1ca5e845","line":285,"range":{"start_line":284,"start_character":8,"end_line":285,"end_character":33},"updated":"2017-01-31 17:12:54.000000000","message":"ditto: line 92","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    @classmethod"},{"line_number":297,"context_line":"    def _create_resource(cls, name):"},{"line_number":298,"context_line":"        res \u003d cls.create_router(router_name\u003dname)"},{"line_number":299,"context_line":"        return res[\u0027id\u0027]"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def _list_resource(self, filters):"},{"line_number":302,"context_line":"        res \u003d self.client.list_routers(**filters)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_7c6c2c08","line":299,"range":{"start_line":298,"start_character":8,"end_line":299,"end_character":24},"updated":"2017-01-31 17:12:54.000000000","message":"ditto: line 92","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        return res[\u0027id\u0027]"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"    def _list_resource(self, filters):"},{"line_number":302,"context_line":"        res \u003d self.client.list_routers(**filters)"},{"line_number":303,"context_line":"        return res[self.resource]"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"    @test.attr(type\u003d\u0027smoke\u0027)"},{"line_number":306,"context_line":"    @test.idempotent_id(\u0027cdd3f3ea-073d-4435-a6cb-826a4064193d\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_9c6f18fb","line":303,"range":{"start_line":302,"start_character":8,"end_line":303,"end_character":33},"updated":"2017-01-31 17:12:54.000000000","message":"ditto: line 92","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"233b3cb3d51bd4b0cf93cc5d49863061e9b9201a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class TagTestJSON(base.BaseAdminNetworkTest):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    @classmethod"},{"line_number":22,"context_line":"    @test.requires_ext(extension\u003d\"tag\", service\u003d\"network\")"},{"line_number":23,"context_line":"    def resource_setup(cls):"},{"line_number":24,"context_line":"        super(TagTestJSON, cls).resource_setup()"},{"line_number":25,"context_line":"        cls.res_id \u003d cls._create_resource()"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_a7a8dc78","line":22,"updated":"2017-02-02 19:41:23.000000000","message":"for new test classes, shouldn\u0027t we also define resource_setup that would require \u0027tag-ext\u0027 extension?","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"59ac169fef6c8a8c6949a59adcd8dae1cad9f23d","unresolved":false,"context_lines":[{"line_number":19,"context_line":"class TagTestJSON(base.BaseAdminNetworkTest):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    @classmethod"},{"line_number":22,"context_line":"    @test.requires_ext(extension\u003d\"tag\", service\u003d\"network\")"},{"line_number":23,"context_line":"    def resource_setup(cls):"},{"line_number":24,"context_line":"        super(TagTestJSON, cls).resource_setup()"},{"line_number":25,"context_line":"        cls.res_id \u003d cls._create_resource()"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_06955de3","line":22,"in_reply_to":"3a461143_a7a8dc78","updated":"2017-02-03 14:01:04.000000000","message":"Done","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"233b3cb3d51bd4b0cf93cc5d49863061e9b9201a","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027alt\u0027, \u0027admin\u0027]"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @classmethod"},{"line_number":150,"context_line":"    @test.requires_ext(extension\u003d\"tag\", service\u003d\"network\")"},{"line_number":151,"context_line":"    def resource_setup(cls):"},{"line_number":152,"context_line":"        super(TagFilterTestJSON, cls).resource_setup()"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_c7032875","line":150,"updated":"2017-02-02 19:41:23.000000000","message":"same comment for filtering test classes","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"59ac169fef6c8a8c6949a59adcd8dae1cad9f23d","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    credentials \u003d [\u0027primary\u0027, \u0027alt\u0027, \u0027admin\u0027]"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    @classmethod"},{"line_number":150,"context_line":"    @test.requires_ext(extension\u003d\"tag\", service\u003d\"network\")"},{"line_number":151,"context_line":"    def resource_setup(cls):"},{"line_number":152,"context_line":"        super(TagFilterTestJSON, cls).resource_setup()"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_269a5915","line":150,"in_reply_to":"3a461143_c7032875","updated":"2017-02-03 14:01:04.000000000","message":"Done","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"17cce20b1f3a5c8c5efa6eb666ae6d0c9849b779","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    @classmethod"},{"line_number":22,"context_line":"    @test.requires_ext(extension\u003d\"tag\", service\u003d\"network\")"},{"line_number":23,"context_line":"    @test.requires_ext(extension\u003d\"tag-ext\", service\u003d\"network\")"},{"line_number":24,"context_line":"    def resource_setup(cls):"},{"line_number":25,"context_line":"        super(TagTestJSON, cls).resource_setup()"},{"line_number":26,"context_line":"        cls.res_id \u003d cls._create_resource()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a430d35_5ce2d204","line":23,"updated":"2017-02-03 14:21:16.000000000","message":"that\u0027s wrong. It will skip test case from line 83 if tag-ext is not configured in tempest.conf. This test case does not depend on the new extension and hence should not require it.","commit_id":"ff9acfa8bca8caecb2624fcb55723bc1203e7229"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"a3cb5b13e0431c018965e1f02f2b4e3c824f2cc1","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    @classmethod"},{"line_number":22,"context_line":"    @test.requires_ext(extension\u003d\"tag\", service\u003d\"network\")"},{"line_number":23,"context_line":"    @test.requires_ext(extension\u003d\"tag-ext\", service\u003d\"network\")"},{"line_number":24,"context_line":"    def resource_setup(cls):"},{"line_number":25,"context_line":"        super(TagTestJSON, cls).resource_setup()"},{"line_number":26,"context_line":"        cls.res_id \u003d cls._create_resource()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a430d35_7aaf8ee3","line":23,"in_reply_to":"1a430d35_5ce2d204","updated":"2017-02-03 15:03:52.000000000","message":"You\u0027re right. I was too lazy.","commit_id":"ff9acfa8bca8caecb2624fcb55723bc1203e7229"}],"neutron/tests/unit/extensions/test_tag.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"72c4d7be965816a3bd57566698a1a0d9244f6844","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return res[self.resource]"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"class TestNetworkTagApi(TestTagApiBase):"},{"line_number":97,"context_line":"    resource \u003d \u0027networks\u0027"},{"line_number":98,"context_line":"    member \u003d \u0027network\u0027"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_22588efa","line":96,"updated":"2016-12-22 05:32:02.000000000","message":"Currently you use the network test class as a base class. How about preparing a separate base class instead?","commit_id":"e22dcc506e98ebc6c24a43f81965dfa0677173f7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5d7a312ca286eba40128c82f275d7a0dfc101440","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return res[self.resource]"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"class TestNetworkTagApi(TestTagApiBase):"},{"line_number":97,"context_line":"    resource \u003d \u0027networks\u0027"},{"line_number":98,"context_line":"    member \u003d \u0027network\u0027"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a3c09a3_fb0c2a96","line":96,"in_reply_to":"7a3c09a3_61319ca2","updated":"2017-01-16 05:48:41.000000000","message":"What in my mind is as follows. Does it make sense?\n\n  class TestResourceTagApi(TestTagApiBase):\n      resource \u003d None\n      member \u003d None\n\n      def setUp(self):\n           \u003cL.100-102\u003e\n\n      @abstractmethod\n      def _make_resource(self):\n            pass\n\n      def test_put_tag(self):\n            ....\n\n      (all tests defined in TestNetworkTagApi here)\n\n  class TestNetworkResoruceTag(TestResourceTagApi):\n      resource \u003d \u0027networks\u0027\n      member \u003d \u0027network\u0027\n\n      def _make_resource(self):\n           \u003cL.105-106 below\u003e\n\n  class TestSubnetResourceTag(TestResourceTagApi):\n      resource \u003d \u0027subnets\u0027\n      member \u003d \u0027subnet\u0027\n\n      def _make_resource(self):\n           ...","commit_id":"e22dcc506e98ebc6c24a43f81965dfa0677173f7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c832baa682c38a7ab087b64cd88d1448e8254a93","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return res[self.resource]"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"class TestNetworkTagApi(TestTagApiBase):"},{"line_number":97,"context_line":"    resource \u003d \u0027networks\u0027"},{"line_number":98,"context_line":"    member \u003d \u0027network\u0027"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a3c09a3_1eaf2495","line":96,"in_reply_to":"7a3c09a3_db668e28","updated":"2017-01-16 06:28:57.000000000","message":"Ah I see. I tried some cases, but I cannot find a good way other than defining tests in a separate class and mixing it into the main test class.\nConsidering this, your approach looks simple. It also sounds reasonable to use \u0027network\u0027 as a base test. Sorry for the confusion.","commit_id":"e22dcc506e98ebc6c24a43f81965dfa0677173f7"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"14bc0081980f578eef5ab0747797aa110257879f","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return res[self.resource]"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"class TestNetworkTagApi(TestTagApiBase):"},{"line_number":97,"context_line":"    resource \u003d \u0027networks\u0027"},{"line_number":98,"context_line":"    member \u003d \u0027network\u0027"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a3c09a3_db668e28","line":96,"in_reply_to":"7a3c09a3_fb0c2a96","updated":"2017-01-16 06:05:18.000000000","message":"I guess that all tests(test_put_tag, etc) of TestResourceTagApi fails. Can I stop the tests running?","commit_id":"e22dcc506e98ebc6c24a43f81965dfa0677173f7"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"dc72c6c69eddce5de7931b27fb84791e853e43a5","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return res[self.resource]"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"class TestNetworkTagApi(TestTagApiBase):"},{"line_number":97,"context_line":"    resource \u003d \u0027networks\u0027"},{"line_number":98,"context_line":"    member \u003d \u0027network\u0027"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a3c09a3_61319ca2","line":96,"in_reply_to":"da4df55a_22588efa","updated":"2017-01-13 16:41:58.000000000","message":"I don\u0027t understand your proposal. Do you mean the implementation like the following? I don\u0027t think it\u0027s better.\n\n\n class TestResourceTagApi(TestTagApiBase):\n     ...\n     def _test_put_tag(self):\n     ...\n     def _test_put_tag_exists(self):\n     ...\n\n class TestNetworkTagApi(TestResourceTagApi)\n     ...\n     def test_put_tag(self):\n         _test_put_tag()\n     def _test_put_tag_exists(self):\n         _test_put_tag_exists()\n     ...\n\n class TestSubnetTagApi(TestResourceTagApi)\n     ...\n     def test_put_tag(self):\n         _test_put_tag()\n     def _test_put_tag_exists(self):\n         _test_put_tag_exists()\n     ...","commit_id":"e22dcc506e98ebc6c24a43f81965dfa0677173f7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"72c4d7be965816a3bd57566698a1a0d9244f6844","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        return res[\u0027router\u0027][\u0027id\u0027]"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"class TestNetworkTagFilter(TestTagApiBase):"},{"line_number":215,"context_line":"    resource \u003d \u0027networks\u0027"},{"line_number":216,"context_line":"    member \u003d \u0027network\u0027"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_6272967e","line":214,"updated":"2016-12-22 05:32:02.000000000","message":"Same comment as for TestNetworkTagApi.","commit_id":"e22dcc506e98ebc6c24a43f81965dfa0677173f7"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"dc72c6c69eddce5de7931b27fb84791e853e43a5","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        return res[\u0027router\u0027][\u0027id\u0027]"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"class TestNetworkTagFilter(TestTagApiBase):"},{"line_number":215,"context_line":"    resource \u003d \u0027networks\u0027"},{"line_number":216,"context_line":"    member \u003d \u0027network\u0027"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a3c09a3_2174f433","line":214,"in_reply_to":"da4df55a_6272967e","updated":"2017-01-13 16:41:58.000000000","message":"ditto","commit_id":"e22dcc506e98ebc6c24a43f81965dfa0677173f7"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        service_plugins \u003d {"},{"line_number":30,"context_line":"            \u0027TAG\u0027: \"neutron.services.tag.tag_plugin.TagPlugin\","},{"line_number":31,"context_line":"            \u0027router\u0027:"},{"line_number":32,"context_line":"            \"neutron.tests.unit.extensions.test_l3.TestL3NatServicePlugin\"}"},{"line_number":33,"context_line":"        super(TestTagApiBase, self).setUp(service_plugins\u003dservice_plugins)"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_57958930","line":30,"range":{"start_line":30,"start_character":13,"end_line":30,"end_character":16},"updated":"2017-01-31 17:12:54.000000000","message":"shouldn\u0027t be better to use constants for the keys? the line 37 makes use of them.","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        self.resource_id \u003d self._make_resource()"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _make_resource(self):"},{"line_number":113,"context_line":"        res \u003d self._make_network(self.fmt, \u0027net1\u0027, True)"},{"line_number":114,"context_line":"        return res[\u0027network\u0027][\u0027id\u0027]"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def test_put_tag(self):"},{"line_number":117,"context_line":"        expect_notify \u003d set([\u0027tag.create.start\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_577f49df","line":114,"range":{"start_line":113,"start_character":8,"end_line":114,"end_character":35},"updated":"2017-01-31 17:12:54.000000000","message":"nit: those lines can be combined\n\n        return self._make_network(self.fmt, \u0027net1\u0027, True)[\u0027network\u0027][\u0027id\u0027]","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _make_resource(self):"},{"line_number":201,"context_line":"        net \u003d self._make_network(self.fmt, \u0027net1\u0027, True)"},{"line_number":202,"context_line":"        res \u003d self._make_subnet(self.fmt, net, \u002710.0.0.1\u0027, \u002710.0.0.0/24\u0027)"},{"line_number":203,"context_line":"        return res[\u0027subnet\u0027][\u0027id\u0027]"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"class TestPortTagApi(TestNetworkTagApi):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_721ff35a","line":203,"range":{"start_line":202,"start_character":8,"end_line":203,"end_character":34},"updated":"2017-01-31 17:12:54.000000000","message":"ditto line 113","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def _make_resource(self):"},{"line_number":211,"context_line":"        net \u003d self._make_network(self.fmt, \u0027net1\u0027, True)"},{"line_number":212,"context_line":"        res \u003d self._make_port(self.fmt, net[\u0027network\u0027][\u0027id\u0027])"},{"line_number":213,"context_line":"        return res[\u0027port\u0027][\u0027id\u0027]"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"class TestSubnetPoolTagApi(TestNetworkTagApi):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_92229fa1","line":213,"range":{"start_line":212,"start_character":8,"end_line":213,"end_character":32},"updated":"2017-01-31 17:12:54.000000000","message":"ditto line 113","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":218,"context_line":"    member \u003d \u0027subnetpool\u0027"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def _make_resource(self):"},{"line_number":221,"context_line":"        res \u003d self._make_subnetpool(self.fmt, [\u002710.0.0.0/8\u0027],"},{"line_number":222,"context_line":"                                    name\u003d\u0027my pool\u0027, tenant_id\u003d\"tenant\")"},{"line_number":223,"context_line":"        return res[\u0027subnetpool\u0027][\u0027id\u0027]"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"class TestRouterTagApi(TestNetworkTagApi, test_l3.L3NatTestCaseMixin):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_b23ddbc5","line":223,"range":{"start_line":221,"start_character":8,"end_line":223,"end_character":38},"updated":"2017-01-31 17:12:54.000000000","message":"ditto line 113","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":228,"context_line":"    member \u003d \u0027router\u0027"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def _make_resource(self):"},{"line_number":231,"context_line":"        res \u003d self._make_router(self.fmt, None)"},{"line_number":232,"context_line":"        return res[\u0027router\u0027][\u0027id\u0027]"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"class TestNetworkTagFilter(TestTagApiBase):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_122f8f88","line":232,"range":{"start_line":231,"start_character":8,"end_line":232,"end_character":34},"updated":"2017-01-31 17:12:54.000000000","message":"ditto line 113","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def _make_resource(self):"},{"line_number":308,"context_line":"        net \u003d self._make_network(self.fmt, \u0027net1\u0027, True)"},{"line_number":309,"context_line":"        res \u003d self._make_subnet(self.fmt, net, \u002710.0.0.1\u0027, \u002710.0.0.0/24\u0027)"},{"line_number":310,"context_line":"        return res[\u0027subnet\u0027][\u0027id\u0027]"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":""},{"line_number":313,"context_line":"class TestPortTagFilter(TestNetworkTagFilter):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_32500b0b","line":310,"range":{"start_line":309,"start_character":8,"end_line":310,"end_character":34},"updated":"2017-01-31 17:12:54.000000000","message":"ditto line 113","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    def _make_resource(self):"},{"line_number":318,"context_line":"        net \u003d self._make_network(self.fmt, \u0027net1\u0027, True)"},{"line_number":319,"context_line":"        res \u003d self._make_port(self.fmt, net[\u0027network\u0027][\u0027id\u0027])"},{"line_number":320,"context_line":"        return res[\u0027port\u0027][\u0027id\u0027]"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"class TestSubnetPoolTagFilter(TestNetworkTagFilter):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_b244fb49","line":320,"range":{"start_line":319,"start_character":8,"end_line":320,"end_character":32},"updated":"2017-01-31 17:12:54.000000000","message":"ditto line 113","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":325,"context_line":"    member \u003d \u0027subnetpool\u0027"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"    def _make_resource(self):"},{"line_number":328,"context_line":"        res \u003d self._make_subnetpool(self.fmt, [\u002710.0.0.0/8\u0027],"},{"line_number":329,"context_line":"                                    name\u003d\u0027my pool\u0027, tenant_id\u003d\"tenant\")"},{"line_number":330,"context_line":"        return res[\u0027subnetpool\u0027][\u0027id\u0027]"},{"line_number":331,"context_line":""},{"line_number":332,"context_line":""},{"line_number":333,"context_line":"class TestRouterTagFilter(TestNetworkTagFilter, test_l3.L3NatTestCaseMixin):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_32772ba1","line":330,"range":{"start_line":328,"start_character":8,"end_line":330,"end_character":38},"updated":"2017-01-31 17:12:54.000000000","message":"ditto line 113","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":8726,"name":"Victor Morales","email":"chipahuac@hotmail.com","username":"electrocucaracha"},"change_message_id":"6ea6f31a1d8715f4a17734b8ff1766ad9b55f870","unresolved":false,"context_lines":[{"line_number":335,"context_line":"    member \u003d \u0027router\u0027"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    def _make_resource(self):"},{"line_number":338,"context_line":"        res \u003d self._make_router(self.fmt, None)"},{"line_number":339,"context_line":"        return res[\u0027router\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a461143_726d33cb","line":339,"range":{"start_line":338,"start_character":8,"end_line":339,"end_character":34},"updated":"2017-01-31 17:12:54.000000000","message":"ditto line 113","commit_id":"821e1b6560abf34b5ada2d6266c6c8750a0580b2"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"233b3cb3d51bd4b0cf93cc5d49863061e9b9201a","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        self._test_notification_report(expect_notify)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"class TestSubnetTagApi(TestNetworkTagApi):"},{"line_number":197,"context_line":"    resource \u003d \u0027subnets\u0027"},{"line_number":198,"context_line":"    member \u003d \u0027subnet\u0027"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_2786acdb","line":196,"updated":"2017-02-02 19:41:23.000000000","message":"it doesn\u0027t seem logical to inherit subnet class from network class (same for other new classes). I think it\u0027s better to move common test cases into a separate base mixin class, and inherit them from there; alternatively, you can try to use testscenarios library to generate test classes for you.","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"59ac169fef6c8a8c6949a59adcd8dae1cad9f23d","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        self._test_notification_report(expect_notify)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"class TestSubnetTagApi(TestNetworkTagApi):"},{"line_number":197,"context_line":"    resource \u003d \u0027subnets\u0027"},{"line_number":198,"context_line":"    member \u003d \u0027subnet\u0027"},{"line_number":199,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_86c79244","line":196,"in_reply_to":"3a461143_2786acdb","updated":"2017-02-03 14:01:04.000000000","message":"I discussed same point with Akihiro in PS2[1]. However, I didn\u0027t notice testscenarios. I\u0027ll update.\n\n[1]: https://review.openstack.org/#/c/413662/2/neutron/tests/unit/extensions/test_tag.py","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"233b3cb3d51bd4b0cf93cc5d49863061e9b9201a","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        self._assertEqualResources([self.res4, self.res5], res)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"class TestSubnetTagFilter(TestNetworkTagFilter):"},{"line_number":304,"context_line":"    resource \u003d \u0027subnets\u0027"},{"line_number":305,"context_line":"    member \u003d \u0027subnet\u0027"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_e762e43c","line":303,"updated":"2017-02-02 19:41:23.000000000","message":"same comment on inheritance","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"59ac169fef6c8a8c6949a59adcd8dae1cad9f23d","unresolved":false,"context_lines":[{"line_number":300,"context_line":"        self._assertEqualResources([self.res4, self.res5], res)"},{"line_number":301,"context_line":""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"class TestSubnetTagFilter(TestNetworkTagFilter):"},{"line_number":304,"context_line":"    resource \u003d \u0027subnets\u0027"},{"line_number":305,"context_line":"    member \u003d \u0027subnet\u0027"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_466da503","line":303,"in_reply_to":"3a461143_e762e43c","updated":"2017-02-03 14:01:04.000000000","message":"Done","commit_id":"ad744ae51bdedb8e6686ee8fbcc638d84f172d33"}],"neutron/tests/unit/plugins/ml2/test_plugin.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"72c4d7be965816a3bd57566698a1a0d9244f6844","unresolved":false,"context_lines":[{"line_number":1435,"context_line":"            self.assertEqual(2, notify.call_count)"},{"line_number":1436,"context_line":"            # needed for a full match in the assertion below"},{"line_number":1437,"context_line":"            port[\u0027port\u0027][\u0027extra_dhcp_opts\u0027] \u003d []"},{"line_number":1438,"context_line":"            port[\u0027port\u0027][\u0027tags\u0027] \u003d []"},{"line_number":1439,"context_line":"            expected \u003d [mock.call(resources.PORT, events.BEFORE_DELETE,"},{"line_number":1440,"context_line":"                                  mock.ANY, context\u003dself.context,"},{"line_number":1441,"context_line":"                                  port_id\u003dport[\u0027port\u0027][\u0027id\u0027], port_check\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":2,"id":"da4df55a_82e4da0d","line":1438,"updated":"2016-12-22 05:32:02.000000000","message":"Question:\nwhy do we need this? tag plugin is a service plugin and it is unrelated to ML2 plugin in theory. I wonder why the tag plugin affects ML2 plugin.","commit_id":"e22dcc506e98ebc6c24a43f81965dfa0677173f7"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"d9b6bbf4710c41e584cba7bdaf6f65e147f61cbf","unresolved":false,"context_lines":[{"line_number":1435,"context_line":"            self.assertEqual(2, notify.call_count)"},{"line_number":1436,"context_line":"            # needed for a full match in the assertion below"},{"line_number":1437,"context_line":"            port[\u0027port\u0027][\u0027extra_dhcp_opts\u0027] \u003d []"},{"line_number":1438,"context_line":"            port[\u0027port\u0027][\u0027tags\u0027] \u003d []"},{"line_number":1439,"context_line":"            expected \u003d [mock.call(resources.PORT, events.BEFORE_DELETE,"},{"line_number":1440,"context_line":"                                  mock.ANY, context\u003dself.context,"},{"line_number":1441,"context_line":"                                  port_id\u003dport[\u0027port\u0027][\u0027id\u0027], port_check\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a3905b3_1c02213f","line":1438,"in_reply_to":"da4df55a_82e4da0d","updated":"2017-01-19 04:21:33.000000000","message":"Because _dict_extend_functions has each extend_resource_dict method for service plugins when tests for the service plugins are run at the same time. So I thought this is a issue we cannot avoid but I noticed a way to avoid it.","commit_id":"e22dcc506e98ebc6c24a43f81965dfa0677173f7"}],"releasenotes/notes/enhance-tags-1f8915fe3e074069.yaml":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"72c4d7be965816a3bd57566698a1a0d9244f6844","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Enhance tag mechanism"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Users can set tags on their subnet, port, subnetpool, and router resources."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"da4df55a_e225a6ae","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":25},"updated":"2016-12-22 05:32:02.000000000","message":"It is better to mention how the tag mechanism is enhanced. For example, \"Enhance tag mechanism to support subnet, port, subnetpool and router\".\n\n(Honestly, we don\u0027t need to use \u0027prelude\u0027 because too many prelude entries make readers understand what is the release highlight.)","commit_id":"e22dcc506e98ebc6c24a43f81965dfa0677173f7"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"dc72c6c69eddce5de7931b27fb84791e853e43a5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Enhance tag mechanism"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Users can set tags on their subnet, port, subnetpool, and router resources."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7a3c09a3_a15f0471","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":25},"in_reply_to":"da4df55a_e225a6ae","updated":"2017-01-13 16:41:58.000000000","message":"I agree. I\u0027ll remove.","commit_id":"e22dcc506e98ebc6c24a43f81965dfa0677173f7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"72c4d7be965816a3bd57566698a1a0d9244f6844","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Enhance tag mechanism"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Users can set tags on their subnet, port, subnetpool, and router resources."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"da4df55a_bf03b90e","line":5,"range":{"start_line":5,"start_character":56,"end_line":5,"end_character":57},"updated":"2016-12-22 05:32:02.000000000","message":"A comma is  unnecessary?","commit_id":"e22dcc506e98ebc6c24a43f81965dfa0677173f7"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"dc72c6c69eddce5de7931b27fb84791e853e43a5","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Enhance tag mechanism"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Users can set tags on their subnet, port, subnetpool, and router resources."}],"source_content_type":"text/x-yaml","patch_set":2,"id":"7a3c09a3_21f07490","line":5,"range":{"start_line":5,"start_character":56,"end_line":5,"end_character":57},"in_reply_to":"da4df55a_bf03b90e","updated":"2017-01-13 16:41:58.000000000","message":"It\u0027s necessary.","commit_id":"e22dcc506e98ebc6c24a43f81965dfa0677173f7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"15c6fd70c02630753a2d8f4a8a0dfb98361a5908","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Resource tag mechanism was enhanced. Users can set tags on their subnet,"},{"line_number":4,"context_line":"    port, subnetpool, and router resources."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"5a3905b3_1f101301","line":4,"updated":"2017-01-20 03:01:48.000000000","message":"How about the following?\n\n  Resource tag mechanism now supports subnet, port, subnetpool and router resources.","commit_id":"e3bed02742b85b5917fbce4de139e4eca3b00b41"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"bde0f9fbc02a216cee2d794492f67c6a0f9e2c51","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Resource tag mechanism was enhanced. Users can set tags on their subnet,"},{"line_number":4,"context_line":"    port, subnetpool, and router resources."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"5a3905b3_02199388","line":4,"in_reply_to":"5a3905b3_1f101301","updated":"2017-01-20 06:41:28.000000000","message":"I\u0027m OK.","commit_id":"e3bed02742b85b5917fbce4de139e4eca3b00b41"}]}
