)]}'
{"nova/api/openstack/compute/contrib/security_groups.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"72d55d91bbd390719fb0e1e203b037918c608b6e","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                                                              group_ref)}"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    @wsgi.serializers(xml\u003dSecurityGroupTemplate)"},{"line_number":299,"context_line":"    def update(self, req, id, body):"},{"line_number":300,"context_line":"        \"\"\"Update a security group.\"\"\""},{"line_number":301,"context_line":"        context \u003d _authorize_context(req)"},{"line_number":302,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FxCE%3D","line":299,"updated":"2013-05-23 15:03:38.000000000","message":"At a minimum, you need to update the \"updated\" attribute on the extension to advertise the new capability.  Also, I should warn you that other reviewers have been demanding a whole new extension for that purpose…","commit_id":"0c51f11330a87d3571378c25628c12f1d46ef3de"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"484bbe936c42b694eda9e26bff43fda1dfa78108","unresolved":false,"context_lines":[{"line_number":296,"context_line":"                                                              group_ref)}"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    @wsgi.serializers(xml\u003dSecurityGroupTemplate)"},{"line_number":299,"context_line":"    def update(self, req, id, body):"},{"line_number":300,"context_line":"        \"\"\"Update a security group.\"\"\""},{"line_number":301,"context_line":"        context \u003d _authorize_context(req)"},{"line_number":302,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FvRM%3D","line":299,"in_reply_to":"AAAAPH%2F%2FxCE%3D","updated":"2013-05-24 02:45:53.000000000","message":"Okay, I\u0027ll update the attribute.","commit_id":"0c51f11330a87d3571378c25628c12f1d46ef3de"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"35dd47e44b2d34bd4a05d934e7d0efb1d78f70e4","unresolved":false,"context_lines":[{"line_number":591,"context_line":"    \"\"\"Security group support.\"\"\""},{"line_number":592,"context_line":"    name \u003d \"SecurityGroups\""},{"line_number":593,"context_line":"    alias \u003d \"os-security-groups\""},{"line_number":594,"context_line":"    namespace \u003d \"http://docs.openstack.org/compute/ext/securitygroups/api/v1.1\""},{"line_number":595,"context_line":"    updated \u003d \"2011-07-21T00:00:00+00:00\""},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    def get_controller_extensions(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Fo6Q%3D","line":594,"updated":"2013-05-28 19:27:42.000000000","message":"This is the \u0027updated\u0027 attribute I was referring to.","commit_id":"6856384431fb6bc8ee53b2a1d7078c6d6885fe4e"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"ebf3143701ed621f195b4b70d9fb012fd225e81f","unresolved":false,"context_lines":[{"line_number":591,"context_line":"    \"\"\"Security group support.\"\"\""},{"line_number":592,"context_line":"    name \u003d \"SecurityGroups\""},{"line_number":593,"context_line":"    alias \u003d \"os-security-groups\""},{"line_number":594,"context_line":"    namespace \u003d \"http://docs.openstack.org/compute/ext/securitygroups/api/v1.1\""},{"line_number":595,"context_line":"    updated \u003d \"2011-07-21T00:00:00+00:00\""},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"    def get_controller_extensions(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2FoiU%3D","line":594,"in_reply_to":"AAAAPH%2F%2Fo6Q%3D","updated":"2013-05-28 21:48:09.000000000","message":"Done","commit_id":"6856384431fb6bc8ee53b2a1d7078c6d6885fe4e"}],"nova/api/openstack/extensions.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"35dd47e44b2d34bd4a05d934e7d0efb1d78f70e4","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    # The timestamp when the extension was last updated, e.g.,"},{"line_number":57,"context_line":"    # \u00272011-01-22T13:25:27-06:00\u0027"},{"line_number":58,"context_line":"    updated \u003d \u00272013-05-24T14:30:20-06:00\u0027"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def __init__(self, ext_mgr):"},{"line_number":61,"context_line":"        \"\"\"Register extension with the extension manager.\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2Fo6c%3D","line":58,"updated":"2013-05-28 19:27:42.000000000","message":"Uh, no; this is the superclass.  This *must* be None.","commit_id":"6856384431fb6bc8ee53b2a1d7078c6d6885fe4e"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"ebf3143701ed621f195b4b70d9fb012fd225e81f","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    # The timestamp when the extension was last updated, e.g.,"},{"line_number":57,"context_line":"    # \u00272011-01-22T13:25:27-06:00\u0027"},{"line_number":58,"context_line":"    updated \u003d \u00272013-05-24T14:30:20-06:00\u0027"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def __init__(self, ext_mgr):"},{"line_number":61,"context_line":"        \"\"\"Register extension with the extension manager.\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2FoiM%3D","line":58,"in_reply_to":"AAAAPH%2F%2Fo6c%3D","updated":"2013-05-28 21:48:09.000000000","message":"Okay, I\u0027ll change it back.","commit_id":"6856384431fb6bc8ee53b2a1d7078c6d6885fe4e"}],"nova/compute/api.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"72d55d91bbd390719fb0e1e203b037918c608b6e","unresolved":false,"context_lines":[{"line_number":2909,"context_line":"                                name, description):"},{"line_number":2910,"context_line":"        if security_group[\u0027name\u0027] in RO_SECURITY_GROUPS:"},{"line_number":2911,"context_line":"            msg \u003d _(\"Unable to update system group \u0027%s\u0027\") % \\"},{"line_number":2912,"context_line":"                    security_group[\u0027name\u0027]"},{"line_number":2913,"context_line":"            self.raise_invalid_group(msg)"},{"line_number":2914,"context_line":""},{"line_number":2915,"context_line":"        group \u003d {\u0027name\u0027: name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FxDI%3D","line":2912,"updated":"2013-05-23 15:03:38.000000000","message":"Please consider enclosing the msg in parentheses, to eliminate the need for backslash continuation.","commit_id":"0c51f11330a87d3571378c25628c12f1d46ef3de"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"484bbe936c42b694eda9e26bff43fda1dfa78108","unresolved":false,"context_lines":[{"line_number":2909,"context_line":"                                name, description):"},{"line_number":2910,"context_line":"        if security_group[\u0027name\u0027] in RO_SECURITY_GROUPS:"},{"line_number":2911,"context_line":"            msg \u003d _(\"Unable to update system group \u0027%s\u0027\") % \\"},{"line_number":2912,"context_line":"                    security_group[\u0027name\u0027]"},{"line_number":2913,"context_line":"            self.raise_invalid_group(msg)"},{"line_number":2914,"context_line":""},{"line_number":2915,"context_line":"        group \u003d {\u0027name\u0027: name,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAPH%2F%2FvQc%3D","line":2912,"in_reply_to":"AAAAPH%2F%2FxDI%3D","updated":"2013-05-24 02:45:53.000000000","message":"Done","commit_id":"0c51f11330a87d3571378c25628c12f1d46ef3de"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"c6fe1161bf98dbcf06926e151cb2dc8f0c90181a","unresolved":false,"context_lines":[{"line_number":3242,"context_line":""},{"line_number":3243,"context_line":""},{"line_number":3244,"context_line":"@require_context"},{"line_number":3245,"context_line":"def security_group_update(context, security_group_id, values):"},{"line_number":3246,"context_line":"    session \u003d get_session()"},{"line_number":3247,"context_line":"    with session.begin():"},{"line_number":3248,"context_line":"        security_group_ref \u003d session.query(models.SecurityGroup).\\"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F%2Bt8%3D","line":3245,"updated":"2013-05-17 08:58:11.000000000","message":"If you don\u0027t need to return updated values (I think it is not required, because you already have values) you shoud make it in one query.","commit_id":"b4b8d7806e0f9efee577b711d2450ac3f862fae4"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"1f70e0b0cb52b8c417f445dfee0013f7184b442e","unresolved":false,"context_lines":[{"line_number":3242,"context_line":""},{"line_number":3243,"context_line":""},{"line_number":3244,"context_line":"@require_context"},{"line_number":3245,"context_line":"def security_group_update(context, security_group_id, values):"},{"line_number":3246,"context_line":"    session \u003d get_session()"},{"line_number":3247,"context_line":"    with session.begin():"},{"line_number":3248,"context_line":"        security_group_ref \u003d session.query(models.SecurityGroup).\\"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F8mU%3D","line":3245,"in_reply_to":"AAAAPH%2F%2F%2Bt8%3D","updated":"2013-05-18 05:45:50.000000000","message":"IMO, it should return updated values like security_group_create.","commit_id":"b4b8d7806e0f9efee577b711d2450ac3f862fae4"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"c6fe1161bf98dbcf06926e151cb2dc8f0c90181a","unresolved":false,"context_lines":[{"line_number":3245,"context_line":"def security_group_update(context, security_group_id, values):"},{"line_number":3246,"context_line":"    session \u003d get_session()"},{"line_number":3247,"context_line":"    with session.begin():"},{"line_number":3248,"context_line":"        security_group_ref \u003d session.query(models.SecurityGroup).\\"},{"line_number":3249,"context_line":"                                    filter_by(id\u003dsecurity_group_id)"},{"line_number":3250,"context_line":""},{"line_number":3251,"context_line":"        security_group_ref.update(values)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F%2Buc%3D","line":3248,"updated":"2013-05-17 08:58:11.000000000","message":"A lot of problems here.\n\nFirst of all use model_query() instead of session.query(). Because it will return only non deleted rows. \n \nCall .first() at the end. Because now you are calling not\nmodel.update. You are calling query.update and it will return only count of changed rows.","commit_id":"b4b8d7806e0f9efee577b711d2450ac3f862fae4"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"1f70e0b0cb52b8c417f445dfee0013f7184b442e","unresolved":false,"context_lines":[{"line_number":3245,"context_line":"def security_group_update(context, security_group_id, values):"},{"line_number":3246,"context_line":"    session \u003d get_session()"},{"line_number":3247,"context_line":"    with session.begin():"},{"line_number":3248,"context_line":"        security_group_ref \u003d session.query(models.SecurityGroup).\\"},{"line_number":3249,"context_line":"                                    filter_by(id\u003dsecurity_group_id)"},{"line_number":3250,"context_line":""},{"line_number":3251,"context_line":"        security_group_ref.update(values)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F8mI%3D","line":3248,"in_reply_to":"AAAAPH%2F%2F%2Buc%3D","updated":"2013-05-18 05:45:50.000000000","message":"Thanks for the suggestion, I\u0027ll apply in the next patch.","commit_id":"b4b8d7806e0f9efee577b711d2450ac3f862fae4"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"c6fe1161bf98dbcf06926e151cb2dc8f0c90181a","unresolved":false,"context_lines":[{"line_number":3248,"context_line":"        security_group_ref \u003d session.query(models.SecurityGroup).\\"},{"line_number":3249,"context_line":"                                    filter_by(id\u003dsecurity_group_id)"},{"line_number":3250,"context_line":""},{"line_number":3251,"context_line":"        security_group_ref.update(values)"},{"line_number":3252,"context_line":"        security_group_ref.save(session\u003dsession)"},{"line_number":3253,"context_line":"    return security_group_ref"},{"line_number":3254,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F%2Bt4%3D","line":3251,"updated":"2013-05-17 08:58:11.000000000","message":"You should raise Exception if there is no such security_group","commit_id":"b4b8d7806e0f9efee577b711d2450ac3f862fae4"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"1f70e0b0cb52b8c417f445dfee0013f7184b442e","unresolved":false,"context_lines":[{"line_number":3248,"context_line":"        security_group_ref \u003d session.query(models.SecurityGroup).\\"},{"line_number":3249,"context_line":"                                    filter_by(id\u003dsecurity_group_id)"},{"line_number":3250,"context_line":""},{"line_number":3251,"context_line":"        security_group_ref.update(values)"},{"line_number":3252,"context_line":"        security_group_ref.save(session\u003dsession)"},{"line_number":3253,"context_line":"    return security_group_ref"},{"line_number":3254,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F8lY%3D","line":3251,"in_reply_to":"AAAAPH%2F%2F%2Bt4%3D","updated":"2013-05-18 05:45:50.000000000","message":"Done","commit_id":"b4b8d7806e0f9efee577b711d2450ac3f862fae4"},{"author":{"_account_id":6172,"name":"Boris Pavlovic","email":"boris@pavlovic.me","username":"boris-42"},"change_message_id":"c6fe1161bf98dbcf06926e151cb2dc8f0c90181a","unresolved":false,"context_lines":[{"line_number":3249,"context_line":"                                    filter_by(id\u003dsecurity_group_id)"},{"line_number":3250,"context_line":""},{"line_number":3251,"context_line":"        security_group_ref.update(values)"},{"line_number":3252,"context_line":"        security_group_ref.save(session\u003dsession)"},{"line_number":3253,"context_line":"    return security_group_ref"},{"line_number":3254,"context_line":""},{"line_number":3255,"context_line":"def security_group_ensure_default(context, session\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F%2BuI%3D","line":3252,"updated":"2013-05-17 08:58:11.000000000","message":"Don\u0027t call security_group_ref.save() at all. security_group_ref is tracked by sqlalchemy and it will make session.flush in __exit__ statement.","commit_id":"b4b8d7806e0f9efee577b711d2450ac3f862fae4"},{"author":{"_account_id":6610,"name":"Zhenguo Niu","email":"Niu.ZGlinux@gmail.com","username":"niu-zglinux"},"change_message_id":"1f70e0b0cb52b8c417f445dfee0013f7184b442e","unresolved":false,"context_lines":[{"line_number":3249,"context_line":"                                    filter_by(id\u003dsecurity_group_id)"},{"line_number":3250,"context_line":""},{"line_number":3251,"context_line":"        security_group_ref.update(values)"},{"line_number":3252,"context_line":"        security_group_ref.save(session\u003dsession)"},{"line_number":3253,"context_line":"    return security_group_ref"},{"line_number":3254,"context_line":""},{"line_number":3255,"context_line":"def security_group_ensure_default(context, session\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPH%2F%2F8lU%3D","line":3252,"in_reply_to":"AAAAPH%2F%2F%2BuI%3D","updated":"2013-05-18 05:45:50.000000000","message":"Done","commit_id":"b4b8d7806e0f9efee577b711d2450ac3f862fae4"}]}
