)]}'
{"neutron/db/migration/alembic_migrations/versions/50cf41b71c2d_add_support_for_ssl_.py":[{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"d825d2326eaffd7b79abed0ce6fca67fe562ef78","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from neutron.db import migration"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def upgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":43,"context_line":"    if not migration.should_run(active_plugins, migration_for_plugins):"},{"line_number":44,"context_line":"        return"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9sVQ%3D","line":42,"updated":"2013-12-07 08:57:08.000000000","message":"tables are missing foreign keys. also, they don\u0027t match model declarations","commit_id":"7ac7c865a37f3fbdd53e1158b629c1cc0e81002e"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"95c3c43f8a22c3b04b1d522195eddebd85b66acd","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from neutron.db import migration"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"def upgrade(active_plugins\u003dNone, options\u003dNone):"},{"line_number":43,"context_line":"    if not migration.should_run(active_plugins, migration_for_plugins):"},{"line_number":44,"context_line":"        return"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9moU%3D","line":42,"in_reply_to":"AAAATn%2F9sVQ%3D","updated":"2013-12-09 19:03:02.000000000","message":"Done","commit_id":"7ac7c865a37f3fbdd53e1158b629c1cc0e81002e"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8c89dd83638db2f5ed21d35a9d0fb2d66c193a72","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2013 OpenStack Foundation"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Bh0g%3D","line":1,"updated":"2014-02-20 17:43:19.000000000","message":"Remove VIM, update copyright in new file. Check other files as well.","commit_id":"e07fb174b20642f9b0f50ea1f28afe9a1df0cd9e"}],"neutron/db/vpn/sslvpn_db.py":[{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"08ec94c872fd66e67d33b4765d04b279f4838699","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    server_certificate \u003d sa.Column(sa.Text())"},{"line_number":41,"context_line":"    server_key \u003d sa.Column(sa.Text())"},{"line_number":42,"context_line":"    dh \u003d sa.Column(sa.Text())"},{"line_number":43,"context_line":"    crl \u003d sa.Column(sa.Text())"},{"line_number":44,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BDfo%3D","line":43,"updated":"2013-12-03 01:37:50.000000000","message":"CRL (Certificate Revocation List) is well known abbreviations such as CA. so IMO crl is OK.","commit_id":"b6135c387c6ee4cc0d39e2b0d91034f9367e2aa3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"12f17405d73287ab7f86beaed6f16cdca79ea0ce","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    server_certificate \u003d sa.Column(sa.Text())"},{"line_number":41,"context_line":"    server_key \u003d sa.Column(sa.Text())"},{"line_number":42,"context_line":"    dh \u003d sa.Column(sa.Text())"},{"line_number":43,"context_line":"    crl \u003d sa.Column(sa.Text())"},{"line_number":44,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BGmg%3D","line":43,"updated":"2013-12-02 15:43:42.000000000","message":"more descriptive name?","commit_id":"b6135c387c6ee4cc0d39e2b0d91034f9367e2aa3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"12f17405d73287ab7f86beaed6f16cdca79ea0ce","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class SSLVPNConnectionNotFound(q_exc.NotFound):"},{"line_number":48,"context_line":"    message \u003d _("},{"line_number":49,"context_line":"        \"SslVpnConnection %(ssl_vpn_connection_id)s could not be found\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class CredentialNotFound(q_exc.NotFound):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BGl8%3D","line":49,"updated":"2013-12-02 15:43:42.000000000","message":"maybe just conn_id vs ssl_vpn_connection_id?  Just thinking about usage... they\u0027ll know this is SSL VPN by the exception name.","commit_id":"b6135c387c6ee4cc0d39e2b0d91034f9367e2aa3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"08ec94c872fd66e67d33b4765d04b279f4838699","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class SSLVPNConnectionNotFound(q_exc.NotFound):"},{"line_number":48,"context_line":"    message \u003d _("},{"line_number":49,"context_line":"        \"SslVpnConnection %(ssl_vpn_connection_id)s could not be found\")"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class CredentialNotFound(q_exc.NotFound):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BDd0%3D","line":49,"in_reply_to":"AAAATn%2F%2BGl8%3D","updated":"2013-12-03 01:37:50.000000000","message":"Done","commit_id":"b6135c387c6ee4cc0d39e2b0d91034f9367e2aa3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"12f17405d73287ab7f86beaed6f16cdca79ea0ce","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, ssl_vpn_connection)"},{"line_number":73,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":74,"context_line":"            ssl_vpn_connection_db \u003d SSLVPNConnection("},{"line_number":75,"context_line":"                id\u003duuidutils.generate_uuid(),"},{"line_number":76,"context_line":"                tenant_id\u003dtenant_id,"},{"line_number":77,"context_line":"                name\u003dssl_vpn_connection[\u0027name\u0027],"},{"line_number":78,"context_line":"                credential_id\u003dssl_vpn_connection[\u0027credential_id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BGjA%3D","line":75,"updated":"2013-12-02 15:43:42.000000000","message":"I guess this is being changed to use str(uuid.uuid4()) now (by a recent bug review).","commit_id":"b6135c387c6ee4cc0d39e2b0d91034f9367e2aa3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"08ec94c872fd66e67d33b4765d04b279f4838699","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, ssl_vpn_connection)"},{"line_number":73,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":74,"context_line":"            ssl_vpn_connection_db \u003d SSLVPNConnection("},{"line_number":75,"context_line":"                id\u003duuidutils.generate_uuid(),"},{"line_number":76,"context_line":"                tenant_id\u003dtenant_id,"},{"line_number":77,"context_line":"                name\u003dssl_vpn_connection[\u0027name\u0027],"},{"line_number":78,"context_line":"                credential_id\u003dssl_vpn_connection[\u0027credential_id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BDdw%3D","line":75,"in_reply_to":"AAAATn%2F%2BGjA%3D","updated":"2013-12-03 01:37:50.000000000","message":"Done","commit_id":"b6135c387c6ee4cc0d39e2b0d91034f9367e2aa3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"12f17405d73287ab7f86beaed6f16cdca79ea0ce","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, credential)"},{"line_number":146,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":147,"context_line":"            credential_db \u003d Credential("},{"line_number":148,"context_line":"                id\u003duuidutils.generate_uuid(),"},{"line_number":149,"context_line":"                tenant_id\u003dtenant_id,"},{"line_number":150,"context_line":"                name\u003dcredential[\u0027name\u0027],"},{"line_number":151,"context_line":"                ca\u003dcredential[\u0027ca\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BGh8%3D","line":148,"updated":"2013-12-02 15:43:42.000000000","message":"ditto.","commit_id":"b6135c387c6ee4cc0d39e2b0d91034f9367e2aa3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"08ec94c872fd66e67d33b4765d04b279f4838699","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        tenant_id \u003d self._get_tenant_id_for_create(context, credential)"},{"line_number":146,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":147,"context_line":"            credential_db \u003d Credential("},{"line_number":148,"context_line":"                id\u003duuidutils.generate_uuid(),"},{"line_number":149,"context_line":"                tenant_id\u003dtenant_id,"},{"line_number":150,"context_line":"                name\u003dcredential[\u0027name\u0027],"},{"line_number":151,"context_line":"                ca\u003dcredential[\u0027ca\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2BDds%3D","line":148,"in_reply_to":"AAAATn%2F%2BGh8%3D","updated":"2013-12-03 01:37:50.000000000","message":"Done","commit_id":"b6135c387c6ee4cc0d39e2b0d91034f9367e2aa3"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"4ad2f854571efe4ae01c4a96d350e1df4959c1c8","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":31,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":32,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"},{"line_number":33,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class VPNCredential(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9zYM%3D","line":33,"updated":"2013-12-05 18:39:03.000000000","message":"Hi Nachi,\nThe SSL VPNConnection table just has the name, credential and vpnservice_id.\nAre we assuming some default values for the \"server.conf\" for openvpn configuration? Should we not provide those options to the tenant?","commit_id":"3011bd87a6744c86dc599c8e249e041ef1464d66"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"0a941ac181799e4c68cdef1bec82584bfd8f3b75","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":31,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":32,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"},{"line_number":33,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class VPNCredential(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9zEY%3D","line":33,"in_reply_to":"AAAATn%2F9zYM%3D","updated":"2013-12-05 19:40:56.000000000","message":"Yes. This is first step patch, and minimal parameter will be supported. We can add additional parameters later.","commit_id":"3011bd87a6744c86dc599c8e249e041ef1464d66"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"a2587e585cb1923404a577381fcfbcc1dc583792","unresolved":false,"context_lines":[{"line_number":25,"context_line":"                       models_v2.HasId, models_v2.HasTenant):"},{"line_number":26,"context_line":"    __tablename__ \u003d \"ssl_vpn_connections\""},{"line_number":27,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":28,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":29,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":30,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":31,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9uE0%3D","line":28,"updated":"2013-12-06 19:45:59.000000000","message":"sa.String(36) since it\u0027s id?","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"35c5b951936a7603c0b8693d6d23a2c42af90fd1","unresolved":false,"context_lines":[{"line_number":25,"context_line":"                       models_v2.HasId, models_v2.HasTenant):"},{"line_number":26,"context_line":"    __tablename__ \u003d \"ssl_vpn_connections\""},{"line_number":27,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":28,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":29,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":30,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":31,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9tuY%3D","line":28,"in_reply_to":"AAAATn%2F9uE0%3D","updated":"2013-12-06 20:11:12.000000000","message":"Done","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"a2587e585cb1923404a577381fcfbcc1dc583792","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":29,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":30,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":31,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":32,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"},{"line_number":33,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9uEw%3D","line":31,"updated":"2013-12-06 19:45:59.000000000","message":"same","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"35c5b951936a7603c0b8693d6d23a2c42af90fd1","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":29,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":30,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":31,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":32,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"},{"line_number":33,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9tuU%3D","line":31,"in_reply_to":"AAAATn%2F9uEw%3D","updated":"2013-12-06 20:11:12.000000000","message":"Done","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"a2587e585cb1923404a577381fcfbcc1dc583792","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class SSLVPN_db_mixin(SSLVPNPluginBase,"},{"line_number":42,"context_line":"                      base_db.CommonDbMixin):"},{"line_number":43,"context_line":"    def _get_resource(self, context, model, id):"},{"line_number":44,"context_line":"        return self._get_by_id(context, model, id)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def update_status(self, context, resource_name, resource_id, status):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9uEs%3D","line":43,"updated":"2013-12-06 19:45:59.000000000","message":"i think the purpose of this method is to handle NoResultFound from sqla and raise SSLVPNConnectionNotFound","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"35c5b951936a7603c0b8693d6d23a2c42af90fd1","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class SSLVPN_db_mixin(SSLVPNPluginBase,"},{"line_number":42,"context_line":"                      base_db.CommonDbMixin):"},{"line_number":43,"context_line":"    def _get_resource(self, context, model, id):"},{"line_number":44,"context_line":"        return self._get_by_id(context, model, id)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def update_status(self, context, resource_name, resource_id, status):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9tuI%3D","line":43,"in_reply_to":"AAAATn%2F9uEs%3D","updated":"2013-12-06 20:11:12.000000000","message":"Done","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"a2587e585cb1923404a577381fcfbcc1dc583792","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            context,"},{"line_number":73,"context_line":"            SSLVPNConnection,"},{"line_number":74,"context_line":"            ssl_vpn_connection_db[\u0027id\u0027])"},{"line_number":75,"context_line":"        return self._make_ssl_vpn_connection_dict(ssl_vpn_connection_db)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def get_ssl_vpn_connections(self, context, filters\u003dNone, fields\u003dNone):"},{"line_number":78,"context_line":"        collection \u003d self._model_query(context, SSLVPNConnection)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9uEY%3D","line":75,"updated":"2013-12-06 19:45:59.000000000","message":"is there a need to fetch back the new object? I think you could use a result of L60","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"35c5b951936a7603c0b8693d6d23a2c42af90fd1","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            context,"},{"line_number":73,"context_line":"            SSLVPNConnection,"},{"line_number":74,"context_line":"            ssl_vpn_connection_db[\u0027id\u0027])"},{"line_number":75,"context_line":"        return self._make_ssl_vpn_connection_dict(ssl_vpn_connection_db)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def get_ssl_vpn_connections(self, context, filters\u003dNone, fields\u003dNone):"},{"line_number":78,"context_line":"        collection \u003d self._model_query(context, SSLVPNConnection)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9ttk%3D","line":75,"in_reply_to":"AAAATn%2F9uEY%3D","updated":"2013-12-06 20:11:12.000000000","message":"Done","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"a2587e585cb1923404a577381fcfbcc1dc583792","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def get_ssl_vpn_connection(self, context, id, fields\u003dNone):"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            ssl_vpn_connection \u003d self._get_resource("},{"line_number":101,"context_line":"                context, SSLVPNConnection, id)"},{"line_number":102,"context_line":"        except exc.NoResultFound:"},{"line_number":103,"context_line":"            raise SSLVPNConnectionNotFound(conn_id\u003did)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9uCw%3D","line":100,"updated":"2013-12-06 19:45:59.000000000","message":"it seems that _get_resource wrapper is useless and _get_by_id could be used directly.\nBut I think it\u0027s better to move this logic to  _get_resource, and just call  _get_resource here","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"35c5b951936a7603c0b8693d6d23a2c42af90fd1","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def get_ssl_vpn_connection(self, context, id, fields\u003dNone):"},{"line_number":99,"context_line":"        try:"},{"line_number":100,"context_line":"            ssl_vpn_connection \u003d self._get_resource("},{"line_number":101,"context_line":"                context, SSLVPNConnection, id)"},{"line_number":102,"context_line":"        except exc.NoResultFound:"},{"line_number":103,"context_line":"            raise SSLVPNConnectionNotFound(conn_id\u003did)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9ttg%3D","line":100,"in_reply_to":"AAAATn%2F9uCw%3D","updated":"2013-12-06 20:11:12.000000000","message":"Done","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"a2587e585cb1923404a577381fcfbcc1dc583792","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _update_ssl_vpn_connection(self, context, id, ssl_vpn_connection):"},{"line_number":107,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":108,"context_line":"            ssl_vpn_connection_db \u003d self._get_resource("},{"line_number":109,"context_line":"                context,"},{"line_number":110,"context_line":"                SSLVPNConnection,"},{"line_number":111,"context_line":"                id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9uCE%3D","line":108,"updated":"2013-12-06 19:45:59.000000000","message":"that will raise, so if on line 112 could be omitted.\nAlso, it\u0027s better if _get_resource raises proper exception here, and not NoResultFound","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"35c5b951936a7603c0b8693d6d23a2c42af90fd1","unresolved":false,"context_lines":[{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _update_ssl_vpn_connection(self, context, id, ssl_vpn_connection):"},{"line_number":107,"context_line":"        with context.session.begin(subtransactions\u003dTrue):"},{"line_number":108,"context_line":"            ssl_vpn_connection_db \u003d self._get_resource("},{"line_number":109,"context_line":"                context,"},{"line_number":110,"context_line":"                SSLVPNConnection,"},{"line_number":111,"context_line":"                id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9ttc%3D","line":108,"in_reply_to":"AAAATn%2F9uCE%3D","updated":"2013-12-06 20:11:12.000000000","message":"Done","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"18023cd35c7e575c0bc19b565410069404d252bd","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                ssl_vpn_connection_db.update(ssl_vpn_connection)"},{"line_number":114,"context_line":"        return ssl_vpn_connection_db"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def update_ssl_vpn_connection(self, context, id, ssl_vpn_connection_in):"},{"line_number":117,"context_line":"        ssl_vpn_connection \u003d ssl_vpn_connection_in[\u0027ssl_vpn_connection\u0027]"},{"line_number":118,"context_line":"        res \u003d self._update_ssl_vpn_connection(context, id, ssl_vpn_connection)"},{"line_number":119,"context_line":"        return self._make_ssl_vpn_connection_dict(res)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9tk4%3D","line":116,"updated":"2013-12-06 20:40:07.000000000","message":"Curious as to why you have a wrapper function here. Is _update_ssl_vpn_connection() used elsewhere?","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"c00e2e764409fff42c667c18a719f3e2f2d4b104","unresolved":false,"context_lines":[{"line_number":113,"context_line":"                ssl_vpn_connection_db.update(ssl_vpn_connection)"},{"line_number":114,"context_line":"        return ssl_vpn_connection_db"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"    def update_ssl_vpn_connection(self, context, id, ssl_vpn_connection_in):"},{"line_number":117,"context_line":"        ssl_vpn_connection \u003d ssl_vpn_connection_in[\u0027ssl_vpn_connection\u0027]"},{"line_number":118,"context_line":"        res \u003d self._update_ssl_vpn_connection(context, id, ssl_vpn_connection)"},{"line_number":119,"context_line":"        return self._make_ssl_vpn_connection_dict(res)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9tiw%3D","line":116,"in_reply_to":"AAAATn%2F9tk4%3D","updated":"2013-12-06 20:50:04.000000000","message":"This is for coding style consistency.\nSometimes driver wanna call only db operations","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"7e26eaaf97cc57d42b4849975c6ed6c3906ff4a6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9tNk%3D","line":1,"updated":"2013-12-06 21:48:58.000000000","message":"VIM line","commit_id":"e9fb81196143991cd93bdf235dcdc9aafa298019"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"66672b5cad401c1c19ec74cf60585068c999d186","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9tMQ%3D","line":1,"in_reply_to":"AAAATn%2F9tNk%3D","updated":"2013-12-06 21:55:03.000000000","message":"Done","commit_id":"e9fb81196143991cd93bdf235dcdc9aafa298019"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8cffdbc20467de5b86c36d2b444eadda5acfeec0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9mjM%3D","line":1,"updated":"2013-12-09 19:17:25.000000000","message":"VIM line?","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"ac232d2cfa93085d3f3bf70b28e232fd3852a5f6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2F8H8%3D","line":1,"in_reply_to":"AAAATn%2F9aGI%3D","updated":"2013-12-26 18:22:03.000000000","message":"Done","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"e3151d8239d2fa6c9dff2af0997a0b575110b57b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9aGI%3D","line":1,"in_reply_to":"AAAATn%2F9mjM%3D","updated":"2013-12-11 20:48:15.000000000","message":"why? I think it should not be a requirement","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"0c8d18559403b383c1afd67df8de3b73fb846c8a","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            ssl_vpn_connection_db[\u0027id\u0027])"},{"line_number":75,"context_line":"        return self._make_ssl_vpn_connection_dict(ssl_vpn_connection_db)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def get_ssl_vpn_connections(self, context, filters\u003dNone, fields\u003dNone):"},{"line_number":78,"context_line":"        collection \u003d self._model_query(context, SSLVPNConnection)"},{"line_number":79,"context_line":"        collection \u003d self._apply_filters_to_query("},{"line_number":80,"context_line":"            collection, SSLVPNConnection, filters)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9YdY%3D","line":77,"updated":"2013-12-12 02:51:57.000000000","message":"why not use _get_collection()?","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"ac232d2cfa93085d3f3bf70b28e232fd3852a5f6","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            ssl_vpn_connection_db[\u0027id\u0027])"},{"line_number":75,"context_line":"        return self._make_ssl_vpn_connection_dict(ssl_vpn_connection_db)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def get_ssl_vpn_connections(self, context, filters\u003dNone, fields\u003dNone):"},{"line_number":78,"context_line":"        collection \u003d self._model_query(context, SSLVPNConnection)"},{"line_number":79,"context_line":"        collection \u003d self._apply_filters_to_query("},{"line_number":80,"context_line":"            collection, SSLVPNConnection, filters)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2F8HM%3D","line":77,"in_reply_to":"AAAATn%2F9YdY%3D","updated":"2013-12-26 18:22:03.000000000","message":"Done","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"0c8d18559403b383c1afd67df8de3b73fb846c8a","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                context,"},{"line_number":110,"context_line":"                SSLVPNConnection,"},{"line_number":111,"context_line":"                id)"},{"line_number":112,"context_line":"            if ssl_vpn_connection:"},{"line_number":113,"context_line":"                ssl_vpn_connection_db.update(ssl_vpn_connection)"},{"line_number":114,"context_line":"        return ssl_vpn_connection_db"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9Yd0%3D","line":112,"updated":"2013-12-12 02:51:57.000000000","message":"why not check it before we enter into transaction?","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"ac232d2cfa93085d3f3bf70b28e232fd3852a5f6","unresolved":false,"context_lines":[{"line_number":109,"context_line":"                context,"},{"line_number":110,"context_line":"                SSLVPNConnection,"},{"line_number":111,"context_line":"                id)"},{"line_number":112,"context_line":"            if ssl_vpn_connection:"},{"line_number":113,"context_line":"                ssl_vpn_connection_db.update(ssl_vpn_connection)"},{"line_number":114,"context_line":"        return ssl_vpn_connection_db"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2F8GU%3D","line":112,"in_reply_to":"AAAATn%2F9Yd0%3D","updated":"2013-12-26 18:22:03.000000000","message":"This is same coding pattern with base db class.","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":7170,"name":"Zang MingJie","email":"zealot0630@gmail.com","username":"zealot"},"change_message_id":"4fcbc26342b9b684bac81ced9f0dca16a9d43955","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class SSLVPNConnection(model_base.BASEV2,"},{"line_number":27,"context_line":"                       models_v2.HasId, models_v2.HasTenant):"},{"line_number":28,"context_line":"    __tablename__ \u003d \"ssl_vpn_connections\""},{"line_number":29,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":30,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FyjI%3D","line":27,"updated":"2014-01-08 12:59:00.000000000","message":"The class name is misleading, it is not connection, but server instance","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"5af850c04faf60069f866e5ab1c6baccc031c821","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class SSLVPNConnection(model_base.BASEV2,"},{"line_number":27,"context_line":"                       models_v2.HasId, models_v2.HasTenant):"},{"line_number":28,"context_line":"    __tablename__ \u003d \"ssl_vpn_connections\""},{"line_number":29,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":30,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2Fw1M%3D","line":27,"in_reply_to":"AAAAUH%2F%2FyjI%3D","updated":"2014-01-08 18:59:01.000000000","message":"No This is a connection.","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":7170,"name":"Zang MingJie","email":"zealot0630@gmail.com","username":"zealot"},"change_message_id":"4fcbc26342b9b684bac81ced9f0dca16a9d43955","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class SSLVPNConnection(model_base.BASEV2,"},{"line_number":27,"context_line":"                       models_v2.HasId, models_v2.HasTenant):"},{"line_number":28,"context_line":"    __tablename__ \u003d \"ssl_vpn_connections\""},{"line_number":29,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":30,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":31,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FyiY%3D","line":29,"updated":"2014-01-08 12:59:00.000000000","message":"duplicated column, there is already a field name `name` in vpnservice table","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"5af850c04faf60069f866e5ab1c6baccc031c821","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class SSLVPNConnection(model_base.BASEV2,"},{"line_number":27,"context_line":"                       models_v2.HasId, models_v2.HasTenant):"},{"line_number":28,"context_line":"    __tablename__ \u003d \"ssl_vpn_connections\""},{"line_number":29,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":30,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":31,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2Fw1E%3D","line":29,"in_reply_to":"AAAAUH%2F%2FyiY%3D","updated":"2014-01-08 18:59:01.000000000","message":"We could have muiltiple sslvpn connections\nso this is not duplicate","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":7170,"name":"Zang MingJie","email":"zealot0630@gmail.com","username":"zealot"},"change_message_id":"4fcbc26342b9b684bac81ced9f0dca16a9d43955","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":30,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":31,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":33,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":34,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"},{"line_number":35,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FyiU%3D","line":32,"updated":"2014-01-08 12:59:00.000000000","message":"duplicated column, same as `name`","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"5af850c04faf60069f866e5ab1c6baccc031c821","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":30,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":31,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":33,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":34,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"},{"line_number":35,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2Fw08%3D","line":32,"in_reply_to":"AAAAUH%2F%2FyiU%3D","updated":"2014-01-08 18:59:01.000000000","message":"ditto","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":7170,"name":"Zang MingJie","email":"zealot0630@gmail.com","username":"zealot"},"change_message_id":"4fcbc26342b9b684bac81ced9f0dca16a9d43955","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":33,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":34,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"},{"line_number":35,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class SSLVPNConnectionNotFound(q_exc.NotFound):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FyiM%3D","line":35,"updated":"2014-01-08 12:59:00.000000000","message":"duplicated column, same as `name`","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"5af850c04faf60069f866e5ab1c6baccc031c821","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":33,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":34,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"},{"line_number":35,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class SSLVPNConnectionNotFound(q_exc.NotFound):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2Fw0w%3D","line":35,"in_reply_to":"AAAAUH%2F%2FyiM%3D","updated":"2014-01-08 18:59:01.000000000","message":"ditto","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":7752,"name":"Rajesh Mohan","email":"rajesh.mlists@gmail.com","username":"rajesh.mohan"},"change_message_id":"b4c8a1cba8f18a9ab65db7053132f2caca3c120f","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                       models_v2.HasId, models_v2.HasTenant):"},{"line_number":28,"context_line":"    __tablename__ \u003d \"ssl_vpn_connections\""},{"line_number":29,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":30,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":31,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":33,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BULQ%3D","line":30,"updated":"2014-01-28 02:43:15.000000000","message":"vpncredentials.id is size 36.","commit_id":"1fde0f386d39bb45e2184c57cf9bb66158717c79"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"4dc0a20bb7e9b9f1160618e2f4913a6f8071d0c5","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                       models_v2.HasId, models_v2.HasTenant):"},{"line_number":28,"context_line":"    __tablename__ \u003d \"ssl_vpn_connections\""},{"line_number":29,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":30,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":31,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":33,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BBZ4%3D","line":30,"in_reply_to":"AAAAUH%2F%2BULQ%3D","updated":"2014-01-30 22:17:34.000000000","message":"Done","commit_id":"1fde0f386d39bb45e2184c57cf9bb66158717c79"},{"author":{"_account_id":7752,"name":"Rajesh Mohan","email":"rajesh.mlists@gmail.com","username":"rajesh.mohan"},"change_message_id":"b4c8a1cba8f18a9ab65db7053132f2caca3c120f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    __tablename__ \u003d \"ssl_vpn_connections\""},{"line_number":29,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":30,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":31,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":33,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":34,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BULY%3D","line":31,"updated":"2014-01-28 02:43:15.000000000","message":"Remove \u0027,\u0027 at the end of line. Incorrect \"INSERT INTO\" command is generated.","commit_id":"1fde0f386d39bb45e2184c57cf9bb66158717c79"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"4dc0a20bb7e9b9f1160618e2f4913a6f8071d0c5","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    __tablename__ \u003d \"ssl_vpn_connections\""},{"line_number":29,"context_line":"    name \u003d sa.Column(sa.String(255))"},{"line_number":30,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":31,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":33,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":34,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BBZ0%3D","line":31,"in_reply_to":"AAAAUH%2F%2BULY%3D","updated":"2014-01-30 22:17:34.000000000","message":"Done","commit_id":"1fde0f386d39bb45e2184c57cf9bb66158717c79"},{"author":{"_account_id":7752,"name":"Rajesh Mohan","email":"rajesh.mlists@gmail.com","username":"rajesh.mohan"},"change_message_id":"b4c8a1cba8f18a9ab65db7053132f2caca3c120f","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":31,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":33,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":34,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"},{"line_number":35,"context_line":"    client_address_pool_cidr \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":36,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BUK4%3D","line":33,"updated":"2014-01-28 02:43:15.000000000","message":"vpnservices.id is size 36.","commit_id":"1fde0f386d39bb45e2184c57cf9bb66158717c79"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"4dc0a20bb7e9b9f1160618e2f4913a6f8071d0c5","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    credential_id \u003d sa.Column(sa.String(255),"},{"line_number":31,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":33,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":34,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"},{"line_number":35,"context_line":"    client_address_pool_cidr \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":36,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BBZw%3D","line":33,"in_reply_to":"AAAAUH%2F%2BUK4%3D","updated":"2014-01-30 22:17:34.000000000","message":"Done","commit_id":"1fde0f386d39bb45e2184c57cf9bb66158717c79"},{"author":{"_account_id":7752,"name":"Rajesh Mohan","email":"rajesh.mlists@gmail.com","username":"rajesh.mohan"},"change_message_id":"b4c8a1cba8f18a9ab65db7053132f2caca3c120f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":33,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":34,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"},{"line_number":35,"context_line":"    client_address_pool_cidr \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":36,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BULE%3D","line":34,"updated":"2014-01-28 02:43:15.000000000","message":"Remove the \u0027,\u0027. INSERT fails.","commit_id":"1fde0f386d39bb45e2184c57cf9bb66158717c79"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"4dc0a20bb7e9b9f1160618e2f4913a6f8071d0c5","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                              sa.ForeignKey(\u0027vpncredentials.id\u0027)),"},{"line_number":32,"context_line":"    admin_state_up \u003d sa.Column(sa.Boolean())"},{"line_number":33,"context_line":"    vpnservice_id \u003d sa.Column(sa.String(255),"},{"line_number":34,"context_line":"                              sa.ForeignKey(\u0027vpnservices.id\u0027)),"},{"line_number":35,"context_line":"    client_address_pool_cidr \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":36,"context_line":"    status \u003d sa.Column(sa.String(16), nullable\u003dFalse)"},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BBZs%3D","line":34,"in_reply_to":"AAAAUH%2F%2BULE%3D","updated":"2014-01-30 22:17:34.000000000","message":"Done","commit_id":"1fde0f386d39bb45e2184c57cf9bb66158717c79"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"5b97ef3850b393bcf039585bb44b0726d98611a4","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            \u0027credential_id\u0027: ssl_vpn_connection[\u0027credential_id\u0027],"},{"line_number":80,"context_line":"            \u0027admin_state_up\u0027: ssl_vpn_connection[\u0027admin_state_up\u0027],"},{"line_number":81,"context_line":"            \u0027vpnservice_id\u0027: ssl_vpn_connection[\u0027vpnservice_id\u0027],"},{"line_number":82,"context_line":"            \u0027client_address_pool_cidr\u0027: ssl_vpn_connection["},{"line_number":83,"context_line":"                \u0027client_address_pool_cidr\u0027],"},{"line_number":84,"context_line":"            \u0027status\u0027: ssl_vpn_connection[\u0027status\u0027],"},{"line_number":85,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAU3%2F%2F%2B%2Fo%3D","line":82,"updated":"2014-02-23 03:41:22.000000000","message":"for readability... put ssl_vpn_connection on newline and indent","commit_id":"e07fb174b20642f9b0f50ea1f28afe9a1df0cd9e"}],"neutron/db/vpn/vpn_credential_db.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"18023cd35c7e575c0bc19b565410069404d252bd","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9tkw%3D","line":1,"updated":"2013-12-06 20:40:07.000000000","message":"Copyright line?\nVIM editor line?","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"c00e2e764409fff42c667c18a719f3e2f2d4b104","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9tio%3D","line":1,"in_reply_to":"AAAATn%2F9tkw%3D","updated":"2013-12-06 20:50:04.000000000","message":"Done","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"a2587e585cb1923404a577381fcfbcc1dc583792","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            )"},{"line_number":54,"context_line":"            context.session.add(credential_db)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        credential_db \u003d self._get_resource("},{"line_number":57,"context_line":"            context,"},{"line_number":58,"context_line":"            VPNCredential,"},{"line_number":59,"context_line":"            credential_db[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9t90%3D","line":56,"updated":"2013-12-06 19:45:59.000000000","message":"refetching is not needed, IMO","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"35c5b951936a7603c0b8693d6d23a2c42af90fd1","unresolved":false,"context_lines":[{"line_number":53,"context_line":"            )"},{"line_number":54,"context_line":"            context.session.add(credential_db)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        credential_db \u003d self._get_resource("},{"line_number":57,"context_line":"            context,"},{"line_number":58,"context_line":"            VPNCredential,"},{"line_number":59,"context_line":"            credential_db[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9ts0%3D","line":56,"in_reply_to":"AAAATn%2F9t90%3D","updated":"2013-12-06 20:11:12.000000000","message":"Done","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"a2587e585cb1923404a577381fcfbcc1dc583792","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                context,"},{"line_number":95,"context_line":"                VPNCredential,"},{"line_number":96,"context_line":"                id)"},{"line_number":97,"context_line":"            if credential:"},{"line_number":98,"context_line":"                credential_db.update(credential)"},{"line_number":99,"context_line":"        return credential_db"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9t9I%3D","line":97,"updated":"2013-12-06 19:45:59.000000000","message":"checking is not necessary","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"35c5b951936a7603c0b8693d6d23a2c42af90fd1","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                context,"},{"line_number":95,"context_line":"                VPNCredential,"},{"line_number":96,"context_line":"                id)"},{"line_number":97,"context_line":"            if credential:"},{"line_number":98,"context_line":"                credential_db.update(credential)"},{"line_number":99,"context_line":"        return credential_db"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9tso%3D","line":97,"in_reply_to":"AAAATn%2F9t9I%3D","updated":"2013-12-06 20:11:12.000000000","message":"Done","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"7e26eaaf97cc57d42b4849975c6ed6c3906ff4a6","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9tNg%3D","line":1,"updated":"2013-12-06 21:48:58.000000000","message":"VIM line\ncopyright line","commit_id":"e9fb81196143991cd93bdf235dcdc9aafa298019"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"66672b5cad401c1c19ec74cf60585068c999d186","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9tME%3D","line":1,"in_reply_to":"AAAATn%2F9tNg%3D","updated":"2013-12-06 21:55:03.000000000","message":"Done","commit_id":"e9fb81196143991cd93bdf235dcdc9aafa298019"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8cffdbc20467de5b86c36d2b444eadda5acfeec0","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":5,"context_line":"#    a copy of the License at"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9mjE%3D","line":2,"updated":"2013-12-09 19:17:25.000000000","message":"VIM Line?","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"ac232d2cfa93085d3f3bf70b28e232fd3852a5f6","unresolved":false,"context_lines":[{"line_number":1,"context_line":""},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":5,"context_line":"#    a copy of the License at"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2F8GQ%3D","line":2,"in_reply_to":"AAAATn%2F9mjE%3D","updated":"2013-12-26 18:22:03.000000000","message":"Done","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":2874,"name":"yong sheng gong","email":"gong.yongsheng@99cloud.net","username":"gongysh"},"change_message_id":"0c8d18559403b383c1afd67df8de3b73fb846c8a","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            credential_db[\u0027id\u0027])"},{"line_number":60,"context_line":"        return self._make_vpn_credential_dict(credential_db)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def get_vpn_credentials(self, context, filters\u003dNone, fields\u003dNone):"},{"line_number":63,"context_line":"        collection \u003d self._model_query(context, VPNCredential)"},{"line_number":64,"context_line":"        collection \u003d self._apply_filters_to_query("},{"line_number":65,"context_line":"            collection, VPNCredential, filters)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9YcE%3D","line":62,"updated":"2013-12-12 02:51:57.000000000","message":"use the common get_collection()?","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"ac232d2cfa93085d3f3bf70b28e232fd3852a5f6","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            credential_db[\u0027id\u0027])"},{"line_number":60,"context_line":"        return self._make_vpn_credential_dict(credential_db)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def get_vpn_credentials(self, context, filters\u003dNone, fields\u003dNone):"},{"line_number":63,"context_line":"        collection \u003d self._model_query(context, VPNCredential)"},{"line_number":64,"context_line":"        collection \u003d self._apply_filters_to_query("},{"line_number":65,"context_line":"            collection, VPNCredential, filters)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2F8GM%3D","line":62,"in_reply_to":"AAAATn%2F9YcE%3D","updated":"2013-12-26 18:22:03.000000000","message":"Done","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":7752,"name":"Rajesh Mohan","email":"rajesh.mlists@gmail.com","username":"rajesh.mohan"},"change_message_id":"165fd2faf3c42df60abf810ed7e9f09e8ce50b5a","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            \u0027name\u0027: credential[\u0027name\u0027],"},{"line_number":76,"context_line":"            \u0027ca\u0027: credential[\u0027ca\u0027],"},{"line_number":77,"context_line":"            \u0027server_certificate\u0027: credential[\u0027server_certificate\u0027],"},{"line_number":78,"context_line":"            \u0027server_key\u0027: credential[\u0027server_key\u0027],"},{"line_number":79,"context_line":"            \u0027dh\u0027: credential[\u0027dh\u0027],"},{"line_number":80,"context_line":"            \u0027crl\u0027: credential[\u0027crl\u0027],"},{"line_number":81,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FqYw%3D","line":78,"updated":"2014-01-09 23:55:46.000000000","message":"In output, we should show hash of the key. Though we cannot avoid saving the key in the database, we can atleast avoid printing it.","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"a107076df40f9a0bcc19eaf66ae5cffad22b21bc","unresolved":false,"context_lines":[{"line_number":75,"context_line":"            \u0027name\u0027: credential[\u0027name\u0027],"},{"line_number":76,"context_line":"            \u0027ca\u0027: credential[\u0027ca\u0027],"},{"line_number":77,"context_line":"            \u0027server_certificate\u0027: credential[\u0027server_certificate\u0027],"},{"line_number":78,"context_line":"            \u0027server_key\u0027: credential[\u0027server_key\u0027],"},{"line_number":79,"context_line":"            \u0027dh\u0027: credential[\u0027dh\u0027],"},{"line_number":80,"context_line":"            \u0027crl\u0027: credential[\u0027crl\u0027],"},{"line_number":81,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2Flw8%3D","line":78,"in_reply_to":"AAAAUH%2F%2FqYw%3D","updated":"2014-01-10 18:16:33.000000000","message":"Done","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":7752,"name":"Rajesh Mohan","email":"rajesh.mlists@gmail.com","username":"rajesh.mohan"},"change_message_id":"165fd2faf3c42df60abf810ed7e9f09e8ce50b5a","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            \u0027server_key\u0027: credential[\u0027server_key\u0027],"},{"line_number":79,"context_line":"            \u0027dh\u0027: credential[\u0027dh\u0027],"},{"line_number":80,"context_line":"            \u0027crl\u0027: credential[\u0027crl\u0027],"},{"line_number":81,"context_line":"        }"},{"line_number":82,"context_line":"        return self._fields(res, fields)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def get_vpn_credential(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FqWg%3D","line":81,"updated":"2014-01-09 23:55:46.000000000","message":"\u0027status\u0027 is part of this resource. Should we return it here?","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"a107076df40f9a0bcc19eaf66ae5cffad22b21bc","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            \u0027server_key\u0027: credential[\u0027server_key\u0027],"},{"line_number":79,"context_line":"            \u0027dh\u0027: credential[\u0027dh\u0027],"},{"line_number":80,"context_line":"            \u0027crl\u0027: credential[\u0027crl\u0027],"},{"line_number":81,"context_line":"        }"},{"line_number":82,"context_line":"        return self._fields(res, fields)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def get_vpn_credential(self, context, id, fields\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FlwU%3D","line":81,"in_reply_to":"AAAAUH%2F%2FqWg%3D","updated":"2014-01-10 18:16:33.000000000","message":"I removed status from extension","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"}],"neutron/extensions/sslvpn.py":[{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"d138b3073a3aabe5cd404a0de52ef192c5a6de52","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        \u0027credential_id\u0027: {"},{"line_number":42,"context_line":"            \u0027allow_post\u0027: True,"},{"line_number":43,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":44,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":45,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":46,"context_line":"        \u0027admin_state_up\u0027: {"},{"line_number":47,"context_line":"            \u0027allow_post\u0027: True,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9xJw%3D","line":44,"updated":"2013-12-06 06:49:54.000000000","message":"\u0027type:uuid\u0027","commit_id":"3011bd87a6744c86dc599c8e249e041ef1464d66"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"bd58b467ed1879bbaff2c1ab5231d14ad85cb10f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        \u0027credential_id\u0027: {"},{"line_number":42,"context_line":"            \u0027allow_post\u0027: True,"},{"line_number":43,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":44,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":45,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":46,"context_line":"        \u0027admin_state_up\u0027: {"},{"line_number":47,"context_line":"            \u0027allow_post\u0027: True,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9uGI%3D","line":44,"in_reply_to":"AAAATn%2F9xJw%3D","updated":"2013-12-06 18:57:17.000000000","message":"Done","commit_id":"3011bd87a6744c86dc599c8e249e041ef1464d66"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"18023cd35c7e575c0bc19b565410069404d252bd","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        resources \u003d []"},{"line_number":94,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins()["},{"line_number":95,"context_line":"            constants.VPN]"},{"line_number":96,"context_line":"        for collection_name in RESOURCE_ATTRIBUTE_MAP:"},{"line_number":97,"context_line":"            # Special handling needed for resources with \u0027y\u0027 ending"},{"line_number":98,"context_line":"            # (e.g. proxies -\u003e proxy)"},{"line_number":99,"context_line":"            resource_name \u003d collection_name[:-1]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9tkg%3D","line":96,"updated":"2013-12-06 20:40:07.000000000","message":"This block of code appears to be the same in vpncredential.py (and I think it may be in several other places in Neutron code). Wonder if it should be pushed up into a common module?\n\nLet me know if you think it is a useful enhancement and I can create a bug to try to clean that up in places.","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"c00e2e764409fff42c667c18a719f3e2f2d4b104","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        resources \u003d []"},{"line_number":94,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins()["},{"line_number":95,"context_line":"            constants.VPN]"},{"line_number":96,"context_line":"        for collection_name in RESOURCE_ATTRIBUTE_MAP:"},{"line_number":97,"context_line":"            # Special handling needed for resources with \u0027y\u0027 ending"},{"line_number":98,"context_line":"            # (e.g. proxies -\u003e proxy)"},{"line_number":99,"context_line":"            resource_name \u003d collection_name[:-1]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9tiY%3D","line":96,"in_reply_to":"AAAATn%2F9tkg%3D","updated":"2013-12-06 20:50:04.000000000","message":"Nice idea.\nCould you create a bug report?","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"7e26eaaf97cc57d42b4849975c6ed6c3906ff4a6","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        my_plurals \u003d [(key, key[:-1]) for key in RESOURCE_ATTRIBUTE_MAP.keys()]"},{"line_number":94,"context_line":"        attr.PLURALS.update(dict(my_plurals))"},{"line_number":95,"context_line":"        resources \u003d []"},{"line_number":96,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins()["},{"line_number":97,"context_line":"            constants.VPN]"},{"line_number":98,"context_line":"        for collection_name in RESOURCE_ATTRIBUTE_MAP:"},{"line_number":99,"context_line":"            # Special handling needed for resources with \u0027y\u0027 ending"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9tOY%3D","line":96,"updated":"2013-12-06 21:48:58.000000000","message":"Created bug 1258656 for code duplication.","commit_id":"e9fb81196143991cd93bdf235dcdc9aafa298019"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"66672b5cad401c1c19ec74cf60585068c999d186","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        my_plurals \u003d [(key, key[:-1]) for key in RESOURCE_ATTRIBUTE_MAP.keys()]"},{"line_number":94,"context_line":"        attr.PLURALS.update(dict(my_plurals))"},{"line_number":95,"context_line":"        resources \u003d []"},{"line_number":96,"context_line":"        plugin \u003d manager.NeutronManager.get_service_plugins()["},{"line_number":97,"context_line":"            constants.VPN]"},{"line_number":98,"context_line":"        for collection_name in RESOURCE_ATTRIBUTE_MAP:"},{"line_number":99,"context_line":"            # Special handling needed for resources with \u0027y\u0027 ending"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9tL8%3D","line":96,"in_reply_to":"AAAATn%2F9tOY%3D","updated":"2013-12-06 21:55:03.000000000","message":"Thanks","commit_id":"e9fb81196143991cd93bdf235dcdc9aafa298019"},{"author":{"_account_id":7752,"name":"Rajesh Mohan","email":"rajesh.mlists@gmail.com","username":"rajesh.mohan"},"change_message_id":"165fd2faf3c42df60abf810ed7e9f09e8ce50b5a","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":44,"context_line":"        \u0027credential_id\u0027: {"},{"line_number":45,"context_line":"            \u0027allow_post\u0027: True,"},{"line_number":46,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":47,"context_line":"            \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":48,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":49,"context_line":"        \u0027admin_state_up\u0027: {"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FqXw%3D","line":46,"updated":"2014-01-09 23:55:46.000000000","message":"I would think we should allow PUT here. If I am moving to new credentials, I would like to create a new credential id (and not update existing one as it may be in use in other VPN connections).\n\nThis looks too restrictive.","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"a107076df40f9a0bcc19eaf66ae5cffad22b21bc","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":44,"context_line":"        \u0027credential_id\u0027: {"},{"line_number":45,"context_line":"            \u0027allow_post\u0027: True,"},{"line_number":46,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":47,"context_line":"            \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":48,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":49,"context_line":"        \u0027admin_state_up\u0027: {"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2Flvc%3D","line":46,"in_reply_to":"AAAAUH%2F%2FqXw%3D","updated":"2014-01-10 18:16:33.000000000","message":"Let\u0027s work on later for updating this","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"3d3bf4102c3ab98c5f79f893a09af42a2f8223cb","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        return \"2013-10-07T10:00:00-00:00\""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @classmethod"},{"line_number":92,"context_line":"    def get_resources(cls):"},{"line_number":93,"context_line":"        my_plurals \u003d [(key, key[:-1]) for key in RESOURCE_ATTRIBUTE_MAP.keys()]"},{"line_number":94,"context_line":"        attr.PLURALS.update(dict(my_plurals))"},{"line_number":95,"context_line":"        resources \u003d []"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2Fr7k%3D","line":92,"updated":"2014-01-09 16:10:48.000000000","message":"Should this depend on bug-1258656, which pulls the content of this up into common functions?","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"ac58ee76feea4d7a7c6024d67822af1107ab937a","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        return \"2013-10-07T10:00:00-00:00\""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    @classmethod"},{"line_number":92,"context_line":"    def get_resources(cls):"},{"line_number":93,"context_line":"        my_plurals \u003d [(key, key[:-1]) for key in RESOURCE_ATTRIBUTE_MAP.keys()]"},{"line_number":94,"context_line":"        attr.PLURALS.update(dict(my_plurals))"},{"line_number":95,"context_line":"        resources \u003d []"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FkYs%3D","line":92,"in_reply_to":"AAAAUH%2F%2Fr7k%3D","updated":"2014-01-10 23:04:11.000000000","message":"yes. I\u0027ll fix this after the fix merged","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"74bfbda0abf006cf415e7b731e4df3ca6f405414","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return \"2013-10-07T10:00:00-00:00\""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @classmethod"},{"line_number":96,"context_line":"    def get_resources(cls):"},{"line_number":97,"context_line":"        my_plurals \u003d [(key, key[:-1]) for key in RESOURCE_ATTRIBUTE_MAP.keys()]"},{"line_number":98,"context_line":"        attr.PLURALS.update(dict(my_plurals))"},{"line_number":99,"context_line":"        resources \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUH%2F%2FfYA%3D","line":96,"updated":"2014-01-13 11:55:57.000000000","message":"The change for get_resources() common code has been merged, so you can pick that up and use it here and next file.","commit_id":"2df4e51c6ccc73a55e453c3e576289e7aa400350"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"c986829b5ec49eb5ae5e35d133f90a5f9637a02c","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        return \"2013-10-07T10:00:00-00:00\""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @classmethod"},{"line_number":96,"context_line":"    def get_resources(cls):"},{"line_number":97,"context_line":"        my_plurals \u003d [(key, key[:-1]) for key in RESOURCE_ATTRIBUTE_MAP.keys()]"},{"line_number":98,"context_line":"        attr.PLURALS.update(dict(my_plurals))"},{"line_number":99,"context_line":"        resources \u003d []"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAUH%2F%2Fc6c%3D","line":96,"in_reply_to":"AAAAUH%2F%2FfYA%3D","updated":"2014-01-13 18:40:41.000000000","message":"OK Thanks!","commit_id":"2df4e51c6ccc73a55e453c3e576289e7aa400350"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8ccc75311afaf794671ad4797937d4706ee45527","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        return resource_helper.build_resource_info(plural_mappings,"},{"line_number":99,"context_line":"                                                   RESOURCE_ATTRIBUTE_MAP,"},{"line_number":100,"context_line":"                                                   constants.VPN,"},{"line_number":101,"context_line":"                                                   register_quota\u003dTrue,"},{"line_number":102,"context_line":"                                                   translate_name\u003dTrue)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2FYTs%3D","line":101,"updated":"2014-01-14 12:31:10.000000000","message":"Did you want quota registration (didn\u0027t notice in original code)?","commit_id":"1fde0f386d39bb45e2184c57cf9bb66158717c79"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"ce32719f525c106c6bde53c4353712d7792e83cb","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        return resource_helper.build_resource_info(plural_mappings,"},{"line_number":99,"context_line":"                                                   RESOURCE_ATTRIBUTE_MAP,"},{"line_number":100,"context_line":"                                                   constants.VPN,"},{"line_number":101,"context_line":"                                                   register_quota\u003dTrue,"},{"line_number":102,"context_line":"                                                   translate_name\u003dTrue)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2FSPA%3D","line":101,"in_reply_to":"AAAAUH%2F%2FYTs%3D","updated":"2014-01-15 16:04:12.000000000","message":"yes","commit_id":"1fde0f386d39bb45e2184c57cf9bb66158717c79"}],"neutron/extensions/vpncredential.py":[{"author":{"_account_id":7752,"name":"Rajesh Mohan","email":"rajesh.mlists@gmail.com","username":"rajesh.mohan"},"change_message_id":"165fd2faf3c42df60abf810ed7e9f09e8ce50b5a","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            \u0027default\u0027: \u0027\u0027,"},{"line_number":42,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":43,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":44,"context_line":"        \u0027ca\u0027: {"},{"line_number":45,"context_line":"            \u0027allow_post\u0027: True,"},{"line_number":46,"context_line":"            \u0027allow_put\u0027: True,"},{"line_number":47,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2Fqfk%3D","line":44,"updated":"2014-01-09 23:55:46.000000000","message":"You could configure multiple CA certificate. Are you expecting the user to concatenate multiple CA strings into single string? \n\nIf you want to take multiple CAs in single string, you should call this resource as \u0027cas\u0027.\n\nI would prefer if we could take multiple CA certificates as separate inputs.","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"a107076df40f9a0bcc19eaf66ae5cffad22b21bc","unresolved":false,"context_lines":[{"line_number":41,"context_line":"            \u0027default\u0027: \u0027\u0027,"},{"line_number":42,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":43,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":44,"context_line":"        \u0027ca\u0027: {"},{"line_number":45,"context_line":"            \u0027allow_post\u0027: True,"},{"line_number":46,"context_line":"            \u0027allow_put\u0027: True,"},{"line_number":47,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FluY%3D","line":44,"in_reply_to":"AAAAUH%2F%2Fqfk%3D","updated":"2014-01-10 18:16:33.000000000","message":"I agree. so let\u0027s work on future work.","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":7752,"name":"Rajesh Mohan","email":"rajesh.mlists@gmail.com","username":"rajesh.mohan"},"change_message_id":"165fd2faf3c42df60abf810ed7e9f09e8ce50b5a","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        \u0027ca\u0027: {"},{"line_number":45,"context_line":"            \u0027allow_post\u0027: True,"},{"line_number":46,"context_line":"            \u0027allow_put\u0027: True,"},{"line_number":47,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":48,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":49,"context_line":"        \u0027server_certificate\u0027: {"},{"line_number":50,"context_line":"            \u0027allow_post\u0027: True,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2Fqfc%3D","line":47,"updated":"2014-01-09 23:55:46.000000000","message":"You probably want to only support PEM formatted certificates. You should validate that input string is PEM formatted and valid.\n\nWe should validate all strings in this resource. People are going to cut and paste from file and they will make mistakes. We should catch it before we accept the input.","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"a107076df40f9a0bcc19eaf66ae5cffad22b21bc","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        \u0027ca\u0027: {"},{"line_number":45,"context_line":"            \u0027allow_post\u0027: True,"},{"line_number":46,"context_line":"            \u0027allow_put\u0027: True,"},{"line_number":47,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":48,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":49,"context_line":"        \u0027server_certificate\u0027: {"},{"line_number":50,"context_line":"            \u0027allow_post\u0027: True,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2Flt4%3D","line":47,"in_reply_to":"AAAAUH%2F%2Fqfc%3D","updated":"2014-01-10 18:16:33.000000000","message":"I agreel I\u0027ll add it.","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":7752,"name":"Rajesh Mohan","email":"rajesh.mlists@gmail.com","username":"rajesh.mohan"},"change_message_id":"165fd2faf3c42df60abf810ed7e9f09e8ce50b5a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            \u0027allow_put\u0027: True,"},{"line_number":57,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":58,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":59,"context_line":"        \u0027dh\u0027: {"},{"line_number":60,"context_line":"            \u0027allow_post\u0027: True,"},{"line_number":61,"context_line":"            \u0027allow_put\u0027: True,"},{"line_number":62,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2Fqa4%3D","line":59,"updated":"2014-01-09 23:55:46.000000000","message":"IMO, this should be optional. In most occasions, DH Param will be generated using OpenSSL which is already available on the system. We could generate it (if this is not configured).","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"a107076df40f9a0bcc19eaf66ae5cffad22b21bc","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            \u0027allow_put\u0027: True,"},{"line_number":57,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":58,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":59,"context_line":"        \u0027dh\u0027: {"},{"line_number":60,"context_line":"            \u0027allow_post\u0027: True,"},{"line_number":61,"context_line":"            \u0027allow_put\u0027: True,"},{"line_number":62,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2Flts%3D","line":59,"in_reply_to":"AAAAUH%2F%2Fqa4%3D","updated":"2014-01-10 18:16:33.000000000","message":"I agree. I\u0027ll add it.","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":7752,"name":"Rajesh Mohan","email":"rajesh.mlists@gmail.com","username":"rajesh.mohan"},"change_message_id":"165fd2faf3c42df60abf810ed7e9f09e8ce50b5a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            \u0027allow_put\u0027: True,"},{"line_number":62,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":63,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":64,"context_line":"        \u0027crl\u0027: {"},{"line_number":65,"context_line":"            \u0027allow_post\u0027: True,"},{"line_number":66,"context_line":"            \u0027allow_put\u0027: True,"},{"line_number":67,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FqYY%3D","line":64,"updated":"2014-01-09 23:55:46.000000000","message":"Same comments as CA. You would have more than on CRL.","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"a107076df40f9a0bcc19eaf66ae5cffad22b21bc","unresolved":false,"context_lines":[{"line_number":61,"context_line":"            \u0027allow_put\u0027: True,"},{"line_number":62,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"},{"line_number":63,"context_line":"            \u0027is_visible\u0027: True},"},{"line_number":64,"context_line":"        \u0027crl\u0027: {"},{"line_number":65,"context_line":"            \u0027allow_post\u0027: True,"},{"line_number":66,"context_line":"            \u0027allow_put\u0027: True,"},{"line_number":67,"context_line":"            \u0027validate\u0027: {\u0027type:string\u0027: None},"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2Flto%3D","line":64,"in_reply_to":"AAAAUH%2F%2FqYY%3D","updated":"2014-01-10 18:16:33.000000000","message":"Let\u0027s work on this in futurework","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":7752,"name":"Rajesh Mohan","email":"rajesh.mlists@gmail.com","username":"rajesh.mohan"},"change_message_id":"165fd2faf3c42df60abf810ed7e9f09e8ce50b5a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            \u0027allow_post\u0027: False,"},{"line_number":71,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":72,"context_line":"            \u0027is_visible\u0027: True"},{"line_number":73,"context_line":"        }"},{"line_number":74,"context_line":"    }"},{"line_number":75,"context_line":"}"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2Fqa8%3D","line":73,"updated":"2014-01-09 23:55:46.000000000","message":"cipher will be a good addition to this resource. Given some known attacks on some SSL versions, it will be nice to give a option to users to select the ciphers they trust.","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"a107076df40f9a0bcc19eaf66ae5cffad22b21bc","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            \u0027allow_post\u0027: False,"},{"line_number":71,"context_line":"            \u0027allow_put\u0027: False,"},{"line_number":72,"context_line":"            \u0027is_visible\u0027: True"},{"line_number":73,"context_line":"        }"},{"line_number":74,"context_line":"    }"},{"line_number":75,"context_line":"}"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2FltU%3D","line":73,"in_reply_to":"AAAAUH%2F%2Fqa8%3D","updated":"2014-01-10 18:16:33.000000000","message":"I agree, Let\u0027s work on this in futurework","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"3d3bf4102c3ab98c5f79f893a09af42a2f8223cb","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        return \"2013-10-07T10:00:00-00:00\""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @classmethod"},{"line_number":101,"context_line":"    def get_resources(cls):"},{"line_number":102,"context_line":"        my_plurals \u003d [(key, key[:-1]) for key in RESOURCE_ATTRIBUTE_MAP.keys()]"},{"line_number":103,"context_line":"        attr.PLURALS.update(dict(my_plurals))"},{"line_number":104,"context_line":"        resources \u003d []"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUH%2F%2Fr7U%3D","line":101,"updated":"2014-01-09 16:10:48.000000000","message":"Ditto.","commit_id":"14ff644d12c50c48d7e0d270d1b78f55576352ea"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"8ccc75311afaf794671ad4797937d4706ee45527","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        return resource_helper.build_resource_info(plural_mappings,"},{"line_number":99,"context_line":"                                                   RESOURCE_ATTRIBUTE_MAP,"},{"line_number":100,"context_line":"                                                   constants.VPN,"},{"line_number":101,"context_line":"                                                   register_quota\u003dTrue,"},{"line_number":102,"context_line":"                                                   translate_name\u003dTrue)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2FYTo%3D","line":101,"updated":"2014-01-14 12:31:10.000000000","message":"Ditto.","commit_id":"1fde0f386d39bb45e2184c57cf9bb66158717c79"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"ce32719f525c106c6bde53c4353712d7792e83cb","unresolved":false,"context_lines":[{"line_number":98,"context_line":"        return resource_helper.build_resource_info(plural_mappings,"},{"line_number":99,"context_line":"                                                   RESOURCE_ATTRIBUTE_MAP,"},{"line_number":100,"context_line":"                                                   constants.VPN,"},{"line_number":101,"context_line":"                                                   register_quota\u003dTrue,"},{"line_number":102,"context_line":"                                                   translate_name\u003dTrue)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2FSO8%3D","line":101,"in_reply_to":"AAAAUH%2F%2FYTo%3D","updated":"2014-01-15 16:04:12.000000000","message":"yes.","commit_id":"1fde0f386d39bb45e2184c57cf9bb66158717c79"}],"neutron/plugins/common/constants.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"7e26eaaf97cc57d42b4849975c6ed6c3906ff4a6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack Foundation."},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9tNQ%3D","line":2,"updated":"2013-12-06 21:48:58.000000000","message":"Should this get updated to 2012-2013?","commit_id":"e9fb81196143991cd93bdf235dcdc9aafa298019"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"66672b5cad401c1c19ec74cf60585068c999d186","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2012 OpenStack Foundation."},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9tL0%3D","line":2,"in_reply_to":"AAAATn%2F9tNQ%3D","updated":"2013-12-06 21:55:03.000000000","message":"I think its OK for now","commit_id":"e9fb81196143991cd93bdf235dcdc9aafa298019"}],"neutron/services/vpn/plugin.py":[{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"d138b3073a3aabe5cd404a0de52ef192c5a6de52","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    Most DB related works are implemented in class"},{"line_number":32,"context_line":"    vpn_db.VPNPluginDb."},{"line_number":33,"context_line":"    \"\"\""},{"line_number":34,"context_line":"    supported_extension_aliases \u003d [\"vpnaas\", \"sslvpn\"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class VPNDriverPlugin(VPNPlugin, vpn_db.VPNPluginRpcDbMixin):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F98ao%3D","line":34,"updated":"2013-12-06 06:49:54.000000000","message":"whether the \"sslvpn\" should also be updated into neutron.plugins.constants.EXT_TO_SERVICE_MAPPING","commit_id":"3011bd87a6744c86dc599c8e249e041ef1464d66"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"bd58b467ed1879bbaff2c1ab5231d14ad85cb10f","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    Most DB related works are implemented in class"},{"line_number":32,"context_line":"    vpn_db.VPNPluginDb."},{"line_number":33,"context_line":"    \"\"\""},{"line_number":34,"context_line":"    supported_extension_aliases \u003d [\"vpnaas\", \"sslvpn\"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"class VPNDriverPlugin(VPNPlugin, vpn_db.VPNPluginRpcDbMixin):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9uGA%3D","line":34,"in_reply_to":"AAAATn%2F98ao%3D","updated":"2013-12-06 18:57:17.000000000","message":"Done","commit_id":"3011bd87a6744c86dc599c8e249e041ef1464d66"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"97e667882c44eb1ad91474ad2e64c1007658c429","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class VPNPlugin(vpn_db.VPNPluginDb,"},{"line_number":28,"context_line":"                sslvpn_db.SSLVPN_db_mixin,"},{"line_number":29,"context_line":"                vpn_credential_db.VPNCredential_db_mixin):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    \"\"\"Implementation of the VPN Service Plugin."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9bCI%3D","line":29,"updated":"2013-12-11 17:26:40.000000000","message":"nit: conserve space, put as many parameters on aline not exceeding 80 characters.","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"ac232d2cfa93085d3f3bf70b28e232fd3852a5f6","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class VPNPlugin(vpn_db.VPNPluginDb,"},{"line_number":28,"context_line":"                sslvpn_db.SSLVPN_db_mixin,"},{"line_number":29,"context_line":"                vpn_credential_db.VPNCredential_db_mixin):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    \"\"\"Implementation of the VPN Service Plugin."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2F8GE%3D","line":29,"in_reply_to":"AAAATn%2F9aEw%3D","updated":"2013-12-26 18:22:03.000000000","message":"I agree with Eugene.","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"e3151d8239d2fa6c9dff2af0997a0b575110b57b","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class VPNPlugin(vpn_db.VPNPluginDb,"},{"line_number":28,"context_line":"                sslvpn_db.SSLVPN_db_mixin,"},{"line_number":29,"context_line":"                vpn_credential_db.VPNCredential_db_mixin):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    \"\"\"Implementation of the VPN Service Plugin."},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9aEw%3D","line":29,"in_reply_to":"AAAATn%2F9bCI%3D","updated":"2013-12-11 20:48:15.000000000","message":"I think such requirement doesn\u0027t make much sense; is up to author\u0027s taste whether to conserve space or not.\nPersonally I prefer seeing long identifiers on a separate line each, while short ones could be ok if grouped in one line.","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"}],"neutron/tests/unit/db/vpn/test_db_sslvpn.py":[{"author":{"_account_id":7317,"name":"Bo Lin","email":"linb@vmware.com","username":"berlin"},"change_message_id":"d138b3073a3aabe5cd404a0de52ef192c5a6de52","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                )"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"class TestSSVpn(SSLVPNPluginDbTestCase):"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_create_ssl_vpn_connection(self, **extras):"},{"line_number":174,"context_line":"        expected \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9xH0%3D","line":171,"updated":"2013-12-06 06:49:54.000000000","message":"TestSSLVpn","commit_id":"3011bd87a6744c86dc599c8e249e041ef1464d66"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"bd58b467ed1879bbaff2c1ab5231d14ad85cb10f","unresolved":false,"context_lines":[{"line_number":168,"context_line":"                )"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"class TestSSVpn(SSLVPNPluginDbTestCase):"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_create_ssl_vpn_connection(self, **extras):"},{"line_number":174,"context_line":"        expected \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9uF8%3D","line":171,"in_reply_to":"AAAATn%2F9xH0%3D","updated":"2013-12-06 18:57:17.000000000","message":"Done","commit_id":"3011bd87a6744c86dc599c8e249e041ef1464d66"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"a2587e585cb1923404a577381fcfbcc1dc583792","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        if not fmt:"},{"line_number":108,"context_line":"            fmt \u003d self.fmt"},{"line_number":109,"context_line":"        with contextlib.nested("},{"line_number":110,"context_line":"            self.vpnservice(),"},{"line_number":111,"context_line":"            self.vpn_credential()) as ("},{"line_number":112,"context_line":"                vpnservice, vpn_credential):"},{"line_number":113,"context_line":"            res \u003d self._create_ssl_vpn_connection("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9t1w%3D","line":110,"updated":"2013-12-06 19:45:59.000000000","message":"i wonder if no_delete needs to be propagated to those.","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"35c5b951936a7603c0b8693d6d23a2c42af90fd1","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        if not fmt:"},{"line_number":108,"context_line":"            fmt \u003d self.fmt"},{"line_number":109,"context_line":"        with contextlib.nested("},{"line_number":110,"context_line":"            self.vpnservice(),"},{"line_number":111,"context_line":"            self.vpn_credential()) as ("},{"line_number":112,"context_line":"                vpnservice, vpn_credential):"},{"line_number":113,"context_line":"            res \u003d self._create_ssl_vpn_connection("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9tsU%3D","line":110,"in_reply_to":"AAAATn%2F9t1w%3D","updated":"2013-12-06 20:11:12.000000000","message":"No it\u0027s not needed at least for current test codes","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"18023cd35c7e575c0bc19b565410069404d252bd","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        with self.ssl_vpn_connection("},{"line_number":211,"context_line":"            **extras"},{"line_number":212,"context_line":"        ) as ssl_vpn_connection:"},{"line_number":213,"context_line":"            self.assertEqual("},{"line_number":214,"context_line":"                dict((k, v)"},{"line_number":215,"context_line":"                     for k, v"},{"line_number":216,"context_line":"                     in ssl_vpn_connection[\u0027ssl_vpn_connection\u0027].items()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9tkE%3D","line":213,"updated":"2013-12-06 20:40:07.000000000","message":"I think you can do assertDictContainssSubset(expected, ssl_vpn_connection[\u0027ssl_vpn_connection\u0027])\nHere and in other test cases...","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"ab600be5753923d997bb2903c2d0f9cc2cb3394d","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        with self.ssl_vpn_connection("},{"line_number":211,"context_line":"            **extras"},{"line_number":212,"context_line":"        ) as ssl_vpn_connection:"},{"line_number":213,"context_line":"            self.assertEqual("},{"line_number":214,"context_line":"                dict((k, v)"},{"line_number":215,"context_line":"                     for k, v"},{"line_number":216,"context_line":"                     in ssl_vpn_connection[\u0027ssl_vpn_connection\u0027].items()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9thY%3D","line":213,"in_reply_to":"AAAATn%2F9tiM%3D","updated":"2013-12-06 20:52:39.000000000","message":"Ah our base test class didn\u0027t support it.","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"c00e2e764409fff42c667c18a719f3e2f2d4b104","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        with self.ssl_vpn_connection("},{"line_number":211,"context_line":"            **extras"},{"line_number":212,"context_line":"        ) as ssl_vpn_connection:"},{"line_number":213,"context_line":"            self.assertEqual("},{"line_number":214,"context_line":"                dict((k, v)"},{"line_number":215,"context_line":"                     for k, v"},{"line_number":216,"context_line":"                     in ssl_vpn_connection[\u0027ssl_vpn_connection\u0027].items()"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9tiM%3D","line":213,"in_reply_to":"AAAATn%2F9tkE%3D","updated":"2013-12-06 20:50:04.000000000","message":"nice.\nI\u0027ll use it","commit_id":"37e1e23aece4aaae545b6809cee2f7b3a1842bb3"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"7e26eaaf97cc57d42b4849975c6ed6c3906ff4a6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9tNE%3D","line":1,"updated":"2013-12-06 21:48:58.000000000","message":"VIM line","commit_id":"e9fb81196143991cd93bdf235dcdc9aafa298019"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"66672b5cad401c1c19ec74cf60585068c999d186","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9tLc%3D","line":1,"in_reply_to":"AAAATn%2F9tNE%3D","updated":"2013-12-06 21:55:03.000000000","message":"Done","commit_id":"e9fb81196143991cd93bdf235dcdc9aafa298019"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"7e26eaaf97cc57d42b4849975c6ed6c3906ff4a6","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        with self.ssl_vpn_connection("},{"line_number":211,"context_line":"            **extras"},{"line_number":212,"context_line":"        ) as ssl_vpn_connection:"},{"line_number":213,"context_line":"            self.assertEqual("},{"line_number":214,"context_line":"                dict((k, v)"},{"line_number":215,"context_line":"                     for k, v"},{"line_number":216,"context_line":"                     in ssl_vpn_connection[\u0027ssl_vpn_connection\u0027].items()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9tNs%3D","line":213,"updated":"2013-12-06 21:48:58.000000000","message":"Can you clarify what you meant by base test class didn\u0027t support assertDictContainsSubset()?\n\nDo you me we\u0027d have to change those tests too (should we or is it not important?) or do you mean it is not technically possible?","commit_id":"e9fb81196143991cd93bdf235dcdc9aafa298019"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"66672b5cad401c1c19ec74cf60585068c999d186","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        with self.ssl_vpn_connection("},{"line_number":211,"context_line":"            **extras"},{"line_number":212,"context_line":"        ) as ssl_vpn_connection:"},{"line_number":213,"context_line":"            self.assertEqual("},{"line_number":214,"context_line":"                dict((k, v)"},{"line_number":215,"context_line":"                     for k, v"},{"line_number":216,"context_line":"                     in ssl_vpn_connection[\u0027ssl_vpn_connection\u0027].items()"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F9tLQ%3D","line":213,"in_reply_to":"AAAATn%2F9tNs%3D","updated":"2013-12-06 21:55:03.000000000","message":"I mean base class didn\u0027t support the method.\nIt is possible but,\nit looks like we need some refactoring if we need to use the function.","commit_id":"e9fb81196143991cd93bdf235dcdc9aafa298019"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"97e667882c44eb1ad91474ad2e64c1007658c429","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        credential_id,"},{"line_number":83,"context_line":"        vpnservice_id,"},{"line_number":84,"context_line":"        expected_res_status\u003dNone,"},{"line_number":85,"context_line":"        **kwargs):"},{"line_number":86,"context_line":"        data \u003d {\u0027ssl_vpn_connection\u0027: {"},{"line_number":87,"context_line":"            \u0027name\u0027: name,"},{"line_number":88,"context_line":"            \u0027credential_id\u0027: credential_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9bDA%3D","line":85,"updated":"2013-12-11 17:26:40.000000000","message":"nit: typically we don\u0027t put each parameter on its own line to conserve space.","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"ac232d2cfa93085d3f3bf70b28e232fd3852a5f6","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        credential_id,"},{"line_number":83,"context_line":"        vpnservice_id,"},{"line_number":84,"context_line":"        expected_res_status\u003dNone,"},{"line_number":85,"context_line":"        **kwargs):"},{"line_number":86,"context_line":"        data \u003d {\u0027ssl_vpn_connection\u0027: {"},{"line_number":87,"context_line":"            \u0027name\u0027: name,"},{"line_number":88,"context_line":"            \u0027credential_id\u0027: credential_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2F8Fg%3D","line":85,"in_reply_to":"AAAATn%2F9aDU%3D","updated":"2013-12-26 18:22:03.000000000","message":"Done","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":6072,"name":"Eugene Nikanorov","email":"enikanorov@mirantis.com","username":"enikanorov"},"change_message_id":"e3151d8239d2fa6c9dff2af0997a0b575110b57b","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        credential_id,"},{"line_number":83,"context_line":"        vpnservice_id,"},{"line_number":84,"context_line":"        expected_res_status\u003dNone,"},{"line_number":85,"context_line":"        **kwargs):"},{"line_number":86,"context_line":"        data \u003d {\u0027ssl_vpn_connection\u0027: {"},{"line_number":87,"context_line":"            \u0027name\u0027: name,"},{"line_number":88,"context_line":"            \u0027credential_id\u0027: credential_id,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9aDU%3D","line":85,"in_reply_to":"AAAATn%2F9bDA%3D","updated":"2013-12-11 20:48:15.000000000","message":"Here I would agree.\nSomething like:\n def _create_ssl_vpn_connection(self, fmt, name, credential_id,\n                                vpnservice_id, expected_res_status\u003dNone,\n                                **kwargs)\nwould look nicer","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"97e667882c44eb1ad91474ad2e64c1007658c429","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        fmt\u003dNone,"},{"line_number":107,"context_line":"        no_delete\u003dFalse,"},{"line_number":108,"context_line":"        **kwargs):"},{"line_number":109,"context_line":"        if not fmt:"},{"line_number":110,"context_line":"            fmt \u003d self.fmt"},{"line_number":111,"context_line":"        with contextlib.nested("},{"line_number":112,"context_line":"            self.vpnservice(),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9bDk%3D","line":109,"updated":"2013-12-11 17:26:40.000000000","message":"nit: typically we don\u0027t put each parameter on its own line to conserve space.","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"97e667882c44eb1ad91474ad2e64c1007658c429","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        expected_res_status\u003dNone,"},{"line_number":146,"context_line":"        **kwargs"},{"line_number":147,"context_line":"    ):"},{"line_number":148,"context_line":"        data \u003d {\u0027vpn_credential\u0027: {"},{"line_number":149,"context_line":"            \u0027ca\u0027: ca,"},{"line_number":150,"context_line":"            \u0027server_certificate\u0027: server_certificate,"},{"line_number":151,"context_line":"            \u0027server_key\u0027: server_key,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9bDc%3D","line":148,"updated":"2013-12-11 17:26:40.000000000","message":"see above","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"ac232d2cfa93085d3f3bf70b28e232fd3852a5f6","unresolved":false,"context_lines":[{"line_number":145,"context_line":"        expected_res_status\u003dNone,"},{"line_number":146,"context_line":"        **kwargs"},{"line_number":147,"context_line":"    ):"},{"line_number":148,"context_line":"        data \u003d {\u0027vpn_credential\u0027: {"},{"line_number":149,"context_line":"            \u0027ca\u0027: ca,"},{"line_number":150,"context_line":"            \u0027server_certificate\u0027: server_certificate,"},{"line_number":151,"context_line":"            \u0027server_key\u0027: server_key,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2F8FM%3D","line":148,"in_reply_to":"AAAATn%2F9bDc%3D","updated":"2013-12-26 18:22:03.000000000","message":"Done","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":5572,"name":"Don Kehn","display_name":"DEKehn","email":"dekehn@gmail.com","username":"dekehn"},"change_message_id":"97e667882c44eb1ad91474ad2e64c1007658c429","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        no_delete\u003dFalse,"},{"line_number":174,"context_line":"        fmt\u003dNone,"},{"line_number":175,"context_line":"        **kwargs"},{"line_number":176,"context_line":"    ):"},{"line_number":177,"context_line":"        if not fmt:"},{"line_number":178,"context_line":"            fmt \u003d self.fmt"},{"line_number":179,"context_line":"        res \u003d self._create_vpn_credential("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9bDU%3D","line":176,"updated":"2013-12-11 17:26:40.000000000","message":"see above.","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"ac232d2cfa93085d3f3bf70b28e232fd3852a5f6","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        no_delete\u003dFalse,"},{"line_number":174,"context_line":"        fmt\u003dNone,"},{"line_number":175,"context_line":"        **kwargs"},{"line_number":176,"context_line":"    ):"},{"line_number":177,"context_line":"        if not fmt:"},{"line_number":178,"context_line":"            fmt \u003d self.fmt"},{"line_number":179,"context_line":"        res \u003d self._create_vpn_credential("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAT3%2F%2F8FI%3D","line":176,"in_reply_to":"AAAATn%2F9bDU%3D","updated":"2013-12-26 18:22:03.000000000","message":"Done","commit_id":"b7548b270551d044f839223dca0889cd6c2fd96c"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"2ea397aa7110dae19eaa40935d957d79bb7fc6da","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            \u0027vpnservice_id\u0027: vpnservice_id,"},{"line_number":85,"context_line":"            \u0027tenant_id\u0027: self._tenant_id"},{"line_number":86,"context_line":"        }}"},{"line_number":87,"context_line":"        for arg in kwargs:"},{"line_number":88,"context_line":"            data[\u0027ssl_vpn_connection\u0027][arg] \u003d kwargs[arg]"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        req \u003d self.new_create_request(\u0027ssl-vpn-connections\u0027, data, fmt)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAT3%2F%2F5g0%3D","line":87,"updated":"2013-12-27 15:07:47.000000000","message":"Couldn\u0027t this loop be replaced with:\n\ndata[\u0027ssl_vpn_connection\u0027].update(kwargs)","commit_id":"42e4b69182250dc3a50ff392d66c84e3e6b8e2d4"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"2ea397aa7110dae19eaa40935d957d79bb7fc6da","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            \u0027crl\u0027: crl,"},{"line_number":145,"context_line":"            \u0027tenant_id\u0027: self._tenant_id"},{"line_number":146,"context_line":"        }}"},{"line_number":147,"context_line":"        for arg in kwargs:"},{"line_number":148,"context_line":"            data[\u0027vpn_credential\u0027][arg] \u003d kwargs[arg]"},{"line_number":149,"context_line":"        req \u003d self.new_create_request(\u0027vpn-credentials\u0027, data, fmt)"},{"line_number":150,"context_line":"        res \u003d req.get_response(self.ext_api)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAT3%2F%2F5gw%3D","line":147,"updated":"2013-12-27 15:07:47.000000000","message":"ditto","commit_id":"42e4b69182250dc3a50ff392d66c84e3e6b8e2d4"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"20610f41d37a1a24ac156d49593c8552be7121ec","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            \u0027vpnservice_id\u0027: vpnservice_id,"},{"line_number":85,"context_line":"            \u0027tenant_id\u0027: self._tenant_id"},{"line_number":86,"context_line":"        }}"},{"line_number":87,"context_line":"        for arg in kwargs:"},{"line_number":88,"context_line":"            data[\u0027ssl_vpn_connection\u0027][arg] \u003d kwargs[arg]"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        req \u003d self.new_create_request(\u0027ssl-vpn-connections\u0027, data, fmt)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FyxI%3D","line":87,"updated":"2014-01-08 12:11:25.000000000","message":"Could do this instead of L87-88\n\ndata[\u0027ssl_vpn_connection\u0027].update(kwargs)","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"5af850c04faf60069f866e5ab1c6baccc031c821","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            \u0027vpnservice_id\u0027: vpnservice_id,"},{"line_number":85,"context_line":"            \u0027tenant_id\u0027: self._tenant_id"},{"line_number":86,"context_line":"        }}"},{"line_number":87,"context_line":"        for arg in kwargs:"},{"line_number":88,"context_line":"            data[\u0027ssl_vpn_connection\u0027][arg] \u003d kwargs[arg]"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"        req \u003d self.new_create_request(\u0027ssl-vpn-connections\u0027, data, fmt)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2Fwzs%3D","line":87,"in_reply_to":"AAAAUH%2F%2FyxI%3D","updated":"2014-01-08 18:59:01.000000000","message":"Done","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"20610f41d37a1a24ac156d49593c8552be7121ec","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            \u0027crl\u0027: crl,"},{"line_number":145,"context_line":"            \u0027tenant_id\u0027: self._tenant_id"},{"line_number":146,"context_line":"        }}"},{"line_number":147,"context_line":"        for arg in kwargs:"},{"line_number":148,"context_line":"            data[\u0027vpn_credential\u0027][arg] \u003d kwargs[arg]"},{"line_number":149,"context_line":"        req \u003d self.new_create_request(\u0027vpn-credentials\u0027, data, fmt)"},{"line_number":150,"context_line":"        res \u003d req.get_response(self.ext_api)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FyxE%3D","line":147,"updated":"2014-01-08 12:11:25.000000000","message":"ditto","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"5af850c04faf60069f866e5ab1c6baccc031c821","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            \u0027crl\u0027: crl,"},{"line_number":145,"context_line":"            \u0027tenant_id\u0027: self._tenant_id"},{"line_number":146,"context_line":"        }}"},{"line_number":147,"context_line":"        for arg in kwargs:"},{"line_number":148,"context_line":"            data[\u0027vpn_credential\u0027][arg] \u003d kwargs[arg]"},{"line_number":149,"context_line":"        req \u003d self.new_create_request(\u0027vpn-credentials\u0027, data, fmt)"},{"line_number":150,"context_line":"        res \u003d req.get_response(self.ext_api)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2Fwzc%3D","line":147,"in_reply_to":"AAAAUH%2F%2FyxE%3D","updated":"2014-01-08 18:59:01.000000000","message":"Done","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"20610f41d37a1a24ac156d49593c8552be7121ec","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            )"},{"line_number":230,"context_line":"            res \u003d self.deserialize(self.fmt, req.get_response(self.ext_api))"},{"line_number":231,"context_line":"            self.assertEqual(len(res), 1)"},{"line_number":232,"context_line":"            for k, v in keys.iteritems():"},{"line_number":233,"context_line":"                self.assertEqual(res[\u0027ssl_vpn_connections\u0027][0][k], v)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def test_delete_ssl_vpn_connection(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FyuQ%3D","line":232,"updated":"2014-01-08 12:11:25.000000000","message":"Nit: naming this keys is a bit misleading, as these are dict items and not keys. Consider a more descriptive name (expected, params, ...) here and in following test cases.","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":2031,"name":"Nachi Ueno","email":"nati.ueno@gmail.com","username":"nati-ueno"},"change_message_id":"5af850c04faf60069f866e5ab1c6baccc031c821","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            )"},{"line_number":230,"context_line":"            res \u003d self.deserialize(self.fmt, req.get_response(self.ext_api))"},{"line_number":231,"context_line":"            self.assertEqual(len(res), 1)"},{"line_number":232,"context_line":"            for k, v in keys.iteritems():"},{"line_number":233,"context_line":"                self.assertEqual(res[\u0027ssl_vpn_connections\u0027][0][k], v)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    def test_delete_ssl_vpn_connection(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAUH%2F%2FwyY%3D","line":232,"in_reply_to":"AAAAUH%2F%2FyuQ%3D","updated":"2014-01-08 18:59:01.000000000","message":"I don\u0027t think this is misleading, and this style is widely used in the code.","commit_id":"3fb78f763c621946b6efb7dbc09e7eb6794d9707"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"5b97ef3850b393bcf039585bb44b0726d98611a4","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":"import contextlib"},{"line_number":15,"context_line":"import hashlib"},{"line_number":16,"context_line":"import logging"},{"line_number":17,"context_line":"import os"},{"line_number":18,"context_line":"import webob.exc"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAU3%2F%2F%2B%2FE%3D","line":16,"updated":"2014-02-23 03:41:22.000000000","message":"from neutron.openstack.common import log","commit_id":"e07fb174b20642f9b0f50ea1f28afe9a1df0cd9e"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"5b97ef3850b393bcf039585bb44b0726d98611a4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"extensions_path \u003d \u0027:\u0027.join(neutron.extensions.__path__)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def etcdir(*p):"},{"line_number":44,"context_line":"    return os.path.join(ETCDIR, *p)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAU3%2F%2F%2B%2FA%3D","line":43,"updated":"2014-02-23 03:41:22.000000000","message":"This doesn\u0027t look used","commit_id":"e07fb174b20642f9b0f50ea1f28afe9a1df0cd9e"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"change_message_id":"5b97ef3850b393bcf039585bb44b0726d98611a4","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                        expected_code\u003dwebob.exc.HTTPNoContent.code"},{"line_number":132,"context_line":"                    )"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _create_vpn_credential("},{"line_number":135,"context_line":"        self,"},{"line_number":136,"context_line":"        fmt,"},{"line_number":137,"context_line":"        ca,"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAU3%2F%2F%2B%2Bo%3D","line":134,"updated":"2014-02-23 03:41:22.000000000","message":"This is formatting is bit unconventional for method declaration.","commit_id":"e07fb174b20642f9b0f50ea1f28afe9a1df0cd9e"}],"neutron/tests/unit/test_db_plugin.py":[{"author":{"_account_id":6659,"name":"Paul Michali","email":"pc@michali.net","username":"pcm"},"change_message_id":"0c35fd5ba5647843dd51b3b5aae1161baac90d6d","unresolved":false,"context_lines":[{"line_number":690,"context_line":"            n \u003d plugin._get_network(ctx, net_id)"},{"line_number":691,"context_line":"            self.assertEqual(net_id, n.id)"},{"line_number":692,"context_line":""},{"line_number":693,"context_line":"        for arg in kwargs:"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"class TestV2HTTPResponse(NeutronDbPluginV2TestCase):"},{"line_number":696,"context_line":"    def test_create_returns_201(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAUH%2F%2FvYg%3D","line":693,"updated":"2014-01-09 00:21:19.000000000","message":"Extraneous line?","commit_id":"aacaaa59683b19792b43abc82d93ccfc83c74e05"}]}
