)]}'
{"config_tempest/services/base.py":[{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"758f34756045dbaf088d381af1d886ba03b2f697","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.versions \u003d []"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def get_extensions(self):"},{"line_number":74,"context_line":"        return list(set(self.extensions))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    @staticmethod"},{"line_number":77,"context_line":"    def get_service_name():"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_6b6049a6","line":74,"updated":"2018-08-23 10:59:48.000000000","message":"is this double conversion a safety guard? From a quick check in the code it looks like self.extensions is always assigned a list.","commit_id":"6b37bd2a4812260c53f17dcba84b906bcbb7e826"}],"config_tempest/services/services.py":[{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"758f34756045dbaf088d381af1d886ba03b2f697","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from config_tempest.services import volume"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"import config_tempest.services"},{"line_number":25,"context_line":"import importlib"},{"line_number":26,"context_line":"import pkgutil"},{"line_number":27,"context_line":"import pyclbr"},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_681a8f7d","line":25,"updated":"2018-08-23 10:59:48.000000000","message":"system import should go first:\nhttps://docs.openstack.org/hacking/latest/user/hacking.html#imports","commit_id":"6b37bd2a4812260c53f17dcba84b906bcbb7e826"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"758f34756045dbaf088d381af1d886ba03b2f697","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        self.discover()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @property"},{"line_number":45,"context_line":"    def service_classes(self):"},{"line_number":46,"context_line":"        if not self._service_classes:"},{"line_number":47,"context_line":"            path \u003d config_tempest.services.__path__"},{"line_number":48,"context_line":"            prefix \u003d config_tempest.services.__name__ + \u0027.\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_881feb6a","line":45,"updated":"2018-08-23 10:59:48.000000000","message":"I would add the docstring to this, as it may not be immediately understandable","commit_id":"6b37bd2a4812260c53f17dcba84b906bcbb7e826"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"758f34756045dbaf088d381af1d886ba03b2f697","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                            endpoint_data), s_type)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"                    # Create the service class and add it to services list"},{"line_number":87,"context_line":"                    _service \u003d s_class(s_type, url, token,"},{"line_number":88,"context_line":"                                       self._ssl_validation,"},{"line_number":89,"context_line":"                                       self._clients.get_service_client("},{"line_number":90,"context_line":"                                           s_type))"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_8b04c516","line":87,"updated":"2018-08-23 10:59:48.000000000","message":"uh, a local variable with _ as first character?","commit_id":"6b37bd2a4812260c53f17dcba84b906bcbb7e826"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"758f34756045dbaf088d381af1d886ba03b2f697","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                                           s_type))"},{"line_number":91,"context_line":"                    _service.set_extensions()"},{"line_number":92,"context_line":"                    # discover extensions of the service"},{"line_number":93,"context_line":"                    _service.set_extensions()"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"                    # discover versions of the service"},{"line_number":96,"context_line":"                    _service.set_versions()"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_080bdb29","line":93,"updated":"2018-08-23 10:59:48.000000000","message":"called twice?","commit_id":"6b37bd2a4812260c53f17dcba84b906bcbb7e826"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"758f34756045dbaf088d381af1d886ba03b2f697","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        \"\"\""},{"line_number":264,"context_line":"        extensions \u003d []"},{"line_number":265,"context_line":"        for o in service_objects:"},{"line_number":266,"context_line":"            if o:"},{"line_number":267,"context_line":"                extensions +\u003d o.extensions"},{"line_number":268,"context_line":"        return extensions"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3f79a3b5_eb4a1925","line":266,"updated":"2018-08-23 10:59:48.000000000","message":"Reminder for myself: I was a bit puzzled by reading this change, but in fact service_objects is a bit misleading. This function is basically flattening a list of lists, and it can be probably changed into a one-liner list comprehension directly inside its only user, merge_exts_multiversion_service()","commit_id":"6b37bd2a4812260c53f17dcba84b906bcbb7e826"}]}
