)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"71a6d46e9b74b33d2d6d521f33352425028ae36c","unresolved":false,"context_lines":[{"line_number":12,"context_line":"subnet to perform quota checks on ports, and if the quota is exceeded,"},{"line_number":13,"context_line":"add text descriptions to the create port button and disable it."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Also, called nova and cinder interface returned by the quota"},{"line_number":16,"context_line":"information does not include the networks, subnets, ports and routers,"},{"line_number":17,"context_line":"do not need to be deleted from the data."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I31bd8f93c312179b86115544ba0fadc9a9ffec63"},{"line_number":20,"context_line":"Closes-Bug:#1712556"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7f287b81_67ac2934","line":17,"range":{"start_line":15,"start_character":0,"end_line":17,"end_character":40},"updated":"2017-08-25 09:32:33.000000000","message":"This should be done separately as it is completely a separate topic.  This needs to be reviewed carefully.","commit_id":"ad2f7722b9be8efbd28ab6515931059eed7f5c42"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"c617df8fed8039827f060cf7b77b45ebfb3001a6","unresolved":false,"context_lines":[{"line_number":12,"context_line":"subnet to perform quota checks on ports, and if the quota is exceeded,"},{"line_number":13,"context_line":"add text descriptions to the create port button and disable it."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Also, called nova and cinder interface returned by the quota"},{"line_number":16,"context_line":"information does not include the networks, subnets, ports and routers,"},{"line_number":17,"context_line":"do not need to be deleted from the data."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: I31bd8f93c312179b86115544ba0fadc9a9ffec63"},{"line_number":20,"context_line":"Closes-Bug:#1712556"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7f287b81_12557efa","line":17,"range":{"start_line":15,"start_character":0,"end_line":17,"end_character":40},"in_reply_to":"7f287b81_67ac2934","updated":"2017-08-28 07:27:27.000000000","message":"Hi Akihiro. Thanks for the review.\nThis problem has been split into this commit:\nhttps://review.openstack.org/#/c/498330/","commit_id":"ad2f7722b9be8efbd28ab6515931059eed7f5c42"}],"openstack_dashboard/dashboards/project/networks/ports/tables.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"71a6d46e9b74b33d2d6d521f33352425028ae36c","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":87,"context_line":"        usages \u003d quotas.tenant_quota_usages(request, targets\u003d(\u0027ports\u0027, ))"},{"line_number":88,"context_line":"        # when Settings.OPENSTACK_NEUTRON_NETWORK[\u0027enable_quotas\u0027] \u003d False"},{"line_number":89,"context_line":"        # usages[\"networks\"] is empty"},{"line_number":90,"context_line":"        if usages.get(\u0027ports\u0027, {}).get(\u0027available\u0027, 1) \u003c\u003d 0:"},{"line_number":91,"context_line":"            if \"disabled\" not in self.classes:"},{"line_number":92,"context_line":"                self.classes \u003d [c for c in self.classes] + [\"disabled\"]"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_a7db31eb","line":89,"range":{"start_line":89,"start_character":18,"end_line":89,"end_character":26},"updated":"2017-08-25 09:32:33.000000000","message":"ports?","commit_id":"ad2f7722b9be8efbd28ab6515931059eed7f5c42"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"c617df8fed8039827f060cf7b77b45ebfb3001a6","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    def allowed(self, request, datum\u003dNone):"},{"line_number":87,"context_line":"        usages \u003d quotas.tenant_quota_usages(request, targets\u003d(\u0027ports\u0027, ))"},{"line_number":88,"context_line":"        # when Settings.OPENSTACK_NEUTRON_NETWORK[\u0027enable_quotas\u0027] \u003d False"},{"line_number":89,"context_line":"        # usages[\"networks\"] is empty"},{"line_number":90,"context_line":"        if usages.get(\u0027ports\u0027, {}).get(\u0027available\u0027, 1) \u003c\u003d 0:"},{"line_number":91,"context_line":"            if \"disabled\" not in self.classes:"},{"line_number":92,"context_line":"                self.classes \u003d [c for c in self.classes] + [\"disabled\"]"}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_5278a68e","line":89,"range":{"start_line":89,"start_character":18,"end_line":89,"end_character":26},"in_reply_to":"7f287b81_a7db31eb","updated":"2017-08-28 07:27:27.000000000","message":"Done","commit_id":"ad2f7722b9be8efbd28ab6515931059eed7f5c42"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"71a6d46e9b74b33d2d6d521f33352425028ae36c","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            if \"disabled\" not in self.classes:"},{"line_number":92,"context_line":"                self.classes \u003d [c for c in self.classes] + [\"disabled\"]"},{"line_number":93,"context_line":"                self.verbose_name \u003d _(\"Create Port (Quota exceeded)\")"},{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            self.verbose_name \u003d _(\"Create Port\")"},{"line_number":96,"context_line":"            self.classes \u003d [c for c in self.classes if c !\u003d \"disabled\"]"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        return True"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_27c86120","line":96,"range":{"start_line":94,"start_character":8,"end_line":96,"end_character":71},"updated":"2017-08-25 09:32:33.000000000","message":"Do you need this? I think they are the default values, so I wonder why.","commit_id":"ad2f7722b9be8efbd28ab6515931059eed7f5c42"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"c617df8fed8039827f060cf7b77b45ebfb3001a6","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            if \"disabled\" not in self.classes:"},{"line_number":92,"context_line":"                self.classes \u003d [c for c in self.classes] + [\"disabled\"]"},{"line_number":93,"context_line":"                self.verbose_name \u003d _(\"Create Port (Quota exceeded)\")"},{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            self.verbose_name \u003d _(\"Create Port\")"},{"line_number":96,"context_line":"            self.classes \u003d [c for c in self.classes if c !\u003d \"disabled\"]"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        return True"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_725e0213","line":96,"range":{"start_line":94,"start_character":8,"end_line":96,"end_character":71},"in_reply_to":"7f287b81_27c86120","updated":"2017-08-28 07:27:27.000000000","message":"If the ports quota and usage are the same, when we first enter the ports page, \u0027Create Port\u0027 button is disabled. If we delete a port, the button is still disabled, so after deleting the port, we need to reevaluate the status of the button.","commit_id":"ad2f7722b9be8efbd28ab6515931059eed7f5c42"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"97cc031a84a72ccc91665d41645661a9954200d9","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            if \"disabled\" not in self.classes:"},{"line_number":92,"context_line":"                self.classes \u003d [c for c in self.classes] + [\"disabled\"]"},{"line_number":93,"context_line":"                self.verbose_name \u003d _(\"Create Port (Quota exceeded)\")"},{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            self.verbose_name \u003d _(\"Create Port\")"},{"line_number":96,"context_line":"            self.classes \u003d [c for c in self.classes if c !\u003d \"disabled\"]"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        return True"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7f287b81_1fee85ec","line":96,"range":{"start_line":94,"start_character":8,"end_line":96,"end_character":71},"in_reply_to":"7f287b81_725e0213","updated":"2017-08-29 09:35:03.000000000","message":"Thanks for clarification.\n\nIt seems specific to \"Create Port\". This kind of thing does not happen for Network table, Router table or other tables. It might be caused by the port table belongs to a network detail page.\n\nCould you add some comment on why this \u0027else\u0027 clause is required?\nThe behavior is different from the behavior of other tables, so I believe it is worth documented.","commit_id":"ad2f7722b9be8efbd28ab6515931059eed7f5c42"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"96ccd63e22ee0c7ee910bdf1be26843b79cd1dff","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            if \"disabled\" not in self.classes:"},{"line_number":92,"context_line":"                self.classes \u003d [c for c in self.classes] + [\"disabled\"]"},{"line_number":93,"context_line":"                self.verbose_name \u003d _(\"Create Port (Quota exceeded)\")"},{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            self.verbose_name \u003d _(\"Create Port\")"},{"line_number":96,"context_line":"            self.classes \u003d [c for c in self.classes if c !\u003d \"disabled\"]"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        return True"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f287b81_9fb3950a","line":96,"range":{"start_line":94,"start_character":8,"end_line":96,"end_character":71},"updated":"2017-08-29 09:35:59.000000000","message":"Check my comment in patch set 2. I now understand why this is required, but the behavior is different from other tables and it is worth commented.","commit_id":"923ce7431b56f26b3896aa32786000d5a164d5cd"},{"author":{"_account_id":24056,"name":"wei.ying","email":"wei.ying@easystack.cn","username":"wei.ying"},"change_message_id":"b4029f91eb0ba07e4e80adda7cbafb7d21964b21","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            if \"disabled\" not in self.classes:"},{"line_number":92,"context_line":"                self.classes \u003d [c for c in self.classes] + [\"disabled\"]"},{"line_number":93,"context_line":"                self.verbose_name \u003d _(\"Create Port (Quota exceeded)\")"},{"line_number":94,"context_line":"        else:"},{"line_number":95,"context_line":"            self.verbose_name \u003d _(\"Create Port\")"},{"line_number":96,"context_line":"            self.classes \u003d [c for c in self.classes if c !\u003d \"disabled\"]"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"        return True"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7f287b81_3a026c3e","line":96,"range":{"start_line":94,"start_character":8,"end_line":96,"end_character":71},"in_reply_to":"7f287b81_9fb3950a","updated":"2017-08-29 12:41:24.000000000","message":"Thanks Akihiro. I am in complete agreement that it is worth commented to make the code easier to understand.\n\nI also tested in my local. Networks, routers and keypairs page and ports is the same. And the ‘else’ related code already exists. I think the default classes such as \u0027classes \u003d (\" ajax - modal, \")\u0027 is only used in the initialization, but the \u0027allowed\u0027 method is called when the page is initialized and the table is operated.","commit_id":"923ce7431b56f26b3896aa32786000d5a164d5cd"}]}
