)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"889d0b705a4577ca32ab810272fdc1f597db2c3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ef4f770f_250e6dd2","updated":"2023-11-28 09:45:34.000000000","message":"@Clay I could see how this was going to be useful, and totally reasonable, looking ahead in the patch chain. But if the need has gone then I\u0027d suggest not pursuing this change - it would probably generate more work (for example,  it \n would make sense to also move inbound_condition to a constant), plus \"if it ain\u0027t broke don\u0027t fix it\".","commit_id":"bdea69d259cfe938af771ed630b9b27a8de4ccef"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aecc568c57f09c08f2351aaaed5ee75a0598fd67","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"92609647_cf716c84","updated":"2023-11-20 19:18:13.000000000","message":"this is a pretty trivial patch, but I don\u0027t really need it anymore because i don\u0027t plan to clean-out sysmeta/backend respones headers down in SLO so I can add the response headers (like version_id) to the mpu heartbeat\u003don response body\n\nIt may still be a useful idea in general, I just don\u0027t have a driving need for it.\n\n@Al you didn\u0027t really comment on the \"merit\" of the patch itself?  Was it implied you think this would be a helpful refactor?  I wasn\u0027t sure about the instacne attribute vs global constant.  I mean it\u0027d be one thing if we NEED it; but just on it\u0027s own sake I don\u0027t know that it\u0027s \"obviously better\"","commit_id":"bdea69d259cfe938af771ed630b9b27a8de4ccef"}],"swift/common/middleware/gatekeeper.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4b2a8f1192ad182b700f57cd0fc25043576f8495","unresolved":true,"context_lines":[{"line_number":84,"context_line":"                           logger\u003dNone):"},{"line_number":85,"context_line":"    \"\"\""},{"line_number":86,"context_line":"    Take a list of response header tuples and return a filtered list of headers"},{"line_number":87,"context_line":"    with only those that are safe safe to return to a client."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    :param response_headers: list of 2-tuple strings"},{"line_number":90,"context_line":"    :returns: filtered list of 2-tuple strings"}],"source_content_type":"text/x-python","patch_set":1,"id":"aa859453_2e8eb7b4","line":87,"updated":"2023-11-20 16:50:22.000000000","message":"typo \"safe safe\"","commit_id":"bdea69d259cfe938af771ed630b9b27a8de4ccef"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4b2a8f1192ad182b700f57cd0fc25043576f8495","unresolved":true,"context_lines":[{"line_number":86,"context_line":"    Take a list of response header tuples and return a filtered list of headers"},{"line_number":87,"context_line":"    with only those that are safe safe to return to a client."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    :param response_headers: list of 2-tuple strings"},{"line_number":90,"context_line":"    :returns: filtered list of 2-tuple strings"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"f901112f_21131325","line":89,"updated":"2023-11-20 16:50:22.000000000","message":"missing a couple of params","commit_id":"bdea69d259cfe938af771ed630b9b27a8de4ccef"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4b2a8f1192ad182b700f57cd0fc25043576f8495","unresolved":true,"context_lines":[{"line_number":94,"context_line":"        response_headers \u003d ["},{"line_number":95,"context_line":"            (k, v if k.lower() !\u003d \u0027location\u0027 else _relative_path(v))"},{"line_number":96,"context_line":"            for (k, v) in response_headers]"},{"line_number":97,"context_line":"    if logger:"},{"line_number":98,"context_line":"        removed \u003d [(header, value) for header, value in response_headers"},{"line_number":99,"context_line":"                   if OUTBOUND_CONDITION(header)]"},{"line_number":100,"context_line":"        logger.debug(\u0027removed response headers: %s\u0027 % removed)"}],"source_content_type":"text/x-python","patch_set":1,"id":"743593b3_4108f602","line":97,"updated":"2023-11-20 16:50:22.000000000","message":"off-topic: hehe, now it\u0027s written like this I want to make \"log_level\u003dDEBUG\" a condition","commit_id":"bdea69d259cfe938af771ed630b9b27a8de4ccef"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aecc568c57f09c08f2351aaaed5ee75a0598fd67","unresolved":true,"context_lines":[{"line_number":94,"context_line":"        response_headers \u003d ["},{"line_number":95,"context_line":"            (k, v if k.lower() !\u003d \u0027location\u0027 else _relative_path(v))"},{"line_number":96,"context_line":"            for (k, v) in response_headers]"},{"line_number":97,"context_line":"    if logger:"},{"line_number":98,"context_line":"        removed \u003d [(header, value) for header, value in response_headers"},{"line_number":99,"context_line":"                   if OUTBOUND_CONDITION(header)]"},{"line_number":100,"context_line":"        logger.debug(\u0027removed response headers: %s\u0027 % removed)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7b6b9f90_5b6d7420","line":97,"in_reply_to":"743593b3_4108f602","updated":"2023-11-20 19:18:13.000000000","message":"it was kind of a dumb log-line anyway; but not a bad idea.","commit_id":"bdea69d259cfe938af771ed630b9b27a8de4ccef"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4b2a8f1192ad182b700f57cd0fc25043576f8495","unresolved":true,"context_lines":[{"line_number":107,"context_line":"        self.app \u003d app"},{"line_number":108,"context_line":"        self.logger \u003d get_logger(conf, log_route\u003d\u0027gatekeeper\u0027)"},{"line_number":109,"context_line":"        self.inbound_condition \u003d make_exclusion_test(inbound_exclusions)"},{"line_number":110,"context_line":"        self.outbound_condition \u003d OUTBOUND_CONDITION"},{"line_number":111,"context_line":"        self.shunt_x_timestamp \u003d config_true_value("},{"line_number":112,"context_line":"            conf.get(\u0027shunt_inbound_x_timestamp\u0027, \u0027true\u0027))"},{"line_number":113,"context_line":"        self.allow_reserved_names_header \u003d config_true_value("}],"source_content_type":"text/x-python","patch_set":1,"id":"0d745ea8_8c85fe80","line":110,"updated":"2023-11-20 16:50:22.000000000","message":"this is no longer used?","commit_id":"bdea69d259cfe938af771ed630b9b27a8de4ccef"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aecc568c57f09c08f2351aaaed5ee75a0598fd67","unresolved":true,"context_lines":[{"line_number":107,"context_line":"        self.app \u003d app"},{"line_number":108,"context_line":"        self.logger \u003d get_logger(conf, log_route\u003d\u0027gatekeeper\u0027)"},{"line_number":109,"context_line":"        self.inbound_condition \u003d make_exclusion_test(inbound_exclusions)"},{"line_number":110,"context_line":"        self.outbound_condition \u003d OUTBOUND_CONDITION"},{"line_number":111,"context_line":"        self.shunt_x_timestamp \u003d config_true_value("},{"line_number":112,"context_line":"            conf.get(\u0027shunt_inbound_x_timestamp\u0027, \u0027true\u0027))"},{"line_number":113,"context_line":"        self.allow_reserved_names_header \u003d config_true_value("}],"source_content_type":"text/x-python","patch_set":1,"id":"46d02569_711d7a6c","line":110,"in_reply_to":"0d745ea8_8c85fe80","updated":"2023-11-20 19:18:13.000000000","message":"sounds right.","commit_id":"bdea69d259cfe938af771ed630b9b27a8de4ccef"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"4b2a8f1192ad182b700f57cd0fc25043576f8495","unresolved":true,"context_lines":[{"line_number":137,"context_line":"            # may set ``env[\u0027swift.leave_relative_location\u0027] \u003d True`` in the"},{"line_number":138,"context_line":"            # WSGI environment."},{"line_number":139,"context_line":"            leave_relative_location \u003d env.get("},{"line_number":140,"context_line":"                \u0027swift.leave_relative_location\u0027, False)"},{"line_number":141,"context_line":"            new_headers \u003d clean_outbound_headers("},{"line_number":142,"context_line":"                response_headers,"},{"line_number":143,"context_line":"                force_relative_location\u003dleave_relative_location,"}],"source_content_type":"text/x-python","patch_set":1,"id":"a7d342c3_1b383d19","line":140,"range":{"start_line":140,"start_character":23,"end_line":140,"end_character":30},"updated":"2023-11-20 16:50:22.000000000","message":"is there a deliberate distinction intended between \u0027leave_\u0027 and \u0027force_\u0027 in the env vs the arg? I got confused :/","commit_id":"bdea69d259cfe938af771ed630b9b27a8de4ccef"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"aecc568c57f09c08f2351aaaed5ee75a0598fd67","unresolved":true,"context_lines":[{"line_number":137,"context_line":"            # may set ``env[\u0027swift.leave_relative_location\u0027] \u003d True`` in the"},{"line_number":138,"context_line":"            # WSGI environment."},{"line_number":139,"context_line":"            leave_relative_location \u003d env.get("},{"line_number":140,"context_line":"                \u0027swift.leave_relative_location\u0027, False)"},{"line_number":141,"context_line":"            new_headers \u003d clean_outbound_headers("},{"line_number":142,"context_line":"                response_headers,"},{"line_number":143,"context_line":"                force_relative_location\u003dleave_relative_location,"}],"source_content_type":"text/x-python","patch_set":1,"id":"e04507fe_45edf317","line":140,"range":{"start_line":140,"start_character":23,"end_line":140,"end_character":30},"in_reply_to":"a7d342c3_1b383d19","updated":"2023-11-20 19:18:13.000000000","message":"yes deliberate.  the swob api is \"leave_relative_location\" i.e. \"only force to absolute if not leave_relative_location\" (you could send abs w/ leave_relative_location and swob would skip force abs but client would get abs).  Lots of our mw would set this env var, it\u0027s not clear who actually wants the force-abs behavior; I think we inherited it from webob.\n\nthen at somepoint someone discovered keystone uses webob and will force location headers to abs w/o respecting the leave_relative_location header at all.  So here in gatekeeper we \"fixed\" it by always setting abs locations to relative locations when leave_relative_location is set.\n\nSo the gatekeeper api seemed differen to me (i.e. you could NOT send abs w/ leave_relative_location since gatekeeper will force the relative_location and client would NOT get abs)","commit_id":"bdea69d259cfe938af771ed630b9b27a8de4ccef"}]}
