)]}'
{"horizon/horizon/dashboards/nova/access_and_security/floating_ips/tables.py":[{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"0a67b85e4ac8a342d2264b0b09fbfb3a08f4a21a","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"class ReleaseIPs(tables.BatchAction):"},{"line_number":43,"context_line":"    name \u003d \"release\""},{"line_number":44,"context_line":"    actions_present \u003d (_(\"Release\"),)"},{"line_number":45,"context_line":"    actions_past \u003d (_(\"Released\"),)"},{"line_number":46,"context_line":"    data_type_singular \u003d _(\"Floating IP\")"},{"line_number":47,"context_line":"    data_type_plural \u003d _(\"Floating IPs\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2BaE%3D","line":44,"updated":"2012-02-06 20:09:13.000000000","message":"don\u0027t need to refactor","commit_id":"c8fce39c9c7011e784b21f9b5a9315adcdff04cf"}],"horizon/horizon/dashboards/nova/instances_and_volumes/instances/tables.py":[{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"0a67b85e4ac8a342d2264b0b09fbfb3a08f4a21a","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"class TerminateInstance(tables.BatchAction):"},{"line_number":52,"context_line":"    name \u003d \"terminate\""},{"line_number":53,"context_line":"    actions_present \u003d (_(\"Terminate\"),)"},{"line_number":54,"context_line":"    actions_past \u003d (_(\"Terminated\"),)"},{"line_number":55,"context_line":"    data_type_singular \u003d _(\"Instance\")"},{"line_number":56,"context_line":"    data_type_plural \u003d _(\"Instances\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2BaY%3D","line":53,"updated":"2012-02-06 20:09:13.000000000","message":"don\u0027t need to refactor","commit_id":"c8fce39c9c7011e784b21f9b5a9315adcdff04cf"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"0a67b85e4ac8a342d2264b0b09fbfb3a08f4a21a","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"class RebootInstance(tables.BatchAction):"},{"line_number":64,"context_line":"    name \u003d \"reboot\""},{"line_number":65,"context_line":"    actions_present \u003d (_(\"Reboot\"),)"},{"line_number":66,"context_line":"    actions_past \u003d (_(\"Rebooted\"),)"},{"line_number":67,"context_line":"    data_type_singular \u003d _(\"Instance\")"},{"line_number":68,"context_line":"    data_type_plural \u003d _(\"Instances\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2BaU%3D","line":65,"updated":"2012-02-06 20:09:13.000000000","message":"don\u0027t need to refactor","commit_id":"c8fce39c9c7011e784b21f9b5a9315adcdff04cf"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"0a67b85e4ac8a342d2264b0b09fbfb3a08f4a21a","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    def allowed(self, request, instance\u003dNone):"},{"line_number":86,"context_line":"        self.paused \u003d False"},{"line_number":87,"context_line":"        if not instance:"},{"line_number":88,"context_line":"            return False"},{"line_number":89,"context_line":"        self.paused \u003d instance.status \u003d\u003d \"PAUSED\""},{"line_number":90,"context_line":"        if self.paused:"},{"line_number":91,"context_line":"            self.current_present_action \u003d UNPAUSE"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2BaM%3D","line":88,"updated":"2012-02-06 20:09:13.000000000","message":"It\u0027ll be a little more obvious why self.paused is set on the previous line if we return self.paused here instead of False. It took me a good 30 seconds of trying to figure it out why it was important to set self.paused (as it\u0027s used in a later method) and would be short-circuited here otherwise.","commit_id":"c8fce39c9c7011e784b21f9b5a9315adcdff04cf"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"0a67b85e4ac8a342d2264b0b09fbfb3a08f4a21a","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    def allowed(self, request, instance\u003dNone):"},{"line_number":111,"context_line":"        self.suspended \u003d False"},{"line_number":112,"context_line":"        if not instance:"},{"line_number":113,"context_line":"            return False"},{"line_number":114,"context_line":"        self.suspended \u003d instance.status \u003d\u003d \"SUSPENDED\""},{"line_number":115,"context_line":"        if self.suspended:"},{"line_number":116,"context_line":"            self.current_present_action \u003d RESUME"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2BaI%3D","line":113,"updated":"2012-02-06 20:09:13.000000000","message":"ditto.","commit_id":"c8fce39c9c7011e784b21f9b5a9315adcdff04cf"}],"horizon/horizon/dashboards/nova/instances_and_volumes/volumes/tables.py":[{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"0a67b85e4ac8a342d2264b0b09fbfb3a08f4a21a","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"class DetachVolume(tables.BatchAction):"},{"line_number":105,"context_line":"    name \u003d \"detach\""},{"line_number":106,"context_line":"    actions_present \u003d (_(\"Detach\"),)"},{"line_number":107,"context_line":"    actions_past \u003d (_(\"Detached\"),)"},{"line_number":108,"context_line":"    data_type_singular \u003d _(\"Volume\")"},{"line_number":109,"context_line":"    data_type_plural \u003d _(\"Volumes\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2Bac%3D","line":106,"updated":"2012-02-06 20:09:13.000000000","message":"don\u0027t need to refactor","commit_id":"c8fce39c9c7011e784b21f9b5a9315adcdff04cf"}],"horizon/horizon/dashboards/nova/networks/tables.py":[{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"0a67b85e4ac8a342d2264b0b09fbfb3a08f4a21a","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class DetachPortAction(tables.BatchAction):"},{"line_number":79,"context_line":"    name \u003d \"detach_port\""},{"line_number":80,"context_line":"    actions_present \u003d (_(\"Detach\"),)"},{"line_number":81,"context_line":"    actions_past \u003d (_(\"Detached\"),)"},{"line_number":82,"context_line":"    data_type_singular \u003d _(\"Port\")"},{"line_number":83,"context_line":"    data_type_plural \u003d _(\"Ports\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2Bag%3D","line":80,"updated":"2012-02-06 20:09:13.000000000","message":"don\u0027t need to refactor","commit_id":"c8fce39c9c7011e784b21f9b5a9315adcdff04cf"}],"horizon/horizon/dashboards/syspanel/tenants/tables.py":[{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"0a67b85e4ac8a342d2264b0b09fbfb3a08f4a21a","unresolved":false,"context_lines":[{"line_number":84,"context_line":""},{"line_number":85,"context_line":"class RemoveUserAction(tables.BatchAction):"},{"line_number":86,"context_line":"    name \u003d \"remove_user\""},{"line_number":87,"context_line":"    actions_present \u003d (_(\"Remove\"),)"},{"line_number":88,"context_line":"    actions_past \u003d (_(\"Removed\"),)"},{"line_number":89,"context_line":"    data_type_singular \u003d _(\"User\")"},{"line_number":90,"context_line":"    data_type_plural \u003d _(\"Users\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2Bak%3D","line":87,"updated":"2012-02-06 20:09:13.000000000","message":"don\u0027t need to refactor","commit_id":"c8fce39c9c7011e784b21f9b5a9315adcdff04cf"}],"horizon/horizon/tables/actions.py":[{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"0a67b85e4ac8a342d2264b0b09fbfb3a08f4a21a","unresolved":false,"context_lines":[{"line_number":299,"context_line":"                                  \"by %s.\" % self.__class__)"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":""},{"line_number":302,"context_line":"class BatchAction(Action):"},{"line_number":303,"context_line":"    \"\"\" A table action which takes batch action on one or more"},{"line_number":304,"context_line":"        objects. This action should not require user input on a"},{"line_number":305,"context_line":"        per-object basis."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2Ba8%3D","line":302,"updated":"2012-02-06 20:09:13.000000000","message":"This is not applicable only to BatchAction. It should either be integrated into the base Action class or exist separately as a mixin class.","commit_id":"c8fce39c9c7011e784b21f9b5a9315adcdff04cf"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"0a67b85e4ac8a342d2264b0b09fbfb3a08f4a21a","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"       Tuple. The past tense of actions_present. (\"Deleted\", \"Rotated\", etc.)"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"    .. attribute:: initial_present_action"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        Optional index of the initial present action"},{"line_number":323,"context_line":"        in the actions_present list"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2Ba0%3D","line":320,"updated":"2012-02-06 20:09:13.000000000","message":"If we\u0027re using an ordered type, the default is the first element. I don\u0027t think this needs to be configurable.","commit_id":"c8fce39c9c7011e784b21f9b5a9315adcdff04cf"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"0a67b85e4ac8a342d2264b0b09fbfb3a08f4a21a","unresolved":false,"context_lines":[{"line_number":322,"context_line":"        Optional index of the initial present action"},{"line_number":323,"context_line":"        in the actions_present list"},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"    .. attribute:: initial_past_action"},{"line_number":326,"context_line":""},{"line_number":327,"context_line":"        Optional index of the initial past action"},{"line_number":328,"context_line":"        in the actions_past list"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2Baw%3D","line":325,"updated":"2012-02-06 20:09:13.000000000","message":"ditto.","commit_id":"c8fce39c9c7011e784b21f9b5a9315adcdff04cf"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"0a67b85e4ac8a342d2264b0b09fbfb3a08f4a21a","unresolved":false,"context_lines":[{"line_number":361,"context_line":"        return string_concat(action, \u0027 \u0027, data_type)"},{"line_number":362,"context_line":""},{"line_number":363,"context_line":"    def __init__(self):"},{"line_number":364,"context_line":"        self.current_present_action \u003d getattr(self, \u0027initial_present_action\u0027,"},{"line_number":365,"context_line":"                                                    0)"},{"line_number":366,"context_line":"        self.current_past_action \u003d getattr(self, \u0027initial_past_action\u0027,"},{"line_number":367,"context_line":"                                                    0)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2Bas%3D","line":364,"updated":"2012-02-06 20:09:13.000000000","message":"As noted above, configuring the default is unnecesary. However I think we should continue to support the action_present and action_past if they\u0027re specified by converting them to tuples if the tuples aren\u0027t present. There\u0027s no reason the two APIs can\u0027t exist for convenience (especially considering the majority of cases don\u0027t need to toggle).","commit_id":"c8fce39c9c7011e784b21f9b5a9315adcdff04cf"},{"author":{"_account_id":1816,"name":"Gabriel Hurley","email":"gabriel.hurley@nebula.com","username":"gabriel-hurley"},"change_message_id":"0a67b85e4ac8a342d2264b0b09fbfb3a08f4a21a","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"class DeleteAction(BatchAction):"},{"line_number":447,"context_line":"    name \u003d \"delete\""},{"line_number":448,"context_line":"    actions_present \u003d (_(\"Delete\"),)"},{"line_number":449,"context_line":"    actions_past \u003d (_(\"Deleted\"),)"},{"line_number":450,"context_line":"    classes \u003d (\u0027danger\u0027,)"},{"line_number":451,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2Bao%3D","line":448,"updated":"2012-02-06 20:09:13.000000000","message":"Again, don\u0027t see the need to refactor the existing code since the toggleable actions are the minority case.","commit_id":"c8fce39c9c7011e784b21f9b5a9315adcdff04cf"}]}
