)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"081968e2f3ba1abfbd1797032a8640f28188bcbf","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP Make factory for a CloudRegion from CONF objects"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Depends-On: https://review.openstack.org/644251"},{"line_number":10,"context_line":"Co-Authored-By: Eric Fried \u003copenstack@fried.cc\u003e"},{"line_number":11,"context_line":"Change-Id: I05fb4da39d2eefc91828ace02db2741b62a2cb0a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3fce034c_96adccea","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":47},"updated":"2019-04-17 22:57:37.000000000","message":"ahdang, still need this until it\u0027s in a release, whereupon we need to bump reqs too.","commit_id":"45dadf909598f7fba7d5ff73da6705d3b07685b5"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ed1575385df59c945544c94e233074958803600c","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP Make factory for a CloudRegion from CONF objects"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Depends-On: https://review.openstack.org/644251"},{"line_number":10,"context_line":"Co-Authored-By: Eric Fried \u003copenstack@fried.cc\u003e"},{"line_number":11,"context_line":"Change-Id: I05fb4da39d2eefc91828ace02db2741b62a2cb0a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3fce034c_d6803449","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":47},"in_reply_to":"3fce034c_96adccea","updated":"2019-04-17 22:58:08.000000000","message":"Done","commit_id":"45dadf909598f7fba7d5ff73da6705d3b07685b5"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a894041aec7b53fc2e35feb6834ac509c961dfeb","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP Make factory for a CloudRegion from CONF objects"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Depends-On: https://review.openstack.org/644251"},{"line_number":10,"context_line":"Co-Authored-By: Eric Fried \u003copenstack@fried.cc\u003e"},{"line_number":11,"context_line":"Change-Id: I05fb4da39d2eefc91828ace02db2741b62a2cb0a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"3fce034c_561684f3","line":9,"range":{"start_line":9,"start_character":0,"end_line":9,"end_character":47},"in_reply_to":"3fce034c_d6803449","updated":"2019-04-17 23:13:31.000000000","message":"Proposed keystoneauth 3.14.0 via https://review.openstack.org/653626","commit_id":"45dadf909598f7fba7d5ff73da6705d3b07685b5"}],"openstack/config/cloud_region.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"13f3156c56b583f6b57b68fab42e2260f579a1ef","unresolved":false,"context_lines":[{"line_number":90,"context_line":"              include_deprecated\u003dFalse, deprecated_opts\u003dNone):"},{"line_number":91,"context_line":"    config_dict \u003d config_defaults.get_defaults()"},{"line_number":92,"context_line":"    opts \u003d ks_loading.get_adapter_conf_options("},{"line_number":93,"context_line":"        include_deprecated\u003dFalse,"},{"line_number":94,"context_line":"        deprecated_opts\u003ddeprecated_opts)"},{"line_number":95,"context_line":"    stm \u003d os_service_types.ServiceTypes()"},{"line_number":96,"context_line":"    # TODO(mordred) Think about region_name here"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_1dd9ad20","line":93,"range":{"start_line":93,"start_character":27,"end_line":93,"end_character":32},"updated":"2019-03-15 16:42:48.000000000","message":"include_deprecated","commit_id":"beb7339f6ce668ceaee8aa8c5e65de1dcc9b527e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"13f3156c56b583f6b57b68fab42e2260f579a1ef","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    stm \u003d os_service_types.ServiceTypes()"},{"line_number":96,"context_line":"    # TODO(mordred) Think about region_name here"},{"line_number":97,"context_line":"    region_name \u003d None"},{"line_number":98,"context_line":"    for st in stm.all_types_by_service_type.keys():"},{"line_number":99,"context_line":"        project_name \u003d stm.get_project_name(st)"},{"line_number":100,"context_line":"        try:"},{"line_number":101,"context_line":"          c \u003d conf[project_name]"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_9de59dde","line":98,"range":{"start_line":98,"start_character":43,"end_line":98,"end_character":50},"updated":"2019-03-15 16:42:48.000000000","message":"redundant (no-op in py3, creates a new list in py2)","commit_id":"beb7339f6ce668ceaee8aa8c5e65de1dcc9b527e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"13f3156c56b583f6b57b68fab42e2260f579a1ef","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    region_name \u003d None"},{"line_number":98,"context_line":"    for st in stm.all_types_by_service_type.keys():"},{"line_number":99,"context_line":"        project_name \u003d stm.get_project_name(st)"},{"line_number":100,"context_line":"        try:"},{"line_number":101,"context_line":"          c \u003d conf[project_name]"},{"line_number":102,"context_line":"          for opt in opts:"},{"line_number":103,"context_line":"              if opt.name \u003d\u003d \u0027region_name\u0027:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_3da6e9ac","line":100,"range":{"start_line":100,"start_character":8,"end_line":100,"end_character":11},"updated":"2019-03-15 16:42:48.000000000","message":"missing except","commit_id":"beb7339f6ce668ceaee8aa8c5e65de1dcc9b527e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"13f3156c56b583f6b57b68fab42e2260f579a1ef","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                  config_name \u003d \u0027{service_type}_{name}\u0027.format("},{"line_number":108,"context_line":"                      service_type\u003dst,"},{"line_number":109,"context_line":"                      name\u003dopt.name).replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":110,"context_line":"                  config_dict[config_name] \u003d getattr(opt.name)"},{"line_number":111,"context_line":"    if session:"},{"line_number":112,"context_line":"        if auth and not session.auth:"},{"line_number":113,"context_line":"            session.auth \u003d auth"}],"source_content_type":"text/x-python","patch_set":1,"id":"5fc1f717_9d0cbd94","line":110,"range":{"start_line":110,"start_character":45,"end_line":110,"end_character":62},"updated":"2019-03-15 16:42:48.000000000","message":"getattr(c, opt.name) ?","commit_id":"beb7339f6ce668ceaee8aa8c5e65de1dcc9b527e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"010d0f65e079a35ff39a1ba27b3e4efa1fbaf350","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    region_name \u003d None"},{"line_number":98,"context_line":"    for st in stm.all_types_by_service_type:"},{"line_number":99,"context_line":"        project_name \u003d stm.get_project_name(st)"},{"line_number":100,"context_line":"        c \u003d conf[project_name]"},{"line_number":101,"context_line":"        for opt in opts:"},{"line_number":102,"context_line":"            if opt.name \u003d\u003d \u0027region_name\u0027:"},{"line_number":103,"context_line":"                region_name \u003d opt.region_name"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_e242f90e","line":100,"range":{"start_line":100,"start_character":8,"end_line":100,"end_character":30},"updated":"2019-03-15 19:52:45.000000000","message":"turns out the try/except here should have been on oslo_config.cfg.NoSuchOptError, where we should probably pass, right?","commit_id":"bf393510228ceb89f64661f0499eaf6e166eeffd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d12df7aaade77ca17fd6d3df8bc2f65f059b9357","unresolved":false,"context_lines":[{"line_number":97,"context_line":"    region_name \u003d None"},{"line_number":98,"context_line":"    for st in stm.all_types_by_service_type:"},{"line_number":99,"context_line":"        project_name \u003d stm.get_project_name(st)"},{"line_number":100,"context_line":"        c \u003d conf[project_name]"},{"line_number":101,"context_line":"        for opt in opts:"},{"line_number":102,"context_line":"            if opt.name \u003d\u003d \u0027region_name\u0027:"},{"line_number":103,"context_line":"                region_name \u003d opt.region_name"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_8280d5f6","line":100,"range":{"start_line":100,"start_character":8,"end_line":100,"end_character":30},"in_reply_to":"5fc1f717_e242f90e","updated":"2019-03-15 20:05:04.000000000","message":"Done","commit_id":"bf393510228ceb89f64661f0499eaf6e166eeffd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d7bd23efe90ded22a10ac154c92f39a3693bd2f4","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            if opt.name \u003d\u003d \u0027region_name\u0027:"},{"line_number":103,"context_line":"                region_name \u003d opt.region_name"},{"line_number":104,"context_line":"                continue"},{"line_number":105,"context_line":"            if hasattr(opt.name, c):"},{"line_number":106,"context_line":"                config_name \u003d \u0027{service_type}_{name}\u0027.format("},{"line_number":107,"context_line":"                    service_type\u003dst,"},{"line_number":108,"context_line":"                    name\u003dopt.name).replace(\u0027-\u0027, \u0027_\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_02bf05d1","line":105,"range":{"start_line":105,"start_character":15,"end_line":105,"end_character":35},"updated":"2019-03-15 20:01:10.000000000","message":"hasattr(c, opt.name)","commit_id":"bf393510228ceb89f64661f0499eaf6e166eeffd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d12df7aaade77ca17fd6d3df8bc2f65f059b9357","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            if opt.name \u003d\u003d \u0027region_name\u0027:"},{"line_number":103,"context_line":"                region_name \u003d opt.region_name"},{"line_number":104,"context_line":"                continue"},{"line_number":105,"context_line":"            if hasattr(opt.name, c):"},{"line_number":106,"context_line":"                config_name \u003d \u0027{service_type}_{name}\u0027.format("},{"line_number":107,"context_line":"                    service_type\u003dst,"},{"line_number":108,"context_line":"                    name\u003dopt.name).replace(\u0027-\u0027, \u0027_\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5fc1f717_a27b9125","line":105,"range":{"start_line":105,"start_character":15,"end_line":105,"end_character":35},"in_reply_to":"5fc1f717_02bf05d1","updated":"2019-03-15 20:05:04.000000000","message":"Done","commit_id":"bf393510228ceb89f64661f0499eaf6e166eeffd"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e3cc7200cb0948e47c2598353b38025389dd293d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            c \u003d conf[project_name]"},{"line_number":103,"context_line":"            for opt in opts:"},{"line_number":104,"context_line":"                if opt.name \u003d\u003d \u0027region_name\u0027:"},{"line_number":105,"context_line":"                    region_name \u003d opt.region_name"},{"line_number":106,"context_line":"                    continue"},{"line_number":107,"context_line":"                if hasattr(c, opt.name):"},{"line_number":108,"context_line":"                    config_name \u003d \u0027{service_type}_{name}\u0027.format("}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_2d4229ac","line":105,"range":{"start_line":105,"start_character":34,"end_line":105,"end_character":49},"updated":"2019-03-17 18:25:16.000000000","message":"c.region_name?","commit_id":"40298e84cd1214557a36f042e8b612f2d6df042e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"398973fec8c113d12c9371e0d0a8add965fae9c1","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            c \u003d conf[project_name]"},{"line_number":103,"context_line":"            for opt in opts:"},{"line_number":104,"context_line":"                if opt.name \u003d\u003d \u0027region_name\u0027:"},{"line_number":105,"context_line":"                    region_name \u003d opt.region_name"},{"line_number":106,"context_line":"                    continue"},{"line_number":107,"context_line":"                if hasattr(c, opt.name):"},{"line_number":108,"context_line":"                    config_name \u003d \u0027{service_type}_{name}\u0027.format("}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_0dfc0d3c","line":105,"range":{"start_line":105,"start_character":34,"end_line":105,"end_character":49},"in_reply_to":"5fc1f717_2d4229ac","updated":"2019-03-17 18:40:18.000000000","message":"Done","commit_id":"40298e84cd1214557a36f042e8b612f2d6df042e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e3cc7200cb0948e47c2598353b38025389dd293d","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                if opt.name \u003d\u003d \u0027region_name\u0027:"},{"line_number":105,"context_line":"                    region_name \u003d opt.region_name"},{"line_number":106,"context_line":"                    continue"},{"line_number":107,"context_line":"                if hasattr(c, opt.name):"},{"line_number":108,"context_line":"                    config_name \u003d \u0027{service_type}_{name}\u0027.format("},{"line_number":109,"context_line":"                        service_type\u003dst,"},{"line_number":110,"context_line":"                        name\u003dopt.name).replace(\u0027-\u0027, \u0027_\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_6d6a711a","line":107,"updated":"2019-03-17 18:25:16.000000000","message":"I think we need a special case for valid_interfaces. Adapter has special handling for translating conf.valid_interfaces to `interface`.\n\nI\u0027m guessing since Connection.foo is a Proxy which is a subclass of Adapter, it handles .interface being a list.","commit_id":"40298e84cd1214557a36f042e8b612f2d6df042e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"398973fec8c113d12c9371e0d0a8add965fae9c1","unresolved":false,"context_lines":[{"line_number":104,"context_line":"                if opt.name \u003d\u003d \u0027region_name\u0027:"},{"line_number":105,"context_line":"                    region_name \u003d opt.region_name"},{"line_number":106,"context_line":"                    continue"},{"line_number":107,"context_line":"                if hasattr(c, opt.name):"},{"line_number":108,"context_line":"                    config_name \u003d \u0027{service_type}_{name}\u0027.format("},{"line_number":109,"context_line":"                        service_type\u003dst,"},{"line_number":110,"context_line":"                        name\u003dopt.name).replace(\u0027-\u0027, \u0027_\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_2df7895b","line":107,"in_reply_to":"5fc1f717_6d6a711a","updated":"2019-03-17 18:40:18.000000000","message":"Done, sad-face.","commit_id":"40298e84cd1214557a36f042e8b612f2d6df042e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e3cc7200cb0948e47c2598353b38025389dd293d","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                if hasattr(c, opt.name):"},{"line_number":108,"context_line":"                    config_name \u003d \u0027{service_type}_{name}\u0027.format("},{"line_number":109,"context_line":"                        service_type\u003dst,"},{"line_number":110,"context_line":"                        name\u003dopt.name).replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":111,"context_line":"                    config_dict[config_name] \u003d getattr(c, opt.name)"},{"line_number":112,"context_line":"        except cfg.NoSuchOptError:"},{"line_number":113,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_8d0c7d94","line":110,"range":{"start_line":110,"start_character":38,"end_line":110,"end_character":56},"updated":"2019-03-17 18:25:16.000000000","message":"This needs to be done earlier.\n\nThe question I have is: do values coming from conf always have underscores or can they have hyphens? (If the former, we can just replace() at the top of the loop and be done; if the latter, we need to check for both in c.)","commit_id":"40298e84cd1214557a36f042e8b612f2d6df042e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"398973fec8c113d12c9371e0d0a8add965fae9c1","unresolved":false,"context_lines":[{"line_number":107,"context_line":"                if hasattr(c, opt.name):"},{"line_number":108,"context_line":"                    config_name \u003d \u0027{service_type}_{name}\u0027.format("},{"line_number":109,"context_line":"                        service_type\u003dst,"},{"line_number":110,"context_line":"                        name\u003dopt.name).replace(\u0027-\u0027, \u0027_\u0027)"},{"line_number":111,"context_line":"                    config_dict[config_name] \u003d getattr(c, opt.name)"},{"line_number":112,"context_line":"        except cfg.NoSuchOptError:"},{"line_number":113,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_cd97e5eb","line":110,"range":{"start_line":110,"start_character":38,"end_line":110,"end_character":56},"in_reply_to":"5fc1f717_8d0c7d94","updated":"2019-03-17 18:40:18.000000000","message":"Done in the latter-ish way, which seems fairly harmless, if hackish.","commit_id":"40298e84cd1214557a36f042e8b612f2d6df042e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"a8b479b7a78d9d051278b945a69395adc45da2c7","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from keystoneauth1 import loading as ks_loading"},{"line_number":21,"context_line":"from keystoneauth1 import session as ks_session"},{"line_number":22,"context_line":"import os_service_types"},{"line_number":23,"context_line":"from oslo_config import cfg"},{"line_number":24,"context_line":"import requestsexceptions"},{"line_number":25,"context_line":"from six.moves import urllib"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_b30afc1c","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":27},"updated":"2019-03-17 23:41:53.000000000","message":"Let\u0027s see if we can handle the exception without actually importing the library. It\u0027s a really heavy weight library that\u0027s not really designed for end-users.","commit_id":"08990bda07bf11fe0fca8e450ac8589e8683e554"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b3969e629d8821047376f7e5e61c38e714aee4b3","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from keystoneauth1 import loading as ks_loading"},{"line_number":21,"context_line":"from keystoneauth1 import session as ks_session"},{"line_number":22,"context_line":"import os_service_types"},{"line_number":23,"context_line":"from oslo_config import cfg"},{"line_number":24,"context_line":"import requestsexceptions"},{"line_number":25,"context_line":"from six.moves import urllib"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_736a541a","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":27},"in_reply_to":"5fc1f717_b30afc1c","updated":"2019-03-18 01:30:52.000000000","message":"What about...","commit_id":"08990bda07bf11fe0fca8e450ac8589e8683e554"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b3969e629d8821047376f7e5e61c38e714aee4b3","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    region_name \u003d None"},{"line_number":103,"context_line":"    for st in stm.all_types_by_service_type:"},{"line_number":104,"context_line":"        project_name \u003d stm.get_project_name(st)"},{"line_number":105,"context_line":"        try:"},{"line_number":106,"context_line":"            c \u003d conf[project_name]"},{"line_number":107,"context_line":"            for opt in opts:"},{"line_number":108,"context_line":"                # Why? Whyyyyyy??"}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_d364684c","line":105,"updated":"2019-03-18 01:30:52.000000000","message":"...take this out altogether and do \n\n if project_name in conf:\n\n?","commit_id":"08990bda07bf11fe0fca8e450ac8589e8683e554"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"fb2787a1f702af6ee41fcb38046a01fbf3ebeccc","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    region_name \u003d None"},{"line_number":103,"context_line":"    for st in stm.all_types_by_service_type:"},{"line_number":104,"context_line":"        project_name \u003d stm.get_project_name(st)"},{"line_number":105,"context_line":"        try:"},{"line_number":106,"context_line":"            c \u003d conf[project_name]"},{"line_number":107,"context_line":"            for opt in opts:"},{"line_number":108,"context_line":"                # Why? Whyyyyyy??"}],"source_content_type":"text/x-python","patch_set":8,"id":"5fc1f717_8aa3f5b1","line":105,"in_reply_to":"5fc1f717_d364684c","updated":"2019-03-18 14:40:14.000000000","message":"Ooh. Does that work? Let\u0027s try it.","commit_id":"08990bda07bf11fe0fca8e450ac8589e8683e554"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c4e1f77cea5237d32214e17418edadf3463ea9f6","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        except Exception:"},{"line_number":141,"context_line":"            # NOTE(efried): This is for oslo_config.cfg.NoSuchOptError, but we"},{"line_number":142,"context_line":"            # don\u0027t want to drag in oslo.config just for that."},{"line_number":143,"context_line":"            continue"},{"line_number":144,"context_line":"        # Load them into config_dict under keys prefixed by ${service_type}_"},{"line_number":145,"context_line":"        for raw_name, opt_val in opt_dict.items():"},{"line_number":146,"context_line":"            if raw_name \u003d\u003d \u0027region_name\u0027:"}],"source_content_type":"text/x-python","patch_set":24,"id":"9fb8cfa7_c8b1b0e3","line":143,"updated":"2019-06-05 06:23:38.000000000","message":"maybe log a warning?","commit_id":"86ad9debd1cb08c2a2e53fd30502b020a0c3e4fe"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"194671f95dbe17a5d91e3e3df4bd7644cd074a60","unresolved":false,"context_lines":[{"line_number":140,"context_line":"        except Exception:"},{"line_number":141,"context_line":"            # NOTE(efried): This is for oslo_config.cfg.NoSuchOptError, but we"},{"line_number":142,"context_line":"            # don\u0027t want to drag in oslo.config just for that."},{"line_number":143,"context_line":"            continue"},{"line_number":144,"context_line":"        # Load them into config_dict under keys prefixed by ${service_type}_"},{"line_number":145,"context_line":"        for raw_name, opt_val in opt_dict.items():"},{"line_number":146,"context_line":"            if raw_name \u003d\u003d \u0027region_name\u0027:"}],"source_content_type":"text/x-python","patch_set":24,"id":"9fb8cfa7_725aee2a","line":143,"in_reply_to":"9fb8cfa7_c8b1b0e3","updated":"2019-06-06 13:40:46.000000000","message":"This is going to be hit for every conf section, named after a project, that doesn\u0027t have ksa opts registered. At least for nova, I guess that will be pretty rare, since we probably don\u0027t talk about configuring things related to another project unless we\u0027re also communicating with that project. But in the general case it seems like it might be pretty normal?\n\nAnyway, logging *something* would be appropriate. We can haggle about the level.\n\n[Later] Done (with bells on) in https://review.opendev.org/#/c/663439/","commit_id":"86ad9debd1cb08c2a2e53fd30502b020a0c3e4fe"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c4e1f77cea5237d32214e17418edadf3463ea9f6","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            if raw_name \u003d\u003d \u0027region_name\u0027:"},{"line_number":147,"context_line":"                region_name \u003d opt_val"},{"line_number":148,"context_line":"                continue"},{"line_number":149,"context_line":"            config_name \u003d \u0027_\u0027.join([st, raw_name])"},{"line_number":150,"context_line":"            config_dict[config_name] \u003d opt_val"},{"line_number":151,"context_line":"    return CloudRegion("},{"line_number":152,"context_line":"        session\u003dsession, region_name\u003dregion_name, config\u003dconfig_dict,"}],"source_content_type":"text/x-python","patch_set":24,"id":"9fb8cfa7_e8b6f4d9","line":149,"updated":"2019-06-05 06:23:38.000000000","message":"nit: \u0027%s_%s\u0027 % (st, raw_name)","commit_id":"86ad9debd1cb08c2a2e53fd30502b020a0c3e4fe"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"194671f95dbe17a5d91e3e3df4bd7644cd074a60","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            if raw_name \u003d\u003d \u0027region_name\u0027:"},{"line_number":147,"context_line":"                region_name \u003d opt_val"},{"line_number":148,"context_line":"                continue"},{"line_number":149,"context_line":"            config_name \u003d \u0027_\u0027.join([st, raw_name])"},{"line_number":150,"context_line":"            config_dict[config_name] \u003d opt_val"},{"line_number":151,"context_line":"    return CloudRegion("},{"line_number":152,"context_line":"        session\u003dsession, region_name\u003dregion_name, config\u003dconfig_dict,"}],"source_content_type":"text/x-python","patch_set":24,"id":"9fb8cfa7_52700aa6","line":149,"in_reply_to":"9fb8cfa7_e8b6f4d9","updated":"2019-06-06 13:40:46.000000000","message":"Or\n\n st + \u0027_\u0027 + raw_name\n\nis probably the cheapest.\n\n[Later] Changed to reuse _make_key in https://review.opendev.org/#/c/663439/","commit_id":"86ad9debd1cb08c2a2e53fd30502b020a0c3e4fe"}],"openstack/connection.py":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"f3422690685dfe05561e2d723082ebba74616cd1","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                    load_envvars\u003dFalse,"},{"line_number":287,"context_line":"                    rate_limit\u003drate_limit,"},{"line_number":288,"context_line":"                    **kwargs)"},{"line_number":289,"context_line":"            elif oslo_conf:"},{"line_number":290,"context_line":"                self.config \u003d cloud_region.from_conf("},{"line_number":291,"context_line":"                    oslo_conf, session\u003dsession, app_name\u003dapp_name,"},{"line_number":292,"context_line":"                    app_version\u003dapp_version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_8fe9dee6","line":289,"range":{"start_line":289,"start_character":12,"end_line":289,"end_character":27},"updated":"2019-03-15 19:08:22.000000000","message":"I think we want to move oslo_conf to the first if, and make if session the elif.","commit_id":"fe611a1f842ae6921254b60f443c7d2254c60088"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7695e77f587b3b739a3e0f3099538b3ce76010df","unresolved":false,"context_lines":[{"line_number":286,"context_line":"                    load_envvars\u003dFalse,"},{"line_number":287,"context_line":"                    rate_limit\u003drate_limit,"},{"line_number":288,"context_line":"                    **kwargs)"},{"line_number":289,"context_line":"            elif oslo_conf:"},{"line_number":290,"context_line":"                self.config \u003d cloud_region.from_conf("},{"line_number":291,"context_line":"                    oslo_conf, session\u003dsession, app_name\u003dapp_name,"},{"line_number":292,"context_line":"                    app_version\u003dapp_version)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc1f717_6fed92b5","line":289,"range":{"start_line":289,"start_character":12,"end_line":289,"end_character":27},"in_reply_to":"5fc1f717_8fe9dee6","updated":"2019-03-15 19:19:41.000000000","message":"Done","commit_id":"fe611a1f842ae6921254b60f443c7d2254c60088"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c3e7c416e668d26f1c6eb5129dee985e9da4491e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        compute_api_version\u003d\u00272\u0027,"},{"line_number":113,"context_line":"        identity_interface\u003d\u0027internal\u0027)"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"From oslo.conf CONF object"},{"line_number":116,"context_line":"--------------------------"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"For applications that have an oslo.config ``CONF`` object that has been"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_62bfe9a9","line":115,"updated":"2019-03-15 20:09:31.000000000","message":"++","commit_id":"40298e84cd1214557a36f042e8b612f2d6df042e"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c3e7c416e668d26f1c6eb5129dee985e9da4491e","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            keys as service-type and values as floats expressing the calls"},{"line_number":289,"context_line":"            per second for that service. Defaults to None, which means no"},{"line_number":290,"context_line":"            rate-limiting is performed."},{"line_number":291,"context_line":"        :param oslo_conf: An oslo.config CONF object."},{"line_number":292,"context_line":"        :type oslo_conf: :class:`~oslo_config.cfg.ConfigOpts`"},{"line_number":293,"context_line":"            An oslo.config ``CONF`` object that has been populated with"},{"line_number":294,"context_line":"            ``keystoneauth1.loading.register_adapter_conf_options`` in"}],"source_content_type":"text/x-python","patch_set":6,"id":"5fc1f717_02e065cc","line":291,"updated":"2019-03-15 20:09:31.000000000","message":"++","commit_id":"40298e84cd1214557a36f042e8b612f2d6df042e"}],"openstack/tests/unit/config/test_from_conf.py":[{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"c52e48e659bc7926c591898095208b5d661bd6ad","unresolved":false,"context_lines":[{"line_number":29,"context_line":"        super(TestFromConf, self).setUp()"},{"line_number":30,"context_line":"        self.oslo_config_dict \u003d {"},{"line_number":31,"context_line":"            # All defaults for nova"},{"line_number":32,"context_line":"            \u0027compute\u0027: {},"},{"line_number":33,"context_line":"            # monasca not in the service catalog"},{"line_number":34,"context_line":"            \u0027monitoring\u0027: {},"},{"line_number":35,"context_line":"            # Overrides for cyborg"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fb8cfa7_86bc3fbc","line":32,"range":{"start_line":32,"start_character":13,"end_line":32,"end_character":20},"updated":"2019-06-01 13:01:36.000000000","message":"nova","commit_id":"c794d4b852db2217ab55f23d22028c6aaae78604"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"c52e48e659bc7926c591898095208b5d661bd6ad","unresolved":false,"context_lines":[{"line_number":31,"context_line":"            # All defaults for nova"},{"line_number":32,"context_line":"            \u0027compute\u0027: {},"},{"line_number":33,"context_line":"            # monasca not in the service catalog"},{"line_number":34,"context_line":"            \u0027monitoring\u0027: {},"},{"line_number":35,"context_line":"            # Overrides for cyborg"},{"line_number":36,"context_line":"            \u0027orchestration\u0027: {"},{"line_number":37,"context_line":"                \u0027region_name\u0027: \u0027SpecialRegion\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fb8cfa7_e6cadb4d","line":34,"range":{"start_line":34,"start_character":13,"end_line":34,"end_character":23},"updated":"2019-06-01 13:01:36.000000000","message":"monasca","commit_id":"c794d4b852db2217ab55f23d22028c6aaae78604"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"c52e48e659bc7926c591898095208b5d661bd6ad","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            # monasca not in the service catalog"},{"line_number":34,"context_line":"            \u0027monitoring\u0027: {},"},{"line_number":35,"context_line":"            # Overrides for cyborg"},{"line_number":36,"context_line":"            \u0027orchestration\u0027: {"},{"line_number":37,"context_line":"                \u0027region_name\u0027: \u0027SpecialRegion\u0027,"},{"line_number":38,"context_line":"                \u0027interface\u0027: \u0027internal\u0027,"},{"line_number":39,"context_line":"                \u0027endpoint_override\u0027: \u0027https://example.org:8888/heat/v2\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fb8cfa7_26b1d3e2","line":36,"range":{"start_line":36,"start_character":13,"end_line":36,"end_character":26},"updated":"2019-06-01 13:01:36.000000000","message":"heat","commit_id":"c794d4b852db2217ab55f23d22028c6aaae78604"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7e4659cf543a6784ee4d389294e85931b4ef1604","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        # TODO(efried): Shouldn\u0027t this be \u0027SpecialRegion\u0027?"},{"line_number":68,"context_line":"        self.assertIsNone(adap.region_name)"},{"line_number":69,"context_line":"        self.assertEqual(\u0027orchestration\u0027, adap.service_type)"},{"line_number":70,"context_line":"        self.assertEqual(\u0027internal\u0027, adap.interface)"},{"line_number":71,"context_line":"        self.assertEqual(\u0027https://example.org:8888/heat/v2\u0027,"},{"line_number":72,"context_line":"                         adap.endpoint_override)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.register_uris(["},{"line_number":75,"context_line":"            dict(method\u003d\u0027GET\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fb8cfa7_7c50bd33","line":72,"range":{"start_line":70,"start_character":0,"end_line":72,"end_character":48},"updated":"2019-06-01 00:30:25.000000000","message":"This isn\u0027t working. Why?","commit_id":"c794d4b852db2217ab55f23d22028c6aaae78604"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"57fa1c18db97d619ffdeeb1d493ef626918b7d67","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        # TODO(efried): Shouldn\u0027t this be \u0027SpecialRegion\u0027?"},{"line_number":68,"context_line":"        self.assertIsNone(adap.region_name)"},{"line_number":69,"context_line":"        self.assertEqual(\u0027orchestration\u0027, adap.service_type)"},{"line_number":70,"context_line":"        self.assertEqual(\u0027internal\u0027, adap.interface)"},{"line_number":71,"context_line":"        self.assertEqual(\u0027https://example.org:8888/heat/v2\u0027,"},{"line_number":72,"context_line":"                         adap.endpoint_override)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.register_uris(["},{"line_number":75,"context_line":"            dict(method\u003d\u0027GET\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fb8cfa7_e6f89b7d","line":72,"range":{"start_line":70,"start_character":0,"end_line":72,"end_character":48},"in_reply_to":"9fb8cfa7_66b7cbda","updated":"2019-06-01 13:58:25.000000000","message":"Ohh, yeah, pretty sure you\u0027re right.","commit_id":"c794d4b852db2217ab55f23d22028c6aaae78604"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"c52e48e659bc7926c591898095208b5d661bd6ad","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        # TODO(efried): Shouldn\u0027t this be \u0027SpecialRegion\u0027?"},{"line_number":68,"context_line":"        self.assertIsNone(adap.region_name)"},{"line_number":69,"context_line":"        self.assertEqual(\u0027orchestration\u0027, adap.service_type)"},{"line_number":70,"context_line":"        self.assertEqual(\u0027internal\u0027, adap.interface)"},{"line_number":71,"context_line":"        self.assertEqual(\u0027https://example.org:8888/heat/v2\u0027,"},{"line_number":72,"context_line":"                         adap.endpoint_override)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self.register_uris(["},{"line_number":75,"context_line":"            dict(method\u003d\u0027GET\u0027,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9fb8cfa7_66b7cbda","line":72,"range":{"start_line":70,"start_character":0,"end_line":72,"end_character":48},"in_reply_to":"9fb8cfa7_7c50bd33","updated":"2019-06-01 13:01:36.000000000","message":"Doesn\u0027t the code expect the config to be keyed by project name not service type becuase of hysterical raisins?\n\nThat said - it wouldn\u0027t be terrible to support config by servce-type or project-name so that we could transition to service-type in the future - but I feel like we talked about that and decided it was too much for this pass.","commit_id":"c794d4b852db2217ab55f23d22028c6aaae78604"}],"releasenotes/notes/conf-object-ctr-c0e1da0a67dad841.yaml":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c4e1f77cea5237d32214e17418edadf3463ea9f6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added the ability to create a ``Connection`` from an ``oslo.config``"},{"line_number":5,"context_line":"    ``CONF`` object. This is primarily intended to be used by OpenStack"},{"line_number":6,"context_line":"    services using SDK for inter-service communication."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"9fb8cfa7_88cbb851","line":4,"updated":"2019-06-05 06:23:38.000000000","message":"/me ignores Eric","commit_id":"86ad9debd1cb08c2a2e53fd30502b020a0c3e4fe"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b6b423b2e9dd5d8c4a18ac333b8f65f427b2cbfd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added the ability to create a ``Connection`` from an ``oslo.config``"},{"line_number":5,"context_line":"    ``CONF`` object. This is primarily intended to be used by OpenStack"},{"line_number":6,"context_line":"    services using SDK for inter-service communication."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"9fb8cfa7_71c2ff87","line":4,"range":{"start_line":4,"start_character":36,"end_line":4,"end_character":46},"updated":"2019-06-04 13:40:44.000000000","message":"CloudRegion","commit_id":"86ad9debd1cb08c2a2e53fd30502b020a0c3e4fe"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"ab55fac2c6429c7b6ddda2e02e3988f260bf2271","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Added the ability to create a ``Connection`` from an ``oslo.config``"},{"line_number":5,"context_line":"    ``CONF`` object. This is primarily intended to be used by OpenStack"},{"line_number":6,"context_line":"    services using SDK for inter-service communication."}],"source_content_type":"text/x-yaml","patch_set":24,"id":"9fb8cfa7_114863ca","line":4,"range":{"start_line":4,"start_character":36,"end_line":4,"end_character":46},"in_reply_to":"9fb8cfa7_71c2ff87","updated":"2019-06-04 13:56:33.000000000","message":"Sorry, you\u0027re right, Connection would be the primary use case. Ignore me.","commit_id":"86ad9debd1cb08c2a2e53fd30502b020a0c3e4fe"}]}
