)]}'
{"cinderlib/cinderlib.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"53d784ae34d1d3a72ac96ae8c5cefca15a4e5dbb","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if \u0027volume_driver\u0027 in kvs:"},{"line_number":259,"context_line":"            driver_ns \u003d kvs[\u0027volume_driver\u0027].rsplit(\u0027.\u0027, 1)[0]"},{"line_number":260,"context_line":"            __import__(driver_ns)"},{"line_number":261,"context_line":"        opts \u003d configuration.CONF._opts.copy()"},{"line_number":262,"context_line":"        opts.update(configuration.CONF._groups[\u0027backend_defaults\u0027]._opts)"},{"line_number":263,"context_line":"        return opts"},{"line_number":264,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_70e9ae7d","line":261,"range":{"start_line":261,"start_character":33,"end_line":261,"end_character":39},"updated":"2019-12-16 16:32:36.000000000","message":"This concerns me a little. Have we approached the oslo team to see if we can get what we need in a public way without resorting to private calls and variables?","commit_id":"a65f840474e6da552593143a2cf1437a280bab5e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b98afe4317411c45ea5295f4c03ed5b14037559c","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if \u0027volume_driver\u0027 in kvs:"},{"line_number":259,"context_line":"            driver_ns \u003d kvs[\u0027volume_driver\u0027].rsplit(\u0027.\u0027, 1)[0]"},{"line_number":260,"context_line":"            __import__(driver_ns)"},{"line_number":261,"context_line":"        opts \u003d configuration.CONF._opts.copy()"},{"line_number":262,"context_line":"        opts.update(configuration.CONF._groups[\u0027backend_defaults\u0027]._opts)"},{"line_number":263,"context_line":"        return opts"},{"line_number":264,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_80b2d995","line":261,"range":{"start_line":261,"start_character":33,"end_line":261,"end_character":39},"in_reply_to":"3fa7e38b_70e9ae7d","updated":"2019-12-16 19:01:23.000000000","message":"No I haven\u0027t approached them because most of what we have to do here related to the configuration is because oslo.config was never meant to be used like this (it\u0027s for projects, not libraries which is how we are using Cinder code here).  But I can talk with them as they may have a cleaner solution.","commit_id":"a65f840474e6da552593143a2cf1437a280bab5e"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b1d1164d103ac2a5bc30d4f783f13b0001af2533","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if \u0027volume_driver\u0027 in kvs:"},{"line_number":259,"context_line":"            driver_ns \u003d kvs[\u0027volume_driver\u0027].rsplit(\u0027.\u0027, 1)[0]"},{"line_number":260,"context_line":"            __import__(driver_ns)"},{"line_number":261,"context_line":"        opts \u003d configuration.CONF._opts.copy()"},{"line_number":262,"context_line":"        opts.update(configuration.CONF._groups[\u0027backend_defaults\u0027]._opts)"},{"line_number":263,"context_line":"        return opts"},{"line_number":264,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_abdc9b17","line":261,"range":{"start_line":261,"start_character":33,"end_line":261,"end_character":39},"in_reply_to":"3fa7e38b_70e9ae7d","updated":"2019-12-16 17:12:40.000000000","message":"This is a good point.  The oslo.config types have a _formatter function defined on them that\u0027s used to generate the default and sample default values when the config generator is used, so if that were exposed, it should be possible to use the defined formatters instead of doing opt-\u003estr conversion ourselves.","commit_id":"a65f840474e6da552593143a2cf1437a280bab5e"},{"author":{"_account_id":9535,"name":"Gorka Eguileor","email":"geguileo@redhat.com","username":"Gorka"},"change_message_id":"b98afe4317411c45ea5295f4c03ed5b14037559c","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        if \u0027volume_driver\u0027 in kvs:"},{"line_number":259,"context_line":"            driver_ns \u003d kvs[\u0027volume_driver\u0027].rsplit(\u0027.\u0027, 1)[0]"},{"line_number":260,"context_line":"            __import__(driver_ns)"},{"line_number":261,"context_line":"        opts \u003d configuration.CONF._opts.copy()"},{"line_number":262,"context_line":"        opts.update(configuration.CONF._groups[\u0027backend_defaults\u0027]._opts)"},{"line_number":263,"context_line":"        return opts"},{"line_number":264,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_6080fd9d","line":261,"range":{"start_line":261,"start_character":33,"end_line":261,"end_character":39},"in_reply_to":"3fa7e38b_abdc9b17","updated":"2019-12-16 19:01:23.000000000","message":"`_formatter` is still a non-public function, and doesn\u0027t seem to give us exactly what we want.\n\nI don\u0027t know if this is a bug, an inconsistency, or what, but MultiStrOpt is a MultiOpt where each element is a MultiString instead of just a String type, so if we call opt.type._formatter for the individual elements we get the wrong data, because it treats the string as an iterable and each letter a if it were a string.\n\nIt works as expected if we pass to opt.type._formatter the whole array, but if we do that with a MultiOpt of Dicts, then it will raise an error because it gets a list and it expects a dict.\n\nIt also doesn\u0027t handle a DictOpt with bounds.\n\nIn my local repo I have changed the code and tests using the `_formatter` and taking into account the MultiStrOpt issue (but not the DictOpt with bounds) and it does require considerable fewer LOC.\n\nIf you prefer I can submit that one, since we don\u0027t have any DictOpt with bounds and I don\u0027t anticipate us ever having one.","commit_id":"a65f840474e6da552593143a2cf1437a280bab5e"}]}
