)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"67cb3fe3fd9c6f5bc30a8ea8eb21c1586056f19b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"db06228b_61dfda93","updated":"2026-02-19 11:42:57.000000000","message":"very much WIP","commit_id":"111feb3278d69d3b87212954a2eae08ac744e0df"}],"swift/common/direct_client.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"67cb3fe3fd9c6f5bc30a8ea8eb21c1586056f19b","unresolved":true,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    ip, port \u003d get_ip_port(node, headers)"},{"line_number":120,"context_line":"    headers.setdefault(\u0027X-Backend-Allow-Reserved-Names\u0027, \u0027true\u0027)"},{"line_number":121,"context_line":"    timestamp_factory \u003d get_timestamp_factory()"},{"line_number":122,"context_line":"    headers.setdefault("},{"line_number":123,"context_line":"        \u0027X-Timestamp\u0027,"},{"line_number":124,"context_line":"        timestamp_factory.make_timestamp(stype, method).internal)"}],"source_content_type":"text/x-python","patch_set":1,"id":"49a9f4c1_324633a7","line":121,"updated":"2026-02-19 11:42:57.000000000","message":"note: we have no config to pass to the factory","commit_id":"111feb3278d69d3b87212954a2eae08ac744e0df"}],"swift/common/middleware/timestamp_factory.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"67cb3fe3fd9c6f5bc30a8ea8eb21c1586056f19b","unresolved":true,"context_lines":[{"line_number":17,"context_line":"from swift.common.utils import config_true_value"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class TimestampFactoryMiddleware(object):"},{"line_number":21,"context_line":"    \"\"\""},{"line_number":22,"context_line":"    Middleware that installs a timestamp factory in the request environ."},{"line_number":23,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"f1a0daec_70e20910","line":20,"updated":"2026-02-19 11:42:57.000000000","message":"TODO: I haven\u0027t plumbed this into the pipeline yet. I envisage it being one of the mandatory middlewares at the start of the pipeline.","commit_id":"111feb3278d69d3b87212954a2eae08ac744e0df"}],"swift/common/swob.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"67cb3fe3fd9c6f5bc30a8ea8eb21c1586056f19b","unresolved":true,"context_lines":[{"line_number":1019,"context_line":"        \"\"\""},{"line_number":1020,"context_line":"        # Note: this is the preferred way to add an x-timestamp header to a"},{"line_number":1021,"context_line":"        # request."},{"line_number":1022,"context_line":"        timestamp_factory \u003d get_timestamp_factory(self.environ)"},{"line_number":1023,"context_line":"        if \u0027HTTP_X_TIMESTAMP\u0027 in self.environ:"},{"line_number":1024,"context_line":"            # The container sync feature and some middlewares set an"},{"line_number":1025,"context_line":"            # x-timestamp header in requests. If present this is checked and"}],"source_content_type":"text/x-python","patch_set":1,"id":"3539aa0d_4e3a70d8","line":1022,"updated":"2026-02-19 11:42:57.000000000","message":"I don\u0027t like the fact that swob has to know about middleware installed callbacks. I wonder if ensure_x_timestamp functionality needs to move to request_helpers.","commit_id":"111feb3278d69d3b87212954a2eae08ac744e0df"}],"swift/common/utils/timestamp.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"67cb3fe3fd9c6f5bc30a8ea8eb21c1586056f19b","unresolved":true,"context_lines":[{"line_number":712,"context_line":"            return NormalTimestamp(value)"},{"line_number":713,"context_line":""},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"def set_timestamp_factory(environ, factory):"},{"line_number":716,"context_line":"    environ[\u0027swift.timestamp_factory\u0027] \u003d factory"},{"line_number":717,"context_line":""},{"line_number":718,"context_line":""},{"line_number":719,"context_line":"def get_timestamp_factory(environ\u003dNone):"},{"line_number":720,"context_line":"    # return a default if not in req env"},{"line_number":721,"context_line":"    environ \u003d environ or {}"},{"line_number":722,"context_line":"    return environ.get(\u0027swift.timestamp_factory\u0027, TimestampFactory())"}],"source_content_type":"text/x-python","patch_set":1,"id":"87ff23a0_e044bf73","line":722,"range":{"start_line":715,"start_character":0,"end_line":722,"end_character":69},"updated":"2026-02-19 11:42:57.000000000","message":"I actually wanted these two helper functions to be in request_helpers, or maybe in the middleware module...but neither of those can be imported into swob because of circular dependencies.","commit_id":"111feb3278d69d3b87212954a2eae08ac744e0df"}]}
