)]}'
{"tempest/lib/auth.py":[{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"d0d1be06b84b89c3e5e1b42839f881b28d77f0ca","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        :param credentials: credentials for authentication"},{"line_number":75,"context_line":"        :param scope: the default scope to be used by the credential providers"},{"line_number":76,"context_line":"                      when requesting a token. It\u0027s only applicable to some"},{"line_number":77,"context_line":"                      AuthProvider implementations, valid values depend"},{"line_number":78,"context_line":"                      on the AuthProvider class implementation."},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        if self.check_credentials(credentials):"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_81cfd427","line":77,"updated":"2016-05-17 11:26:53.000000000","message":"You should enumerate the full set of valid scopes here as well.","commit_id":"2d3403a6a6e20ddb03d0de19bbc3f7d2a1e9600c"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"28036f555dddaf1d55eb0e392781d42e58a1f6da","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        :param credentials: credentials for authentication"},{"line_number":75,"context_line":"        :param scope: the default scope to be used by the credential providers"},{"line_number":76,"context_line":"                      when requesting a token. It\u0027s only applicable to some"},{"line_number":77,"context_line":"                      AuthProvider implementations, valid values depend"},{"line_number":78,"context_line":"                      on the AuthProvider class implementation."},{"line_number":79,"context_line":"        \"\"\""},{"line_number":80,"context_line":"        if self.check_credentials(credentials):"}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_e57dd2e8","line":77,"in_reply_to":"dab17558_81cfd427","updated":"2016-05-18 09:46:43.000000000","message":"Yes, I will add that.","commit_id":"2d3403a6a6e20ddb03d0de19bbc3f7d2a1e9600c"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"48c3f9b0f988a801d492c738fa95635b60d3c7f6","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                raise TypeError(\"credentials object is of type %s, which is\""},{"line_number":93,"context_line":"                                \" not a valid Credentials object type.\" %"},{"line_number":94,"context_line":"                                credentials.__class__.__name__)"},{"line_number":95,"context_line":"        self.scope \u003d scope"},{"line_number":96,"context_line":"        self.cache \u003d None"},{"line_number":97,"context_line":"        self.alt_auth_data \u003d None"},{"line_number":98,"context_line":"        self.alt_part \u003d None"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_87bfedce","line":95,"updated":"2016-05-17 11:15:56.000000000","message":"I guess it would be better to define this as property?\nSo would be something like:\n   self._scope \u003d scope\n   \n   @property\n   def scope(self)\n       return self._scope","commit_id":"2d3403a6a6e20ddb03d0de19bbc3f7d2a1e9600c"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"28036f555dddaf1d55eb0e392781d42e58a1f6da","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                raise TypeError(\"credentials object is of type %s, which is\""},{"line_number":93,"context_line":"                                \" not a valid Credentials object type.\" %"},{"line_number":94,"context_line":"                                credentials.__class__.__name__)"},{"line_number":95,"context_line":"        self.scope \u003d scope"},{"line_number":96,"context_line":"        self.cache \u003d None"},{"line_number":97,"context_line":"        self.alt_auth_data \u003d None"},{"line_number":98,"context_line":"        self.alt_part \u003d None"}],"source_content_type":"text/x-python","patch_set":12,"id":"bab6814e_85268614","line":95,"in_reply_to":"dab17558_87bfedce","updated":"2016-05-18 09:46:43.000000000","message":"Good idea - I\u0027ll do that","commit_id":"2d3403a6a6e20ddb03d0de19bbc3f7d2a1e9600c"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"48c3f9b0f988a801d492c738fa95635b60d3c7f6","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        \"\"\"Extracts the base_url based on provided filters\"\"\""},{"line_number":229,"context_line":"        return"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def set_scope(self, scope\u003dNone):"},{"line_number":232,"context_line":"        \"\"\"Set the scope to be used in token requests"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":"        :param scope: scope to be used. If the scope is different, clear caches"}],"source_content_type":"text/x-python","patch_set":12,"id":"dab17558_87940d37","line":231,"updated":"2016-05-17 11:15:56.000000000","message":"And here we could use the setter:\n\n     @scope.setter\n     def scope(self, value)\n           if self._scope !\u003d scope\n           ...","commit_id":"2d3403a6a6e20ddb03d0de19bbc3f7d2a1e9600c"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"1726c81843060d9c4b66474a36689312c9ffe22a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"class AuthProvider(object):"},{"line_number":69,"context_line":"    \"\"\"Provide authentication\"\"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def __init__(self, credentials, scope\u003dNone):"},{"line_number":72,"context_line":"        \"\"\"Auth provider __init__"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        :param credentials: credentials for authentication"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_99219450","line":71,"updated":"2016-05-19 08:29:22.000000000","message":"Why not use \u0027project\u0027 as a default option ?","commit_id":"ac4a699dde4c85f2e76bd013b10649baae4215e6"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"31f553cef722fb11771338384861d01c683022fd","unresolved":false,"context_lines":[{"line_number":68,"context_line":"class AuthProvider(object):"},{"line_number":69,"context_line":"    \"\"\"Provide authentication\"\"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def __init__(self, credentials, scope\u003dNone):"},{"line_number":72,"context_line":"        \"\"\"Auth provider __init__"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        :param credentials: credentials for authentication"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_f461c5a9","line":71,"in_reply_to":"bab6814e_99219450","updated":"2016-05-19 08:56:15.000000000","message":"Maybe because \"valid values depend on the AuthProvider class implementation\" so maybe \"project\" doesn\u0027t make sense everywhere/everytime.","commit_id":"ac4a699dde4c85f2e76bd013b10649baae4215e6"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"d8d7004a00c6e606485b4e96146ac935f617050b","unresolved":false,"context_lines":[{"line_number":68,"context_line":"class AuthProvider(object):"},{"line_number":69,"context_line":"    \"\"\"Provide authentication\"\"\""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def __init__(self, credentials, scope\u003dNone):"},{"line_number":72,"context_line":"        \"\"\"Auth provider __init__"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        :param credentials: credentials for authentication"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_f869a526","line":71,"in_reply_to":"bab6814e_f461c5a9","updated":"2016-05-19 14:09:45.000000000","message":"Indeed.","commit_id":"ac4a699dde4c85f2e76bd013b10649baae4215e6"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"1726c81843060d9c4b66474a36689312c9ffe22a","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        return dict("},{"line_number":340,"context_line":"            user\u003dself.credentials.username,"},{"line_number":341,"context_line":"            password\u003dself.credentials.password,"},{"line_number":342,"context_line":"            tenant\u003dself.credentials.tenant_name,"},{"line_number":343,"context_line":"            auth_data\u003dTrue)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def _fill_credentials(self, auth_data_body):"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_b9ed78f1","line":342,"updated":"2016-05-19 08:29:22.000000000","message":"As I remember you can have unscoped token also in keystone V2, is it planned to be supported ?","commit_id":"ac4a699dde4c85f2e76bd013b10649baae4215e6"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"d8d7004a00c6e606485b4e96146ac935f617050b","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        return dict("},{"line_number":340,"context_line":"            user\u003dself.credentials.username,"},{"line_number":341,"context_line":"            password\u003dself.credentials.password,"},{"line_number":342,"context_line":"            tenant\u003dself.credentials.tenant_name,"},{"line_number":343,"context_line":"            auth_data\u003dTrue)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def _fill_credentials(self, auth_data_body):"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_ba639c40","line":342,"in_reply_to":"bab6814e_946152ab","updated":"2016-05-19 14:09:45.000000000","message":"TBH I didn\u0027t bother implementing and testing unscoped token for v2 as v2 is now descoped and I don\u0027t think we really need to go changing the v2 part of the implementation.","commit_id":"ac4a699dde4c85f2e76bd013b10649baae4215e6"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"4420b1b2e3231656a227791bbe5be86e1be513f8","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        return dict("},{"line_number":340,"context_line":"            user\u003dself.credentials.username,"},{"line_number":341,"context_line":"            password\u003dself.credentials.password,"},{"line_number":342,"context_line":"            tenant\u003dself.credentials.tenant_name,"},{"line_number":343,"context_line":"            auth_data\u003dTrue)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def _fill_credentials(self, auth_data_body):"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_946152ab","line":342,"in_reply_to":"bab6814e_947dd91e","updated":"2016-05-19 10:36:20.000000000","message":"AFAIK, If you specify the tenant it will be project scoped.","commit_id":"ac4a699dde4c85f2e76bd013b10649baae4215e6"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"31f553cef722fb11771338384861d01c683022fd","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        return dict("},{"line_number":340,"context_line":"            user\u003dself.credentials.username,"},{"line_number":341,"context_line":"            password\u003dself.credentials.password,"},{"line_number":342,"context_line":"            tenant\u003dself.credentials.tenant_name,"},{"line_number":343,"context_line":"            auth_data\u003dTrue)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def _fill_credentials(self, auth_data_body):"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_947dd91e","line":342,"in_reply_to":"bab6814e_b9ed78f1","updated":"2016-05-19 08:56:15.000000000","message":"It\u0027s assumed that scope\u003dNone is the same as unscoped token, so yes it\u0027s supported (that\u0027s my understanding, not 100% sure though).","commit_id":"ac4a699dde4c85f2e76bd013b10649baae4215e6"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"e925079615a7fa23e2d3a2a13cd45d154a9afe61","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        return dict("},{"line_number":340,"context_line":"            user\u003dself.credentials.username,"},{"line_number":341,"context_line":"            password\u003dself.credentials.password,"},{"line_number":342,"context_line":"            tenant\u003dself.credentials.tenant_name,"},{"line_number":343,"context_line":"            auth_data\u003dTrue)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def _fill_credentials(self, auth_data_body):"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_ce9fb84e","line":342,"in_reply_to":"bab6814e_ba639c40","updated":"2016-05-19 15:21:50.000000000","message":"So this provider is able to support only the \u0027project\u0027 scoped tokens. Does it needs to commit suicide in case of anything else requested ?","commit_id":"ac4a699dde4c85f2e76bd013b10649baae4215e6"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"7d5422154ebdf08ea624a71e70a10f78d2043573","unresolved":false,"context_lines":[{"line_number":339,"context_line":"        return dict("},{"line_number":340,"context_line":"            user\u003dself.credentials.username,"},{"line_number":341,"context_line":"            password\u003dself.credentials.password,"},{"line_number":342,"context_line":"            tenant\u003dself.credentials.tenant_name,"},{"line_number":343,"context_line":"            auth_data\u003dTrue)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def _fill_credentials(self, auth_data_body):"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_0064dde1","line":342,"in_reply_to":"bab6814e_ce9fb84e","updated":"2016-05-19 20:05:22.000000000","message":"That\u0027s perhaps a clearer behaviour, I can do that.","commit_id":"ac4a699dde4c85f2e76bd013b10649baae4215e6"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"31f553cef722fb11771338384861d01c683022fd","unresolved":false,"context_lines":[{"line_number":405,"context_line":"        \"\"\"Overrides the scope default to \u0027project\u0027"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        Most clients and most uses cases in tests expect a project scope."},{"line_number":408,"context_line":"        The exception are identity admin clients which will use a domain"},{"line_number":409,"context_line":"        scoped token."},{"line_number":410,"context_line":"        \"\"\""},{"line_number":411,"context_line":"        # NOTE(andreaf) The scope must be set to project to ensure backward"}],"source_content_type":"text/x-python","patch_set":14,"id":"bab6814e_b4729d47","line":408,"updated":"2016-05-19 08:56:15.000000000","message":"The exceptionS","commit_id":"ac4a699dde4c85f2e76bd013b10649baae4215e6"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"f50ce0af63c74debdde744772f92bb90f2bb28bf","unresolved":false,"context_lines":[{"line_number":411,"context_line":"class KeystoneV3AuthProvider(KeystoneAuthProvider):"},{"line_number":412,"context_line":"    \"\"\"Provides authentication based on the Identity V3 API\"\"\""},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"    SCOPES \u003d set([\u0027project\u0027, \u0027domain\u0027, \u0027unscoped\u0027, None])"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def _auth_client(self, auth_url):"},{"line_number":417,"context_line":"        return json_v3id.V3TokenClient("}],"source_content_type":"text/x-python","patch_set":15,"id":"bab6814e_0895023e","line":414,"updated":"2016-05-20 12:32:10.000000000","message":"Both \u0027unscoped\u0027 and None supported,\nDo we really want to support None ?","commit_id":"485532c20e70a313243c965c0f5ae4460631e33a"}],"tempest/tests/lib/test_auth.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"9a0c5e06a3f1727ed727ed8e88d36e061bb8c88c","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    def test_delete_auth_data_property_through_deleter(self):"},{"line_number":90,"context_line":"        self.auth_provider.cache \u003d \u0027foo\u0027"},{"line_number":91,"context_line":"        del self.auth_provider.auth_data"},{"line_number":92,"context_line":"        self.assertEqual(self.auth_provider.cache, None)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def test_delete_auth_data_property_through_clear_auth(self):"},{"line_number":95,"context_line":"        self.auth_provider.cache \u003d \u0027foo\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_92c3d656","line":92,"updated":"2016-05-10 16:11:22.000000000","message":"Why this change ? assertIsNone seems more expressive to me.","commit_id":"34a54b60b8131be3d1939bdf89772e5b5244e14e"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"eeb16a29233156afbd5e64a599c63589b46b0305","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    def test_delete_auth_data_property_through_deleter(self):"},{"line_number":90,"context_line":"        self.auth_provider.cache \u003d \u0027foo\u0027"},{"line_number":91,"context_line":"        del self.auth_provider.auth_data"},{"line_number":92,"context_line":"        self.assertEqual(self.auth_provider.cache, None)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def test_delete_auth_data_property_through_clear_auth(self):"},{"line_number":95,"context_line":"        self.auth_provider.cache \u003d \u0027foo\u0027"}],"source_content_type":"text/x-python","patch_set":11,"id":"dab17558_f7efa11b","line":92,"in_reply_to":"dab17558_92c3d656","updated":"2016-05-10 22:35:20.000000000","message":"oh good catch, I changed it and then changed it back but the wrong way, I\u0027ll fix it.","commit_id":"34a54b60b8131be3d1939bdf89772e5b5244e14e"}]}
