)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"de668622186064c61d3fce6ed40eaa4cb24ed334","unresolved":false,"context_lines":[{"line_number":7,"context_line":"tokens: add a Swift backend"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a Swift based backend to Keystone tokens."},{"line_number":10,"context_line":"It stores tokens in a common container, and use a container per"},{"line_number":11,"context_line":"user/tenant/trust to index and list them. The expiration of the tokens"},{"line_number":12,"context_line":"is automatically handled by the Swift expirer feature."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAWn%2F%2F7j4%3D","line":10,"updated":"2014-04-08 12:43:18.000000000","message":"useS","commit_id":"a56fce7a3918093e624b765db2b0ca98253f3292"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"617a3761114d2526a4de41d6c865d8cbeba4b719","unresolved":false,"context_lines":[{"line_number":7,"context_line":"tokens: add a Swift backend"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a Swift based backend to Keystone tokens."},{"line_number":10,"context_line":"It stores tokens in a common container, and use a container per"},{"line_number":11,"context_line":"user/tenant/trust to index and list them. The expiration of the tokens"},{"line_number":12,"context_line":"is automatically handled by the Swift expirer feature."},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAAWn%2F%2F6yE%3D","line":10,"in_reply_to":"AAAAWn%2F%2F7j4%3D","updated":"2014-04-08 14:08:55.000000000","message":"Done","commit_id":"a56fce7a3918093e624b765db2b0ca98253f3292"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"df332b9ed60426e6bd27310a387e19737c37eb58","unresolved":false,"context_lines":[{"line_number":10,"context_line":"It stores tokens in a common container, and uses a container per"},{"line_number":11,"context_line":"user/tenant/trust to index and list them. The expiration of the tokens"},{"line_number":12,"context_line":"is automatically handled by the Swift expirer feature."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I5b88fab9ac5615993d4f83520b16db58852e0f41"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"5a890539_54764b3f","line":13,"updated":"2014-11-21 14:38:47.000000000","message":"Should add a reference to the tokens-swift-backend blueprint.","commit_id":"24c4ec85390782a74168d69373312aab3152fc55"}],"keystone/common/config.py":[{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"de668622186064c61d3fce6ed40eaa4cb24ed334","unresolved":false,"context_lines":[{"line_number":667,"context_line":"        cfg.StrOpt(\u0027swift_preauthurl\u0027,"},{"line_number":668,"context_line":"                   default\u003dNone,"},{"line_number":669,"context_line":"                   help\u003d\u0027Swift pre-auth URL.\u0027),"},{"line_number":670,"context_line":"        cfg.StrOpt(\u0027swift_authurl\u0027,"},{"line_number":671,"context_line":"                   default\u003dNone,"},{"line_number":672,"context_line":"                   help\u003d\u0027Swift auth URL.\u0027),"},{"line_number":673,"context_line":"        cfg.StrOpt(\u0027swift_preauthtoken\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWn%2F%2F7l8%3D","line":670,"updated":"2014-04-08 12:43:18.000000000","message":"redundant with l.664 ?","commit_id":"a56fce7a3918093e624b765db2b0ca98253f3292"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"617a3761114d2526a4de41d6c865d8cbeba4b719","unresolved":false,"context_lines":[{"line_number":667,"context_line":"        cfg.StrOpt(\u0027swift_preauthurl\u0027,"},{"line_number":668,"context_line":"                   default\u003dNone,"},{"line_number":669,"context_line":"                   help\u003d\u0027Swift pre-auth URL.\u0027),"},{"line_number":670,"context_line":"        cfg.StrOpt(\u0027swift_authurl\u0027,"},{"line_number":671,"context_line":"                   default\u003dNone,"},{"line_number":672,"context_line":"                   help\u003d\u0027Swift auth URL.\u0027),"},{"line_number":673,"context_line":"        cfg.StrOpt(\u0027swift_preauthtoken\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWn%2F%2F6yA%3D","line":670,"in_reply_to":"AAAAWn%2F%2F7l8%3D","updated":"2014-04-08 14:08:55.000000000","message":"Done","commit_id":"a56fce7a3918093e624b765db2b0ca98253f3292"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"dd2749208c3c27d597b11bdac6495545eaf03d4b","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                   help\u003d\u0027Swift user.\u0027),"},{"line_number":678,"context_line":"        cfg.StrOpt(\u0027swift_key\u0027,"},{"line_number":679,"context_line":"                   help\u003d\u0027Swift key/password.\u0027),"},{"line_number":680,"context_line":"        cfg.StrOpt(\u0027swift_tenant_name\u0027,"},{"line_number":681,"context_line":"                   help\u003d\u0027Swift tenant name.\u0027),"},{"line_number":682,"context_line":"        cfg.StrOpt(\u0027swift_token_container\u0027,"},{"line_number":683,"context_line":"                   default\u003d\u0027tokens\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWn%2F%2F7HU%3D","line":680,"updated":"2014-04-08 13:42:38.000000000","message":"you probably want to add that it\u0027s only used in v1","commit_id":"a56fce7a3918093e624b765db2b0ca98253f3292"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"617a3761114d2526a4de41d6c865d8cbeba4b719","unresolved":false,"context_lines":[{"line_number":677,"context_line":"                   help\u003d\u0027Swift user.\u0027),"},{"line_number":678,"context_line":"        cfg.StrOpt(\u0027swift_key\u0027,"},{"line_number":679,"context_line":"                   help\u003d\u0027Swift key/password.\u0027),"},{"line_number":680,"context_line":"        cfg.StrOpt(\u0027swift_tenant_name\u0027,"},{"line_number":681,"context_line":"                   help\u003d\u0027Swift tenant name.\u0027),"},{"line_number":682,"context_line":"        cfg.StrOpt(\u0027swift_token_container\u0027,"},{"line_number":683,"context_line":"                   default\u003d\u0027tokens\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWn%2F%2F6x8%3D","line":680,"in_reply_to":"AAAAWn%2F%2F7HU%3D","updated":"2014-04-08 14:08:55.000000000","message":"I guess you meant v2.","commit_id":"a56fce7a3918093e624b765db2b0ca98253f3292"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0a6d91c6f0dc2a18649321ba534fa73ce7a6af3e","unresolved":false,"context_lines":[{"line_number":660,"context_line":"    \u0027swift\u0027: ["},{"line_number":661,"context_line":"        cfg.StrOpt(\u0027swift_auth_version\u0027,"},{"line_number":662,"context_line":"                   default\u003d\u00271\u0027,"},{"line_number":663,"context_line":"                   help\u003d\u0027Swift authentication version to user.\u0027),"},{"line_number":664,"context_line":"        cfg.StrOpt(\u0027swift_preauthurl\u0027,"},{"line_number":665,"context_line":"                   default\u003dNone,"},{"line_number":666,"context_line":"                   help\u003d\u0027Swift pre-auth URL.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2F1CA%3D","line":663,"updated":"2014-04-17 06:09:50.000000000","message":"s/user/use","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b3db31912bad690857c9f162bd06e69da8e469bc","unresolved":false,"context_lines":[{"line_number":660,"context_line":"    \u0027swift\u0027: ["},{"line_number":661,"context_line":"        cfg.StrOpt(\u0027swift_auth_version\u0027,"},{"line_number":662,"context_line":"                   default\u003d\u00271\u0027,"},{"line_number":663,"context_line":"                   help\u003d\u0027Swift authentication version to user.\u0027),"},{"line_number":664,"context_line":"        cfg.StrOpt(\u0027swift_preauthurl\u0027,"},{"line_number":665,"context_line":"                   default\u003dNone,"},{"line_number":666,"context_line":"                   help\u003d\u0027Swift pre-auth URL.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2Fzq8%3D","line":663,"in_reply_to":"AAAAXH%2F%2F1CA%3D","updated":"2014-04-17 09:59:36.000000000","message":"Done","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0a6d91c6f0dc2a18649321ba534fa73ce7a6af3e","unresolved":false,"context_lines":[{"line_number":666,"context_line":"                   help\u003d\u0027Swift pre-auth URL.\u0027),"},{"line_number":667,"context_line":"        cfg.StrOpt(\u0027swift_authurl\u0027,"},{"line_number":668,"context_line":"                   default\u003d\"http://localhost:8080/auth/v1.0\","},{"line_number":669,"context_line":"                   help\u003d\u0027Swift auth URL.\u0027),"},{"line_number":670,"context_line":"        cfg.StrOpt(\u0027swift_preauthtoken\u0027,"},{"line_number":671,"context_line":"                   default\u003dNone,"},{"line_number":672,"context_line":"                   help\u003d\u0027Swift token to user to authenticate.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2F1BY%3D","line":669,"updated":"2014-04-17 06:09:50.000000000","message":"write out authentication instead of auth","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b3db31912bad690857c9f162bd06e69da8e469bc","unresolved":false,"context_lines":[{"line_number":666,"context_line":"                   help\u003d\u0027Swift pre-auth URL.\u0027),"},{"line_number":667,"context_line":"        cfg.StrOpt(\u0027swift_authurl\u0027,"},{"line_number":668,"context_line":"                   default\u003d\"http://localhost:8080/auth/v1.0\","},{"line_number":669,"context_line":"                   help\u003d\u0027Swift auth URL.\u0027),"},{"line_number":670,"context_line":"        cfg.StrOpt(\u0027swift_preauthtoken\u0027,"},{"line_number":671,"context_line":"                   default\u003dNone,"},{"line_number":672,"context_line":"                   help\u003d\u0027Swift token to user to authenticate.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2Fzq4%3D","line":669,"in_reply_to":"AAAAXH%2F%2F1BY%3D","updated":"2014-04-17 09:59:36.000000000","message":"Done","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0a6d91c6f0dc2a18649321ba534fa73ce7a6af3e","unresolved":false,"context_lines":[{"line_number":669,"context_line":"                   help\u003d\u0027Swift auth URL.\u0027),"},{"line_number":670,"context_line":"        cfg.StrOpt(\u0027swift_preauthtoken\u0027,"},{"line_number":671,"context_line":"                   default\u003dNone,"},{"line_number":672,"context_line":"                   help\u003d\u0027Swift token to user to authenticate.\u0027),"},{"line_number":673,"context_line":"        cfg.StrOpt(\u0027swift_user\u0027,"},{"line_number":674,"context_line":"                   default\u003d\"admin:admin\","},{"line_number":675,"context_line":"                   help\u003d\u0027Swift user.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2F1Bc%3D","line":672,"updated":"2014-04-17 06:09:50.000000000","message":"s/user/use","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b3db31912bad690857c9f162bd06e69da8e469bc","unresolved":false,"context_lines":[{"line_number":669,"context_line":"                   help\u003d\u0027Swift auth URL.\u0027),"},{"line_number":670,"context_line":"        cfg.StrOpt(\u0027swift_preauthtoken\u0027,"},{"line_number":671,"context_line":"                   default\u003dNone,"},{"line_number":672,"context_line":"                   help\u003d\u0027Swift token to user to authenticate.\u0027),"},{"line_number":673,"context_line":"        cfg.StrOpt(\u0027swift_user\u0027,"},{"line_number":674,"context_line":"                   default\u003d\"admin:admin\","},{"line_number":675,"context_line":"                   help\u003d\u0027Swift user.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2Fzqs%3D","line":672,"in_reply_to":"AAAAXH%2F%2F1Bc%3D","updated":"2014-04-17 09:59:36.000000000","message":"Done","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0a6d91c6f0dc2a18649321ba534fa73ce7a6af3e","unresolved":false,"context_lines":[{"line_number":675,"context_line":"                   help\u003d\u0027Swift user.\u0027),"},{"line_number":676,"context_line":"        cfg.StrOpt(\u0027swift_key\u0027,"},{"line_number":677,"context_line":"                   default\u003d\"admin\","},{"line_number":678,"context_line":"                   secret\u003dTrue,"},{"line_number":679,"context_line":"                   help\u003d\u0027Swift key/password.\u0027),"},{"line_number":680,"context_line":"        cfg.StrOpt(\u0027swift_tenant_name\u0027,"},{"line_number":681,"context_line":"                   help\u003d\u0027Swift tenant name, only used in v2 auth.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2F1As%3D","line":678,"updated":"2014-04-17 06:09:50.000000000","message":"what would secret\u003dTrue do? I am seeing it in the conf file","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b3db31912bad690857c9f162bd06e69da8e469bc","unresolved":false,"context_lines":[{"line_number":675,"context_line":"                   help\u003d\u0027Swift user.\u0027),"},{"line_number":676,"context_line":"        cfg.StrOpt(\u0027swift_key\u0027,"},{"line_number":677,"context_line":"                   default\u003d\"admin\","},{"line_number":678,"context_line":"                   secret\u003dTrue,"},{"line_number":679,"context_line":"                   help\u003d\u0027Swift key/password.\u0027),"},{"line_number":680,"context_line":"        cfg.StrOpt(\u0027swift_tenant_name\u0027,"},{"line_number":681,"context_line":"                   help\u003d\u0027Swift tenant name, only used in v2 auth.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2Fzqk%3D","line":678,"in_reply_to":"AAAAXH%2F%2F1As%3D","updated":"2014-04-17 09:59:36.000000000","message":"It does not print it out if you dump the config IIRC.","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0a6d91c6f0dc2a18649321ba534fa73ce7a6af3e","unresolved":false,"context_lines":[{"line_number":678,"context_line":"                   secret\u003dTrue,"},{"line_number":679,"context_line":"                   help\u003d\u0027Swift key/password.\u0027),"},{"line_number":680,"context_line":"        cfg.StrOpt(\u0027swift_tenant_name\u0027,"},{"line_number":681,"context_line":"                   help\u003d\u0027Swift tenant name, only used in v2 auth.\u0027),"},{"line_number":682,"context_line":"        cfg.StrOpt(\u0027swift_token_container\u0027,"},{"line_number":683,"context_line":"                   default\u003d\u0027tokens\u0027,"},{"line_number":684,"context_line":"                   help\u003d\u0027Swift container name to store tokens.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2F1BE%3D","line":681,"updated":"2014-04-17 06:09:50.000000000","message":"no default?","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b3db31912bad690857c9f162bd06e69da8e469bc","unresolved":false,"context_lines":[{"line_number":678,"context_line":"                   secret\u003dTrue,"},{"line_number":679,"context_line":"                   help\u003d\u0027Swift key/password.\u0027),"},{"line_number":680,"context_line":"        cfg.StrOpt(\u0027swift_tenant_name\u0027,"},{"line_number":681,"context_line":"                   help\u003d\u0027Swift tenant name, only used in v2 auth.\u0027),"},{"line_number":682,"context_line":"        cfg.StrOpt(\u0027swift_token_container\u0027,"},{"line_number":683,"context_line":"                   default\u003d\u0027tokens\u0027,"},{"line_number":684,"context_line":"                   help\u003d\u0027Swift container name to store tokens.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2Fzqg%3D","line":681,"in_reply_to":"AAAAXH%2F%2F1BE%3D","updated":"2014-04-17 09:59:36.000000000","message":"Not used by default in v1 auth.","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0a6d91c6f0dc2a18649321ba534fa73ce7a6af3e","unresolved":false,"context_lines":[{"line_number":681,"context_line":"                   help\u003d\u0027Swift tenant name, only used in v2 auth.\u0027),"},{"line_number":682,"context_line":"        cfg.StrOpt(\u0027swift_token_container\u0027,"},{"line_number":683,"context_line":"                   default\u003d\u0027tokens\u0027,"},{"line_number":684,"context_line":"                   help\u003d\u0027Swift container name to store tokens.\u0027),"},{"line_number":685,"context_line":"    ],"},{"line_number":686,"context_line":"    \u0027kvs\u0027: ["},{"line_number":687,"context_line":"        cfg.ListOpt(\u0027backends\u0027, default\u003d[],"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2F1BQ%3D","line":684,"updated":"2014-04-17 06:09:50.000000000","message":"I think you can drop Swift from all the help messages, since we\u0027re already in the Swift config specific settings","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b3db31912bad690857c9f162bd06e69da8e469bc","unresolved":false,"context_lines":[{"line_number":681,"context_line":"                   help\u003d\u0027Swift tenant name, only used in v2 auth.\u0027),"},{"line_number":682,"context_line":"        cfg.StrOpt(\u0027swift_token_container\u0027,"},{"line_number":683,"context_line":"                   default\u003d\u0027tokens\u0027,"},{"line_number":684,"context_line":"                   help\u003d\u0027Swift container name to store tokens.\u0027),"},{"line_number":685,"context_line":"    ],"},{"line_number":686,"context_line":"    \u0027kvs\u0027: ["},{"line_number":687,"context_line":"        cfg.ListOpt(\u0027backends\u0027, default\u003d[],"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2Fzqc%3D","line":684,"in_reply_to":"AAAAXH%2F%2F1BQ%3D","updated":"2014-04-17 09:59:36.000000000","message":"Done","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"}],"keystone/token/backends/swift.py":[{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"dd2749208c3c27d597b11bdac6495545eaf03d4b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\"Swift backend for tokens.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def __init__(self):"},{"line_number":36,"context_line":"        self.swift \u003d swclient.Connection("},{"line_number":37,"context_line":"            auth_version\u003dCONF.swift.swift_auth_version,"},{"line_number":38,"context_line":"            authurl\u003dCONF.swift.swift_authurl,"},{"line_number":39,"context_line":"            preauthurl\u003dCONF.swift.swift_preauthurl,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWn%2F%2F7Hc%3D","line":36,"updated":"2014-04-08 13:42:38.000000000","message":"check if the configuration is defined?","commit_id":"a56fce7a3918093e624b765db2b0ca98253f3292"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"617a3761114d2526a4de41d6c865d8cbeba4b719","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    \"\"\"Swift backend for tokens.\"\"\""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def __init__(self):"},{"line_number":36,"context_line":"        self.swift \u003d swclient.Connection("},{"line_number":37,"context_line":"            auth_version\u003dCONF.swift.swift_auth_version,"},{"line_number":38,"context_line":"            authurl\u003dCONF.swift.swift_authurl,"},{"line_number":39,"context_line":"            preauthurl\u003dCONF.swift.swift_preauthurl,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWn%2F%2F6xo%3D","line":36,"in_reply_to":"AAAAWn%2F%2F7Hc%3D","updated":"2014-04-08 14:08:55.000000000","message":"shouldn\u0027t that be the role of swclient to raise if something\u0027s wrongly defined? :(","commit_id":"a56fce7a3918093e624b765db2b0ca98253f3292"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"dd2749208c3c27d597b11bdac6495545eaf03d4b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            key\u003dCONF.swift.swift_key,"},{"line_number":43,"context_line":"            tenant_name\u003dCONF.swift.swift_tenant_name)"},{"line_number":44,"context_line":"        self.token_container \u003d CONF.swift.swift_token_container"},{"line_number":45,"context_line":"        self.swift.put_container(self.token_container)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_token(self, token_id):"},{"line_number":48,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWn%2F%2F7aM%3D","line":45,"updated":"2014-04-08 13:42:38.000000000","message":"You are not handlng the failures here? if we can\u0027t connect or not.","commit_id":"a56fce7a3918093e624b765db2b0ca98253f3292"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"617a3761114d2526a4de41d6c865d8cbeba4b719","unresolved":false,"context_lines":[{"line_number":42,"context_line":"            key\u003dCONF.swift.swift_key,"},{"line_number":43,"context_line":"            tenant_name\u003dCONF.swift.swift_tenant_name)"},{"line_number":44,"context_line":"        self.token_container \u003d CONF.swift.swift_token_container"},{"line_number":45,"context_line":"        self.swift.put_container(self.token_container)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def get_token(self, token_id):"},{"line_number":48,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWn%2F%2F6xc%3D","line":45,"in_reply_to":"AAAAWn%2F%2F7aM%3D","updated":"2014-04-08 14:08:55.000000000","message":"Not sure what to do in that case?","commit_id":"a56fce7a3918093e624b765db2b0ca98253f3292"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"dd2749208c3c27d597b11bdac6495545eaf03d4b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            try:"},{"line_number":108,"context_line":"                self.swift.delete_object(\u0027tokens_for_trust_\u0027"},{"line_number":109,"context_line":"                                         + obj[\u0027trust_id\u0027], token_id)"},{"line_number":110,"context_line":"        except swexc.ClientException:"},{"line_number":111,"context_line":"            # It\u0027s not so bad if can\u0027t delete it, just log it"},{"line_number":112,"context_line":"            LOG.warn(\"Unable to delete token %s in per trust container %s\","},{"line_number":113,"context_line":"                     token_id, obj[\u0027trust_id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWn%2F%2F7OU%3D","line":110,"updated":"2014-04-08 13:42:38.000000000","message":"Bad indent :\n\nIn [1]: import keystone.token.backends.swift.Token\n  File \"/home/stack/keystone/keystone/token/backends/swift.py\", line 110\n    except swexc.ClientException:\n    ^\nIndentationError: unexpected unindent","commit_id":"a56fce7a3918093e624b765db2b0ca98253f3292"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"617a3761114d2526a4de41d6c865d8cbeba4b719","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            try:"},{"line_number":108,"context_line":"                self.swift.delete_object(\u0027tokens_for_trust_\u0027"},{"line_number":109,"context_line":"                                         + obj[\u0027trust_id\u0027], token_id)"},{"line_number":110,"context_line":"        except swexc.ClientException:"},{"line_number":111,"context_line":"            # It\u0027s not so bad if can\u0027t delete it, just log it"},{"line_number":112,"context_line":"            LOG.warn(\"Unable to delete token %s in per trust container %s\","},{"line_number":113,"context_line":"                     token_id, obj[\u0027trust_id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWn%2F%2F6xU%3D","line":110,"in_reply_to":"AAAAWn%2F%2F7OU%3D","updated":"2014-04-08 14:08:55.000000000","message":"Done","commit_id":"a56fce7a3918093e624b765db2b0ca98253f3292"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0a6d91c6f0dc2a18649321ba534fa73ce7a6af3e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2014 eNovance"},{"line_number":4,"context_line":"# Author: Julien Danjou \u003cjulien@danjou.info\u003e"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2F09Q%3D","line":1,"updated":"2014-04-17 06:09:50.000000000","message":"remove vim header","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b3db31912bad690857c9f162bd06e69da8e469bc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2014 eNovance"},{"line_number":4,"context_line":"# Author: Julien Danjou \u003cjulien@danjou.info\u003e"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2Fzp8%3D","line":1,"in_reply_to":"AAAAXH%2F%2F09Q%3D","updated":"2014-04-17 09:59:36.000000000","message":"Too bad, it\u0027s not a vim header. :)\nIt\u0027s a header indicating the encoding of the file so Python 2 does not crash when trying to read it if it has utf-8 content in it.","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0a6d91c6f0dc2a18649321ba534fa73ce7a6af3e","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        tokens_for_user \u003d set(obj[\u0027name\u0027] for obj in user_tokens_obj)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        if tenant_id is not None:"},{"line_number":125,"context_line":"            headers, tenant_tokens_obj \u003d self.swift.get_containers(user_id)"},{"line_number":126,"context_line":"        else:"},{"line_number":127,"context_line":"            tenant_tokens_obj \u003d ()"},{"line_number":128,"context_line":"        tokens_for_tenant \u003d set(obj[\u0027name\u0027] for obj in tenant_tokens_obj)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2F02w%3D","line":125,"updated":"2014-04-17 06:09:50.000000000","message":"is user_id supposed to be used here, and all the other spots? I\u0027m not seeing tenant_id being used","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b3db31912bad690857c9f162bd06e69da8e469bc","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        tokens_for_user \u003d set(obj[\u0027name\u0027] for obj in user_tokens_obj)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        if tenant_id is not None:"},{"line_number":125,"context_line":"            headers, tenant_tokens_obj \u003d self.swift.get_containers(user_id)"},{"line_number":126,"context_line":"        else:"},{"line_number":127,"context_line":"            tenant_tokens_obj \u003d ()"},{"line_number":128,"context_line":"        tokens_for_tenant \u003d set(obj[\u0027name\u0027] for obj in tenant_tokens_obj)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2Fzp0%3D","line":125,"in_reply_to":"AAAAXH%2F%2F02w%3D","updated":"2014-04-17 09:59:36.000000000","message":"Fixed.","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0a6d91c6f0dc2a18649321ba534fa73ce7a6af3e","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        return ()"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def flush_expired_tokens(self):"},{"line_number":150,"context_line":"        # Nothing to do, handled by Swift expirer."},{"line_number":151,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2F040%3D","line":150,"updated":"2014-04-17 06:09:50.000000000","message":"could raise NotImplemented","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b3db31912bad690857c9f162bd06e69da8e469bc","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        return ()"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def flush_expired_tokens(self):"},{"line_number":150,"context_line":"        # Nothing to do, handled by Swift expirer."},{"line_number":151,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAXH%2F%2Fzls%3D","line":150,"in_reply_to":"AAAAXH%2F%2F040%3D","updated":"2014-04-17 09:59:36.000000000","message":"It is implemented, it just has nothing to do.","commit_id":"a1fec64e3a9b6f34e82eef0cc5895379d95d602c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ea06b73cda938f94ba003b8f1fd4783ec779d5f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2014 eNovance"},{"line_number":4,"context_line":"# Author: Julien Danjou \u003cjulien@danjou.info\u003e"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXH%2F%2Fxyk%3D","line":1,"updated":"2014-04-17 14:32:31.000000000","message":"Do you actually need this? I don\u0027t think there are any non-ASCII characters in here.","commit_id":"71eb64cc06d1b3f02c06824d12f54f922a84f1fa"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"3eac03ec444a93ffd9ec35db7effa2923e141a52","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2014 eNovance"},{"line_number":4,"context_line":"# Author: Julien Danjou \u003cjulien@danjou.info\u003e"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXH%2F%2FxvA%3D","line":1,"in_reply_to":"AAAAXH%2F%2Fxyk%3D","updated":"2014-04-17 14:39:46.000000000","message":"Done","commit_id":"71eb64cc06d1b3f02c06824d12f54f922a84f1fa"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ea06b73cda938f94ba003b8f1fd4783ec779d5f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from keystone.openstack.common import log"},{"line_number":27,"context_line":"from keystone.openstack.common import timeutils"},{"line_number":28,"context_line":"from keystone import token"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CONF \u003d config.CONF"},{"line_number":31,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXH%2F%2Fx3U%3D","line":29,"updated":"2014-04-17 14:32:31.000000000","message":"Add a newline here.","commit_id":"71eb64cc06d1b3f02c06824d12f54f922a84f1fa"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"3eac03ec444a93ffd9ec35db7effa2923e141a52","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from keystone.openstack.common import log"},{"line_number":27,"context_line":"from keystone.openstack.common import timeutils"},{"line_number":28,"context_line":"from keystone import token"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"CONF \u003d config.CONF"},{"line_number":31,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":32,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXH%2F%2Fxug%3D","line":29,"in_reply_to":"AAAAXH%2F%2Fx3U%3D","updated":"2014-04-17 14:39:46.000000000","message":"Done","commit_id":"71eb64cc06d1b3f02c06824d12f54f922a84f1fa"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ea06b73cda938f94ba003b8f1fd4783ec779d5f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            self.swift.delete_object(self.token_container, token_id)"},{"line_number":71,"context_line":"        except swexc.ClientException:"},{"line_number":72,"context_line":"            LOG.warn(\"Failed to delete token %s\", token_id)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def delete_tokens(self, user_id, tenant_id\u003dNone, trust_id\u003dNone,"},{"line_number":75,"context_line":"                      consumer_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXH%2F%2Fx00%3D","line":72,"updated":"2014-04-17 14:32:31.000000000","message":"Single quotes here","commit_id":"71eb64cc06d1b3f02c06824d12f54f922a84f1fa"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"3eac03ec444a93ffd9ec35db7effa2923e141a52","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        try:"},{"line_number":70,"context_line":"            self.swift.delete_object(self.token_container, token_id)"},{"line_number":71,"context_line":"        except swexc.ClientException:"},{"line_number":72,"context_line":"            LOG.warn(\"Failed to delete token %s\", token_id)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def delete_tokens(self, user_id, tenant_id\u003dNone, trust_id\u003dNone,"},{"line_number":75,"context_line":"                      consumer_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXH%2F%2FxuI%3D","line":72,"in_reply_to":"AAAAXH%2F%2Fx00%3D","updated":"2014-04-17 14:39:46.000000000","message":"Done","commit_id":"71eb64cc06d1b3f02c06824d12f54f922a84f1fa"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0ea06b73cda938f94ba003b8f1fd4783ec779d5f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                                               trust_id, consumer_id)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def list_revoked_tokens(self):"},{"line_number":85,"context_line":"        return ()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def flush_expired_tokens(self):"},{"line_number":88,"context_line":"        # Nothing to do, handled by Swift expirer."}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXH%2F%2Fx1o%3D","line":85,"updated":"2014-04-17 14:32:31.000000000","message":"Does this mean that you don\u0027t support revoking tokens if you use this backend?","commit_id":"71eb64cc06d1b3f02c06824d12f54f922a84f1fa"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"3eac03ec444a93ffd9ec35db7effa2923e141a52","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                                               trust_id, consumer_id)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def list_revoked_tokens(self):"},{"line_number":85,"context_line":"        return ()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def flush_expired_tokens(self):"},{"line_number":88,"context_line":"        # Nothing to do, handled by Swift expirer."}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAXH%2F%2FxtY%3D","line":85,"in_reply_to":"AAAAXH%2F%2Fx1o%3D","updated":"2014-04-17 14:39:46.000000000","message":"No, it means there no use of that method in this driver. Is a token is expired, it has been deleted, so there\u0027s no need to have a separate list of revoked tokens.","commit_id":"71eb64cc06d1b3f02c06824d12f54f922a84f1fa"},{"author":{"_account_id":860,"name":"Donagh McCabe","email":"donagh.mccabe@gmail.com","username":"donagh-mccabe"},"change_message_id":"b81122fa0b1c337711e2bc82599471e0c7d1640c","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.swift \u003d swclient.Connection("},{"line_number":38,"context_line":"            auth_version\u003dCONF.swift.swift_auth_version,"},{"line_number":39,"context_line":"            authurl\u003dCONF.swift.swift_authurl,"},{"line_number":40,"context_line":"            preauthurl\u003dCONF.swift.swift_preauthurl,"},{"line_number":41,"context_line":"            preauthtoken\u003dCONF.swift.swift_preauthtoken,"},{"line_number":42,"context_line":"            user\u003dCONF.swift.swift_user,"},{"line_number":43,"context_line":"            key\u003dCONF.swift.swift_key,"}],"source_content_type":"text/x-python","patch_set":9,"id":"baa201ad_57822c53","line":40,"updated":"2014-09-29 18:43:02.000000000","message":"So you are using a token value from a conf file (preauthtoken)? Is this value also stored in Swift (with no expiry time)?\n\nGiven that Swift will ask Keystone to validate this token, instead of using a fixed token, why not create a token on the fly, store it in memcache, and when you see Swift asking to validate it, you recognise that it\u0027s the token you just created for this interaction. You could create a token for each individual request, or a token with a very short lifetime (a second or so).\n\nIf you supply username/password, the first thing swiftclient will do is call Keystone to get a token. Once Keystone creates the token, won\u0027t it want to store it in Swift? So it then calls swiftclient.Connection()....ie. circular loop! Or have I missed something?","commit_id":"24c4ec85390782a74168d69373312aab3152fc55"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"df332b9ed60426e6bd27310a387e19737c37eb58","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        self.swift \u003d swclient.Connection("},{"line_number":38,"context_line":"            auth_version\u003dCONF.swift.swift_auth_version,"},{"line_number":39,"context_line":"            authurl\u003dCONF.swift.swift_authurl,"},{"line_number":40,"context_line":"            preauthurl\u003dCONF.swift.swift_preauthurl,"},{"line_number":41,"context_line":"            preauthtoken\u003dCONF.swift.swift_preauthtoken,"},{"line_number":42,"context_line":"            user\u003dCONF.swift.swift_user,"},{"line_number":43,"context_line":"            key\u003dCONF.swift.swift_key,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_34d8df7e","line":40,"in_reply_to":"baa201ad_57822c53","updated":"2014-11-21 14:38:47.000000000","message":"Interesting questions. I saw the token in the config file as the way to get around this circular problem, but in thinking about it again I\u0027m not sure.","commit_id":"24c4ec85390782a74168d69373312aab3152fc55"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"df332b9ed60426e6bd27310a387e19737c37eb58","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        try:"},{"line_number":69,"context_line":"            self.swift.delete_object(self.token_container, token_id)"},{"line_number":70,"context_line":"        except swexc.ClientException:"},{"line_number":71,"context_line":"            LOG.warn(\u0027Failed to delete token %s\u0027, token_id)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def delete_tokens(self, user_id, tenant_id\u003dNone, trust_id\u003dNone,"},{"line_number":74,"context_line":"                      consumer_id\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a890539_f444971c","line":71,"updated":"2014-11-21 14:38:47.000000000","message":"This should use the _LW hint for translation.","commit_id":"24c4ec85390782a74168d69373312aab3152fc55"}]}
