)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"272dddb107ab78c276fa912a20472cc89fda8ee2","unresolved":false,"context_lines":[{"line_number":25,"context_line":"- manager.Manager is moved to manager_lib.Manager and does not"},{"line_number":26,"context_line":"  depend on CONF anymore, nor on any tempest unstable class."},{"line_number":27,"context_line":"  It does not provide any client yet."},{"line_number":28,"context_line":"  Add unit test coverage for this class."},{"line_number":29,"context_line":"- manager.Manager is still provided with backward compatible"},{"line_number":30,"context_line":"  interface for plugins benefit."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"7aa08908_3861ada9","line":28,"updated":"2016-06-15 17:20:44.000000000","message":"So I\u0027m confused by this why isn\u0027t lib_manager actually a lib interface?","commit_id":"4825b32fc8dac6d230faf2c10b986744585f9ae8"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"08634f8817d245ea83fefbfa406b2faf868562b9","unresolved":false,"context_lines":[{"line_number":25,"context_line":"- manager.Manager is moved to manager_lib.Manager and does not"},{"line_number":26,"context_line":"  depend on CONF anymore, nor on any tempest unstable class."},{"line_number":27,"context_line":"  It does not provide any client yet."},{"line_number":28,"context_line":"  Add unit test coverage for this class."},{"line_number":29,"context_line":"- manager.Manager is still provided with backward compatible"},{"line_number":30,"context_line":"  interface for plugins benefit."},{"line_number":31,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"7aa08908_dbf6a38f","line":28,"in_reply_to":"7aa08908_3861ada9","updated":"2016-06-15 17:46:15.000000000","message":"The reason is that I\u0027d like to let this class settle down a bit before I commit to maintain backward compatibility on it. First at least complete this series of patches and get feedback from several folks.","commit_id":"4825b32fc8dac6d230faf2c10b986744585f9ae8"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1bad2fb8c8d812c9423ea6e74da5187d6c5c79ac","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Since plugins already import both manager.Manager and"},{"line_number":18,"context_line":"clients.Manager, we maintain for now both classes with their names."},{"line_number":19,"context_line":"The plan is to migrate the 6 core service client groups to"},{"line_number":20,"context_line":"manager.Manager, so that those clients are available to all tests"},{"line_number":21,"context_line":"along with plugin clients. That requires a few steps. I\u0027m doing"},{"line_number":22,"context_line":"changes in clients.Manager for now so that it\u0027s easier to review."},{"line_number":23,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"3aaa91ec_533d56ba","line":20,"updated":"2016-06-22 15:43:01.000000000","message":"I thought we deprecated manager.Manager in this patch? Is this supposed to be clients.Manager?","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6a80ab04c1d6c75ce72c4a1afe6cc4ae1397d98f","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Since plugins already import both manager.Manager and"},{"line_number":18,"context_line":"clients.Manager, we maintain for now both classes with their names."},{"line_number":19,"context_line":"The plan is to migrate the 6 core service client groups to"},{"line_number":20,"context_line":"manager.Manager, so that those clients are available to all tests"},{"line_number":21,"context_line":"along with plugin clients. That requires a few steps. I\u0027m doing"},{"line_number":22,"context_line":"changes in clients.Manager for now so that it\u0027s easier to review."},{"line_number":23,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"3aaa91ec_195ac550","line":20,"in_reply_to":"3aaa91ec_533d56ba","updated":"2016-06-22 20:00:02.000000000","message":"good catch, this should be service_clients.ServiceClients","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1bad2fb8c8d812c9423ea6e74da5187d6c5c79ac","unresolved":false,"context_lines":[{"line_number":22,"context_line":"changes in clients.Manager for now so that it\u0027s easier to review."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"The result of this first step is:"},{"line_number":25,"context_line":"- manager.Manager is moved to manager_lib.Manager and does not"},{"line_number":26,"context_line":"  depend on CONF anymore, nor on any tempest unstable class."},{"line_number":27,"context_line":"  It does not provide any client yet."},{"line_number":28,"context_line":"  Add unit test coverage for this class."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"3aaa91ec_b34c7a71","line":25,"updated":"2016-06-22 15:43:01.000000000","message":"isn\u0027t this service_clients.ServiceClients","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6a80ab04c1d6c75ce72c4a1afe6cc4ae1397d98f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"changes in clients.Manager for now so that it\u0027s easier to review."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"The result of this first step is:"},{"line_number":25,"context_line":"- manager.Manager is moved to manager_lib.Manager and does not"},{"line_number":26,"context_line":"  depend on CONF anymore, nor on any tempest unstable class."},{"line_number":27,"context_line":"  It does not provide any client yet."},{"line_number":28,"context_line":"  Add unit test coverage for this class."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"3aaa91ec_7959495a","line":25,"in_reply_to":"3aaa91ec_b34c7a71","updated":"2016-06-22 20:00:02.000000000","message":"Yes","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1bad2fb8c8d812c9423ea6e74da5187d6c5c79ac","unresolved":false,"context_lines":[{"line_number":26,"context_line":"  depend on CONF anymore, nor on any tempest unstable class."},{"line_number":27,"context_line":"  It does not provide any client yet."},{"line_number":28,"context_line":"  Add unit test coverage for this class."},{"line_number":29,"context_line":"- manager.Manager is still provided with backward compatible"},{"line_number":30,"context_line":"  interface for plugins benefit."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Change-Id: Ic9ccc7037d15cdd4c6f1749eaeda13d4e7ee0114"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"3aaa91ec_9347be4a","line":29,"updated":"2016-06-22 15:43:01.000000000","message":"I would stress temporary personally","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6a80ab04c1d6c75ce72c4a1afe6cc4ae1397d98f","unresolved":false,"context_lines":[{"line_number":26,"context_line":"  depend on CONF anymore, nor on any tempest unstable class."},{"line_number":27,"context_line":"  It does not provide any client yet."},{"line_number":28,"context_line":"  Add unit test coverage for this class."},{"line_number":29,"context_line":"- manager.Manager is still provided with backward compatible"},{"line_number":30,"context_line":"  interface for plugins benefit."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Change-Id: Ic9ccc7037d15cdd4c6f1749eaeda13d4e7ee0114"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"3aaa91ec_59544d20","line":29,"in_reply_to":"3aaa91ec_9347be4a","updated":"2016-06-22 20:00:02.000000000","message":"Done","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"}],"tempest/clients.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"09c423f0f85135b89e177cf67f7118cd344e2360","unresolved":false,"context_lines":[{"line_number":560,"context_line":"        return auth.KeystoneV2AuthProvider, CONF.identity.uri"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"def get_auth_provider(credentials, pre_auth\u003dFalse, scope\u003d\u0027project\u0027):"},{"line_number":564,"context_line":"    default_params \u003d {"},{"line_number":565,"context_line":"        \u0027disable_ssl_certificate_validation\u0027:"},{"line_number":566,"context_line":"            CONF.identity.disable_ssl_certificate_validation,"},{"line_number":567,"context_line":"        \u0027ca_certs\u0027: CONF.identity.ca_certificates_file,"},{"line_number":568,"context_line":"        \u0027trace_requests\u0027: CONF.debug.trace_requests"},{"line_number":569,"context_line":"    }"},{"line_number":570,"context_line":"    if credentials is None:"},{"line_number":571,"context_line":"        raise exceptions.InvalidCredentials("},{"line_number":572,"context_line":"            \u0027Credentials must be specified\u0027)"},{"line_number":573,"context_line":"    auth_provider_class, auth_url \u003d get_auth_provider_class("},{"line_number":574,"context_line":"        credentials)"},{"line_number":575,"context_line":"    _auth_provider \u003d auth_provider_class(credentials, auth_url,"},{"line_number":576,"context_line":"                                         scope\u003dscope,"},{"line_number":577,"context_line":"                                         **default_params)"},{"line_number":578,"context_line":"    if pre_auth:"},{"line_number":579,"context_line":"        _auth_provider.set_auth()"},{"line_number":580,"context_line":"    return _auth_provider"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a9d85d2_6520c14a","line":580,"range":{"start_line":563,"start_character":0,"end_line":580,"end_character":25},"updated":"2016-06-20 05:09:19.000000000","message":"do we need this here ? it can be kept in manager.Manager for plugin usage till we have interface in lib.","commit_id":"208e0206aa9818f6efd937f04da85cbebed2cff5"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"8af38709c2102a2a0d34d87731ac63df6bea08cb","unresolved":false,"context_lines":[{"line_number":560,"context_line":"        return auth.KeystoneV2AuthProvider, CONF.identity.uri"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"def get_auth_provider(credentials, pre_auth\u003dFalse, scope\u003d\u0027project\u0027):"},{"line_number":564,"context_line":"    default_params \u003d {"},{"line_number":565,"context_line":"        \u0027disable_ssl_certificate_validation\u0027:"},{"line_number":566,"context_line":"            CONF.identity.disable_ssl_certificate_validation,"},{"line_number":567,"context_line":"        \u0027ca_certs\u0027: CONF.identity.ca_certificates_file,"},{"line_number":568,"context_line":"        \u0027trace_requests\u0027: CONF.debug.trace_requests"},{"line_number":569,"context_line":"    }"},{"line_number":570,"context_line":"    if credentials is None:"},{"line_number":571,"context_line":"        raise exceptions.InvalidCredentials("},{"line_number":572,"context_line":"            \u0027Credentials must be specified\u0027)"},{"line_number":573,"context_line":"    auth_provider_class, auth_url \u003d get_auth_provider_class("},{"line_number":574,"context_line":"        credentials)"},{"line_number":575,"context_line":"    _auth_provider \u003d auth_provider_class(credentials, auth_url,"},{"line_number":576,"context_line":"                                         scope\u003dscope,"},{"line_number":577,"context_line":"                                         **default_params)"},{"line_number":578,"context_line":"    if pre_auth:"},{"line_number":579,"context_line":"        _auth_provider.set_auth()"},{"line_number":580,"context_line":"    return _auth_provider"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a9d85d2_8477aad3","line":580,"range":{"start_line":563,"start_character":0,"end_line":580,"end_character":25},"in_reply_to":"5a9d85d2_6520c14a","updated":"2016-06-20 08:41:35.000000000","message":"I will check if any plugin is consuming this helper already. The reason for moving it is that it returns an auth provider matching tempest configuration, and thus is not fitting for tempest.lib","commit_id":"208e0206aa9818f6efd937f04da85cbebed2cff5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"d150275bf0fe8cf7d1223dda2d2f3ebe3048b2e1","unresolved":false,"context_lines":[{"line_number":560,"context_line":"        return auth.KeystoneV2AuthProvider, CONF.identity.uri"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":""},{"line_number":563,"context_line":"def get_auth_provider(credentials, pre_auth\u003dFalse, scope\u003d\u0027project\u0027):"},{"line_number":564,"context_line":"    default_params \u003d {"},{"line_number":565,"context_line":"        \u0027disable_ssl_certificate_validation\u0027:"},{"line_number":566,"context_line":"            CONF.identity.disable_ssl_certificate_validation,"},{"line_number":567,"context_line":"        \u0027ca_certs\u0027: CONF.identity.ca_certificates_file,"},{"line_number":568,"context_line":"        \u0027trace_requests\u0027: CONF.debug.trace_requests"},{"line_number":569,"context_line":"    }"},{"line_number":570,"context_line":"    if credentials is None:"},{"line_number":571,"context_line":"        raise exceptions.InvalidCredentials("},{"line_number":572,"context_line":"            \u0027Credentials must be specified\u0027)"},{"line_number":573,"context_line":"    auth_provider_class, auth_url \u003d get_auth_provider_class("},{"line_number":574,"context_line":"        credentials)"},{"line_number":575,"context_line":"    _auth_provider \u003d auth_provider_class(credentials, auth_url,"},{"line_number":576,"context_line":"                                         scope\u003dscope,"},{"line_number":577,"context_line":"                                         **default_params)"},{"line_number":578,"context_line":"    if pre_auth:"},{"line_number":579,"context_line":"        _auth_provider.set_auth()"},{"line_number":580,"context_line":"    return _auth_provider"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a9d85d2_4a48292e","line":580,"range":{"start_line":563,"start_character":0,"end_line":580,"end_character":25},"in_reply_to":"5a9d85d2_8477aad3","updated":"2016-06-20 09:27:22.000000000","message":"yea not for lib, just for plugins using it currently.","commit_id":"208e0206aa9818f6efd937f04da85cbebed2cff5"}],"tempest/lib_manager.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"338b6f480cda2b709caa77903fc5cc0520d7afbe","unresolved":false,"context_lines":[{"line_number":57,"context_line":"                             mandatory parameter, and it will so soon."},{"line_number":58,"context_line":"        :param region: Default value of region for service clients."},{"line_number":59,"context_line":"        :param scope: default scope for tokens produced by the auth provider"},{"line_number":60,"context_line":"        :param disable_ssl_certificate_validation Applies to auth and to all"},{"line_number":61,"context_line":"                                                  service clients. Defaults to"},{"line_number":62,"context_line":"                                                  True."},{"line_number":63,"context_line":"        :param ca_certs Applies to auth and to all service clients. Defaults to"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_4bf5f380","line":60,"updated":"2016-06-14 21:34:08.000000000","message":"Formatting is weird. You don\"t need to indent that much the  lines. This would look better.\n\n:param disable_ssl_certificate_validation Applies to auth and to all\n    service clients. Defaults to True.\n\nAlso I am not sure you need to talk about the default value, it\u0027s already contained in the method signature.","commit_id":"6b9e85462c30c876e636ed85bafd7bfeb758b832"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"338b6f480cda2b709caa77903fc5cc0520d7afbe","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        :param ca_certs Applies to auth and to all service clients. Defaults to"},{"line_number":64,"context_line":"                        None."},{"line_number":65,"context_line":"        :param trace_requests Applies to auth and to all service clients."},{"line_number":66,"context_line":"               Defaults to False."},{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":"        self.credentials \u003d credentials"},{"line_number":69,"context_line":"        self.identity_uri \u003d identity_uri"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_8b423ba9","line":66,"updated":"2016-06-14 21:34:08.000000000","message":"Defaults is \u0027\u0027 not False. Anyway, we shouldn\"t talk about the default value, imo","commit_id":"6b9e85462c30c876e636ed85bafd7bfeb758b832"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"338b6f480cda2b709caa77903fc5cc0520d7afbe","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                    auth.IDENTITY_VERSION.keys() if"},{"line_number":80,"context_line":"                    isinstance(self.credentials, auth.IDENTITY_VERSION[k][0])]"},{"line_number":81,"context_line":"        # Either one or zero matches are possible"},{"line_number":82,"context_line":"        if len(identity) !\u003d 1:"},{"line_number":83,"context_line":"            raise exceptions.InvalidCredentials()"},{"line_number":84,"context_line":"        self.auth_version, auth_provider_class \u003d identity[0]"},{"line_number":85,"context_line":"        self.dscv \u003d disable_ssl_certificate_validation"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_8b47dba1","line":82,"updated":"2016-06-14 21:34:08.000000000","message":"The comment says \"either one or zero\", but the code will raise if it\u0027s not exactly one.\n\nIt would remove the code comment and replace the code with\n  if not identity:\n    raise..","commit_id":"6b9e85462c30c876e636ed85bafd7bfeb758b832"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"7f8b979d6aeb473814051c52cf1209103b1060f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"7aa08908_48ff0734","updated":"2016-06-17 20:38:50.000000000","message":"I still think this isn\u0027t a good name, it\u0027s kinda confusing if you don\u0027t understand the intent here to mean eventually in lib. Why change the name at all from manager.py, yes that was bad too but I think slightly less confusing","commit_id":"223bc4964e9f8b6f19990778e35ea8065b62ad3b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"5e0a52e398bb56f28c70fe47866b31a2d0710fac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"7aa08908_ab682589","in_reply_to":"7aa08908_48ff0734","updated":"2016-06-17 20:57:59.000000000","message":"The reason I moved this into a temp new module is that I need the old module name/class name for to provide a shim for plugins.\n\nI thought about keeping this in the same module with a different class name, but then the migration to lib would have to split a module in to.\n\nThis way it\u0027s clear what are the import dependencies of each class, and specifically that this one only depends on lib and not on CONF, and it will be easy to move it over to tempest.lib.manager.py once ready.","commit_id":"223bc4964e9f8b6f19990778e35ea8065b62ad3b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"7f8b979d6aeb473814051c52cf1209103b1060f8","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    # and its meant for direct consumption by external clients such as tempest"},{"line_number":40,"context_line":"    # plugins. Tempest provides a wrapper class, `clients.Manager`, that"},{"line_number":41,"context_line":"    # initialises this class using values from tempest CONF object. The wrapper"},{"line_number":42,"context_line":"    # class shall be used by tests hosted in Tempest."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def __init__(self, credentials, identity_uri, region\u003dNone,"},{"line_number":45,"context_line":"                 scope\u003d\u0027project\u0027, disable_ssl_certificate_validation\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_a8f82b4b","line":42,"updated":"2016-06-17 20:38:50.000000000","message":"s/shall/shall only/? Not sure it\u0027s clear enough that it\u0027s not for plugins as it is now","commit_id":"223bc4964e9f8b6f19990778e35ea8065b62ad3b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"5e0a52e398bb56f28c70fe47866b31a2d0710fac","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    # and its meant for direct consumption by external clients such as tempest"},{"line_number":40,"context_line":"    # plugins. Tempest provides a wrapper class, `clients.Manager`, that"},{"line_number":41,"context_line":"    # initialises this class using values from tempest CONF object. The wrapper"},{"line_number":42,"context_line":"    # class shall be used by tests hosted in Tempest."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def __init__(self, credentials, identity_uri, region\u003dNone,"},{"line_number":45,"context_line":"                 scope\u003d\u0027project\u0027, disable_ssl_certificate_validation\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_abff85a9","line":42,"in_reply_to":"7aa08908_a8f82b4b","updated":"2016-06-17 20:57:59.000000000","message":"yes, this should be a stronger statement, I will fix it, thanks","commit_id":"223bc4964e9f8b6f19990778e35ea8065b62ad3b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"7f8b979d6aeb473814051c52cf1209103b1060f8","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.credentials \u003d credentials"},{"line_number":66,"context_line":"        self.identity_uri \u003d identity_uri"},{"line_number":67,"context_line":"        if not identity_uri:"},{"line_number":68,"context_line":"            raise exceptions.InvalidCredentials("},{"line_number":69,"context_line":"                \u0027Manager requires a non-empty identity_uri.\u0027)"},{"line_number":70,"context_line":"        self.region \u003d region"},{"line_number":71,"context_line":"        # Check if passed or default credentials are valid"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_88f56f52","line":68,"updated":"2016-06-17 20:38:50.000000000","message":"Are the creds really invalid? It\u0027s just missing the url to use them. Although I don\u0027t know if there is a better exception to use","commit_id":"223bc4964e9f8b6f19990778e35ea8065b62ad3b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"5e0a52e398bb56f28c70fe47866b31a2d0710fac","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.credentials \u003d credentials"},{"line_number":66,"context_line":"        self.identity_uri \u003d identity_uri"},{"line_number":67,"context_line":"        if not identity_uri:"},{"line_number":68,"context_line":"            raise exceptions.InvalidCredentials("},{"line_number":69,"context_line":"                \u0027Manager requires a non-empty identity_uri.\u0027)"},{"line_number":70,"context_line":"        self.region \u003d region"},{"line_number":71,"context_line":"        # Check if passed or default credentials are valid"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_0b27b963","line":68,"in_reply_to":"7aa08908_88f56f52","updated":"2016-06-17 20:57:59.000000000","message":"I know this is a bit stretched, but I didn\u0027t think it worth a new Exception.\nI can make one if you prefer so.","commit_id":"223bc4964e9f8b6f19990778e35ea8065b62ad3b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"09c423f0f85135b89e177cf67f7118cd344e2360","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"5a9d85d2_5b3f6625","updated":"2016-06-20 05:09:19.000000000","message":"As this will be new interface can we name it to something more specific name than manager?\n\n- service_client_manager\n- service_client_provider\n- service_client_maintainer\n\netc and then it can be moved to lib with same name","commit_id":"208e0206aa9818f6efd937f04da85cbebed2cff5"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"8af38709c2102a2a0d34d87731ac63df6bea08cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"5a9d85d2_cf2a6b7e","in_reply_to":"5a9d85d2_5b3f6625","updated":"2016-06-20 08:41:35.000000000","message":"Yeah this name is a temporary one until migration to tempest.lib, but I agree it\u0027s  good chance to start the rename. What about service_clients?","commit_id":"208e0206aa9818f6efd937f04da85cbebed2cff5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"d150275bf0fe8cf7d1223dda2d2f3ebe3048b2e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"5a9d85d2_ca93794e","in_reply_to":"5a9d85d2_cf2a6b7e","updated":"2016-06-20 09:27:22.000000000","message":"that is also fine but i like with some manager/maintainer keyword. But yea if more vote on service_clients that also fine for me.","commit_id":"208e0206aa9818f6efd937f04da85cbebed2cff5"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"09c423f0f85135b89e177cf67f7118cd344e2360","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest.lib import exceptions"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class Manager(object):"},{"line_number":22,"context_line":"    \"\"\"Service client manager class"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    The client manager object provides a useful mean for test to access"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a9d85d2_e5d2f133","line":21,"range":{"start_line":21,"start_character":6,"end_line":21,"end_character":13},"updated":"2016-06-20 05:09:19.000000000","message":"can we name it to something - \u003e ServiceClientsManager, ServiceClientsProvider, ServiceClientsMaintainer\n\nto make it very clear which manager is this.","commit_id":"208e0206aa9818f6efd937f04da85cbebed2cff5"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"8af38709c2102a2a0d34d87731ac63df6bea08cb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest.lib import exceptions"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class Manager(object):"},{"line_number":22,"context_line":"    \"\"\"Service client manager class"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    The client manager object provides a useful mean for test to access"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a9d85d2_cf038b0c","line":21,"range":{"start_line":21,"start_character":6,"end_line":21,"end_character":13},"in_reply_to":"5a9d85d2_e5d2f133","updated":"2016-06-20 08:41:35.000000000","message":"Yeah we can use this chance to rename... only most people is familiar with Manager, but I agree it\u0027s a bad name. I think this Clients would be a fitting name, or ServiceClients.","commit_id":"208e0206aa9818f6efd937f04da85cbebed2cff5"}],"tempest/manager.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"338b6f480cda2b709caa77903fc5cc0520d7afbe","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        msg \u003d (\"tempest.manager.Manager is not a stable interface and as such \""},{"line_number":37,"context_line":"               \"should not imported directly. It will be deprecated as soon \""},{"line_number":38,"context_line":"               \"as tempest.lib.manager.Manager becomes available.\")"},{"line_number":39,"context_line":"        LOG.warn(msg)"},{"line_number":40,"context_line":"        dscv \u003d CONF.identity.disable_ssl_certificate_validation"},{"line_number":41,"context_line":"        _, uri \u003d clients.get_auth_provider_class(credentials)"},{"line_number":42,"context_line":"        super(Manager, self).__init__("}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_2b9d070a","line":39,"updated":"2016-06-14 21:34:08.000000000","message":"Use LOG.warning. warn is deprecated http://bugs.python.org/issue13235","commit_id":"6b9e85462c30c876e636ed85bafd7bfeb758b832"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"7f8b979d6aeb473814051c52cf1209103b1060f8","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class Manager(lib_manager.Manager):"},{"line_number":27,"context_line":"    \"\"\"Service client manager class for backward compatibility"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    The former manager.Manager is not a stable interface in Tempest,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_e894f3e8","line":26,"updated":"2016-06-17 20:38:50.000000000","message":"So we\u0027re keeping this around as a warning shim. I still wonder if we can be more clever here and avoid the weird lib_manager layer completely. (well until we actually put it in lib, where it\u0027ll just be lib.manager.Manager)","commit_id":"223bc4964e9f8b6f19990778e35ea8065b62ad3b"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"5e0a52e398bb56f28c70fe47866b31a2d0710fac","unresolved":false,"context_lines":[{"line_number":23,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class Manager(lib_manager.Manager):"},{"line_number":27,"context_line":"    \"\"\"Service client manager class for backward compatibility"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    The former manager.Manager is not a stable interface in Tempest,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7aa08908_cba5b1b5","line":26,"in_reply_to":"7aa08908_e894f3e8","updated":"2016-06-17 20:57:59.000000000","message":"The only other idea I had was to keep the actual manager and manager.Manager and put the shim one in shim_manager.Manager, and then do some fancy trick in __init__ or in the modules to make the plugin import work - not sure how exactly though. \nI thought at the end that would be even more confusing.","commit_id":"223bc4964e9f8b6f19990778e35ea8065b62ad3b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"09c423f0f85135b89e177cf67f7118cd344e2360","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            self.credentials, pre_auth\u003dTrue, scope\u003dscope)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def get_auth_provider_class(credentials):"},{"line_number":50,"context_line":"    if isinstance(credentials, auth.KeystoneV3Credentials):"},{"line_number":51,"context_line":"        return auth.KeystoneV3AuthProvider, CONF.identity.uri_v3"},{"line_number":52,"context_line":"    else:"},{"line_number":53,"context_line":"        return auth.KeystoneV2AuthProvider, CONF.identity.uri"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def get_auth_provider(credentials, pre_auth\u003dFalse, scope\u003d\u0027project\u0027):"},{"line_number":57,"context_line":"    default_params \u003d {"},{"line_number":58,"context_line":"        \u0027disable_ssl_certificate_validation\u0027:"},{"line_number":59,"context_line":"            CONF.identity.disable_ssl_certificate_validation,"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a9d85d2_45f665d8","side":"PARENT","line":56,"range":{"start_line":49,"start_character":0,"end_line":56,"end_character":68},"updated":"2016-06-20 05:09:19.000000000","message":"i think we should keep these here for plugins.\n\nhttp://git.openstack.org/cgit/openstack/congress/tree/congress_tempest_tests/tests/scenario/congress_ha/test_ha.py#n114","commit_id":"fb77374ddeeb1642bffa086311d5f281e15142b2"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"8af38709c2102a2a0d34d87731ac63df6bea08cb","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            self.credentials, pre_auth\u003dTrue, scope\u003dscope)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def get_auth_provider_class(credentials):"},{"line_number":50,"context_line":"    if isinstance(credentials, auth.KeystoneV3Credentials):"},{"line_number":51,"context_line":"        return auth.KeystoneV3AuthProvider, CONF.identity.uri_v3"},{"line_number":52,"context_line":"    else:"},{"line_number":53,"context_line":"        return auth.KeystoneV2AuthProvider, CONF.identity.uri"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def get_auth_provider(credentials, pre_auth\u003dFalse, scope\u003d\u0027project\u0027):"},{"line_number":57,"context_line":"    default_params \u003d {"},{"line_number":58,"context_line":"        \u0027disable_ssl_certificate_validation\u0027:"},{"line_number":59,"context_line":"            CONF.identity.disable_ssl_certificate_validation,"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a9d85d2_cf51cb10","side":"PARENT","line":56,"range":{"start_line":49,"start_character":0,"end_line":56,"end_character":68},"in_reply_to":"5a9d85d2_45f665d8","updated":"2016-06-20 08:41:35.000000000","message":"Well manager.py is a shim that will go away, but I can keep this method as a shim as well.","commit_id":"fb77374ddeeb1642bffa086311d5f281e15142b2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"d150275bf0fe8cf7d1223dda2d2f3ebe3048b2e1","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            self.credentials, pre_auth\u003dTrue, scope\u003dscope)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"def get_auth_provider_class(credentials):"},{"line_number":50,"context_line":"    if isinstance(credentials, auth.KeystoneV3Credentials):"},{"line_number":51,"context_line":"        return auth.KeystoneV3AuthProvider, CONF.identity.uri_v3"},{"line_number":52,"context_line":"    else:"},{"line_number":53,"context_line":"        return auth.KeystoneV2AuthProvider, CONF.identity.uri"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def get_auth_provider(credentials, pre_auth\u003dFalse, scope\u003d\u0027project\u0027):"},{"line_number":57,"context_line":"    default_params \u003d {"},{"line_number":58,"context_line":"        \u0027disable_ssl_certificate_validation\u0027:"},{"line_number":59,"context_line":"            CONF.identity.disable_ssl_certificate_validation,"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a9d85d2_0af8e1e4","side":"PARENT","line":56,"range":{"start_line":49,"start_character":0,"end_line":56,"end_character":68},"in_reply_to":"5a9d85d2_cf51cb10","updated":"2016-06-20 09:27:22.000000000","message":"yea, we can keep this temporarily and can go away with this manager.","commit_id":"fb77374ddeeb1642bffa086311d5f281e15142b2"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1bad2fb8c8d812c9423ea6e74da5187d6c5c79ac","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __init__(self, credentials, scope\u003d\u0027project\u0027):"},{"line_number":35,"context_line":"        msg \u003d (\"tempest.manager.Manager is not a stable interface and as such \""},{"line_number":36,"context_line":"               \"it should not imported directly. It will be deprecated as \""},{"line_number":37,"context_line":"               \"soon as the client manager becomes available in tempest.lib.\")"},{"line_number":38,"context_line":"        LOG.warning(msg)"},{"line_number":39,"context_line":"        dscv \u003d CONF.identity.disable_ssl_certificate_validation"}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_f374429d","line":36,"updated":"2016-06-22 15:43:01.000000000","message":"I think you should s/deprecated/removed, this warning serves as the deprecation, we also aren\u0027t commited to any stability or graceful transistions here, so this warning is more than enough","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6a80ab04c1d6c75ce72c4a1afe6cc4ae1397d98f","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def __init__(self, credentials, scope\u003d\u0027project\u0027):"},{"line_number":35,"context_line":"        msg \u003d (\"tempest.manager.Manager is not a stable interface and as such \""},{"line_number":36,"context_line":"               \"it should not imported directly. It will be deprecated as \""},{"line_number":37,"context_line":"               \"soon as the client manager becomes available in tempest.lib.\")"},{"line_number":38,"context_line":"        LOG.warning(msg)"},{"line_number":39,"context_line":"        dscv \u003d CONF.identity.disable_ssl_certificate_validation"}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_f93b79e9","line":36,"in_reply_to":"3aaa91ec_f374429d","updated":"2016-06-22 20:00:02.000000000","message":"ok","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1bad2fb8c8d812c9423ea6e74da5187d6c5c79ac","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    maintained for the benefit of plugins already consuming this interface."},{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":"    msg \u003d (\"tempest.manager.get_auth_provider is not a stable interface and \""},{"line_number":58,"context_line":"           \"as such it should not imported directly. It will be deprecated as \""},{"line_number":59,"context_line":"           \"as the client manager becomes available in tempest.lib.\")"},{"line_number":60,"context_line":"    LOG.warning(msg)"},{"line_number":61,"context_line":"    return clients.get_auth_provider(credentials\u003dcredentials,"}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_d377869d","line":58,"updated":"2016-06-22 15:43:01.000000000","message":"Same here","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1bad2fb8c8d812c9423ea6e74da5187d6c5c79ac","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":"    msg \u003d (\"tempest.manager.get_auth_provider is not a stable interface and \""},{"line_number":58,"context_line":"           \"as such it should not imported directly. It will be deprecated as \""},{"line_number":59,"context_line":"           \"as the client manager becomes available in tempest.lib.\")"},{"line_number":60,"context_line":"    LOG.warning(msg)"},{"line_number":61,"context_line":"    return clients.get_auth_provider(credentials\u003dcredentials,"},{"line_number":62,"context_line":"                                     pre_auth\u003dpre_auth, scope\u003dscope)"}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_336feac6","line":59,"updated":"2016-06-22 15:43:01.000000000","message":"\u0027as\u0027 is duplicated","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"}],"tempest/service_clients.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1bad2fb8c8d812c9423ea6e74da5187d6c5c79ac","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest.lib import exceptions"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ServiceClients(object):"},{"line_number":22,"context_line":"    \"\"\"Service client provider class"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    The ServiceClients object provides a useful mean for test to access"}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_d350260d","line":21,"updated":"2016-06-22 15:43:01.000000000","message":"So for right now this class just creates an object that has all the necessary fields. I assume the client inits will be added to this in a follow on patch","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6a80ab04c1d6c75ce72c4a1afe6cc4ae1397d98f","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from tempest.lib import exceptions"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class ServiceClients(object):"},{"line_number":22,"context_line":"    \"\"\"Service client provider class"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    The ServiceClients object provides a useful mean for test to access"}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_dc230ba6","line":21,"in_reply_to":"3aaa91ec_d350260d","updated":"2016-06-22 20:00:02.000000000","message":"Yes indeed. I will move the init of clients from clients.Manager to here one service at the time, once they become stable.\nThis also sets up the auth provider now.","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1bad2fb8c8d812c9423ea6e74da5187d6c5c79ac","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class ServiceClients(object):"},{"line_number":22,"context_line":"    \"\"\"Service client provider class"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    The ServiceClients object provides a useful mean for test to access"},{"line_number":25,"context_line":"    service clients configured for a specified set of credentials."},{"line_number":26,"context_line":"    It hides some of the complexity from the authorization and configuration"},{"line_number":27,"context_line":"    layers."}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_33588a32","line":24,"updated":"2016-06-22 15:43:01.000000000","message":"s/mean/means and s/test/tests","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6a80ab04c1d6c75ce72c4a1afe6cc4ae1397d98f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class ServiceClients(object):"},{"line_number":22,"context_line":"    \"\"\"Service client provider class"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"    The ServiceClients object provides a useful mean for test to access"},{"line_number":25,"context_line":"    service clients configured for a specified set of credentials."},{"line_number":26,"context_line":"    It hides some of the complexity from the authorization and configuration"},{"line_number":27,"context_line":"    layers."}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_7c35b7d8","line":24,"in_reply_to":"3aaa91ec_33588a32","updated":"2016-06-22 20:00:02.000000000","message":"Done","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1bad2fb8c8d812c9423ea6e74da5187d6c5c79ac","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        \u003e\u003e\u003e from tempest import service_clients"},{"line_number":32,"context_line":"        \u003e\u003e\u003e johndoe \u003d cred_provider.get_creds_by_role([\u0027johndoe\u0027])"},{"line_number":33,"context_line":"        \u003e\u003e\u003e johndoe_clients \u003d service_clients.ServiceClients(johndoe)"},{"line_number":34,"context_line":"        \u003e\u003e\u003e johndoe_servers \u003d johndoe_clients.servers_client.list_servers()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_135bce2f","line":33,"updated":"2016-06-22 15:43:01.000000000","message":"Does this actually work? I thought you\u0027d need to do *johndoe maybe I\u0027m just making things up","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6a80ab04c1d6c75ce72c4a1afe6cc4ae1397d98f","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"        \u003e\u003e\u003e from tempest import service_clients"},{"line_number":32,"context_line":"        \u003e\u003e\u003e johndoe \u003d cred_provider.get_creds_by_role([\u0027johndoe\u0027])"},{"line_number":33,"context_line":"        \u003e\u003e\u003e johndoe_clients \u003d service_clients.ServiceClients(johndoe)"},{"line_number":34,"context_line":"        \u003e\u003e\u003e johndoe_servers \u003d johndoe_clients.servers_client.list_servers()"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_5c8c3b7f","line":33,"in_reply_to":"3aaa91ec_135bce2f","updated":"2016-06-22 20:00:02.000000000","message":"ServiceClients takes a Credentials object as input, same as manager.Manager does today.","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1bad2fb8c8d812c9423ea6e74da5187d6c5c79ac","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            raise exceptions.InvalidCredentials()"},{"line_number":73,"context_line":"        # Get the identity classes matching the provided credentials"},{"line_number":74,"context_line":"        # TODO(andreaf) Define a new interface in Credentials to get"},{"line_number":75,"context_line":"        # the API version from an instance"},{"line_number":76,"context_line":"        identity \u003d [(k, auth.IDENTITY_VERSION[k][1]) for k in"},{"line_number":77,"context_line":"                    auth.IDENTITY_VERSION.keys() if"},{"line_number":78,"context_line":"                    isinstance(self.credentials, auth.IDENTITY_VERSION[k][0])]"}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_73421240","line":75,"updated":"2016-06-22 15:43:01.000000000","message":"This would be good to do before we do a lib migration of this class.","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"6a80ab04c1d6c75ce72c4a1afe6cc4ae1397d98f","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            raise exceptions.InvalidCredentials()"},{"line_number":73,"context_line":"        # Get the identity classes matching the provided credentials"},{"line_number":74,"context_line":"        # TODO(andreaf) Define a new interface in Credentials to get"},{"line_number":75,"context_line":"        # the API version from an instance"},{"line_number":76,"context_line":"        identity \u003d [(k, auth.IDENTITY_VERSION[k][1]) for k in"},{"line_number":77,"context_line":"                    auth.IDENTITY_VERSION.keys() if"},{"line_number":78,"context_line":"                    isinstance(self.credentials, auth.IDENTITY_VERSION[k][0])]"}],"source_content_type":"text/x-python","patch_set":20,"id":"3aaa91ec_bcd0bf54","line":75,"in_reply_to":"3aaa91ec_73421240","updated":"2016-06-22 20:00:02.000000000","message":"Sure. It won\u0027t affect the interface anyways, but I\u0027ll try to.","commit_id":"91d5cd1cd07321ca503bdf86bdf5e3db474e02b4"}],"tempest/tests/test_manager.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"338b6f480cda2b709caa77903fc5cc0520d7afbe","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        uri \u003d \u0027fake_uri\u0027"},{"line_number":31,"context_line":"        _manager \u003d manager.Manager(creds, identity_uri\u003duri)"},{"line_number":32,"context_line":"        msg \u003d \"Expected auth provider of type %s, found %s\""},{"line_number":33,"context_line":"        self.assertTrue(isinstance(_manager.auth_provider,"},{"line_number":34,"context_line":"                                   auth.KeystoneV2AuthProvider),"},{"line_number":35,"context_line":"                        msg % (auth.KeystoneV2AuthProvider.__class__,"},{"line_number":36,"context_line":"                               _manager.auth_provider.__class__))"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_ebbdbf68","line":33,"updated":"2016-06-14 21:34:08.000000000","message":"use self.assertIsInstance \nThis way you don\"t have to write a custom failure message, the default one is clear enough (make a try to see it by yourself).","commit_id":"6b9e85462c30c876e636ed85bafd7bfeb758b832"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"338b6f480cda2b709caa77903fc5cc0520d7afbe","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        uri \u003d \u0027fake_uri\u0027"},{"line_number":43,"context_line":"        _manager \u003d manager.Manager(creds, identity_uri\u003duri)"},{"line_number":44,"context_line":"        msg \u003d \"Expected auth provider of type %s, found %s\""},{"line_number":45,"context_line":"        self.assertTrue(isinstance(_manager.auth_provider,"},{"line_number":46,"context_line":"                                   auth.KeystoneV3AuthProvider),"},{"line_number":47,"context_line":"                        msg % (auth.KeystoneV3AuthProvider.__class__,"},{"line_number":48,"context_line":"                               _manager.auth_provider.__class__))"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_4badf32f","line":45,"updated":"2016-06-14 21:34:08.000000000","message":"same","commit_id":"6b9e85462c30c876e636ed85bafd7bfeb758b832"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"338b6f480cda2b709caa77903fc5cc0520d7afbe","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def test__init__base_creds_uri(self):"},{"line_number":51,"context_line":"        creds \u003d fake_credentials.FakeCredentials()"},{"line_number":52,"context_line":"        uri \u003d \u0027fake_uri\u0027"},{"line_number":53,"context_line":"        with testtools.ExpectedException(exceptions.InvalidCredentials):"},{"line_number":54,"context_line":"            manager.Manager(creds, identity_uri\u003duri)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test__init__invalid_creds_uri(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_4b5b3354","line":53,"updated":"2016-06-14 21:34:08.000000000","message":"use self.assertRaises\n\nThen you don\u0027t need to import/use testtools only what\u0027s in the stdlib (unittest)","commit_id":"6b9e85462c30c876e636ed85bafd7bfeb758b832"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"338b6f480cda2b709caa77903fc5cc0520d7afbe","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        creds \u003d fake_credentials.FakeKeystoneV2Credentials()"},{"line_number":58,"context_line":"        delattr(creds, \u0027username\u0027)"},{"line_number":59,"context_line":"        uri \u003d \u0027fake_uri\u0027"},{"line_number":60,"context_line":"        with testtools.ExpectedException(exceptions.InvalidCredentials):"},{"line_number":61,"context_line":"            manager.Manager(creds, identity_uri\u003duri)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def test__init__creds_uri_none(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_ab561727","line":60,"updated":"2016-06-14 21:34:08.000000000","message":"same","commit_id":"6b9e85462c30c876e636ed85bafd7bfeb758b832"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"338b6f480cda2b709caa77903fc5cc0520d7afbe","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    def test__init__creds_uri_none(self):"},{"line_number":64,"context_line":"        creds \u003d fake_credentials.FakeKeystoneV2Credentials()"},{"line_number":65,"context_line":"        msg \u003d \"Invalid Credentials\\nDetails: Manager requires a non-empty\""},{"line_number":66,"context_line":"        with testtools.ExpectedException(exceptions.InvalidCredentials,"},{"line_number":67,"context_line":"                                         value_re\u003dmsg):"},{"line_number":68,"context_line":"            manager.Manager(creds, None)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aa08908_cb1c4379","line":66,"updated":"2016-06-14 21:34:08.000000000","message":"Use assertRaisesRegexp","commit_id":"6b9e85462c30c876e636ed85bafd7bfeb758b832"}]}
