)]}'
{"etc/keystone.conf.sample":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b278bdd6c977f5c6ab704939d0c68ac1cafefdff","unresolved":false,"context_lines":[{"line_number":89,"context_line":"# cannot be deleted on the v3 API, to prevent accidentally breaking the v2 API."},{"line_number":90,"context_line":"# There is nothing special about this domain, other than the fact that it must"},{"line_number":91,"context_line":"# exist to order to maintain support for your v2 clients."},{"line_number":92,"context_line":"# default_domain_id \u003d default"},{"line_number":93,"context_line":"[credentials]"},{"line_number":94,"context_line":"# driver \u003d keystone.credentials.backends.sql.Credentials"},{"line_number":95,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAOn%2F%2FWLI%3D","line":92,"updated":"2013-05-14 01:43:25.000000000","message":"add a blank line here","commit_id":"2534135bd8c265bffb0e182122c8528fe033d548"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"69760bb37a39b6c22f9e082f7f7a08642ca5ab30","unresolved":false,"context_lines":[{"line_number":89,"context_line":"# cannot be deleted on the v3 API, to prevent accidentally breaking the v2 API."},{"line_number":90,"context_line":"# There is nothing special about this domain, other than the fact that it must"},{"line_number":91,"context_line":"# exist to order to maintain support for your v2 clients."},{"line_number":92,"context_line":"# default_domain_id \u003d default"},{"line_number":93,"context_line":"[credentials]"},{"line_number":94,"context_line":"# driver \u003d keystone.credentials.backends.sql.Credentials"},{"line_number":95,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":7,"id":"AAAAO3%2F%2F%2FSI%3D","line":92,"updated":"2013-05-15 13:52:17.000000000","message":"We might still need a blank line here per Brant\u0027s comment in patch set 6.","commit_id":"6d6befa21b18c8c1c4a867cb75681ba976b8b0f5"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e785dddedf1242d3d641231cfc4b5dd0cdc99aa4","unresolved":false,"context_lines":[{"line_number":92,"context_line":"# default_domain_id \u003d default"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"[credentials]"},{"line_number":95,"context_line":"# driver \u003d keystone.credentials.backends.sql.Credentials"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"[trust]"},{"line_number":98,"context_line":"# driver \u003d keystone.trust.backends.sql.Trust"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"AAAAO3%2F%2F8Fc%3D","line":95,"updated":"2013-05-16 17:27:05.000000000","message":"the other backends are named using singular nouns (identity, catalog, token, trust, etc) ... please follow suit here","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"}],"keystone/common/config.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e785dddedf1242d3d641231cfc4b5dd0cdc99aa4","unresolved":false,"context_lines":[{"line_number":270,"context_line":"        default\u003d\u0027keystone.identity.backends.sql.Identity\u0027)"},{"line_number":271,"context_line":"    register_str("},{"line_number":272,"context_line":"        \u0027driver\u0027,"},{"line_number":273,"context_line":"        group\u003d\u0027credentials\u0027,"},{"line_number":274,"context_line":"        default\u003d\u0027keystone.credentials.backends.sql.Credentials\u0027)"},{"line_number":275,"context_line":"    register_str("},{"line_number":276,"context_line":"        \u0027driver\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAO3%2F%2F8FU%3D","line":273,"updated":"2013-05-16 17:27:05.000000000","message":"credential","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e785dddedf1242d3d641231cfc4b5dd0cdc99aa4","unresolved":false,"context_lines":[{"line_number":271,"context_line":"    register_str("},{"line_number":272,"context_line":"        \u0027driver\u0027,"},{"line_number":273,"context_line":"        group\u003d\u0027credentials\u0027,"},{"line_number":274,"context_line":"        default\u003d\u0027keystone.credentials.backends.sql.Credentials\u0027)"},{"line_number":275,"context_line":"    register_str("},{"line_number":276,"context_line":"        \u0027driver\u0027,"},{"line_number":277,"context_line":"        group\u003d\u0027policy\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAO3%2F%2F8FQ%3D","line":274,"updated":"2013-05-16 17:27:05.000000000","message":"credential","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"}],"keystone/common/controller.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e785dddedf1242d3d641231cfc4b5dd0cdc99aa4","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"@dependency.requires(\u0027identity_api\u0027, \u0027policy_api\u0027, \u0027token_api\u0027,"},{"line_number":152,"context_line":"                     \u0027trust_api\u0027, \u0027catalog_api\u0027, \u0027credentials_api\u0027)"},{"line_number":153,"context_line":"class V2Controller(wsgi.Application):"},{"line_number":154,"context_line":"    \"\"\"Base controller class for Identity API v2.\"\"\""},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAO3%2F%2F8FI%3D","line":152,"updated":"2013-05-16 17:27:05.000000000","message":"credential_api","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"}],"keystone/common/sql/migrate_repo/versions/023_drop_credential_constraints.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed4e75bebb198527505aadc58859dd79af7beaa","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import exceptions"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import sqlalchemy"},{"line_number":21,"context_line":"from sqlalchemy.orm import sessionmaker"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2F%2FQk%3D","line":18,"updated":"2013-05-17 01:58:43.000000000","message":"I don\u0027t see exceptions used.","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e785dddedf1242d3d641231cfc4b5dd0cdc99aa4","unresolved":false,"context_lines":[{"line_number":29,"context_line":"def drop_constraint_mysql(migrate_engine):"},{"line_number":30,"context_line":"    Session \u003d sessionmaker()"},{"line_number":31,"context_line":"    Session.configure(bind\u003dmigrate_engine)"},{"line_number":32,"context_line":"    session \u003d Session()"},{"line_number":33,"context_line":"    #http://bugs.mysql.com/bug.php?id\u003d10333"},{"line_number":34,"context_line":"    for constraint in session.execute(MYSQL_FKEY_QUERY):"},{"line_number":35,"context_line":"        session.execute(\u0027ALTER TABLE credential DROP FOREIGN KEY %s;\u0027"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAO3%2F%2F8Ec%3D","line":32,"updated":"2013-05-16 17:27:05.000000000","message":"why not just simplify this like all the other migrations? you don\u0027t need any of the intermediate references\n\n  session \u003d sql.orm.sessionmaker(bind\u003dmigrate_engine)()","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e785dddedf1242d3d641231cfc4b5dd0cdc99aa4","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    Session \u003d sessionmaker()"},{"line_number":31,"context_line":"    Session.configure(bind\u003dmigrate_engine)"},{"line_number":32,"context_line":"    session \u003d Session()"},{"line_number":33,"context_line":"    #http://bugs.mysql.com/bug.php?id\u003d10333"},{"line_number":34,"context_line":"    for constraint in session.execute(MYSQL_FKEY_QUERY):"},{"line_number":35,"context_line":"        session.execute(\u0027ALTER TABLE credential DROP FOREIGN KEY %s;\u0027"},{"line_number":36,"context_line":"                        % constraint[0])"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAO3%2F%2F8EY%3D","line":33,"updated":"2013-05-16 17:27:05.000000000","message":"can you explain what the impact of the bug is on the code that you\u0027re writing, rather than just linking to a bug?","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e785dddedf1242d3d641231cfc4b5dd0cdc99aa4","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    #http://bugs.mysql.com/bug.php?id\u003d10333"},{"line_number":34,"context_line":"    for constraint in session.execute(MYSQL_FKEY_QUERY):"},{"line_number":35,"context_line":"        session.execute(\u0027ALTER TABLE credential DROP FOREIGN KEY %s;\u0027"},{"line_number":36,"context_line":"                        % constraint[0])"},{"line_number":37,"context_line":"    session.commit()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAO3%2F%2F8EU%3D","line":36,"updated":"2013-05-16 17:27:05.000000000","message":"would much rather these be a set of explicit drops, but maybe that\u0027s what the bug above is about?","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed4e75bebb198527505aadc58859dd79af7beaa","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def remove_constraints(migrate_engine):"},{"line_number":41,"context_line":"    if migrate_engine.name \u003d\u003d \"sqlite\":"},{"line_number":42,"context_line":"        return"},{"line_number":43,"context_line":"    if migrate_engine.name \u003d\u003d \"mysql\":"},{"line_number":44,"context_line":"        drop_constraint_mysql(migrate_engine)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2F%2FQs%3D","line":41,"updated":"2013-05-17 01:58:43.000000000","message":"use single-quotes per PEP8. (this applies at 43, 59)","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed4e75bebb198527505aadc58859dd79af7beaa","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":48,"context_line":"    user_table \u003d sqlalchemy.Table(\u0027user\u0027, meta, autoload\u003dTrue)"},{"line_number":49,"context_line":"    proj_table \u003d sqlalchemy.Table(\u0027project\u0027, meta, autoload\u003dTrue)"},{"line_number":50,"context_line":"    tenant_table \u003d sqlalchemy.Table(\u0027tenant\u0027, meta, autoload\u003dFalse)"},{"line_number":51,"context_line":"    cred_table \u003d sqlalchemy.Table(\u0027credential\u0027, meta, autoload\u003dTrue)"},{"line_number":52,"context_line":"    ForeignKeyConstraint(columns\u003d[cred_table.c.user_id],"},{"line_number":53,"context_line":"                         refcolumns\u003d[user_table.c.id]).drop()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2F%2FQo%3D","line":50,"updated":"2013-05-17 01:58:43.000000000","message":"tenant_table isn\u0027t used.","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"02532d916b7de85c94d70d17ed06bdb850944172","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":64,"context_line":"    user_table \u003d sqlalchemy.Table(\u0027user\u0027, meta, autoload\u003dTrue)"},{"line_number":65,"context_line":"    proj_table \u003d sqlalchemy.Table(\u0027project\u0027, meta, autoload\u003dTrue)"},{"line_number":66,"context_line":"#    tenant_table \u003d sqlalchemy.Table(\u0027tenant\u0027, meta, autoload\u003dFalse)"},{"line_number":67,"context_line":"    cred_table \u003d sqlalchemy.Table(\u0027credential\u0027, meta, autoload\u003dTrue)"},{"line_number":68,"context_line":"    ForeignKeyConstraint(columns\u003d[cred_table.c.user_id],"},{"line_number":69,"context_line":"                         refcolumns\u003d[user_table.c.id]).create()"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2F%2BL8%3D","line":66,"updated":"2013-05-17 14:25:31.000000000","message":"please don\u0027t commit commented out code","commit_id":"98257a51cb6c7967b5a46730e15c6d7e2a6edd9d"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"3de872c851057544069957047023313b7b62dc23","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":64,"context_line":"    user_table \u003d sqlalchemy.Table(\u0027user\u0027, meta, autoload\u003dTrue)"},{"line_number":65,"context_line":"    proj_table \u003d sqlalchemy.Table(\u0027project\u0027, meta, autoload\u003dTrue)"},{"line_number":66,"context_line":"#    tenant_table \u003d sqlalchemy.Table(\u0027tenant\u0027, meta, autoload\u003dFalse)"},{"line_number":67,"context_line":"    cred_table \u003d sqlalchemy.Table(\u0027credential\u0027, meta, autoload\u003dTrue)"},{"line_number":68,"context_line":"    ForeignKeyConstraint(columns\u003d[cred_table.c.user_id],"},{"line_number":69,"context_line":"                         refcolumns\u003d[user_table.c.id]).create()"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2F%2BFQ%3D","line":66,"in_reply_to":"AAAAPH%2F%2F%2BL8%3D","updated":"2013-05-17 15:02:57.000000000","message":"Ah, crud, thought I removed this.  Sorry.","commit_id":"98257a51cb6c7967b5a46730e15c6d7e2a6edd9d"}],"keystone/credential/backends/sql.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"02532d916b7de85c94d70d17ed06bdb850944172","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from keystone import exception"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class CredentialEntity(sql.ModelBase, sql.DictBase):"},{"line_number":26,"context_line":"    __tablename__ \u003d \u0027credential\u0027"},{"line_number":27,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027user_id\u0027, \u0027project_id\u0027, \u0027blob\u0027, \u0027type\u0027]"},{"line_number":28,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2F%2BL0%3D","line":25,"updated":"2013-05-17 14:25:31.000000000","message":"CredentialModel","commit_id":"98257a51cb6c7967b5a46730e15c6d7e2a6edd9d"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"3de872c851057544069957047023313b7b62dc23","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from keystone import exception"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class CredentialEntity(sql.ModelBase, sql.DictBase):"},{"line_number":26,"context_line":"    __tablename__ \u003d \u0027credential\u0027"},{"line_number":27,"context_line":"    attributes \u003d [\u0027id\u0027, \u0027user_id\u0027, \u0027project_id\u0027, \u0027blob\u0027, \u0027type\u0027]"},{"line_number":28,"context_line":"    id \u003d sql.Column(sql.String(64), primary_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPH%2F%2F%2BFM%3D","line":25,"in_reply_to":"AAAAPH%2F%2F%2BL0%3D","updated":"2013-05-17 15:02:57.000000000","message":"I shoulda gone with CredEntity","commit_id":"98257a51cb6c7967b5a46730e15c6d7e2a6edd9d"}],"keystone/credentials/backends/sql.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed4e75bebb198527505aadc58859dd79af7beaa","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystone.common.sql import migration"},{"line_number":20,"context_line":"from keystone.common import utils"},{"line_number":21,"context_line":"from keystone import exception"},{"line_number":22,"context_line":"from keystone import credentials"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class Credential(sql.ModelBase, sql.DictBase):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2F%2FQc%3D","line":22,"updated":"2013-05-17 01:58:43.000000000","message":"for alphabetical order, move keystone.credentials up above keystone.exception","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"}],"keystone/credentials/core.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"9f681ab64faf21f61b1bb2082c72f79ec255c6ba","unresolved":false,"context_lines":[{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"\"\"\"Main entry point into the Identity service.\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from keystone.common import dependency"},{"line_number":20,"context_line":"from keystone.common import logging"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOn%2F%2FYLc%3D","line":17,"updated":"2013-05-13 04:06:01.000000000","message":"Credential service","commit_id":"2534135bd8c265bffb0e182122c8528fe033d548"}],"keystone/credentials/routers.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed4e75bebb198527505aadc58859dd79af7beaa","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":13,"context_line":"# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":"\"\"\"WSGI Routers for the Credentials service.\"\"\""},{"line_number":17,"context_line":"from keystone.common import router"},{"line_number":18,"context_line":"from keystone.common import wsgi"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2F%2FQE%3D","line":15,"updated":"2013-05-17 01:58:43.000000000","message":"would be nice to have some whitespace here.","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed4e75bebb198527505aadc58859dd79af7beaa","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# under the License."},{"line_number":16,"context_line":"\"\"\"WSGI Routers for the Credentials service.\"\"\""},{"line_number":17,"context_line":"from keystone.common import router"},{"line_number":18,"context_line":"from keystone.common import wsgi"},{"line_number":19,"context_line":"from keystone.credentials import controllers"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2F%2FQA%3D","line":18,"updated":"2013-05-17 01:58:43.000000000","message":"I don\u0027t see wsgi used.","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"}],"keystone/test.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed4e75bebb198527505aadc58859dd79af7beaa","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    DRIVERS[\u0027policy_api\u0027] \u003d policy.Manager()"},{"line_number":82,"context_line":"    DRIVERS[\u0027token_api\u0027] \u003d token.Manager()"},{"line_number":83,"context_line":"    DRIVERS[\u0027trust_api\u0027] \u003d trust.Manager()"},{"line_number":84,"context_line":"    DRIVERS[\u0027credentials_api\u0027] \u003d credentials.Manager()"},{"line_number":85,"context_line":"    return DRIVERS"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2F%2FPw%3D","line":84,"updated":"2013-05-17 01:58:43.000000000","message":"(nit) could leave these in alphabetical order","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"}],"tests/test_v3_credentials.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"eed4e75bebb198527505aadc58859dd79af7beaa","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        \"\"\"DELETE /credentials/{credential_id}\"\"\""},{"line_number":78,"context_line":"        self.delete("},{"line_number":79,"context_line":"            \u0027/credentials/%(credential_id)s\u0027 % {"},{"line_number":80,"context_line":"                \u0027credential_id\u0027: self.credential_id})"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPH%2F%2F%2FPo%3D","line":80,"updated":"2013-05-17 01:58:43.000000000","message":"suggest add tests for list credentials when they don\u0027t exist, create when already exists, update when doesn\u0027t exist, delete when doesn\u0027t exist.","commit_id":"377fbefbebeff6289d4c8fe4a979a37ec59a310c"}]}
