)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9910,"name":"Nassim Babaci","email":"grindizer@gmail.com","username":"n4b5"},"change_message_id":"ff9a9c824c9239e087cdfd0ef77f00b6138ec119","unresolved":false,"context_lines":[{"line_number":31,"context_line":"auth_version \u003d v3.0 in the auth_token"},{"line_number":32,"context_line":"middleware config section of"},{"line_number":33,"context_line":"proxy-server.conf. With PKI token this"},{"line_number":34,"context_line":"does not appear to be necessary."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Change-Id: Ifda0b3263eb919a8c6a1b204ba0a1215ed6f642f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9ad9bd40_b0e2142d","line":34,"updated":"2014-05-06 08:03:37.000000000","message":"Is there any blue-print regarding this work ?\nI think it would be nice to have a kind of topic blue-print for keystone v3 integration, as this will impact not just swiftclient but also components like authtoken, keystoneauth and swfit acls, the topic blue-print will keep track of all of the changes and allows to have a clear picture of the progress.","commit_id":"eeef8770709eb0c6a5b08786c1029bba4e17c4b3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4e6fbc76eaec94866b95d4f2fcbb34bf79ce045c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"auth_version \u003d v3.0 in the auth_token"},{"line_number":32,"context_line":"middleware config section of"},{"line_number":33,"context_line":"proxy-server.conf. With PKI token this"},{"line_number":34,"context_line":"does not appear to be necessary."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Change-Id: Ifda0b3263eb919a8c6a1b204ba0a1215ed6f642f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7adec928_5cdb00ed","line":34,"in_reply_to":"9ad9bd40_b0e2142d","updated":"2014-05-09 16:06:19.000000000","message":"Done","commit_id":"eeef8770709eb0c6a5b08786c1029bba4e17c4b3"}],"swiftclient/client.py":[{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"0f24507890f84c8605d7b793e62bf0d666cc0518","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                               resp.getheader(\u0027x-auth-token\u0027))"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"def get_auth_keystone(auth_url, user, key, os_options, **kwargs):"},{"line_number":265,"context_line":"    \"\"\""},{"line_number":266,"context_line":"    Authenticate against a keystone server."},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_aa49c561","line":264,"updated":"2014-05-06 05:40:38.000000000","message":"I usually don\u0027t like much changing the default method since we unfortunately  we never defined a proper API for private and public methods for the client but doign a quick search over github :\n\nhttp://is.gd/M04u4V\n\nseems to come with only one project using this method directly :\n\nhttp://is.gd/WcOlDo\n\nso I guess we sorta safe","commit_id":"eeef8770709eb0c6a5b08786c1029bba4e17c4b3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4e6fbc76eaec94866b95d4f2fcbb34bf79ce045c","unresolved":false,"context_lines":[{"line_number":261,"context_line":"                               resp.getheader(\u0027x-auth-token\u0027))"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"def get_auth_keystone(auth_url, user, key, os_options, **kwargs):"},{"line_number":265,"context_line":"    \"\"\""},{"line_number":266,"context_line":"    Authenticate against a keystone server."},{"line_number":267,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_bc4b24af","line":264,"in_reply_to":"9ad9bd40_aa49c561","updated":"2014-05-09 16:06:19.000000000","message":"i reverted the rename in patch 2","commit_id":"eeef8770709eb0c6a5b08786c1029bba4e17c4b3"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"0f24507890f84c8605d7b793e62bf0d666cc0518","unresolved":false,"context_lines":[{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        # We are handling a special use case here when we were"},{"line_number":358,"context_line":"        # allowing specifying the account/tenant_name with the -U"},{"line_number":359,"context_line":"        # argument"},{"line_number":360,"context_line":"        if user and not kwargs.get(\u0027tenant_name\u0027) and \u0027:\u0027 in user:"},{"line_number":361,"context_line":"            (os_options[\u0027tenant_name\u0027],"},{"line_number":362,"context_line":"             user) \u003d user.split(\u0027:\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_ea766da3","line":359,"updated":"2014-05-06 05:40:38.000000000","message":"we may want to update the comment here?","commit_id":"eeef8770709eb0c6a5b08786c1029bba4e17c4b3"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4e6fbc76eaec94866b95d4f2fcbb34bf79ce045c","unresolved":false,"context_lines":[{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        # We are handling a special use case here when we were"},{"line_number":358,"context_line":"        # allowing specifying the account/tenant_name with the -U"},{"line_number":359,"context_line":"        # argument"},{"line_number":360,"context_line":"        if user and not kwargs.get(\u0027tenant_name\u0027) and \u0027:\u0027 in user:"},{"line_number":361,"context_line":"            (os_options[\u0027tenant_name\u0027],"},{"line_number":362,"context_line":"             user) \u003d user.split(\u0027:\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7adec928_1cd258d2","line":359,"in_reply_to":"9ad9bd40_ea766da3","updated":"2014-05-09 16:06:19.000000000","message":"Done","commit_id":"eeef8770709eb0c6a5b08786c1029bba4e17c4b3"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b503e29065130ea09b79facd1a4fa96898e3d1ce","unresolved":false,"context_lines":[{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    try:"},{"line_number":335,"context_line":"        from keystoneclient.v3 import client as ksclient"},{"line_number":336,"context_line":"        from keystoneclient import exceptions"},{"line_number":337,"context_line":"    except ImportError:"},{"line_number":338,"context_line":"        sys.exit(\u0027\u0027\u0027"},{"line_number":339,"context_line":"Auth version 3 requires python-keystoneclient, install it or use Auth"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_94a27fac","line":336,"updated":"2014-05-14 21:39:28.000000000","message":"Does this means Swift does not have a hard dependency on python-keystoneclient?","commit_id":"e14bf0bd9abb097f187a2005162fdb6cd17e830d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2e0592ba6fba241e9860a4d30c7959dd50432321","unresolved":false,"context_lines":[{"line_number":333,"context_line":""},{"line_number":334,"context_line":"    try:"},{"line_number":335,"context_line":"        from keystoneclient.v3 import client as ksclient"},{"line_number":336,"context_line":"        from keystoneclient import exceptions"},{"line_number":337,"context_line":"    except ImportError:"},{"line_number":338,"context_line":"        sys.exit(\u0027\u0027\u0027"},{"line_number":339,"context_line":"Auth version 3 requires python-keystoneclient, install it or use Auth"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_92e93ab9","line":336,"in_reply_to":"7adec928_94a27fac","updated":"2014-05-20 10:59:18.000000000","message":"yes my understanding is that hard dependency is to be avoided because swiftclient is used independently of openstack with other auth systems.","commit_id":"e14bf0bd9abb097f187a2005162fdb6cd17e830d"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b503e29065130ea09b79facd1a4fa96898e3d1ce","unresolved":false,"context_lines":[{"line_number":341,"context_line":"variables to be set or overridden with -A, -U, or -K.\u0027\u0027\u0027)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":"    try:"},{"line_number":344,"context_line":"        _ksclient \u003d ksclient.Client(username\u003duser,"},{"line_number":345,"context_line":"                                    password\u003dkey,"},{"line_number":346,"context_line":"                                    tenant_name\u003dos_options.get(\u0027tenant_name\u0027),"},{"line_number":347,"context_line":"                                    tenant_id\u003dos_options.get(\u0027tenant_id\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_f4af4392","line":344,"updated":"2014-05-14 21:39:28.000000000","message":"this should be Session and v3 auth plugin","commit_id":"e14bf0bd9abb097f187a2005162fdb6cd17e830d"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"54315ad291a106a18d9a0953fc7a09809c3f36d8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from swiftclient.utils import LengthWrapper"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"AUTH_VERSIONS_V2 \u003d [\u00272.0\u0027, \u00272\u0027, 2]"},{"line_number":39,"context_line":"AUTH_VERSIONS_V3 \u003d [\u00273.0\u0027, \u00273\u0027, 3]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"try:"},{"line_number":42,"context_line":"    from logging import NullHandler"}],"source_content_type":"text/x-python","patch_set":4,"id":"5adbc538_a0dc1476","line":39,"updated":"2014-05-23 23:16:10.000000000","message":"I don\u0027t think you need this. Keystone client can do version discovery.","commit_id":"b484e67d840e3056a0bff99f1a1c80dec0f73a71"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"c89c634a4443c3c8decf51730a0272777b05c0ba","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from swiftclient.utils import LengthWrapper"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"AUTH_VERSIONS_V2 \u003d [\u00272.0\u0027, \u00272\u0027, 2]"},{"line_number":39,"context_line":"AUTH_VERSIONS_V3 \u003d [\u00273.0\u0027, \u00273\u0027, 3]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"try:"},{"line_number":42,"context_line":"    from logging import NullHandler"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_b1994821","line":39,"updated":"2014-06-25 23:05:07.000000000","message":"If these are going to be used as constants, why not use tuples rather then lists?","commit_id":"b484e67d840e3056a0bff99f1a1c80dec0f73a71"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"88b6141c9382dbf2d327a3f3a585a651408856ed","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from swiftclient.utils import LengthWrapper"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"AUTH_VERSIONS_V2 \u003d [\u00272.0\u0027, \u00272\u0027, 2]"},{"line_number":39,"context_line":"AUTH_VERSIONS_V3 \u003d [\u00273.0\u0027, \u00273\u0027, 3]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"try:"},{"line_number":42,"context_line":"    from logging import NullHandler"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_8030419f","line":39,"in_reply_to":"1ae5cdf2_b1994821","updated":"2014-06-27 11:15:26.000000000","message":"Done","commit_id":"b484e67d840e3056a0bff99f1a1c80dec0f73a71"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"84883f701e8017df37c73850bbf1c84ffd8c4890","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from swiftclient.utils import LengthWrapper"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"AUTH_VERSIONS_V2 \u003d [\u00272.0\u0027, \u00272\u0027, 2]"},{"line_number":39,"context_line":"AUTH_VERSIONS_V3 \u003d [\u00273.0\u0027, \u00273\u0027, 3]"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"try:"},{"line_number":42,"context_line":"    from logging import NullHandler"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_d771db78","line":39,"in_reply_to":"5adbc538_a0dc1476","updated":"2014-05-27 10:00:16.000000000","message":"I need these for version-specific behaviour in swifclient independent of keystoneclient. See lines 323 and 363","commit_id":"b484e67d840e3056a0bff99f1a1c80dec0f73a71"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"54315ad291a106a18d9a0953fc7a09809c3f36d8","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        if auth_version in AUTH_VERSIONS_V3:"},{"line_number":291,"context_line":"            from keystoneclient.v3 import client as ksclient"},{"line_number":292,"context_line":"        else:"},{"line_number":293,"context_line":"            from keystoneclient.v2_0 import client as ksclient"},{"line_number":294,"context_line":"        from keystoneclient import exceptions"},{"line_number":295,"context_line":"    except ImportError:"},{"line_number":296,"context_line":"        sys.exit(\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"5adbc538_e0e61c44","line":293,"updated":"2014-05-23 23:16:10.000000000","message":"no need to do this, just let keystoneclient handle version selection","commit_id":"b484e67d840e3056a0bff99f1a1c80dec0f73a71"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"84883f701e8017df37c73850bbf1c84ffd8c4890","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        if auth_version in AUTH_VERSIONS_V3:"},{"line_number":291,"context_line":"            from keystoneclient.v3 import client as ksclient"},{"line_number":292,"context_line":"        else:"},{"line_number":293,"context_line":"            from keystoneclient.v2_0 import client as ksclient"},{"line_number":294,"context_line":"        from keystoneclient import exceptions"},{"line_number":295,"context_line":"    except ImportError:"},{"line_number":296,"context_line":"        sys.exit(\u0027\u0027\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ae8d1ca_b7b9afeb","line":293,"in_reply_to":"5adbc538_e0e61c44","updated":"2014-05-27 10:00:16.000000000","message":"OK, but the problem i have with using keystoneclient.Client is that it is making an extra request to keystone for every invocation of swiftclient (doing API version discovery I think) - i.e. doubling the number of requests from swiftclient to keystone.\n\nI don\u0027t want to introduce that overhead in this patch, that will degrade performance for v2 usage as well.\n\nSo unless there is a way to disable the discovery request, I would like to stick with this approach.","commit_id":"b484e67d840e3056a0bff99f1a1c80dec0f73a71"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"074d3ee8e643919368c80ba6f3c6d76f2b8b049b","unresolved":false,"context_lines":[{"line_number":321,"context_line":"    except exceptions.Unauthorized:"},{"line_number":322,"context_line":"        msg \u003d \u0027Unauthorised. Check username, password and tenant name/id.\u0027"},{"line_number":323,"context_line":"        if auth_version in AUTH_VERSIONS_V3:"},{"line_number":324,"context_line":"            msg \u003d msg + \u0027 Check user and tenant domain name/id.\u0027"},{"line_number":325,"context_line":"        raise ClientException(msg)"},{"line_number":326,"context_line":"    except exceptions.AuthorizationFailure as err:"},{"line_number":327,"context_line":"        raise ClientException(\u0027Authorization Failure. %s\u0027 % err)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_a850f22c","line":324,"updated":"2014-06-26 08:19:04.000000000","message":"Small nitpick only - the error message looks like this:\n\n Unauthorised. Check username, password and tenant name/id. Check user and tenant domain name/id.\n\nNot soure about this, but maybe we can improve this a little bit?","commit_id":"b484e67d840e3056a0bff99f1a1c80dec0f73a71"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"88b6141c9382dbf2d327a3f3a585a651408856ed","unresolved":false,"context_lines":[{"line_number":321,"context_line":"    except exceptions.Unauthorized:"},{"line_number":322,"context_line":"        msg \u003d \u0027Unauthorised. Check username, password and tenant name/id.\u0027"},{"line_number":323,"context_line":"        if auth_version in AUTH_VERSIONS_V3:"},{"line_number":324,"context_line":"            msg \u003d msg + \u0027 Check user and tenant domain name/id.\u0027"},{"line_number":325,"context_line":"        raise ClientException(msg)"},{"line_number":326,"context_line":"    except exceptions.AuthorizationFailure as err:"},{"line_number":327,"context_line":"        raise ClientException(\u0027Authorization Failure. %s\u0027 % err)"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_23d697f2","line":324,"in_reply_to":"1ae5cdf2_a850f22c","updated":"2014-06-27 11:15:26.000000000","message":"Done. Yes, this could be better. Although, it will never be succinct with so many parameters that could be wrong :)","commit_id":"b484e67d840e3056a0bff99f1a1c80dec0f73a71"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"c89c634a4443c3c8decf51730a0272777b05c0ba","unresolved":false,"context_lines":[{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    storage_url, token \u003d None, None"},{"line_number":356,"context_line":"    insecure \u003d kwargs.get(\u0027insecure\u0027, False)"},{"line_number":357,"context_line":"    if auth_version in [\u00271.0\u0027, \u00271\u0027, 1]:"},{"line_number":358,"context_line":"        storage_url, token \u003d get_auth_1_0(auth_url,"},{"line_number":359,"context_line":"                                          user,"},{"line_number":360,"context_line":"                                          key,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_5172c412","line":357,"updated":"2014-06-25 23:05:07.000000000","message":"You have pushed the V2 and V3 versions into variables, why not V1 as well?","commit_id":"b484e67d840e3056a0bff99f1a1c80dec0f73a71"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"88b6141c9382dbf2d327a3f3a585a651408856ed","unresolved":false,"context_lines":[{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    storage_url, token \u003d None, None"},{"line_number":356,"context_line":"    insecure \u003d kwargs.get(\u0027insecure\u0027, False)"},{"line_number":357,"context_line":"    if auth_version in [\u00271.0\u0027, \u00271\u0027, 1]:"},{"line_number":358,"context_line":"        storage_url, token \u003d get_auth_1_0(auth_url,"},{"line_number":359,"context_line":"                                          user,"},{"line_number":360,"context_line":"                                          key,"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_0350bb5c","line":357,"in_reply_to":"1ae5cdf2_5172c412","updated":"2014-06-27 11:15:26.000000000","message":"Done. And made it a tuple.","commit_id":"b484e67d840e3056a0bff99f1a1c80dec0f73a71"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"6e08fa5492795c06d7bf1267130502e2f4c7fe96","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    \"\"\""},{"line_number":283,"context_line":"    Authenticate against a keystone server."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    We are using the keystoneclient library for authentication."},{"line_number":286,"context_line":"    \"\"\""},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    insecure \u003d kwargs.get(\u0027insecure\u0027, False)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1ae5cdf2_7efadbba","line":285,"updated":"2014-06-27 21:03:52.000000000","message":"maybe\n\n    get_keystoneclient_2_0 \u003d get_auth_keystone\n\nto keep the public api mostly stable?  Would that even work?","commit_id":"be44eef803d84524704f96bdb84ca6ef8d262b7e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"ea6897065aa376644c9f588af99d6763c240da2d","unresolved":false,"context_lines":[{"line_number":282,"context_line":"    \"\"\""},{"line_number":283,"context_line":"    Authenticate against a keystone server."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    We are using the keystoneclient library for authentication."},{"line_number":286,"context_line":"    \"\"\""},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"    insecure \u003d kwargs.get(\u0027insecure\u0027, False)"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_e1b8dc2c","line":285,"in_reply_to":"1ae5cdf2_7efadbba","updated":"2014-06-30 15:22:56.000000000","message":"Done. not quite that simple but not far off","commit_id":"be44eef803d84524704f96bdb84ca6ef8d262b7e"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"1da22971cc28ee2f941015fc355062cc9645faf4","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                                    tenant_name\u003dos_options.get(\u0027tenant_name\u0027),"},{"line_number":315,"context_line":"                                    tenant_id\u003dos_options.get(\u0027tenant_id\u0027),"},{"line_number":316,"context_line":"                                    user_id\u003dos_options.get(\u0027user_id\u0027),"},{"line_number":317,"context_line":"                                    user_domain_name\u003d"},{"line_number":318,"context_line":"                                    os_options.get(\u0027user_domain_name\u0027),"},{"line_number":319,"context_line":"                                    user_domain_id\u003d"},{"line_number":320,"context_line":"                                    os_options.get(\u0027user_domain_id\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_9fe1dbfe","line":317,"updated":"2014-07-17 15:44:49.000000000","message":"Would you consider formatting these lines so that they don\u0027t wrap?  Something like:\n\nhttps://gist.github.com/portante/829d64eef6a348773b53","commit_id":"91b29a0207282a098b80e5802a031298f718543a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3f09adf326dc9990b312af65d834612fb2a90204","unresolved":false,"context_lines":[{"line_number":314,"context_line":"                                    tenant_name\u003dos_options.get(\u0027tenant_name\u0027),"},{"line_number":315,"context_line":"                                    tenant_id\u003dos_options.get(\u0027tenant_id\u0027),"},{"line_number":316,"context_line":"                                    user_id\u003dos_options.get(\u0027user_id\u0027),"},{"line_number":317,"context_line":"                                    user_domain_name\u003d"},{"line_number":318,"context_line":"                                    os_options.get(\u0027user_domain_name\u0027),"},{"line_number":319,"context_line":"                                    user_domain_id\u003d"},{"line_number":320,"context_line":"                                    os_options.get(\u0027user_domain_id\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_b10a32d0","line":317,"in_reply_to":"baada198_9fe1dbfe","updated":"2014-07-18 09:38:08.000000000","message":"Yes, that\u0027s much nicer.","commit_id":"91b29a0207282a098b80e5802a031298f718543a"},{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"1da22971cc28ee2f941015fc355062cc9645faf4","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    except exceptions.Unauthorized:"},{"line_number":332,"context_line":"        msg \u003d \u0027Unauthorized. Check username, password and tenant name/id.\u0027"},{"line_number":333,"context_line":"        if auth_version in AUTH_VERSIONS_V3:"},{"line_number":334,"context_line":"            msg \u003d \u0027Unauthorized. Check user name/id, password, \u0027 \\"},{"line_number":335,"context_line":"                  + \u0027tenant name/id and user/tenant domain name/id.\u0027"},{"line_number":336,"context_line":"        raise ClientException(msg)"},{"line_number":337,"context_line":"    except exceptions.AuthorizationFailure as err:"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_5f010369","line":334,"updated":"2014-07-17 15:44:49.000000000","message":"Nit: \"username/id\" to parallel spelling of \"username\" in first message.","commit_id":"91b29a0207282a098b80e5802a031298f718543a"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3f09adf326dc9990b312af65d834612fb2a90204","unresolved":false,"context_lines":[{"line_number":331,"context_line":"    except exceptions.Unauthorized:"},{"line_number":332,"context_line":"        msg \u003d \u0027Unauthorized. Check username, password and tenant name/id.\u0027"},{"line_number":333,"context_line":"        if auth_version in AUTH_VERSIONS_V3:"},{"line_number":334,"context_line":"            msg \u003d \u0027Unauthorized. Check user name/id, password, \u0027 \\"},{"line_number":335,"context_line":"                  + \u0027tenant name/id and user/tenant domain name/id.\u0027"},{"line_number":336,"context_line":"        raise ClientException(msg)"},{"line_number":337,"context_line":"    except exceptions.AuthorizationFailure as err:"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_f16e6aff","line":334,"in_reply_to":"baada198_5f010369","updated":"2014-07-18 09:38:08.000000000","message":"Oh, I debated this with myself :) now user can be specified by name or id I went with the parallel of \u0027tenant name/id\u0027 in the first message, but I agree that there\u0027s an inconsistency.\n\nI\u0027ll change it.\n\n(I actually dislike this message now there are so many possible combinations of credentials, and wondered about simply \u0027Unauthorized. Check credentials.\u0027 !!)","commit_id":"91b29a0207282a098b80e5802a031298f718543a"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"a2225c9c0fe041cd8166c0c403a3b9d33d255e72","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from swiftclient.exceptions import ClientException"},{"line_number":36,"context_line":"from swiftclient.utils import LengthWrapper"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"AUTH_VERSIONS_V1 \u003d (\u00271.0\u0027, \u00271\u0027, 1)"},{"line_number":39,"context_line":"AUTH_VERSIONS_V2 \u003d (\u00272.0\u0027, \u00272\u0027, 2)"},{"line_number":40,"context_line":"AUTH_VERSIONS_V3 \u003d (\u00273.0\u0027, \u00273\u0027, 3)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_741d6f60","line":38,"updated":"2014-08-12 16:49:19.000000000","message":"curious, why the 3 different forms for each version?","commit_id":"cae12940b1bff230381289b732b464d88423fec1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3ab1f8e3d3d00b8827dc85cb2c2ac15a38e4abd0","unresolved":false,"context_lines":[{"line_number":35,"context_line":"from swiftclient.exceptions import ClientException"},{"line_number":36,"context_line":"from swiftclient.utils import LengthWrapper"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"AUTH_VERSIONS_V1 \u003d (\u00271.0\u0027, \u00271\u0027, 1)"},{"line_number":39,"context_line":"AUTH_VERSIONS_V2 \u003d (\u00272.0\u0027, \u00272\u0027, 2)"},{"line_number":40,"context_line":"AUTH_VERSIONS_V3 \u003d (\u00273.0\u0027, \u00273\u0027, 3)"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_2a4b9286","line":38,"in_reply_to":"baada198_741d6f60","updated":"2014-08-12 18:35:19.000000000","message":"That\u0027s what was there before for v1 and v2 - see line 338, 344 in base version so have to stick with it. I followed suit for v3 - I guess it makes for a tolerant API!","commit_id":"cae12940b1bff230381289b732b464d88423fec1"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"a2225c9c0fe041cd8166c0c403a3b9d33d255e72","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    \"\"\""},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    insecure \u003d kwargs.get(\u0027insecure\u0027, False)"},{"line_number":296,"context_line":"    auth_version \u003d kwargs.get(\u0027auth_version\u0027, \u00272.0\u0027)"},{"line_number":297,"context_line":"    debug \u003d logger.isEnabledFor(logging.DEBUG) and True or False"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_b4c2a732","line":296,"updated":"2014-08-12 16:49:19.000000000","message":"no biggy but do you need to set the default to 2 here?  Looking at get_auth() if looks like a default of 1 is used if nothing is supplied and you won\u0027t get here unless its a 2 or 3 anyway","commit_id":"cae12940b1bff230381289b732b464d88423fec1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3ab1f8e3d3d00b8827dc85cb2c2ac15a38e4abd0","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    \"\"\""},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    insecure \u003d kwargs.get(\u0027insecure\u0027, False)"},{"line_number":296,"context_line":"    auth_version \u003d kwargs.get(\u0027auth_version\u0027, \u00272.0\u0027)"},{"line_number":297,"context_line":"    debug \u003d logger.isEnabledFor(logging.DEBUG) and True or False"},{"line_number":298,"context_line":""},{"line_number":299,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_aa37a249","line":296,"in_reply_to":"baada198_b4c2a732","updated":"2014-08-12 18:35:19.000000000","message":"yes, i guess its not necessary. will fix if another change is needed.","commit_id":"cae12940b1bff230381289b732b464d88423fec1"},{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"a2225c9c0fe041cd8166c0c403a3b9d33d255e72","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        # We are handling a special use case here where the user argument"},{"line_number":379,"context_line":"        # specifies both the user name and tenant name in the form tenant:user"},{"line_number":380,"context_line":"        if user and not kwargs.get(\u0027tenant_name\u0027) and \u0027:\u0027 in user:"},{"line_number":381,"context_line":"            (os_options[\u0027tenant_name\u0027],"},{"line_number":382,"context_line":"             user) \u003d user.split(\u0027:\u0027)"},{"line_number":383,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_b4bc6708","line":380,"updated":"2014-08-12 16:49:19.000000000","message":"was there a failure here before if user wasn\u0027t specified?","commit_id":"cae12940b1bff230381289b732b464d88423fec1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3ab1f8e3d3d00b8827dc85cb2c2ac15a38e4abd0","unresolved":false,"context_lines":[{"line_number":377,"context_line":""},{"line_number":378,"context_line":"        # We are handling a special use case here where the user argument"},{"line_number":379,"context_line":"        # specifies both the user name and tenant name in the form tenant:user"},{"line_number":380,"context_line":"        if user and not kwargs.get(\u0027tenant_name\u0027) and \u0027:\u0027 in user:"},{"line_number":381,"context_line":"            (os_options[\u0027tenant_name\u0027],"},{"line_number":382,"context_line":"             user) \u003d user.split(\u0027:\u0027)"},{"line_number":383,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_eaf0ba61","line":380,"in_reply_to":"baada198_b4bc6708","updated":"2014-08-12 18:35:19.000000000","message":"Previously user (\u003d\u003dusername) was always required and checked for in shell.py line 1390. Now it may not be set if user ID is supplied instead, hence adding the check for existence here.","commit_id":"cae12940b1bff230381289b732b464d88423fec1"}],"swiftclient/shell.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b503e29065130ea09b79facd1a4fa96898e3d1ce","unresolved":false,"context_lines":[{"line_number":1315,"context_line":"    if enforce_requires:"},{"line_number":1316,"context_line":"        if options.auth_version \u003d\u003d \u00273\u0027:"},{"line_number":1317,"context_line":"            if not (options.auth and options.key"},{"line_number":1318,"context_line":"                    and (options.user or options.os_user_id)):"},{"line_number":1319,"context_line":"                exit(\u0027Auth version 3 requires OS_AUTH_URL, OS_PASSWORD and \u0027 +"},{"line_number":1320,"context_line":"                     \u0027either OS_USERNAME or OS_USER_ID to be set or \u0027 +"},{"line_number":1321,"context_line":"                     \u0027overriden with --os-auth-url, --os-password, \u0027 +"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_14402fa4","line":1318,"updated":"2014-05-14 21:39:28.000000000","message":"in Keystone v3, the combination of user name and domain name or domain ID uniquely identity a user. Same goes with tenant.","commit_id":"e14bf0bd9abb097f187a2005162fdb6cd17e830d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2e0592ba6fba241e9860a4d30c7959dd50432321","unresolved":false,"context_lines":[{"line_number":1315,"context_line":"    if enforce_requires:"},{"line_number":1316,"context_line":"        if options.auth_version \u003d\u003d \u00273\u0027:"},{"line_number":1317,"context_line":"            if not (options.auth and options.key"},{"line_number":1318,"context_line":"                    and (options.user or options.os_user_id)):"},{"line_number":1319,"context_line":"                exit(\u0027Auth version 3 requires OS_AUTH_URL, OS_PASSWORD and \u0027 +"},{"line_number":1320,"context_line":"                     \u0027either OS_USERNAME or OS_USER_ID to be set or \u0027 +"},{"line_number":1321,"context_line":"                     \u0027overriden with --os-auth-url, --os-password, \u0027 +"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_d3111a05","line":1318,"in_reply_to":"7adec928_14402fa4","updated":"2014-05-20 10:59:18.000000000","message":"I am deliberately not requiring user_domain_name here because I believe keystone will accept just username and attempt to authenticate the user in the default domain.\nSo either username or user_id is necessary here, (although maybe not sufficient).\n\nIn client.py a hint \u0027check domain name/id\u0027 is returned if auth fails.","commit_id":"e14bf0bd9abb097f187a2005162fdb6cd17e830d"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"b503e29065130ea09b79facd1a4fa96898e3d1ce","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"                      help\u003d\u0027OpenStack username. Defaults to env[OS_USERNAME].\u0027)"},{"line_number":1437,"context_line":"    parser.add_option(\u0027--os_username\u0027,"},{"line_number":1438,"context_line":"                      help\u003dSUPPRESS_HELP)"},{"line_number":1439,"context_line":"    parser.add_option(\u0027--os-user-id\u0027,"},{"line_number":1440,"context_line":"                      metavar\u003d\u0027\u003cauth-user-id\u003e\u0027,"},{"line_number":1441,"context_line":"                      default\u003denviron.get(\u0027OS_USER_ID\u0027),"},{"line_number":1442,"context_line":"                      help\u003d\u0027OpenStack user ID. \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_343b6b39","line":1439,"updated":"2014-05-14 21:39:28.000000000","message":"these may be provided by keystone client","commit_id":"e14bf0bd9abb097f187a2005162fdb6cd17e830d"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"2e0592ba6fba241e9860a4d30c7959dd50432321","unresolved":false,"context_lines":[{"line_number":1436,"context_line":"                      help\u003d\u0027OpenStack username. Defaults to env[OS_USERNAME].\u0027)"},{"line_number":1437,"context_line":"    parser.add_option(\u0027--os_username\u0027,"},{"line_number":1438,"context_line":"                      help\u003dSUPPRESS_HELP)"},{"line_number":1439,"context_line":"    parser.add_option(\u0027--os-user-id\u0027,"},{"line_number":1440,"context_line":"                      metavar\u003d\u0027\u003cauth-user-id\u003e\u0027,"},{"line_number":1441,"context_line":"                      default\u003denviron.get(\u0027OS_USER_ID\u0027),"},{"line_number":1442,"context_line":"                      help\u003d\u0027OpenStack user ID. \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"7adec928_d3283a35","line":1439,"in_reply_to":"7adec928_343b6b39","updated":"2014-05-20 10:59:18.000000000","message":"not sure what you mean here - we need to swiftclient CLI to accept these options and pass them through to keystoneclient","commit_id":"e14bf0bd9abb097f187a2005162fdb6cd17e830d"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"074d3ee8e643919368c80ba6f3c6d76f2b8b049b","unresolved":false,"context_lines":[{"line_number":1424,"context_line":"                      default\u003denviron.get(\u0027ST_AUTH\u0027),"},{"line_number":1425,"context_line":"                      help\u003d\u0027URL for obtaining an auth token.\u0027)"},{"line_number":1426,"context_line":"    parser.add_option(\u0027-V\u0027, \u0027--auth-version\u0027,"},{"line_number":1427,"context_line":"                      dest\u003d\u0027auth_version\u0027,"},{"line_number":1428,"context_line":"                      default\u003denviron.get(\u0027ST_AUTH_VERSION\u0027, \u00271.0\u0027),"},{"line_number":1429,"context_line":"                      type\u003dstr,"},{"line_number":1430,"context_line":"                      help\u003d\u0027Specify a version for authentication. \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_d930aea0","line":1427,"updated":"2014-06-26 08:19:04.000000000","message":"How about something like\n \n default\u003denviron.get(\u0027ST_AUTH_VERSION\u0027, (environ.get(\u0027OS_AUTH_VERSION\u0027, \u00271.0\u0027)),","commit_id":"b484e67d840e3056a0bff99f1a1c80dec0f73a71"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"88b6141c9382dbf2d327a3f3a585a651408856ed","unresolved":false,"context_lines":[{"line_number":1424,"context_line":"                      default\u003denviron.get(\u0027ST_AUTH\u0027),"},{"line_number":1425,"context_line":"                      help\u003d\u0027URL for obtaining an auth token.\u0027)"},{"line_number":1426,"context_line":"    parser.add_option(\u0027-V\u0027, \u0027--auth-version\u0027,"},{"line_number":1427,"context_line":"                      dest\u003d\u0027auth_version\u0027,"},{"line_number":1428,"context_line":"                      default\u003denviron.get(\u0027ST_AUTH_VERSION\u0027, \u00271.0\u0027),"},{"line_number":1429,"context_line":"                      type\u003dstr,"},{"line_number":1430,"context_line":"                      help\u003d\u0027Specify a version for authentication. \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"1ae5cdf2_a3e3879e","line":1427,"in_reply_to":"1ae5cdf2_d930aea0","updated":"2014-06-27 11:15:26.000000000","message":"Done. nice!","commit_id":"b484e67d840e3056a0bff99f1a1c80dec0f73a71"}],"tests/sample.conf":[{"author":{"_account_id":7479,"name":"paul luse","email":"paul.e.luse@intel.com","username":"peluse"},"change_message_id":"a2225c9c0fe041cd8166c0c403a3b9d33d255e72","unresolved":false,"context_lines":[{"line_number":5,"context_line":"auth_ssl \u003d no"},{"line_number":6,"context_line":"auth_prefix \u003d /auth/"},{"line_number":7,"context_line":"## sample config for Swift with Keystone v2 API"},{"line_number":8,"context_line":"# For keystone v3 change auth_version to 3 and auth_prefix to /v3/"},{"line_number":9,"context_line":"#auth_version \u003d 2"},{"line_number":10,"context_line":"#auth_host \u003d localhost"},{"line_number":11,"context_line":"#auth_port \u003d 5000"}],"source_content_type":"text/plain","patch_set":8,"id":"baada198_948683b8","line":8,"updated":"2014-08-12 16:49:19.000000000","message":"hmm, the use of (or not) the auth_prefix doesn\u0027t seem to make a difference for me","commit_id":"cae12940b1bff230381289b732b464d88423fec1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"3ab1f8e3d3d00b8827dc85cb2c2ac15a38e4abd0","unresolved":false,"context_lines":[{"line_number":5,"context_line":"auth_ssl \u003d no"},{"line_number":6,"context_line":"auth_prefix \u003d /auth/"},{"line_number":7,"context_line":"## sample config for Swift with Keystone v2 API"},{"line_number":8,"context_line":"# For keystone v3 change auth_version to 3 and auth_prefix to /v3/"},{"line_number":9,"context_line":"#auth_version \u003d 2"},{"line_number":10,"context_line":"#auth_host \u003d localhost"},{"line_number":11,"context_line":"#auth_port \u003d 5000"}],"source_content_type":"text/plain","patch_set":8,"id":"baada198_7be63be9","line":8,"in_reply_to":"baada198_948683b8","updated":"2014-08-12 18:35:19.000000000","message":"hmm, i can\u0027t get the functests to run _without_ auth_prefix set ? the func test config is setup same as for swift func tests, will look in file specified by \u0027SWIFT_TEST_CONFIG_FILE\u0027, or default to \u0027/etc/swift/test.conf\u0027","commit_id":"cae12940b1bff230381289b732b464d88423fec1"}]}
