)]}'
{"keystone/assignment/routers.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":40,"context_line":"class Routers(wsgi.RoutersBase):"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    _path_prefixes \u003d (\u0027users\u0027, \u0027roles\u0027, \u0027role_inferences\u0027, \u0027projects\u0027,"},{"line_number":43,"context_line":"                      \u0027domains\u0027, \u0027system\u0027, \u0027role_assignments\u0027, \u0027OS-INHERIT\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def append_v3_routers(self, mapper, routers):"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_46c0727d","line":43,"range":{"start_line":43,"start_character":74,"end_line":43,"end_character":75},"updated":"2018-06-04 15:20:13.000000000","message":"Other modules seem to include , here.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6a7e9ea6a821c96c063ecf33a6b0b84084a7fb7d","unresolved":false,"context_lines":[{"line_number":40,"context_line":"class Routers(wsgi.RoutersBase):"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    _path_prefixes \u003d (\u0027users\u0027, \u0027roles\u0027, \u0027role_inferences\u0027, \u0027projects\u0027,"},{"line_number":43,"context_line":"                      \u0027domains\u0027, \u0027system\u0027, \u0027role_assignments\u0027, \u0027OS-INHERIT\u0027)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def append_v3_routers(self, mapper, routers):"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_1792a659","line":43,"range":{"start_line":43,"start_character":74,"end_line":43,"end_character":75},"in_reply_to":"5f7c97a3_46c0727d","updated":"2018-06-04 17:36:35.000000000","message":"This is mostly hold over for compat reasons, we can add the , in the next patchset, but some of those modules is to force it into being a tuple: (\u0027auth\u0027) \u003d\u003d \u0027auth\u0027; (\u0027auth\u0027,) \u003d\u003d tuple(\u0027auth\u0027)","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"}],"keystone/auth/routers.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a96ca5697f3dfce2efd5d384b6dd5c24030fca35","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_log import log"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Routers(wsgi.RoutersBase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_9d49f58f","line":21,"updated":"2018-06-04 19:58:08.000000000","message":"I don\u0027t see logger usage being used anywhere here. Was this added for something that was subsequently removed?","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f78fdf1070cab6714793c5e7717a212089353ba5","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_log import log"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class Routers(wsgi.RoutersBase):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_58436b6d","line":21,"in_reply_to":"5f7c97a3_9d49f58f","updated":"2018-06-04 20:48:53.000000000","message":"Likely, i\u0027ll get it removed in the next patch.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"}],"keystone/catalog/routers.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    PATH_ENDPOINT_GROUP_PROJECTS \u003d PATH_ENDPOINT_GROUPS + ("},{"line_number":73,"context_line":"        \u0027/projects/{project_id}\u0027)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    _path_prefixes \u003d (PATH_PREFIX, \u0027regions\u0027, \u0027endpoints\u0027, \u0027services\u0027)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def append_v3_routers(self, mapper, routers):"},{"line_number":78,"context_line":"        regions_controller \u003d controllers.RegionV3()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_2648d62c","line":75,"updated":"2018-06-04 15:20:13.000000000","message":"Same comment here as in the previous module. Not sure if it matters, just wondering what we want the convention to be.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6a7e9ea6a821c96c063ecf33a6b0b84084a7fb7d","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    PATH_ENDPOINT_GROUP_PROJECTS \u003d PATH_ENDPOINT_GROUPS + ("},{"line_number":73,"context_line":"        \u0027/projects/{project_id}\u0027)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    _path_prefixes \u003d (PATH_PREFIX, \u0027regions\u0027, \u0027endpoints\u0027, \u0027services\u0027)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def append_v3_routers(self, mapper, routers):"},{"line_number":78,"context_line":"        regions_controller \u003d controllers.RegionV3()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_378fa22f","line":75,"in_reply_to":"5f7c97a3_2648d62c","updated":"2018-06-04 17:36:35.000000000","message":"same response. This will all go away as each item is converted to flask native.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"}],"keystone/contrib/s3/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    _path_prefixes \u003d (\u0027s3tokens\u0027,)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def append_v3_routers(self, mapper, routers):"},{"line_number":44,"context_line":"        controller \u003d S3Controller()"},{"line_number":45,"context_line":"        # validation"},{"line_number":46,"context_line":"        self._add_resource("}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_06fd9ab0","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":25},"updated":"2018-06-04 15:20:13.000000000","message":"Intersting, looks like this was copy/paste cruft?","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6a7e9ea6a821c96c063ecf33a6b0b84084a7fb7d","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    _path_prefixes \u003d (\u0027s3tokens\u0027,)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def append_v3_routers(self, mapper, routers):"},{"line_number":44,"context_line":"        controller \u003d S3Controller()"},{"line_number":45,"context_line":"        # validation"},{"line_number":46,"context_line":"        self._add_resource("}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_77867a16","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":25},"in_reply_to":"5f7c97a3_06fd9ab0","updated":"2018-06-04 17:36:35.000000000","message":"Converting to the \"v3\" non-extension form. Extensions are dead, this is no longer part of a paste pipeline, Note the change in the class.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"}],"keystone/contrib/s3/routers.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"a96ca5697f3dfce2efd5d384b6dd5c24030fca35","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_b8015f07","line":1,"updated":"2018-06-04 19:58:08.000000000","message":"Non-critical observation (treat less than pointing out a nitpick): Assuming this was maybe copy/pasted from somewhere else? Seems simple enough that you wouldn\u0027t need to carry over the copyright header like this since Foundation copyright should only be used by Foundation employees.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f78fdf1070cab6714793c5e7717a212089353ba5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2012 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_58384bed","line":1,"in_reply_to":"5f7c97a3_b8015f07","updated":"2018-06-04 20:48:53.000000000","message":"Aha! good catch, I try hard to not let those things sneak in. Usually I strip them, thanks, notice I don\u0027t have any copyright notice thing in any other new files? :)","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"}],"keystone/server/common.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import keystone.conf"},{"line_number":19,"context_line":"from keystone.server import backends"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d keystone.conf.CONF"},{"line_number":23,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_66256e5c","side":"PARENT","line":21,"updated":"2018-06-04 15:20:13.000000000","message":"Unrelated whitespace change?","commit_id":"dc354e1a4a13647bc91283384a112453784e9bd9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6a7e9ea6a821c96c063ecf33a6b0b84084a7fb7d","unresolved":false,"context_lines":[{"line_number":18,"context_line":"import keystone.conf"},{"line_number":19,"context_line":"from keystone.server import backends"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"CONF \u003d keystone.conf.CONF"},{"line_number":23,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_b7917249","side":"PARENT","line":21,"in_reply_to":"5f7c97a3_66256e5c","updated":"2018-06-04 17:36:35.000000000","message":"I think I somehow had pep8 issues here, no 2 spaces. I\u0027ll confirm","commit_id":"dc354e1a4a13647bc91283384a112453784e9bd9"}],"keystone/server/flask/application.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    This is a modified version of the werkzeurg.wsgi.DispatchMiddleware to"},{"line_number":99,"context_line":"    handle the \"SCRIPT_NAME\" and \"PATH_INFO\" mangling in a way that is"},{"line_number":100,"context_line":"    compatible with the way paste.deploy and routes.Mapper wworks. For"},{"line_number":101,"context_line":"    Migration from legacy routes.Mapper to native flask blueprints, we are"},{"line_number":102,"context_line":"    treating each subsystem as their own \"app\"."},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_66da4e4c","line":100,"range":{"start_line":100,"start_character":59,"end_line":100,"end_character":65},"updated":"2018-06-04 15:20:13.000000000","message":"works","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5116a4c7b7223075e16c683374f47bbd901031b6","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    This is a modified version of the werkzeurg.wsgi.DispatchMiddleware to"},{"line_number":99,"context_line":"    handle the \"SCRIPT_NAME\" and \"PATH_INFO\" mangling in a way that is"},{"line_number":100,"context_line":"    compatible with the way paste.deploy and routes.Mapper wworks. For"},{"line_number":101,"context_line":"    Migration from legacy routes.Mapper to native flask blueprints, we are"},{"line_number":102,"context_line":"    treating each subsystem as their own \"app\"."},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_ec015806","line":100,"range":{"start_line":100,"start_character":59,"end_line":100,"end_character":65},"in_reply_to":"5f7c97a3_66da4e4c","updated":"2018-06-04 20:49:34.000000000","message":"Fixed in next.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    for pfx in itertools.chain(*[rtr.Routers._path_prefixes for"},{"line_number":225,"context_line":"                                 rtr in ALL_API_ROUTERS]):"},{"line_number":226,"context_line":"        dispatch_map[\u0027/v3/%s\u0027 % pfx] \u003d legacy_dispatcher"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    # NOTE(morgan) Move the version routers to Flask Native First! It will"},{"line_number":229,"context_line":"    # not work well due to how the dispatcher works unless this is first,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_469dd255","line":226,"range":{"start_line":226,"start_character":8,"end_line":226,"end_character":56},"updated":"2018-06-04 15:20:13.000000000","message":"So - this will eventually go away and be replaced with:\n\n  dispatch_map[\u0027/v3/users\u0027] \u003d identity_dispatcher\n\nor something similar where the actual dispatch_map handles the mapping of the individual subsystems?","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6a7e9ea6a821c96c063ecf33a6b0b84084a7fb7d","unresolved":false,"context_lines":[{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    for pfx in itertools.chain(*[rtr.Routers._path_prefixes for"},{"line_number":225,"context_line":"                                 rtr in ALL_API_ROUTERS]):"},{"line_number":226,"context_line":"        dispatch_map[\u0027/v3/%s\u0027 % pfx] \u003d legacy_dispatcher"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    # NOTE(morgan) Move the version routers to Flask Native First! It will"},{"line_number":229,"context_line":"    # not work well due to how the dispatcher works unless this is first,"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_b7bad2bd","line":226,"range":{"start_line":226,"start_character":8,"end_line":226,"end_character":56},"in_reply_to":"5f7c97a3_469dd255","updated":"2018-06-04 17:36:35.000000000","message":"The whole middleware will go away, it\u0027s only used to dispatch based upon URI path, this is all compat to avoid having to change every file in keystone massively at once and stage moving a subsystem -\u003e flask from webob/mapper.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":13861,"name":"yatin","email":"ykarel@redhat.com","username":"yatinkarel"},"change_message_id":"84e5b3df53925dc9ce109c1a171c78f4735268ae","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_2591ff52","line":2,"updated":"2018-06-12 11:23:35.000000000","message":"ac","commit_id":"4ec6bc5a44a85295395a3567fe90d1acc0dd7eff"}],"keystone/server/flask/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    return files"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"def setup_app_middleware(application):"},{"line_number":92,"context_line":"    # NOTE(morgan): Load the middleware, in reverse order, we wrap the app"},{"line_number":93,"context_line":"    # explicitly; reverse order to ensure the first element in _APP_MIDDLEWARE"},{"line_number":94,"context_line":"    # processes the request first."}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_26c9b659","line":91,"range":{"start_line":91,"start_character":4,"end_line":91,"end_character":24},"updated":"2018-06-04 15:20:13.000000000","message":"nit: Is this called from anywhere outside of this method? If not, we should make it private if possible.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6a7e9ea6a821c96c063ecf33a6b0b84084a7fb7d","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    return files"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"def setup_app_middleware(application):"},{"line_number":92,"context_line":"    # NOTE(morgan): Load the middleware, in reverse order, we wrap the app"},{"line_number":93,"context_line":"    # explicitly; reverse order to ensure the first element in _APP_MIDDLEWARE"},{"line_number":94,"context_line":"    # processes the request first."}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_f7bfeaa7","line":91,"range":{"start_line":91,"start_character":4,"end_line":91,"end_character":24},"in_reply_to":"5f7c97a3_26c9b659","updated":"2018-06-04 17:36:35.000000000","message":"It is called for testing and it is called externally, but not externally from server.flask\n\nWe could make it private.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5cd4088b2e097751849039e814849ce3ecf862ba","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    return files"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"def setup_app_middleware(application):"},{"line_number":92,"context_line":"    # NOTE(morgan): Load the middleware, in reverse order, we wrap the app"},{"line_number":93,"context_line":"    # explicitly; reverse order to ensure the first element in _APP_MIDDLEWARE"},{"line_number":94,"context_line":"    # processes the request first."}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_4ff71e8e","line":91,"range":{"start_line":91,"start_character":4,"end_line":91,"end_character":24},"in_reply_to":"5f7c97a3_f7bfeaa7","updated":"2018-06-04 23:12:14.000000000","message":"I\u0027ll make this private, it\u0027s used in two cases and it wont be really useful in one of those down the line.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        # from the \"factory\" mechanism."},{"line_number":106,"context_line":"        loaded \u003d stevedore.DriverManager("},{"line_number":107,"context_line":"            mw.namespace, mw.ep, invoke_on_load\u003dFalse)"},{"line_number":108,"context_line":"        # NOTE(morgan): global_conf (args[0]) to the factory is empty alwyas"},{"line_number":109,"context_line":"        # and local_conf (args[1]) will be the mw.conf dict. This allows for"},{"line_number":110,"context_line":"        # configuration to be passed for middleware such as oslo CORS which"},{"line_number":111,"context_line":"        # expects oslo_config_project or \"allowed_origin\" to be in the"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_86020a6f","line":108,"range":{"start_line":108,"start_character":70,"end_line":108,"end_character":76},"updated":"2018-06-04 15:20:13.000000000","message":"always empty* ?","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6a7e9ea6a821c96c063ecf33a6b0b84084a7fb7d","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        # from the \"factory\" mechanism."},{"line_number":106,"context_line":"        loaded \u003d stevedore.DriverManager("},{"line_number":107,"context_line":"            mw.namespace, mw.ep, invoke_on_load\u003dFalse)"},{"line_number":108,"context_line":"        # NOTE(morgan): global_conf (args[0]) to the factory is empty alwyas"},{"line_number":109,"context_line":"        # and local_conf (args[1]) will be the mw.conf dict. This allows for"},{"line_number":110,"context_line":"        # configuration to be passed for middleware such as oslo CORS which"},{"line_number":111,"context_line":"        # expects oslo_config_project or \"allowed_origin\" to be in the"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_b7df320b","line":108,"range":{"start_line":108,"start_character":70,"end_line":108,"end_character":76},"in_reply_to":"5f7c97a3_86020a6f","updated":"2018-06-04 17:36:35.000000000","message":"Sure, will fix in next.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"}],"keystone/tests/unit/test_contrib_ec2_core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        super(EC2ContribCoreV2, self).setUp()"},{"line_number":30,"context_line":"        # TODO(morgan): remove test class, v2.0 has been deleted"},{"line_number":31,"context_line":"        self.skipTest(\u0027V2.0 has been deleted, test is nolonger valid\u0027)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def config_overrides(self):"},{"line_number":34,"context_line":"        super(EC2ContribCoreV2, self).config_overrides()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_4639523d","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":70},"updated":"2018-06-04 15:20:13.000000000","message":"This is the path we have to keep around until T I think. Unfortunately, because it wasn\u0027t deprecated at the same time as the rest of v2.0","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6a7e9ea6a821c96c063ecf33a6b0b84084a7fb7d","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        super(EC2ContribCoreV2, self).setUp()"},{"line_number":30,"context_line":"        # TODO(morgan): remove test class, v2.0 has been deleted"},{"line_number":31,"context_line":"        self.skipTest(\u0027V2.0 has been deleted, test is nolonger valid\u0027)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def config_overrides(self):"},{"line_number":34,"context_line":"        super(EC2ContribCoreV2, self).config_overrides()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_9728f6ee","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":70},"in_reply_to":"5f7c97a3_4639523d","updated":"2018-06-04 17:36:35.000000000","message":"I can wire up the v2.0 stuff, it\u0027s not that ugly to do if needed. (T?, I thought S).\n\nI do want to point out I think, and I know I was supportive of the long hold over, this is excessive \"deprecation policy\" since V2 is so very dead [including auth].\n\nI would prefer to get the \"ok\" to just drop this in Rocky with the rest of V2 hold overs.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2fc3a7475748e3ffb9cded30bbff41ce08494c10","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        super(EC2ContribCoreV2, self).setUp()"},{"line_number":30,"context_line":"        # TODO(morgan): remove test class, v2.0 has been deleted"},{"line_number":31,"context_line":"        self.skipTest(\u0027V2.0 has been deleted, test is nolonger valid\u0027)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def config_overrides(self):"},{"line_number":34,"context_line":"        super(EC2ContribCoreV2, self).config_overrides()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_d72bce92","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":70},"in_reply_to":"5f7c97a3_9728f6ee","updated":"2018-06-04 17:47:52.000000000","message":"I\u0027ll support that if we can get the OK from others (TC?).\n\nIt was just really unfortunate that we didn\u0027t catch all the v2.0 bits in deprecation at the same time, because I think that\u0027s the only real reason why we have to keep this since they weren\u0027t \"officially\" deprecated together.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f78fdf1070cab6714793c5e7717a212089353ba5","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    def setUp(self):"},{"line_number":29,"context_line":"        super(EC2ContribCoreV2, self).setUp()"},{"line_number":30,"context_line":"        # TODO(morgan): remove test class, v2.0 has been deleted"},{"line_number":31,"context_line":"        self.skipTest(\u0027V2.0 has been deleted, test is nolonger valid\u0027)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    def config_overrides(self):"},{"line_number":34,"context_line":"        super(EC2ContribCoreV2, self).config_overrides()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_d8045b1b","line":31,"range":{"start_line":31,"start_character":8,"end_line":31,"end_character":70},"in_reply_to":"5f7c97a3_d72bce92","updated":"2018-06-04 20:48:53.000000000","message":"We have the OK from the TC, going to send an email to the lists as well.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"}],"keystone/tests/unit/test_credential.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_ec2_cannot_get_non_ec2_credential(self):"},{"line_number":51,"context_line":"        # TODO(morgan): remove this test class, V2 has been removed."},{"line_number":52,"context_line":"        self.skipTest(\u0027V2.0 has been removed, remove the whole test class.\u0027)"},{"line_number":53,"context_line":"        access_key \u003d uuid.uuid4().hex"},{"line_number":54,"context_line":"        cred_id \u003d utils.hash_access_key(access_key)"},{"line_number":55,"context_line":"        non_ec2_cred \u003d unit.new_credential_ref("}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_4622b203","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":76},"updated":"2018-06-04 15:20:13.000000000","message":"We should try and include a date or release here so that it\u0027s easier for others to know when they can delete this code.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6a7e9ea6a821c96c063ecf33a6b0b84084a7fb7d","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_ec2_cannot_get_non_ec2_credential(self):"},{"line_number":51,"context_line":"        # TODO(morgan): remove this test class, V2 has been removed."},{"line_number":52,"context_line":"        self.skipTest(\u0027V2.0 has been removed, remove the whole test class.\u0027)"},{"line_number":53,"context_line":"        access_key \u003d uuid.uuid4().hex"},{"line_number":54,"context_line":"        cred_id \u003d utils.hash_access_key(access_key)"},{"line_number":55,"context_line":"        non_ec2_cred \u003d unit.new_credential_ref("}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_570b3e7c","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":76},"in_reply_to":"5f7c97a3_4622b203","updated":"2018-06-04 17:36:35.000000000","message":"I was figuring this would be dropped in R and was just a todo for a followup patchset.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2fc3a7475748e3ffb9cded30bbff41ce08494c10","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def test_ec2_cannot_get_non_ec2_credential(self):"},{"line_number":51,"context_line":"        # TODO(morgan): remove this test class, V2 has been removed."},{"line_number":52,"context_line":"        self.skipTest(\u0027V2.0 has been removed, remove the whole test class.\u0027)"},{"line_number":53,"context_line":"        access_key \u003d uuid.uuid4().hex"},{"line_number":54,"context_line":"        cred_id \u003d utils.hash_access_key(access_key)"},{"line_number":55,"context_line":"        non_ec2_cred \u003d unit.new_credential_ref("}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_77167a58","line":52,"range":{"start_line":52,"start_character":8,"end_line":52,"end_character":76},"in_reply_to":"5f7c97a3_570b3e7c","updated":"2018-06-04 17:47:52.000000000","message":"Aha - I suppose this relates to the other comments about dropping v2.0 depending on TC approval?","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"}],"keystone/tests/unit/test_entry_points.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from keystone.tests.unit import core as test"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class TestPasteDeploymentEntryPoints(test.TestCase):"},{"line_number":20,"context_line":"    def test_entry_point_middleware(self):"},{"line_number":21,"context_line":"        \"\"\"Assert that our list of expected middleware is present.\"\"\""},{"line_number":22,"context_line":"        expected_names \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_66800ec1","line":19,"range":{"start_line":19,"start_character":10,"end_line":19,"end_character":15},"updated":"2018-06-04 15:20:13.000000000","message":"s/Paste// ?","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6a7e9ea6a821c96c063ecf33a6b0b84084a7fb7d","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from keystone.tests.unit import core as test"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class TestPasteDeploymentEntryPoints(test.TestCase):"},{"line_number":20,"context_line":"    def test_entry_point_middleware(self):"},{"line_number":21,"context_line":"        \"\"\"Assert that our list of expected middleware is present.\"\"\""},{"line_number":22,"context_line":"        expected_names \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_f71b6ac7","line":19,"range":{"start_line":19,"start_character":10,"end_line":19,"end_character":15},"in_reply_to":"5f7c97a3_66800ec1","updated":"2018-06-04 17:36:35.000000000","message":"Fixed in \"remove paste deploy\" patch.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"}],"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":3743,"context_line":"    def setUp(self):"},{"line_number":3744,"context_line":"        super(TestTrustOptional, self).setUp()"},{"line_number":3745,"context_line":"        # TODO(morgan): remove this test case, trusts are not optional."},{"line_number":3746,"context_line":"        self.skipTest(\u0027Trusts are no longer optional.\u0027)"},{"line_number":3747,"context_line":""},{"line_number":3748,"context_line":"    def config_overrides(self):"},{"line_number":3749,"context_line":"        super(TestTrustOptional, self).config_overrides()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_064a7aab","line":3746,"updated":"2018-06-04 15:20:13.000000000","message":"This should actually be an easy follow on patch to propose, since I think we can do this in Rocky.\n\nhttps://github.com/openstack/keystone/commit/c973c8fe70bd6e190d9dab3dcc4021617fd5cd5c","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6a7e9ea6a821c96c063ecf33a6b0b84084a7fb7d","unresolved":false,"context_lines":[{"line_number":3743,"context_line":"    def setUp(self):"},{"line_number":3744,"context_line":"        super(TestTrustOptional, self).setUp()"},{"line_number":3745,"context_line":"        # TODO(morgan): remove this test case, trusts are not optional."},{"line_number":3746,"context_line":"        self.skipTest(\u0027Trusts are no longer optional.\u0027)"},{"line_number":3747,"context_line":""},{"line_number":3748,"context_line":"    def config_overrides(self):"},{"line_number":3749,"context_line":"        super(TestTrustOptional, self).config_overrides()"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_77851acf","line":3746,"in_reply_to":"5f7c97a3_064a7aab","updated":"2018-06-04 17:36:35.000000000","message":"Yep, that is the plan, all the TODOs added here to be followed up on in the chain, just avoiding massive changes outright in one patchset.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"}],"keystone/tests/unit/test_v3_federation.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":1595,"context_line":"        deleted."},{"line_number":1596,"context_line":""},{"line_number":1597,"context_line":"        \"\"\""},{"line_number":1598,"context_line":"        url \u003d self.base_url(suffix\u003d\u0027/%(idp_id)s/\u0027"},{"line_number":1599,"context_line":"                                   \u0027protocols/%(protocol_id)s\u0027)"},{"line_number":1600,"context_line":"        resp, idp_id, proto \u003d self._assign_protocol_to_idp("},{"line_number":1601,"context_line":"            expected_status\u003dhttp_client.CREATED)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_26d8d6ee","side":"PARENT","line":1598,"range":{"start_line":1598,"start_character":36,"end_line":1598,"end_character":37},"updated":"2018-06-04 15:20:13.000000000","message":"Did this cause a double //?","commit_id":"dc354e1a4a13647bc91283384a112453784e9bd9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6a7e9ea6a821c96c063ecf33a6b0b84084a7fb7d","unresolved":false,"context_lines":[{"line_number":1595,"context_line":"        deleted."},{"line_number":1596,"context_line":""},{"line_number":1597,"context_line":"        \"\"\""},{"line_number":1598,"context_line":"        url \u003d self.base_url(suffix\u003d\u0027/%(idp_id)s/\u0027"},{"line_number":1599,"context_line":"                                   \u0027protocols/%(protocol_id)s\u0027)"},{"line_number":1600,"context_line":"        resp, idp_id, proto \u003d self._assign_protocol_to_idp("},{"line_number":1601,"context_line":"            expected_status\u003dhttp_client.CREATED)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_176aa61a","side":"PARENT","line":1598,"range":{"start_line":1598,"start_character":36,"end_line":1598,"end_character":37},"in_reply_to":"5f7c97a3_26d8d6ee","updated":"2018-06-04 17:36:35.000000000","message":"Yes.","commit_id":"dc354e1a4a13647bc91283384a112453784e9bd9"}],"keystone/tests/unit/test_versions.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"3c8516d1ea6d21c695295416ceb404d0076b2c8e","unresolved":false,"context_lines":[{"line_number":747,"context_line":"                    version, \u0027http://localhost:%s/v3/\u0027 % self.public_port)"},{"line_number":748,"context_line":"            elif version[\u0027id\u0027] \u003d\u003d \u0027v2.0\u0027:"},{"line_number":749,"context_line":"                # TODO(morgan): remove this if block in future patch,"},{"line_number":750,"context_line":"                # v2.0 has been removed."},{"line_number":751,"context_line":"                self._paste_in_port("},{"line_number":752,"context_line":"                    version, \u0027http://localhost:%s/v2.0/\u0027 % self.public_port)"},{"line_number":753,"context_line":"        self.assertThat(data, _VersionsEqual(expected))"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_46fe3239","line":750,"updated":"2018-06-04 15:20:13.000000000","message":"Same nit as before. It\u0027d be nice to include a release date here if possible, just so that other developers know when this is actionable.","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"6a7e9ea6a821c96c063ecf33a6b0b84084a7fb7d","unresolved":false,"context_lines":[{"line_number":747,"context_line":"                    version, \u0027http://localhost:%s/v3/\u0027 % self.public_port)"},{"line_number":748,"context_line":"            elif version[\u0027id\u0027] \u003d\u003d \u0027v2.0\u0027:"},{"line_number":749,"context_line":"                # TODO(morgan): remove this if block in future patch,"},{"line_number":750,"context_line":"                # v2.0 has been removed."},{"line_number":751,"context_line":"                self._paste_in_port("},{"line_number":752,"context_line":"                    version, \u0027http://localhost:%s/v2.0/\u0027 % self.public_port)"},{"line_number":753,"context_line":"        self.assertThat(data, _VersionsEqual(expected))"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_775e7a77","line":750,"in_reply_to":"5f7c97a3_46fe3239","updated":"2018-06-04 17:36:35.000000000","message":"See earlier comment, This is going to be removed in a couple patches :) not even \"a \"release date\".","commit_id":"edbd8484882ddf79b5d2876c56035d60128e43ae"}],"setup.cfg":[{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"96dd36221e3c91af937672604306763e839617e1","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    keystone \u003d keystone.common.policy:get_enforcer"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"keystone.server_middleware \u003d"},{"line_number":187,"context_line":"    healthcheck \u003d oslo_middleware:Healthcheck"},{"line_number":188,"context_line":"    cors \u003d oslo_middleware:CORS"},{"line_number":189,"context_line":"    sizelimit \u003d oslo_middleware:RequestBodySizeLimiter"},{"line_number":190,"context_line":"    http_proxy_to_wsgi \u003d oslo_middleware:HTTPProxyToWSGI"}],"source_content_type":"text/x-ttcn-cfg","patch_set":9,"id":"5f7c97a3_5108212c","line":187,"updated":"2018-06-05 07:31:00.000000000","message":"seem the healthcheck now is a route in keystone, not a middleware:\nhttps://review.openstack.org/#/c/568377/9/keystone/server/flask/application.py@205\n\nSo this line can be removed?","commit_id":"4ec6bc5a44a85295395a3567fe90d1acc0dd7eff"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"b6104925999a9ece27bb36bce5ff43f797167946","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    keystone \u003d keystone.common.policy:get_enforcer"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"keystone.server_middleware \u003d"},{"line_number":187,"context_line":"    healthcheck \u003d oslo_middleware:Healthcheck"},{"line_number":188,"context_line":"    cors \u003d oslo_middleware:CORS"},{"line_number":189,"context_line":"    sizelimit \u003d oslo_middleware:RequestBodySizeLimiter"},{"line_number":190,"context_line":"    http_proxy_to_wsgi \u003d oslo_middleware:HTTPProxyToWSGI"}],"source_content_type":"text/x-ttcn-cfg","patch_set":9,"id":"5f7c97a3_ac810afe","line":187,"in_reply_to":"5f7c97a3_388c5c7e","updated":"2018-06-05 16:52:09.000000000","message":"Will be fixed in a followup.","commit_id":"4ec6bc5a44a85295395a3567fe90d1acc0dd7eff"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"336b5a8598466aa7eec32559de7ee6e9c02c88aa","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    keystone \u003d keystone.common.policy:get_enforcer"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"keystone.server_middleware \u003d"},{"line_number":187,"context_line":"    healthcheck \u003d oslo_middleware:Healthcheck"},{"line_number":188,"context_line":"    cors \u003d oslo_middleware:CORS"},{"line_number":189,"context_line":"    sizelimit \u003d oslo_middleware:RequestBodySizeLimiter"},{"line_number":190,"context_line":"    http_proxy_to_wsgi \u003d oslo_middleware:HTTPProxyToWSGI"}],"source_content_type":"text/x-ttcn-cfg","patch_set":9,"id":"5f7c97a3_388c5c7e","line":187,"in_reply_to":"5f7c97a3_5108212c","updated":"2018-06-05 14:14:24.000000000","message":"Yes, this can be removed. Thanks for catching it.","commit_id":"4ec6bc5a44a85295395a3567fe90d1acc0dd7eff"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"e43a3b4e8f90ff7bdaf7c93055f878bd9a22778a","unresolved":false,"context_lines":[{"line_number":184,"context_line":"    keystone \u003d keystone.common.policy:get_enforcer"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"keystone.server_middleware \u003d"},{"line_number":187,"context_line":"    healthcheck \u003d oslo_middleware:Healthcheck"},{"line_number":188,"context_line":"    cors \u003d oslo_middleware:CORS"},{"line_number":189,"context_line":"    sizelimit \u003d oslo_middleware:RequestBodySizeLimiter"},{"line_number":190,"context_line":"    http_proxy_to_wsgi \u003d oslo_middleware:HTTPProxyToWSGI"}],"source_content_type":"text/x-ttcn-cfg","patch_set":9,"id":"5f7c97a3_d1dddedd","line":187,"in_reply_to":"5f7c97a3_ac810afe","updated":"2018-06-06 21:33:46.000000000","message":"https://review.openstack.org/#/c/572848/","commit_id":"4ec6bc5a44a85295395a3567fe90d1acc0dd7eff"}]}
