)]}'
{"keystone/cmd/bootstrap.py":[{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"d625c798e0e713d59ec0f3bbc2292b2e055633d4","unresolved":false,"context_lines":[{"line_number":25,"context_line":"PROVIDERS \u003d provider_api.ProviderAPIs"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class Bootstrapper(object):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self):"},{"line_number":31,"context_line":"        backends.load_backends()"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_7cba8a0a","line":28,"updated":"2018-04-10 08:14:33.000000000","message":"Then the test code will use this Class directly, right?","commit_id":"d80c0a807fca8dbccbc77f0bb605e706a4bf362c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"39e385dc4da6320db2ac954778f0aecc32011ab9","unresolved":false,"context_lines":[{"line_number":25,"context_line":"PROVIDERS \u003d provider_api.ProviderAPIs"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class Bootstrapper(object):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self):"},{"line_number":31,"context_line":"        backends.load_backends()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_7923c3bf","line":28,"in_reply_to":"bf659307_0e2ea6f9","updated":"2018-04-27 16:37:52.000000000","message":"Yeah - I guess I\u0027m trying to make it so that it\u0027s easy for a test class to grab an instance of this object and run bootstrap. Then the cli module should do the same thing.","commit_id":"d80c0a807fca8dbccbc77f0bb605e706a4bf362c"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"35cbc377f4d1b2273fbec4a4b75bdfedfb971cae","unresolved":false,"context_lines":[{"line_number":25,"context_line":"PROVIDERS \u003d provider_api.ProviderAPIs"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class Bootstrapper(object):"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self):"},{"line_number":31,"context_line":"        backends.load_backends()"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_0e2ea6f9","line":28,"in_reply_to":"bf659307_7cba8a0a","updated":"2018-04-10 18:44:39.000000000","message":"It looks like the test code call this indirectly through cli still.","commit_id":"d80c0a807fca8dbccbc77f0bb605e706a4bf362c"}],"keystone/cmd/cli.py":[{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"35cbc377f4d1b2273fbec4a4b75bdfedfb971cae","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        services, endpoints, etc) of Keystone when standing up a new"},{"line_number":121,"context_line":"        deployment."},{"line_number":122,"context_line":"        \"\"\""},{"line_number":123,"context_line":"        self.username \u003d ("},{"line_number":124,"context_line":"            os.environ.get(\u0027OS_BOOTSTRAP_USERNAME\u0027) or"},{"line_number":125,"context_line":"            CONF.command.bootstrap_username)"},{"line_number":126,"context_line":"        self.project_name \u003d ("},{"line_number":127,"context_line":"            os.environ.get(\u0027OS_BOOTSTRAP_PROJECT_NAME\u0027) or"},{"line_number":128,"context_line":"            CONF.command.bootstrap_project_name)"},{"line_number":129,"context_line":"        self.role_name \u003d ("},{"line_number":130,"context_line":"            os.environ.get(\u0027OS_BOOTSTRAP_ROLE_NAME\u0027) or"},{"line_number":131,"context_line":"            CONF.command.bootstrap_role_name)"},{"line_number":132,"context_line":"        self.password \u003d ("},{"line_number":133,"context_line":"            os.environ.get(\u0027OS_BOOTSTRAP_PASSWORD\u0027) or"},{"line_number":134,"context_line":"            CONF.command.bootstrap_password)"},{"line_number":135,"context_line":"        self.service_name \u003d ("},{"line_number":136,"context_line":"            os.environ.get(\u0027OS_BOOTSTRAP_SERVICE_NAME\u0027) or"},{"line_number":137,"context_line":"            CONF.command.bootstrap_service_name)"},{"line_number":138,"context_line":"        self.admin_url \u003d ("},{"line_number":139,"context_line":"            os.environ.get(\u0027OS_BOOTSTRAP_ADMIN_URL\u0027) or"},{"line_number":140,"context_line":"            CONF.command.bootstrap_admin_url)"},{"line_number":141,"context_line":"        self.public_url \u003d ("},{"line_number":142,"context_line":"            os.environ.get(\u0027OS_BOOTSTRAP_PUBLIC_URL\u0027) or"},{"line_number":143,"context_line":"            CONF.command.bootstrap_public_url)"},{"line_number":144,"context_line":"        self.internal_url \u003d ("},{"line_number":145,"context_line":"            os.environ.get(\u0027OS_BOOTSTRAP_INTERNAL_URL\u0027) or"},{"line_number":146,"context_line":"            CONF.command.bootstrap_internal_url)"},{"line_number":147,"context_line":"        self.region_id \u003d ("},{"line_number":148,"context_line":"            os.environ.get(\u0027OS_BOOTSTRAP_REGION_ID\u0027) or"},{"line_number":149,"context_line":"            CONF.command.bootstrap_region_id)"},{"line_number":150,"context_line":"        self.service_id \u003d None"},{"line_number":151,"context_line":"        self.endpoints \u003d None"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_8e395640","line":149,"range":{"start_line":123,"start_character":8,"end_line":149,"end_character":45},"updated":"2018-04-10 18:44:39.000000000","message":"Wonder if this could be consolidated with below according to wxy\u0027s comment. Password would still need to be checked though, so maybe it\u0027s not worth it.","commit_id":"d80c0a807fca8dbccbc77f0bb605e706a4bf362c"},{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"d625c798e0e713d59ec0f3bbc2292b2e055633d4","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self.bootstrapper.bootstrap()"},{"line_number":170,"context_line":"        self.role_id \u003d self.bootstrapper.admin_role_id"},{"line_number":171,"context_line":"        self.project_id \u003d self.bootstrapper.project_id"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    @classmethod"},{"line_number":174,"context_line":"    def main(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_3c873264","line":171,"updated":"2018-04-10 08:14:33.000000000","message":"why not set bootstrapper\u0027s properties from input or env directly? The properties like self.password, self.username, etc, seems useless now or I missed something?","commit_id":"d80c0a807fca8dbccbc77f0bb605e706a4bf362c"},{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"35cbc377f4d1b2273fbec4a4b75bdfedfb971cae","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self.bootstrapper.bootstrap()"},{"line_number":170,"context_line":"        self.role_id \u003d self.bootstrapper.admin_role_id"},{"line_number":171,"context_line":"        self.project_id \u003d self.bootstrapper.project_id"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    @classmethod"},{"line_number":174,"context_line":"    def main(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_8ecb9648","line":171,"in_reply_to":"bf659307_3c873264","updated":"2018-04-10 18:44:39.000000000","message":"I think the main reason is needing to check if self.password is None and throw an error if so, rather than directly checking. Not sure if that could be moved into the bootstrap class instead? Otherwise here is fine.","commit_id":"d80c0a807fca8dbccbc77f0bb605e706a4bf362c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"39e385dc4da6320db2ac954778f0aecc32011ab9","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        self.bootstrapper.bootstrap()"},{"line_number":170,"context_line":"        self.role_id \u003d self.bootstrapper.admin_role_id"},{"line_number":171,"context_line":"        self.project_id \u003d self.bootstrapper.project_id"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    @classmethod"},{"line_number":174,"context_line":"    def main(cls):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_dc251dad","line":171,"in_reply_to":"bf659307_8ecb9648","updated":"2018-04-27 16:37:52.000000000","message":"We could do it that way. I\u0027m not sure which is best or if I have an opinion yet.\n\nI think the current way I\u0027m doing it results in a bit of duplication, so maybe I can try it with the new class directly.","commit_id":"d80c0a807fca8dbccbc77f0bb605e706a4bf362c"}],"keystone/common/provider_api.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fff03969e05c69f01734d5ece9e5ad96cc57d20e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"            self.__registry.clear()"},{"line_number":55,"context_line":"            self.__locked \u003d False"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        @property"},{"line_number":58,"context_line":"        def _is_registry_locked(self):"},{"line_number":59,"context_line":"            return self.__locked"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        def lock_provider_registry(self):"},{"line_number":62,"context_line":"            self.__locked \u003d True"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf659307_22f44fcf","line":59,"range":{"start_line":57,"start_character":8,"end_line":59,"end_character":32},"updated":"2018-04-04 21:50:11.000000000","message":"bah - this isn\u0027t required anymore...","commit_id":"01bafec7efce908f4faac75c2a75fdb9a793b0dc"}],"keystone/tests/unit/test_cli.py":[{"author":{"_account_id":21420,"name":"Gage Hugo","email":"gagehugo@gmail.com","username":"ghugo"},"change_message_id":"35cbc377f4d1b2273fbec4a4b75bdfedfb971cae","unresolved":false,"context_lines":[{"line_number":96,"context_line":"             default_config_files\u003dconfig_files)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def test_bootstrap(self):"},{"line_number":99,"context_line":"        bootstrap \u003d cli.BootStrap()"},{"line_number":100,"context_line":"        self._do_test_bootstrap(bootstrap)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _do_test_bootstrap(self, bootstrap):"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf659307_ee61f23a","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":35},"updated":"2018-04-10 18:44:39.000000000","message":"I assume the next steps would involve calling the bootstrap class directly?","commit_id":"d80c0a807fca8dbccbc77f0bb605e706a4bf362c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"39e385dc4da6320db2ac954778f0aecc32011ab9","unresolved":false,"context_lines":[{"line_number":96,"context_line":"             default_config_files\u003dconfig_files)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def test_bootstrap(self):"},{"line_number":99,"context_line":"        bootstrap \u003d cli.BootStrap()"},{"line_number":100,"context_line":"        self._do_test_bootstrap(bootstrap)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"    def _do_test_bootstrap(self, bootstrap):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f6a8fd7_fc74a19e","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":35},"in_reply_to":"bf659307_ee61f23a","updated":"2018-04-27 16:37:52.000000000","message":"Yeah - and then after that we should be able to start redoing all the logic in the test setup methods to reuse this.","commit_id":"d80c0a807fca8dbccbc77f0bb605e706a4bf362c"}]}
