)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a9d34a09efa3eb352b5acfda4161861dd9da32cc","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix actions inside instance details view page"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Suspend and pause instanice from Horizon \"Details\" page."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I4d805e4a65e838242af38677cbb9efefc498a96f"},{"line_number":12,"context_line":"Closes-Bug: #1553142"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"ba0121b8_2976c83d","line":9,"range":{"start_line":9,"start_character":18,"end_line":9,"end_character":27},"updated":"2016-04-01 02:05:27.000000000","message":"instance","commit_id":"037abf8c175fde2afb76fe9224bff66855df9d70"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"77121707e8113bda0924921f3d550aca9621ec6c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix actions inside instance details view page"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Suspend and pause instanice from Horizon \"Details\" page."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I4d805e4a65e838242af38677cbb9efefc498a96f"},{"line_number":12,"context_line":"Closes-Bug: #1553142"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"9a061dce_42cbaca5","line":9,"range":{"start_line":9,"start_character":18,"end_line":9,"end_character":27},"in_reply_to":"ba0121b8_2976c83d","updated":"2016-04-05 09:44:41.000000000","message":"Done","commit_id":"037abf8c175fde2afb76fe9224bff66855df9d70"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"9efaf74a273942874e61d9e04121796d64328b2a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix actions inside instance details view page"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Suspend and pause instances from Horizon \"Details\" page."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I4d805e4a65e838242af38677cbb9efefc498a96f"},{"line_number":12,"context_line":"Closes-Bug: #1553142"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"1a122d0e_78b8cbc8","line":9,"updated":"2016-04-19 15:56:32.000000000","message":"This is a rather incomplete commit message. From this it is unclear what you are trying to accomplish. Please refer to: https://wiki.openstack.org/wiki/GitCommitMessages\n\nThere are two reasons for more complete commit messages.\n1. Don\u0027t assume the reviewer has access to launchpad bug report when reviewing.\n2. Going through the git log later, an incomplete commit message provides no insight into the change or the motivation for the change.","commit_id":"523524068a51059298a8900c7d2da4e92894c5eb"}],"horizon/tables/base.py":[{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"63d546a1c24878d76eb0cb36e9827395fa1e6197","unresolved":false,"context_lines":[{"line_number":623,"context_line":"            (\"action\", self.ajax_action_name),"},{"line_number":624,"context_line":"            (\"table\", self.table.name),"},{"line_number":625,"context_line":"            (\"obj_id\", self.table.get_object_id(self.datum)),"},{"line_number":626,"context_line":"            (\"{}\".format(marker_name), marker)"},{"line_number":627,"context_line":"        ]))"},{"line_number":628,"context_line":"        return \"%s?%s\" % (table_url, params)"},{"line_number":629,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_fbb98216","line":626,"updated":"2016-03-09 13:14:26.000000000","message":"Why not use `(marker_name, marker)` here?","commit_id":"0a98537400b598ccb4fa732929c9430fd1718570"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a9d34a09efa3eb352b5acfda4161861dd9da32cc","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        obj_id \u003d self.table.get_object_id(datum)"},{"line_number":429,"context_line":"        if callable(self.link):"},{"line_number":430,"context_line":"            return self.link(datum, request\u003dself.table.request,"},{"line_number":431,"context_line":"                             object_id\u003dobj_id)"},{"line_number":432,"context_line":"        try:"},{"line_number":433,"context_line":"            return urlresolvers.reverse(self.link, args\u003d(obj_id,))"},{"line_number":434,"context_line":"        except urlresolvers.NoReverseMatch:"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba0121b8_e94210ad","line":431,"range":{"start_line":431,"start_character":29,"end_line":431,"end_character":45},"updated":"2016-04-01 02:05:27.000000000","message":"Why not datum.id or datum.object_id?","commit_id":"037abf8c175fde2afb76fe9224bff66855df9d70"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"77121707e8113bda0924921f3d550aca9621ec6c","unresolved":false,"context_lines":[{"line_number":428,"context_line":"        obj_id \u003d self.table.get_object_id(datum)"},{"line_number":429,"context_line":"        if callable(self.link):"},{"line_number":430,"context_line":"            return self.link(datum, request\u003dself.table.request,"},{"line_number":431,"context_line":"                             object_id\u003dobj_id)"},{"line_number":432,"context_line":"        try:"},{"line_number":433,"context_line":"            return urlresolvers.reverse(self.link, args\u003d(obj_id,))"},{"line_number":434,"context_line":"        except urlresolvers.NoReverseMatch:"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_427d6c6d","line":431,"range":{"start_line":431,"start_character":29,"end_line":431,"end_character":45},"in_reply_to":"ba0121b8_e94210ad","updated":"2016-04-05 09:44:41.000000000","message":"Done","commit_id":"037abf8c175fde2afb76fe9224bff66855df9d70"},{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"7a9ad1a58c4074afaefc3c6eb590f4879bf899df","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                return None"},{"line_number":428,"context_line":"        obj_id \u003d self.table.get_object_id(datum)"},{"line_number":429,"context_line":"        if callable(self.link):"},{"line_number":430,"context_line":"            return self.link(datum, request\u003dself.table.request)"},{"line_number":431,"context_line":"        try:"},{"line_number":432,"context_line":"            return urlresolvers.reverse(self.link, args\u003d(obj_id,))"},{"line_number":433,"context_line":"        except urlresolvers.NoReverseMatch:"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a061dce_084eee95","line":430,"updated":"2016-04-05 11:53:37.000000000","message":"I belive that in previous patch LIU Yulong meanth that this line should look like:\n`return self.link(datum, request\u003dself.table.request,\n                             object_id\u003ddatum.id)`\nWithout `object_id` an attempt to GET project/instances/  will fail.","commit_id":"f67b3e85e784d98d9f6415f7ee62cb895f7ab5a0"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"6bd701b3e7ff0ef02078647bae3ddbda4353c20e","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                return None"},{"line_number":428,"context_line":"        obj_id \u003d self.table.get_object_id(datum)"},{"line_number":429,"context_line":"        if callable(self.link):"},{"line_number":430,"context_line":"            return self.link(datum, request\u003dself.table.request)"},{"line_number":431,"context_line":"        try:"},{"line_number":432,"context_line":"            return urlresolvers.reverse(self.link, args\u003d(obj_id,))"},{"line_number":433,"context_line":"        except urlresolvers.NoReverseMatch:"}],"source_content_type":"text/x-python","patch_set":18,"id":"dab17558_b1e25c9e","line":430,"updated":"2016-05-16 14:45:47.000000000","message":"I\u0027ve realized that this is going to break other Horizon plugins, which continue to provide callable link as a function of one argument.\n\nTo prevent these breakages, inspect.getargspec needs to be used to check if function is able to receive `request` arg.","commit_id":"523524068a51059298a8900c7d2da4e92894c5eb"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"67b793f404c10f770d024a9df0509a4f8842f26f","unresolved":false,"context_lines":[{"line_number":427,"context_line":"                return None"},{"line_number":428,"context_line":"        obj_id \u003d self.table.get_object_id(datum)"},{"line_number":429,"context_line":"        if callable(self.link):"},{"line_number":430,"context_line":"            return self.link(datum, request\u003dself.table.request)"},{"line_number":431,"context_line":"        try:"},{"line_number":432,"context_line":"            return urlresolvers.reverse(self.link, args\u003d(obj_id,))"},{"line_number":433,"context_line":"        except urlresolvers.NoReverseMatch:"}],"source_content_type":"text/x-python","patch_set":18,"id":"dab17558_8e0a8524","line":430,"in_reply_to":"dab17558_b1e25c9e","updated":"2016-05-16 18:26:53.000000000","message":"Done","commit_id":"523524068a51059298a8900c7d2da4e92894c5eb"}],"horizon/test/tests/tables.py":[{"author":{"_account_id":126,"name":"Ilya Alekseyev","email":"ilyaalekseyev@acm.org","username":"ilyaalekseyev"},"change_message_id":"84da1b94bb485528a6bb8560b302115614ff3287","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    return \"custom %s\" % obj.name"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"def get_link(obj, **kwargs):"},{"line_number":262,"context_line":"    return reverse(\u0027login\u0027)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_7080fef7","line":261,"updated":"2016-03-09 09:44:18.000000000","message":"Looks like get_link isn\u0027t used somewhere in this patch. Is it necessary to add **kwargs parameter?","commit_id":"4e15c2264474b6fd2882d8a7f3e0cf2bff067247"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"291d00a82eb06f8206b806fc021763f6d09510b4","unresolved":false,"context_lines":[{"line_number":258,"context_line":"    return \"custom %s\" % obj.name"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"def get_link(obj, **kwargs):"},{"line_number":262,"context_line":"    return reverse(\u0027login\u0027)"},{"line_number":263,"context_line":""},{"line_number":264,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_b0b28692","line":261,"in_reply_to":"5aef4532_7080fef7","updated":"2016-03-09 09:49:02.000000000","message":"Yes, kwargs are required to make tests pass","commit_id":"4e15c2264474b6fd2882d8a7f3e0cf2bff067247"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"9efaf74a273942874e61d9e04121796d64328b2a","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    return \"custom %s\" % obj.name"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def get_link(obj, **kwargs):"},{"line_number":268,"context_line":"    return reverse(\u0027login\u0027)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_1830b7e7","line":267,"updated":"2016-04-19 15:56:32.000000000","message":"why? this is not used","commit_id":"523524068a51059298a8900c7d2da4e92894c5eb"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"4bc459b4d194ad4f66d2b7149c6a7328dcc81636","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    return \"custom %s\" % obj.name"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def get_link(obj, **kwargs):"},{"line_number":268,"context_line":"    return reverse(\u0027login\u0027)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_e245866f","line":267,"in_reply_to":"1a122d0e_1830b7e7","updated":"2016-05-04 03:35:32.000000000","message":"please check the function usage","commit_id":"523524068a51059298a8900c7d2da4e92894c5eb"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"352ea568179706b0149a88a1c175dcba14815b81","unresolved":false,"context_lines":[{"line_number":264,"context_line":"    return \"custom %s\" % obj.name"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def get_link(obj, **kwargs):"},{"line_number":268,"context_line":"    return reverse(\u0027login\u0027)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"bab6814e_b7813892","line":267,"in_reply_to":"1a122d0e_e245866f","updated":"2016-05-18 11:12:29.000000000","message":"Since the caller now is aware of function signature (as of patchset#19), we don\u0027t need `**kwargs` here.","commit_id":"523524068a51059298a8900c7d2da4e92894c5eb"}],"openstack_dashboard/dashboards/admin/instances/tables.py":[{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"25153989697f8ff5cde666c9b8a0178bcba5fc77","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def get_server_detail_link(object, **kwargs):"},{"line_number":113,"context_line":"    marker_name \u003d AdminInstancesTable._meta.pagination_param"},{"line_number":114,"context_line":"    marker \u003d kwargs[\u0027request\u0027].GET.get(marker_name, None)"},{"line_number":115,"context_line":"    reversed_url \u003d urlresolvers.reverse(\"horizon:admin:instances:detail\","},{"line_number":116,"context_line":"                                        args\u003d(kwargs[\u0027object_id\u0027],))"},{"line_number":117,"context_line":"    url \u003d \"{}?{}\u003d{}\".format(reversed_url, marker_name, marker)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_d6a8ea79","line":114,"updated":"2016-03-09 10:19:00.000000000","message":"\u0027request\u0027 key not existing at this point","commit_id":"4e15c2264474b6fd2882d8a7f3e0cf2bff067247"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"31faf5ab8e060e255f46958682f7dececc304fe1","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def get_server_detail_link(object, **kwargs):"},{"line_number":113,"context_line":"    marker_name \u003d AdminInstancesTable._meta.pagination_param"},{"line_number":114,"context_line":"    marker \u003d kwargs[\u0027request\u0027].GET.get(marker_name, None)"},{"line_number":115,"context_line":"    reversed_url \u003d urlresolvers.reverse(\"horizon:admin:instances:detail\","},{"line_number":116,"context_line":"                                        args\u003d(kwargs[\u0027object_id\u0027],))"},{"line_number":117,"context_line":"    url \u003d \"{}?{}\u003d{}\".format(reversed_url, marker_name, marker)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_c1b14249","line":114,"in_reply_to":"5aef4532_d6a8ea79","updated":"2016-03-09 12:37:32.000000000","message":"Done","commit_id":"4e15c2264474b6fd2882d8a7f3e0cf2bff067247"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"63d546a1c24878d76eb0cb36e9827395fa1e6197","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                      (\u0027flavor\u0027, _(\"Flavor ID \u003d\"), True))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def get_server_detail_link(object, **kwargs):"},{"line_number":113,"context_line":"    marker_name \u003d AdminInstancesTable._meta.pagination_param"},{"line_number":114,"context_line":"    marker \u003d kwargs[\u0027request\u0027].GET.get(marker_name, None)"},{"line_number":115,"context_line":"    url \u003d urlresolvers.reverse(\"horizon:admin:instances:detail\","}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_1b026eb4","line":112,"updated":"2016-03-09 13:14:26.000000000","message":"If you\u0027re expecting here `request` and `object_id` to be passed as keyword arguments, why not specify them explicitly as keyword arguments with `None` as default?","commit_id":"0a98537400b598ccb4fa732929c9430fd1718570"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"63d546a1c24878d76eb0cb36e9827395fa1e6197","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    url \u003d urlresolvers.reverse(\"horizon:admin:instances:detail\","},{"line_number":116,"context_line":"                               args\u003d(kwargs[\u0027object_id\u0027],))"},{"line_number":117,"context_line":"    if marker:"},{"line_number":118,"context_line":"        url \u003d \"{}?{}\u003d{}\".format(url, marker_name, marker)"},{"line_number":119,"context_line":"    return url"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_7bae1299","line":118,"updated":"2016-03-09 13:14:26.000000000","message":"It\u0027s better to use https://docs.python.org/2/library/urllib.html#urllib.urlencode here because it escapes unsafe characters for us (less chances to get a security vulnerability).","commit_id":"0a98537400b598ccb4fa732929c9430fd1718570"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a9d34a09efa3eb352b5acfda4161861dd9da32cc","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                      (\u0027flavor\u0027, _(\"Flavor ID \u003d\"), True))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def get_server_detail_link(object, request\u003dNone, object_id\u003dNone):"},{"line_number":113,"context_line":"    return get_url_with_pagination("},{"line_number":114,"context_line":"        request, AdminInstancesTable._meta.pagination_param,"},{"line_number":115,"context_line":"        AdminInstancesTable._meta.prev_pagination_param,"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba0121b8_09edc4b6","line":112,"updated":"2016-04-01 02:05:27.000000000","message":"What is this object_id used for? Did object.instance_id or object.id indicate that?","commit_id":"037abf8c175fde2afb76fe9224bff66855df9d70"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"77121707e8113bda0924921f3d550aca9621ec6c","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                      (\u0027flavor\u0027, _(\"Flavor ID \u003d\"), True))"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def get_server_detail_link(object, request\u003dNone, object_id\u003dNone):"},{"line_number":113,"context_line":"    return get_url_with_pagination("},{"line_number":114,"context_line":"        request, AdminInstancesTable._meta.pagination_param,"},{"line_number":115,"context_line":"        AdminInstancesTable._meta.prev_pagination_param,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_82de646b","line":112,"in_reply_to":"ba0121b8_09edc4b6","updated":"2016-04-05 09:44:41.000000000","message":"Done","commit_id":"037abf8c175fde2afb76fe9224bff66855df9d70"}],"openstack_dashboard/dashboards/admin/instances/tests.py":[{"author":{"_account_id":13325,"name":"Paul Karikh","email":"pkarikh@gmail.com","username":"paul.karikh"},"change_message_id":"530edd8a2da798fe5908b9adde2ac5355669be35","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        self.assertTemplateUsed(res, \"horizon/common/_data_table_row.html\")"},{"line_number":176,"context_line":"        self.assertContains(res, \"test_tenant\", 1, 200)"},{"line_number":177,"context_line":"        self.assertContains(res, \"instance-host\", 1, 200)"},{"line_number":178,"context_line":"        self.assertContains(res, \"server_1\", 2, 200)"},{"line_number":179,"context_line":"        self.assertContains(res, \"10.0.0.1\", 1, 200)"},{"line_number":180,"context_line":"        self.assertContains(res, \"RAM\u003c/th\u003e\u003ctd\u003e512MB\", 1, 200)"},{"line_number":181,"context_line":"        self.assertContains(res, \"VCPUs\u003c/th\u003e\u003ctd\u003e1\", 1, 200)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_9759725d","line":178,"updated":"2016-04-05 14:16:58.000000000","message":"Hmm, maybe I\u0027m missing something but why do we expecting here now two instances of server_1?","commit_id":"e7c2dc9904b728c652139237dd881eb95fcf4ee6"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"a4e62bb64305dd9f31ff35ed1d7eaa75cd8d3c81","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        self.assertTemplateUsed(res, \"horizon/common/_data_table_row.html\")"},{"line_number":176,"context_line":"        self.assertContains(res, \"test_tenant\", 1, 200)"},{"line_number":177,"context_line":"        self.assertContains(res, \"instance-host\", 1, 200)"},{"line_number":178,"context_line":"        self.assertContains(res, \"server_1\", 2, 200)"},{"line_number":179,"context_line":"        self.assertContains(res, \"10.0.0.1\", 1, 200)"},{"line_number":180,"context_line":"        self.assertContains(res, \"RAM\u003c/th\u003e\u003ctd\u003e512MB\", 1, 200)"},{"line_number":181,"context_line":"        self.assertContains(res, \"VCPUs\u003c/th\u003e\u003ctd\u003e1\", 1, 200)"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a061dce_fa9c135f","line":178,"in_reply_to":"9a061dce_9759725d","updated":"2016-04-05 14:23:02.000000000","message":"I have restored the original comment for this assert.","commit_id":"e7c2dc9904b728c652139237dd881eb95fcf4ee6"}],"openstack_dashboard/dashboards/admin/instances/views.py":[{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"63d546a1c24878d76eb0cb36e9827395fa1e6197","unresolved":false,"context_lines":[{"line_number":196,"context_line":"    image_url \u003d \u0027horizon:admin:images:detail\u0027"},{"line_number":197,"context_line":"    volume_url \u003d \u0027horizon:admin:volumes:volumes:detail\u0027"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def get_context_data(self, **kwargs):"},{"line_number":200,"context_line":"        context \u003d super(DetailView, self).get_context_data(**kwargs)"},{"line_number":201,"context_line":"        marker_name \u003d project_tables.AdminInstancesTable._meta.pagination_param"},{"line_number":202,"context_line":"        marker \u003d self.request.GET.get(marker_name, None)"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_1b754e31","line":199,"updated":"2016-03-09 13:14:26.000000000","message":"Same comment here about keyword args and using urlencode.","commit_id":"0a98537400b598ccb4fa732929c9430fd1718570"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"67c17e5b92e81d841aa1d2ed66c9334496b5c22c","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    redirect_url \u003d \u0027horizon:admin:instances:index\u0027"},{"line_number":196,"context_line":"    image_url \u003d \u0027horizon:admin:images:detail\u0027"},{"line_number":197,"context_line":"    volume_url \u003d \u0027horizon:admin:volumes:volumes:detail\u0027"},{"line_number":198,"context_line":"    table_class \u003d project_tables.AdminInstancesTable"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _get_actions(self, instance):"},{"line_number":201,"context_line":"        table \u003d project_tables.AdminInstancesTable(self.request)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_9f14774d","line":198,"updated":"2016-03-31 17:52:47.000000000","message":"Seems that you don\u0027t need it - just checked both tests and bug scenario by hand, works w/o it fine.","commit_id":"8f24e6338df046c673e132d656f3fb446065c84f"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"0faae2a17fabcd50e9e261304d9dd63f8b20b92c","unresolved":false,"context_lines":[{"line_number":195,"context_line":"    redirect_url \u003d \u0027horizon:admin:instances:index\u0027"},{"line_number":196,"context_line":"    image_url \u003d \u0027horizon:admin:images:detail\u0027"},{"line_number":197,"context_line":"    volume_url \u003d \u0027horizon:admin:volumes:volumes:detail\u0027"},{"line_number":198,"context_line":"    table_class \u003d project_tables.AdminInstancesTable"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _get_actions(self, instance):"},{"line_number":201,"context_line":"        table \u003d project_tables.AdminInstancesTable(self.request)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_eac21384","line":198,"in_reply_to":"ba0121b8_9f14774d","updated":"2016-03-31 18:15:47.000000000","message":"Done","commit_id":"8f24e6338df046c673e132d656f3fb446065c84f"}],"openstack_dashboard/dashboards/project/access_and_security/floating_ips/tables.py":[{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a9d34a09efa3eb352b5acfda4161861dd9da32cc","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        return None"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"def get_instance_link(datum, request\u003dNone, object_id\u003dNone):"},{"line_number":173,"context_line":"    if datum.instance_type \u003d\u003d \u0027compute\u0027:"},{"line_number":174,"context_line":"        return reverse(\"horizon:project:instances:detail\","},{"line_number":175,"context_line":"                       args\u003d(datum.instance_id,))"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba0121b8_c9cf4c54","line":172,"range":{"start_line":172,"start_character":43,"end_line":172,"end_character":57},"updated":"2016-04-01 02:05:27.000000000","message":"What is this object_id used for? Did datum.instance_id indicate that?","commit_id":"037abf8c175fde2afb76fe9224bff66855df9d70"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"77121707e8113bda0924921f3d550aca9621ec6c","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        return None"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"def get_instance_link(datum, request\u003dNone, object_id\u003dNone):"},{"line_number":173,"context_line":"    if datum.instance_type \u003d\u003d \u0027compute\u0027:"},{"line_number":174,"context_line":"        return reverse(\"horizon:project:instances:detail\","},{"line_number":175,"context_line":"                       args\u003d(datum.instance_id,))"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a061dce_02ea540f","line":172,"range":{"start_line":172,"start_character":43,"end_line":172,"end_character":57},"in_reply_to":"ba0121b8_c9cf4c54","updated":"2016-04-05 09:44:41.000000000","message":"Done","commit_id":"037abf8c175fde2afb76fe9224bff66855df9d70"},{"author":{"_account_id":5623,"name":"David Lyle","email":"dklyle0@gmail.com","username":"david-lyle"},"change_message_id":"9efaf74a273942874e61d9e04121796d64328b2a","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        return None"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"def get_instance_link(datum, request\u003dNone):"},{"line_number":173,"context_line":"    if datum.instance_type \u003d\u003d \u0027compute\u0027:"},{"line_number":174,"context_line":"        return reverse(\"horizon:project:instances:detail\","},{"line_number":175,"context_line":"                       args\u003d(datum.instance_id,))"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_386133d4","line":172,"updated":"2016-04-19 15:56:32.000000000","message":"request is not used, why add it?","commit_id":"523524068a51059298a8900c7d2da4e92894c5eb"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"4bc459b4d194ad4f66d2b7149c6a7328dcc81636","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        return None"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"def get_instance_link(datum, request\u003dNone):"},{"line_number":173,"context_line":"    if datum.instance_type \u003d\u003d \u0027compute\u0027:"},{"line_number":174,"context_line":"        return reverse(\"horizon:project:instances:detail\","},{"line_number":175,"context_line":"                       args\u003d(datum.instance_id,))"}],"source_content_type":"text/x-python","patch_set":18,"id":"1a122d0e_0243626d","line":172,"in_reply_to":"1a122d0e_386133d4","updated":"2016-05-04 03:35:32.000000000","message":"please check the function usage","commit_id":"523524068a51059298a8900c7d2da4e92894c5eb"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"2ed26fb0b8750b70509caea87454d3212ac0bb0c","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        return None"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"def get_instance_link(datum, request\u003dNone):"},{"line_number":174,"context_line":"    if datum.instance_type \u003d\u003d \u0027compute\u0027:"},{"line_number":175,"context_line":"        return reverse(\"horizon:project:instances:detail\","},{"line_number":176,"context_line":"                       args\u003d(datum.instance_id,))"}],"source_content_type":"text/x-python","patch_set":19,"id":"bab6814e_97f99450","line":173,"updated":"2016-05-18 11:14:03.000000000","message":"Since the caller now is aware of function signature, we don\u0027t need `request\u003dNone` here.","commit_id":"65709921141bdcadafdb229b34e1b8a62f87ffdd"}],"openstack_dashboard/dashboards/project/instances/tables.py":[{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"32ac3c06395f7e234baf1ab41bf3881dc0b80ff2","unresolved":false,"context_lines":[{"line_number":1145,"context_line":"def get_server_detail_link(object, request\u003dNone, object_id\u003dNone):"},{"line_number":1146,"context_line":"    return get_url_with_pagination(request,"},{"line_number":1147,"context_line":"                                   InstancesTable._meta.pagination_param,"},{"line_number":1148,"context_line":"                                   \u0027horizon:admin:instances:detail\u0027,"},{"line_number":1149,"context_line":"                                   object_id)"},{"line_number":1150,"context_line":""},{"line_number":1151,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3afc51ec_ef7f3b64","line":1148,"updated":"2016-03-14 12:08:17.000000000","message":"Link from Project-\u003eInstances table shouldn\u0027t lead away from Project dashboard to Admin.","commit_id":"bffee7750f9e9b91f7ad8414b8d36d83f2aad874"}],"openstack_dashboard/dashboards/project/instances/views.py":[{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"01bda81cd29604262b99081d185afc564f0912d0","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        instance.volume_url \u003d self.volume_url"},{"line_number":309,"context_line":"        context[\"instance\"] \u003d instance"},{"line_number":310,"context_line":"        marker_name \u003d project_tables.InstancesTable._meta.pagination_param"},{"line_number":311,"context_line":"        marker \u003d self.request.GET.get(marker_name, None)"},{"line_number":312,"context_line":"        reversed_url \u003d reverse(self.redirect_url)"},{"line_number":313,"context_line":"        context[\"url\"] \u003d \"{}?{}\u003d{}\".format(reversed_url, marker_name, marker)"},{"line_number":314,"context_line":"        context[\"actions\"] \u003d self._get_actions(instance)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_96af8229","line":311,"updated":"2016-03-09 10:24:43.000000000","message":"The problem with \u0027marker\u0027 GET param is that you\u0027re not passing it to detail view via get_link_url() function for Project-\u003eInstances table.","commit_id":"4e15c2264474b6fd2882d8a7f3e0cf2bff067247"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"31faf5ab8e060e255f46958682f7dececc304fe1","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        instance.volume_url \u003d self.volume_url"},{"line_number":309,"context_line":"        context[\"instance\"] \u003d instance"},{"line_number":310,"context_line":"        marker_name \u003d project_tables.InstancesTable._meta.pagination_param"},{"line_number":311,"context_line":"        marker \u003d self.request.GET.get(marker_name, None)"},{"line_number":312,"context_line":"        reversed_url \u003d reverse(self.redirect_url)"},{"line_number":313,"context_line":"        context[\"url\"] \u003d \"{}?{}\u003d{}\".format(reversed_url, marker_name, marker)"},{"line_number":314,"context_line":"        context[\"actions\"] \u003d self._get_actions(instance)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_47b8a2c8","line":311,"in_reply_to":"5aef4532_96af8229","updated":"2016-03-09 12:37:32.000000000","message":"Done","commit_id":"4e15c2264474b6fd2882d8a7f3e0cf2bff067247"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"63d546a1c24878d76eb0cb36e9827395fa1e6197","unresolved":false,"context_lines":[{"line_number":307,"context_line":"                                         args\u003d[instance.image[\u0027id\u0027]])"},{"line_number":308,"context_line":"        instance.volume_url \u003d self.volume_url"},{"line_number":309,"context_line":"        context[\"instance\"] \u003d instance"},{"line_number":310,"context_line":"        marker_name \u003d project_tables.InstancesTable._meta.pagination_param"},{"line_number":311,"context_line":"        marker \u003d self.request.GET.get(marker_name, None)"},{"line_number":312,"context_line":"        url \u003d reverse(self.redirect_url)"},{"line_number":313,"context_line":"        if marker:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5aef4532_1bda6e17","line":310,"updated":"2016-03-09 13:14:26.000000000","message":"It\u0027s the fourth place (function) that contains almost the same logic. Is it possible to reuse a single function in all 4 places?","commit_id":"0a98537400b598ccb4fa732929c9430fd1718570"},{"author":{"_account_id":8040,"name":"Timur Sufiev","email":"tsufiev@gmail.com","username":"tsufiev"},"change_message_id":"67c17e5b92e81d841aa1d2ed66c9334496b5c22c","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    page_title \u003d \"{{ instance.name|default:instance.id }}\""},{"line_number":300,"context_line":"    image_url \u003d \u0027horizon:project:images:images:detail\u0027"},{"line_number":301,"context_line":"    volume_url \u003d \u0027horizon:project:volumes:volumes:detail\u0027"},{"line_number":302,"context_line":"    table_class \u003d project_tables.InstancesTable"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def get_context_data(self, **kwargs):"},{"line_number":305,"context_line":"        context \u003d super(DetailView, self).get_context_data(**kwargs)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_aa22dba0","line":302,"updated":"2016-03-31 17:52:47.000000000","message":"IMO that creates an assumption (every DetailView should define table_class) which is not actually true. Why not reference project_tables.InstancesTable class at the same place where it\u0027s actually used?","commit_id":"8f24e6338df046c673e132d656f3fb446065c84f"},{"author":{"_account_id":15637,"name":"Dmitry Ratushnyy","email":"d.ratushnyy@gmail.com","username":"dratushnyy"},"change_message_id":"0faae2a17fabcd50e9e261304d9dd63f8b20b92c","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    page_title \u003d \"{{ instance.name|default:instance.id }}\""},{"line_number":300,"context_line":"    image_url \u003d \u0027horizon:project:images:images:detail\u0027"},{"line_number":301,"context_line":"    volume_url \u003d \u0027horizon:project:volumes:volumes:detail\u0027"},{"line_number":302,"context_line":"    table_class \u003d project_tables.InstancesTable"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    def get_context_data(self, **kwargs):"},{"line_number":305,"context_line":"        context \u003d super(DetailView, self).get_context_data(**kwargs)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba0121b8_ca6c6f0a","line":302,"in_reply_to":"ba0121b8_aa22dba0","updated":"2016-03-31 18:15:47.000000000","message":"Done","commit_id":"8f24e6338df046c673e132d656f3fb446065c84f"}],"openstack_dashboard/views.py":[{"author":{"_account_id":4264,"name":"Matthias Runge","email":"mrunge@redhat.com","username":"mrunge"},"change_message_id":"5a7267bc594c8ba989b2ef9fe7c123974b124552","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        url \u003d urlresolvers.reverse(url_string)"},{"line_number":70,"context_line":"    marker \u003d request.GET.get(marker_name, None)"},{"line_number":71,"context_line":"    if marker:"},{"line_number":72,"context_line":"        return \"{}?{}\".format(url, urllib.urlencode({marker_name: marker}))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    prev_marker \u003d request.GET.get(prev_marker_name, None)"},{"line_number":75,"context_line":"    if prev_marker:"}],"source_content_type":"text/x-python","patch_set":24,"id":"3aaa91ec_a7c55c3d","line":72,"updated":"2016-06-22 14:51:16.000000000","message":"I would prefer this kind of magic to be moved to url config, rather than constructing it here.","commit_id":"a104487dd6f82f2376d1cc08c0d5c08bbbe6249f"}]}
