)]}'
{"tempest/clients.py":[{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"6b55250b2da52339c06fbdbf97cc1e3b7b65ba80","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                            ComputeSnapshotsClient]"},{"line_number":236,"context_line":"    }"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    client_specs \u003d {"},{"line_number":239,"context_line":"        ComputeNetworksClient: {"},{"line_number":240,"context_line":"            \u0027alias\u0027: \u0027compute_networks\u0027,"},{"line_number":241,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_9f828e51","line":238,"updated":"2015-12-17 13:02:40.000000000","message":"how will this dict been used?","commit_id":"5e280e82434d458e566b00d32c444f9f2897d374"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3606168af875cac5d5ab52c3f316591bc9a1122b","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                            ComputeSnapshotsClient]"},{"line_number":236,"context_line":"    }"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    client_specs \u003d {"},{"line_number":239,"context_line":"        ComputeNetworksClient: {"},{"line_number":240,"context_line":"            \u0027alias\u0027: \u0027compute_networks\u0027,"},{"line_number":241,"context_line":"        },"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_44f20b71","line":238,"in_reply_to":"3a7e1126_9f828e51","updated":"2015-12-17 15:49:13.000000000","message":"It is used already, but I should add some notes on top.\n\naliases are used to avoid conflicts on client names, such as VolumeClient for cinder and VolumeClient for nova.\n\nclient_params are used to define extra parameters which are only required by one client, not the whole group","commit_id":"5e280e82434d458e566b00d32c444f9f2897d374"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"6b55250b2da52339c06fbdbf97cc1e3b7b65ba80","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        # NOTE This function is invoked only by __getattr__, which"},{"line_number":361,"context_line":"        # implies that client_name is not set yet as an attribute. It should"},{"line_number":362,"context_line":"        # not be invoked from anywhere else"},{"line_number":363,"context_line":"        if client_name in self.available_clients:"},{"line_number":364,"context_line":"            _params \u003d self.get_client_params(client_name)"},{"line_number":365,"context_line":"            _client_partial \u003d getattr("},{"line_number":366,"context_line":"                self, self._get_client_partial_name(client_name))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_ff55d21c","line":363,"updated":"2015-12-17 13:02:40.000000000","message":"You already checkt the existence of it in __get_attr__. I guess an attribute exception is fine..","commit_id":"5e280e82434d458e566b00d32c444f9f2897d374"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3606168af875cac5d5ab52c3f316591bc9a1122b","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        # NOTE This function is invoked only by __getattr__, which"},{"line_number":361,"context_line":"        # implies that client_name is not set yet as an attribute. It should"},{"line_number":362,"context_line":"        # not be invoked from anywhere else"},{"line_number":363,"context_line":"        if client_name in self.available_clients:"},{"line_number":364,"context_line":"            _params \u003d self.get_client_params(client_name)"},{"line_number":365,"context_line":"            _client_partial \u003d getattr("},{"line_number":366,"context_line":"                self, self._get_client_partial_name(client_name))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_7f4c7070","line":363,"in_reply_to":"3a7e1126_ff55d21c","updated":"2015-12-17 15:49:13.000000000","message":"Uhm good point, I guess what I had in mind here was to check whether the client had the partial setup yet, so I should probably check is \"_\" + client_name exists as an attribute, else raise the unregistered client name.","commit_id":"5e280e82434d458e566b00d32c444f9f2897d374"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"6b55250b2da52339c06fbdbf97cc1e3b7b65ba80","unresolved":false,"context_lines":[{"line_number":453,"context_line":"        here."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        :param name: Name of the client group, e.g. \u0027orchestration\u0027"},{"line_number":456,"context_line":"        :param service_clients: A list with all service clients"},{"line_number":457,"context_line":"        :param description: A description of the group"},{"line_number":458,"context_line":"        :param group_params: A list of extra parameters expected by clients"},{"line_number":459,"context_line":"                             in this group"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_829eb554","line":456,"updated":"2015-12-17 13:02:40.000000000","message":"I am not sure if this interface works. In service_client you want to store only the class name as in L215? For plugins the client must be also imported too. So you might need the full package name also.","commit_id":"5e280e82434d458e566b00d32c444f9f2897d374"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"3606168af875cac5d5ab52c3f316591bc9a1122b","unresolved":false,"context_lines":[{"line_number":453,"context_line":"        here."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        :param name: Name of the client group, e.g. \u0027orchestration\u0027"},{"line_number":456,"context_line":"        :param service_clients: A list with all service clients"},{"line_number":457,"context_line":"        :param description: A description of the group"},{"line_number":458,"context_line":"        :param group_params: A list of extra parameters expected by clients"},{"line_number":459,"context_line":"                             in this group"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a7e1126_9f8cbc80","line":456,"in_reply_to":"3a7e1126_829eb554","updated":"2015-12-17 15:49:13.000000000","message":"I though I could import on the caller side, and pass the module objects in the list, but I may be wrong","commit_id":"5e280e82434d458e566b00d32c444f9f2897d374"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af6eb7b012ab5a0752bbbba5db7597a544da56be","unresolved":false,"context_lines":[{"line_number":408,"context_line":"               but that can be enabled. Tokens won\u0027t be traced anyways."},{"line_number":409,"context_line":"        \"\"\""},{"line_number":410,"context_line":"        super(Clients, self).__init__(credentials, identity_api_version)"},{"line_number":411,"context_line":"        _dsvm \u003d disable_ssl_certificate_validation"},{"line_number":412,"context_line":"        self.base_parameters \u003d dict("},{"line_number":413,"context_line":"            disable_ssl_certificate_validation\u003d_dsvm,"},{"line_number":414,"context_line":"            ca_certs\u003dca_certs,"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_56ff51aa","line":411,"updated":"2016-01-07 16:14:16.000000000","message":"_dsvm ? What does the \"m\" stand for ?","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"47e50b1e66727e45668ce9178850ea6fc33fa20e","unresolved":false,"context_lines":[{"line_number":408,"context_line":"               but that can be enabled. Tokens won\u0027t be traced anyways."},{"line_number":409,"context_line":"        \"\"\""},{"line_number":410,"context_line":"        super(Clients, self).__init__(credentials, identity_api_version)"},{"line_number":411,"context_line":"        _dsvm \u003d disable_ssl_certificate_validation"},{"line_number":412,"context_line":"        self.base_parameters \u003d dict("},{"line_number":413,"context_line":"            disable_ssl_certificate_validation\u003d_dsvm,"},{"line_number":414,"context_line":"            ca_certs\u003dca_certs,"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_dbc849ab","line":411,"in_reply_to":"fa69d971_56ff51aa","updated":"2016-01-07 17:58:56.000000000","message":"upz, good catch - dscv","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af6eb7b012ab5a0752bbbba5db7597a544da56be","unresolved":false,"context_lines":[{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        # First resolve aliases. An alias defines a full attribute name,"},{"line_number":435,"context_line":"        # \u003calias\u003e_client is not supported."},{"line_number":436,"context_line":"        name \u003d self.client_aliases.get(item, None) or item"},{"line_number":437,"context_line":"        if name !\u003d item and name in self._loaded_clients:"},{"line_number":438,"context_line":"            return self._loaded_clients[name]"},{"line_number":439,"context_line":"        # Second drop any trailing _client"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_f69f6563","line":436,"updated":"2016-01-07 16:14:16.000000000","message":"\"None\" is already returned in case of missing key, so it\u0027s redundant.","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b487899ae86ac850d0b8a8b9ee804cdc5e232873","unresolved":false,"context_lines":[{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        # First resolve aliases. An alias defines a full attribute name,"},{"line_number":435,"context_line":"        # \u003calias\u003e_client is not supported."},{"line_number":436,"context_line":"        name \u003d self.client_aliases.get(item, None) or item"},{"line_number":437,"context_line":"        if name !\u003d item and name in self._loaded_clients:"},{"line_number":438,"context_line":"            return self._loaded_clients[name]"},{"line_number":439,"context_line":"        # Second drop any trailing _client"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_c841203b","line":436,"in_reply_to":"fa69d971_f69f6563","updated":"2016-01-08 08:35:02.000000000","message":"Done","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"4ef613239044acc4a0798991d6470dd7a4f6d0a3","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        if name !\u003d item and name in self._loaded_clients:"},{"line_number":438,"context_line":"            return self._loaded_clients[name]"},{"line_number":439,"context_line":"        # Second drop any trailing _client"},{"line_number":440,"context_line":"        name \u003d name[:-7] if name.endswith(\u0027_client\u0027) else name"},{"line_number":441,"context_line":"        # If the client has a partial defined, load the client passing all"},{"line_number":442,"context_line":"        # parameters. This may fail with a MissingClientParameters exception"},{"line_number":443,"context_line":"        if name in self._partial_clients:"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_a84c779e","line":440,"updated":"2016-01-11 21:23:04.000000000","message":"This assumes only a trailing name of _client. Is there somewhere this would be documented for future development?","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af6eb7b012ab5a0752bbbba5db7597a544da56be","unresolved":false,"context_lines":[{"line_number":454,"context_line":"            else:"},{"line_number":455,"context_line":"                raise AttributeError"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    @classmethod"},{"line_number":458,"context_line":"    def _split_client_group_name(cls, name):"},{"line_number":459,"context_line":"        # Extract group and client name"},{"line_number":460,"context_line":"        # NOTE (!) This imposes a restriction that a group name cannot contain"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_d686e1da","line":457,"updated":"2016-01-07 16:14:16.000000000","message":"@staticmethod","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b487899ae86ac850d0b8a8b9ee804cdc5e232873","unresolved":false,"context_lines":[{"line_number":454,"context_line":"            else:"},{"line_number":455,"context_line":"                raise AttributeError"},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"    @classmethod"},{"line_number":458,"context_line":"    def _split_client_group_name(cls, name):"},{"line_number":459,"context_line":"        # Extract group and client name"},{"line_number":460,"context_line":"        # NOTE (!) This imposes a restriction that a group name cannot contain"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_e83c24c1","line":457,"in_reply_to":"fa69d971_d686e1da","updated":"2016-01-08 08:35:02.000000000","message":"Done","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":97,"name":"Daryl Walleck","email":"daryl.walleck@rackspace.com","username":"dwalleck"},"change_message_id":"4ef613239044acc4a0798991d6470dd7a4f6d0a3","unresolved":false,"context_lines":[{"line_number":457,"context_line":"    @classmethod"},{"line_number":458,"context_line":"    def _split_client_group_name(cls, name):"},{"line_number":459,"context_line":"        # Extract group and client name"},{"line_number":460,"context_line":"        # NOTE (!) This imposes a restriction that a group name cannot contain"},{"line_number":461,"context_line":"        # underscore."},{"line_number":462,"context_line":"        _name_group \u003d name.split(\u0027_\u0027, 1)"},{"line_number":463,"context_line":"        if len(_name_group) \u003d\u003d 2:"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_ab01d106","line":460,"updated":"2016-01-11 21:23:04.000000000","message":"Any developer running into this issue would have a difficult time until they found this comment. It probably should exist in a style or dev guide as well if this is to be enforced","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af6eb7b012ab5a0752bbbba5db7597a544da56be","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        else:"},{"line_number":466,"context_line":"            return None, name"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    @classmethod"},{"line_number":469,"context_line":"    def _combine_client_group_name(cls, name, group):"},{"line_number":470,"context_line":"        # Combines name and group in one full name"},{"line_number":471,"context_line":"        return \"_\".join([group, name])"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_d6d4a1be","line":468,"updated":"2016-01-07 16:14:16.000000000","message":"@staticmethod","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b487899ae86ac850d0b8a8b9ee804cdc5e232873","unresolved":false,"context_lines":[{"line_number":465,"context_line":"        else:"},{"line_number":466,"context_line":"            return None, name"},{"line_number":467,"context_line":""},{"line_number":468,"context_line":"    @classmethod"},{"line_number":469,"context_line":"    def _combine_client_group_name(cls, name, group):"},{"line_number":470,"context_line":"        # Combines name and group in one full name"},{"line_number":471,"context_line":"        return \"_\".join([group, name])"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_a8462c4d","line":468,"in_reply_to":"fa69d971_d6d4a1be","updated":"2016-01-08 08:35:02.000000000","message":"Done","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af6eb7b012ab5a0752bbbba5db7597a544da56be","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                                                    client.group.name)"},{"line_number":487,"context_line":"        if full_name in self._partial_clients:"},{"line_number":488,"context_line":"            old_client, _ \u003d self._partial_clients[full_name]"},{"line_number":489,"context_line":"            if old_client.klass.__name__ !\u003d client.klass.__name__:"},{"line_number":490,"context_line":"                raise exceptions.DuplicateClientName(name\u003dclient.name)"},{"line_number":491,"context_line":"            # else we trying to register an existing class, nothing to do"},{"line_number":492,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_b6424d67","line":489,"updated":"2016-01-07 16:14:16.000000000","message":"klass ? With a K ?","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"47e50b1e66727e45668ce9178850ea6fc33fa20e","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                                                    client.group.name)"},{"line_number":487,"context_line":"        if full_name in self._partial_clients:"},{"line_number":488,"context_line":"            old_client, _ \u003d self._partial_clients[full_name]"},{"line_number":489,"context_line":"            if old_client.klass.__name__ !\u003d client.klass.__name__:"},{"line_number":490,"context_line":"                raise exceptions.DuplicateClientName(name\u003dclient.name)"},{"line_number":491,"context_line":"            # else we trying to register an existing class, nothing to do"},{"line_number":492,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_5bda1919","line":489,"in_reply_to":"fa69d971_b6424d67","updated":"2016-01-07 17:58:56.000000000","message":"yes, \u0027class\u0027 is reserved","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af6eb7b012ab5a0752bbbba5db7597a544da56be","unresolved":false,"context_lines":[{"line_number":500,"context_line":"            self._register_client(client)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    def _load_client(self, name, partial_client):"},{"line_number":503,"context_line":"        # Loads a client by passing obtaining the remaining parameters"},{"line_number":504,"context_line":"        # and passing them to the partial client."},{"line_number":505,"context_line":"        #"},{"line_number":506,"context_line":"        # NOTE This function is invoked only by __getattr__. When"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_f6168557","line":503,"updated":"2016-01-07 16:14:16.000000000","message":"Something is weird in this line. \"passing obtaining\" ?","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"47e50b1e66727e45668ce9178850ea6fc33fa20e","unresolved":false,"context_lines":[{"line_number":500,"context_line":"            self._register_client(client)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    def _load_client(self, name, partial_client):"},{"line_number":503,"context_line":"        # Loads a client by passing obtaining the remaining parameters"},{"line_number":504,"context_line":"        # and passing them to the partial client."},{"line_number":505,"context_line":"        #"},{"line_number":506,"context_line":"        # NOTE This function is invoked only by __getattr__. When"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_bbf47587","line":503,"in_reply_to":"fa69d971_f6168557","updated":"2016-01-07 17:58:56.000000000","message":"obtaining is redundant indeed","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af6eb7b012ab5a0752bbbba5db7597a544da56be","unresolved":false,"context_lines":[{"line_number":561,"context_line":"        # dict() creates a new dict, the original params are not changed"},{"line_number":562,"context_line":"        _extra_params \u003d dict(self.clients_data.common_parameters,"},{"line_number":563,"context_line":"                             **extra_group_params)"},{"line_number":564,"context_line":"        _extra_params \u003d dict(_extra_params, **extra_client_params)"},{"line_number":565,"context_line":"        # Filter only parameters required for this client"},{"line_number":566,"context_line":"        # If extra required params are specified, take them into account"},{"line_number":567,"context_line":"        # Use list comprehension to clone the list"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_383bab9e","line":564,"updated":"2016-01-07 16:14:16.000000000","message":"You might want :\n  _extra_params.update(extra_client_params)\n\nWhich is more common.","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b487899ae86ac850d0b8a8b9ee804cdc5e232873","unresolved":false,"context_lines":[{"line_number":561,"context_line":"        # dict() creates a new dict, the original params are not changed"},{"line_number":562,"context_line":"        _extra_params \u003d dict(self.clients_data.common_parameters,"},{"line_number":563,"context_line":"                             **extra_group_params)"},{"line_number":564,"context_line":"        _extra_params \u003d dict(_extra_params, **extra_client_params)"},{"line_number":565,"context_line":"        # Filter only parameters required for this client"},{"line_number":566,"context_line":"        # If extra required params are specified, take them into account"},{"line_number":567,"context_line":"        # Use list comprehension to clone the list"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_88b9e830","line":564,"in_reply_to":"fa69d971_383bab9e","updated":"2016-01-08 08:35:02.000000000","message":"Done","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af6eb7b012ab5a0752bbbba5db7597a544da56be","unresolved":false,"context_lines":[{"line_number":576,"context_line":"        # NOTE Group params cannot have a group specific default value yet."},{"line_number":577,"context_line":"        # This shouldn\u0027t be a problem as tempest specifies all parameters via"},{"line_number":578,"context_line":"        # config anyways, but for \u0027service\u0027 it is convenient to have a default,"},{"line_number":579,"context_line":"        # a usually it matches the group name."},{"line_number":580,"context_line":"        if \u0027service\u0027 in required_params and \u0027service\u0027 not in _extra_params:"},{"line_number":581,"context_line":"            _extra_params[\u0027service\u0027] \u003d client.group"},{"line_number":582,"context_line":"        # Check if the is any missing required parameter"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_78c0432b","line":579,"updated":"2016-01-07 16:14:16.000000000","message":"s/a /as / ?","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"47e50b1e66727e45668ce9178850ea6fc33fa20e","unresolved":false,"context_lines":[{"line_number":576,"context_line":"        # NOTE Group params cannot have a group specific default value yet."},{"line_number":577,"context_line":"        # This shouldn\u0027t be a problem as tempest specifies all parameters via"},{"line_number":578,"context_line":"        # config anyways, but for \u0027service\u0027 it is convenient to have a default,"},{"line_number":579,"context_line":"        # a usually it matches the group name."},{"line_number":580,"context_line":"        if \u0027service\u0027 in required_params and \u0027service\u0027 not in _extra_params:"},{"line_number":581,"context_line":"            _extra_params[\u0027service\u0027] \u003d client.group"},{"line_number":582,"context_line":"        # Check if the is any missing required parameter"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_fb0f4d86","line":579,"in_reply_to":"fa69d971_78c0432b","updated":"2016-01-07 17:58:56.000000000","message":"Done","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af6eb7b012ab5a0752bbbba5db7597a544da56be","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        # a usually it matches the group name."},{"line_number":580,"context_line":"        if \u0027service\u0027 in required_params and \u0027service\u0027 not in _extra_params:"},{"line_number":581,"context_line":"            _extra_params[\u0027service\u0027] \u003d client.group"},{"line_number":582,"context_line":"        # Check if the is any missing required parameter"},{"line_number":583,"context_line":"        _missing_params \u003d required_params - set(_extra_params.keys())"},{"line_number":584,"context_line":"        if _missing_params:"},{"line_number":585,"context_line":"            raise exceptions.MissingClientParameters("}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_98d097f9","line":582,"updated":"2016-01-07 16:14:16.000000000","message":"Hum ?","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"47e50b1e66727e45668ce9178850ea6fc33fa20e","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        # a usually it matches the group name."},{"line_number":580,"context_line":"        if \u0027service\u0027 in required_params and \u0027service\u0027 not in _extra_params:"},{"line_number":581,"context_line":"            _extra_params[\u0027service\u0027] \u003d client.group"},{"line_number":582,"context_line":"        # Check if the is any missing required parameter"},{"line_number":583,"context_line":"        _missing_params \u003d required_params - set(_extra_params.keys())"},{"line_number":584,"context_line":"        if _missing_params:"},{"line_number":585,"context_line":"            raise exceptions.MissingClientParameters("}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_1b7821f8","line":582,"in_reply_to":"fa69d971_98d097f9","updated":"2016-01-07 17:58:56.000000000","message":"s/the/there","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af6eb7b012ab5a0752bbbba5db7597a544da56be","unresolved":false,"context_lines":[{"line_number":614,"context_line":"                    reason\u003d\u0027alias already defined for %s\u0027 % original)"},{"line_number":615,"context_line":"        # Check if alias is a full client name"},{"line_number":616,"context_line":"        if alias in self._partial_clients:"},{"line_number":617,"context_line":"                raise exceptions.InvalidClientAlias("},{"line_number":618,"context_line":"                    alias\u003dalias,"},{"line_number":619,"context_line":"                    reason\u003d\u0027it\\\u0027s a registered service client name\u0027)"},{"line_number":620,"context_line":"        # Check if alias is a simple client name. We don\u0027t wont to allow this"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_38164ba8","line":617,"updated":"2016-01-07 16:14:16.000000000","message":"Too much indentation here.","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"b487899ae86ac850d0b8a8b9ee804cdc5e232873","unresolved":false,"context_lines":[{"line_number":614,"context_line":"                    reason\u003d\u0027alias already defined for %s\u0027 % original)"},{"line_number":615,"context_line":"        # Check if alias is a full client name"},{"line_number":616,"context_line":"        if alias in self._partial_clients:"},{"line_number":617,"context_line":"                raise exceptions.InvalidClientAlias("},{"line_number":618,"context_line":"                    alias\u003dalias,"},{"line_number":619,"context_line":"                    reason\u003d\u0027it\\\u0027s a registered service client name\u0027)"},{"line_number":620,"context_line":"        # Check if alias is a simple client name. We don\u0027t wont to allow this"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_e8aae4d1","line":617,"in_reply_to":"fa69d971_38164ba8","updated":"2016-01-08 08:35:02.000000000","message":"Done","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af6eb7b012ab5a0752bbbba5db7597a544da56be","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        if alias in self._partial_clients:"},{"line_number":617,"context_line":"                raise exceptions.InvalidClientAlias("},{"line_number":618,"context_line":"                    alias\u003dalias,"},{"line_number":619,"context_line":"                    reason\u003d\u0027it\\\u0027s a registered service client name\u0027)"},{"line_number":620,"context_line":"        # Check if alias is a simple client name. We don\u0027t wont to allow this"},{"line_number":621,"context_line":"        # as it may lead to conflicts between clients"},{"line_number":622,"context_line":"        groups \u003d [x.name for x in self.clients_data.get_groups() if"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_187827f8","line":619,"updated":"2016-01-07 16:14:16.000000000","message":"Use double quote \"\" so you don\u0027t have to escape \u0027","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"47e50b1e66727e45668ce9178850ea6fc33fa20e","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        if alias in self._partial_clients:"},{"line_number":617,"context_line":"                raise exceptions.InvalidClientAlias("},{"line_number":618,"context_line":"                    alias\u003dalias,"},{"line_number":619,"context_line":"                    reason\u003d\u0027it\\\u0027s a registered service client name\u0027)"},{"line_number":620,"context_line":"        # Check if alias is a simple client name. We don\u0027t wont to allow this"},{"line_number":621,"context_line":"        # as it may lead to conflicts between clients"},{"line_number":622,"context_line":"        groups \u003d [x.name for x in self.clients_data.get_groups() if"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_92c38e8a","line":619,"in_reply_to":"fa69d971_187827f8","updated":"2016-01-07 17:58:56.000000000","message":"I\u0027m trying to be consistent with the rest of the code here, I don\u0027t see any issue with the escape?","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af6eb7b012ab5a0752bbbba5db7597a544da56be","unresolved":false,"context_lines":[{"line_number":626,"context_line":"            if alias in clients:"},{"line_number":627,"context_line":"                raise exceptions.InvalidClientAlias("},{"line_number":628,"context_line":"                    alias\u003dalias,"},{"line_number":629,"context_line":"                    reason\u003d\u0027it\\\u0027s a service client name in group %s\u0027 % group)"},{"line_number":630,"context_line":"        # If all checks are passed set the alias"},{"line_number":631,"context_line":"        self.client_aliases[alias] \u003d name"},{"line_number":632,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_185fc776","line":629,"updated":"2016-01-07 16:14:16.000000000","message":"Same","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"}],"tempest/manager.py":[{"author":{"_account_id":10644,"name":"David Paterson","email":"davpat2112@yahoo.com","username":"dpaterson"},"change_message_id":"894a7f9f258f96429a70a7faf52798c0d60919be","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    and a client object for a test case to use in performing actions."},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def __init__(self, credentials, identity_api_version):"},{"line_number":33,"context_line":"        \"\"\"Initialization of base manager class"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        Credentials to be used within the various client classes managed by the"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a7e1126_5f972d90","line":32,"range":{"start_line":32,"start_character":56,"end_line":32,"end_character":58},"updated":"2015-12-17 17:18:07.000000000","message":"Can we set identity_api_version default?","commit_id":"2032a3e3355576b8df05deace78fcc83b9795632"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"ace7ce42c8ba9cbe03932052bd148be4eae0f578","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    and a client object for a test case to use in performing actions."},{"line_number":30,"context_line":"    \"\"\""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def __init__(self, credentials, identity_api_version):"},{"line_number":33,"context_line":"        \"\"\"Initialization of base manager class"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        Credentials to be used within the various client classes managed by the"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a7e1126_9c1031aa","line":32,"range":{"start_line":32,"start_character":56,"end_line":32,"end_character":58},"in_reply_to":"3a7e1126_5f972d90","updated":"2015-12-17 23:48:50.000000000","message":"One of the last steps of this refactor is probably going to be moving the new Clients class to its own module (in preparation for tempest-lib migration), and integrate this base class into Clients, as it does not to have any reason to exists separated.\nMeanwhile I can keep the default value here as you suggested.","commit_id":"2032a3e3355576b8df05deace78fcc83b9795632"}],"tempest/tests/services/test_clients.py":[{"author":{"_account_id":7350,"name":"Jordan Pittier","email":"jordan.pittier@gmail.com","username":"JordanP"},"change_message_id":"af6eb7b012ab5a0752bbbba5db7597a544da56be","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        mock_get_auth_provider.assert_called_once_with(self.creds,"},{"line_number":352,"context_line":"                                                       pre_auth\u003dTrue)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    @mock.patch(\u0027tempest.manager.get_auth_provider\u0027)"},{"line_number":355,"context_line":"    def test_clients_init_with_params(self, _):"},{"line_number":356,"context_line":"        identity_api_version \u003d \u0027v2\u0027"},{"line_number":357,"context_line":"        params \u003d dict(disable_ssl_certificate_validation\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_988897c8","line":354,"updated":"2016-01-07 16:14:16.000000000","message":"If you don\u0027t want to pass your mock into the method, you can do :\n  @mock.patch(\u0027tempest.manager.get_auth_provider\u0027, mock.Mock())\n  def test_clients_init_with_params(self):\n\nNot sure it fits into 80 char though.","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"},{"author":{"_account_id":1921,"name":"Andrea Frittoli","email":"andrea.frittoli@gmail.com","username":"andrea-frittoli"},"change_message_id":"47e50b1e66727e45668ce9178850ea6fc33fa20e","unresolved":false,"context_lines":[{"line_number":351,"context_line":"        mock_get_auth_provider.assert_called_once_with(self.creds,"},{"line_number":352,"context_line":"                                                       pre_auth\u003dTrue)"},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"    @mock.patch(\u0027tempest.manager.get_auth_provider\u0027)"},{"line_number":355,"context_line":"    def test_clients_init_with_params(self, _):"},{"line_number":356,"context_line":"        identity_api_version \u003d \u0027v2\u0027"},{"line_number":357,"context_line":"        params \u003d dict(disable_ssl_certificate_validation\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa69d971_72685a88","line":354,"in_reply_to":"fa69d971_988897c8","updated":"2016-01-07 17:58:56.000000000","message":"I\u0027ll give a try, thanks","commit_id":"3afffbad22607c9abce6138152cb7e49aad74fe7"}]}
