)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4c5a97da107fdef6e7d24263ab2aa3832b6ef006","unresolved":false,"context_lines":[{"line_number":11,"context_line":"URL to users."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"We need this to be a general approach as other services will likely have"},{"line_number":14,"context_line":"a similar problem with there catalog."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The expectation here is that a client will register the catalog hack at"},{"line_number":17,"context_line":"import time rather than for every request."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_9ea5ab06","line":14,"updated":"2014-07-01 15:14:26.000000000","message":"change \"there\" to \"their\"","commit_id":"b828bae4e0bc725ae87b294c59ad0ba8d79112b5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5e130587cc41c034d89d29e2607d60294103ef29","unresolved":false,"context_lines":[{"line_number":11,"context_line":"URL to users."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"We need this to be a general approach as other services will likely have"},{"line_number":14,"context_line":"a similar problem with there catalog."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"The expectation here is that a client will register the catalog hack at"},{"line_number":17,"context_line":"import time rather than for every request."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_9a1689f0","line":14,"in_reply_to":"baada198_9ea5ab06","updated":"2014-07-09 05:35:58.000000000","message":"Done","commit_id":"b828bae4e0bc725ae87b294c59ad0ba8d79112b5"}],"keystoneclient/_discover.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"04b9d7f5f681505ca221a5bbe1925bc9e08bb557","unresolved":false,"context_lines":[{"line_number":272,"context_line":"    make for easier testing."},{"line_number":273,"context_line":"    \"\"\""},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    _instance \u003d None"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def __init__(self):"},{"line_number":278,"context_line":"        self._discovery_data \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_227928c8","line":275,"updated":"2014-09-14 23:47:07.000000000","message":"Not used as far as I can tell.","commit_id":"20278f20acd56c6ae9cd2a64652a6a2cf02ea66b"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"0432614a5ff861c67aa4cb707d540b76c21513d7","unresolved":false,"context_lines":[{"line_number":272,"context_line":"    make for easier testing."},{"line_number":273,"context_line":"    \"\"\""},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    _instance \u003d None"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def __init__(self):"},{"line_number":278,"context_line":"        self._discovery_data \u003d {}"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_1ef54350","line":275,"in_reply_to":"fa98f980_227928c8","updated":"2014-09-16 00:42:10.000000000","message":"Done","commit_id":"20278f20acd56c6ae9cd2a64652a6a2cf02ea66b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"04b9d7f5f681505ca221a5bbe1925bc9e08bb557","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    def __init__(self):"},{"line_number":278,"context_line":"        self._discovery_data \u003d {}"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def add_discover_hack(self, service_type, old, new\u003d\u0027\u0027):"},{"line_number":281,"context_line":"        hacks \u003d self._discovery_data.setdefault(service_type, [])"},{"line_number":282,"context_line":"        hacks.append((old, new))"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_a24c389f","line":280,"updated":"2014-09-14 23:47:07.000000000","message":"there should be a docstring that says what the arguments are.","commit_id":"20278f20acd56c6ae9cd2a64652a6a2cf02ea66b"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"0432614a5ff861c67aa4cb707d540b76c21513d7","unresolved":false,"context_lines":[{"line_number":277,"context_line":"    def __init__(self):"},{"line_number":278,"context_line":"        self._discovery_data \u003d {}"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def add_discover_hack(self, service_type, old, new\u003d\u0027\u0027):"},{"line_number":281,"context_line":"        hacks \u003d self._discovery_data.setdefault(service_type, [])"},{"line_number":282,"context_line":"        hacks.append((old, new))"},{"line_number":283,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_3e9767ed","line":280,"in_reply_to":"fa98f980_a24c389f","updated":"2014-09-16 00:42:10.000000000","message":"Done","commit_id":"20278f20acd56c6ae9cd2a64652a6a2cf02ea66b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"04b9d7f5f681505ca221a5bbe1925bc9e08bb557","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"_VERSION_HACKS \u003d _VersionHacks()"},{"line_number":294,"context_line":"_VERSION_HACKS.add_discover_hack(\u0027identity\u0027, \u0027/v2.0/?$\u0027, \u0027/\u0027)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"def get_catalog_discover_hack(service_type, url):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_0246e47a","line":294,"updated":"2014-09-14 23:47:07.000000000","message":"Seems like a regex should be passed in rather than a string for a regex -- re.compile(\u0027/v2.0/?$\u0027)","commit_id":"20278f20acd56c6ae9cd2a64652a6a2cf02ea66b"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"0432614a5ff861c67aa4cb707d540b76c21513d7","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"_VERSION_HACKS \u003d _VersionHacks()"},{"line_number":294,"context_line":"_VERSION_HACKS.add_discover_hack(\u0027identity\u0027, \u0027/v2.0/?$\u0027, \u0027/\u0027)"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"def get_catalog_discover_hack(service_type, url):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_5e9a6b14","line":294,"in_reply_to":"fa98f980_0246e47a","updated":"2014-09-16 00:42:10.000000000","message":"Done","commit_id":"20278f20acd56c6ae9cd2a64652a6a2cf02ea66b"}],"keystoneclient/auth/identity/base.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"8d84f8993ac83db14fefe8253489f86074f5fff0","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        # in the catalog hack. For backwards compatibility people might have"},{"line_number":142,"context_line":"        # a /v2.0 endpoint in there catalog even though they want to use v3"},{"line_number":143,"context_line":"        # clients."},{"line_number":144,"context_line":"        sc_url \u003d sc_url.rstrip(\u0027v2.0\u0027)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        disc \u003d None"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad9bd40_ec0c1745","line":144,"updated":"2014-05-02 14:14:58.000000000","message":"has the optional trailing slash already been removed?","commit_id":"cdc4d10ddeb209fd779a27a5e57c16f0380ffe70"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"76c6dc0877da873f64ee6e24096ae8dea6716f87","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            return sc_url"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # NOTE(jamielennox): For backwards compatibility people might have a"},{"line_number":203,"context_line":"        # versioned endpoint in there catalog even though they want to use"},{"line_number":204,"context_line":"        # other endpoint versions. So we support a list of client defined"},{"line_number":205,"context_line":"        # situations where we can strip the version component from a URL before"},{"line_number":206,"context_line":"        # doing discovery."}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_46ffb067","line":203,"updated":"2014-07-01 15:30:48.000000000","message":"change \"there\" to \"their\"","commit_id":"b828bae4e0bc725ae87b294c59ad0ba8d79112b5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5e130587cc41c034d89d29e2607d60294103ef29","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            return sc_url"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        # NOTE(jamielennox): For backwards compatibility people might have a"},{"line_number":203,"context_line":"        # versioned endpoint in there catalog even though they want to use"},{"line_number":204,"context_line":"        # other endpoint versions. So we support a list of client defined"},{"line_number":205,"context_line":"        # situations where we can strip the version component from a URL before"},{"line_number":206,"context_line":"        # doing discovery."}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_da62c1ac","line":203,"in_reply_to":"baada198_46ffb067","updated":"2014-07-09 05:35:58.000000000","message":"Done","commit_id":"b828bae4e0bc725ae87b294c59ad0ba8d79112b5"}],"keystoneclient/discover.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"04b9d7f5f681505ca221a5bbe1925bc9e08bb557","unresolved":false,"context_lines":[{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    This function adds a rule for a given service type that if part of the URL"},{"line_number":282,"context_line":"    matches a given regular expression in *old* then it will be replaced with"},{"line_number":283,"context_line":"    the *new* value."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    For example the included rule states::"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_fd0a651e","line":283,"updated":"2014-09-14 23:47:07.000000000","message":"this needs to explain that *all* occurrences of matches of *old* are going to be replaced by *new*.","commit_id":"20278f20acd56c6ae9cd2a64652a6a2cf02ea66b"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"0432614a5ff861c67aa4cb707d540b76c21513d7","unresolved":false,"context_lines":[{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    This function adds a rule for a given service type that if part of the URL"},{"line_number":282,"context_line":"    matches a given regular expression in *old* then it will be replaced with"},{"line_number":283,"context_line":"    the *new* value."},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"    For example the included rule states::"},{"line_number":286,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_1ea38343","line":283,"in_reply_to":"fa98f980_fd0a651e","updated":"2014-09-16 00:42:10.000000000","message":"Done","commit_id":"20278f20acd56c6ae9cd2a64652a6a2cf02ea66b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"04b9d7f5f681505ca221a5bbe1925bc9e08bb557","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    :param str service_type: The service type as defined in the catalog that"},{"line_number":293,"context_line":"                             the rule will apply to."},{"line_number":294,"context_line":"    :param str old: The regular expression to search for and replace if found."},{"line_number":295,"context_line":"    :param str new: The new string to replace the old one with."},{"line_number":296,"context_line":"    \"\"\""},{"line_number":297,"context_line":"    _discover._VERSION_HACKS.add_discover_hack(service_type, old, new)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_6256d02b","line":294,"updated":"2014-09-14 23:47:07.000000000","message":"seems like this should take a regex rather than a string.","commit_id":"20278f20acd56c6ae9cd2a64652a6a2cf02ea66b"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"0432614a5ff861c67aa4cb707d540b76c21513d7","unresolved":false,"context_lines":[{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    :param str service_type: The service type as defined in the catalog that"},{"line_number":293,"context_line":"                             the rule will apply to."},{"line_number":294,"context_line":"    :param str old: The regular expression to search for and replace if found."},{"line_number":295,"context_line":"    :param str new: The new string to replace the old one with."},{"line_number":296,"context_line":"    \"\"\""},{"line_number":297,"context_line":"    _discover._VERSION_HACKS.add_discover_hack(service_type, old, new)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_fe907fee","line":294,"in_reply_to":"fa98f980_6256d02b","updated":"2014-09-16 00:42:10.000000000","message":"Done","commit_id":"20278f20acd56c6ae9cd2a64652a6a2cf02ea66b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ef1c73cfe2639e63312a6dffbfedd064a3a95672","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        return self._create_client(version_data, **kwargs)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"def add_catalog_discover_hack(service_type, old, new):"},{"line_number":272,"context_line":"    \"\"\"Adds a version removal rule for a particular service."},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    Originally deployments of OpenStack would contain a versioned endpoint in"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa98f980_4fdb7721","line":271,"updated":"2014-09-16 21:35:32.000000000","message":"suggest have new\u003d\u0027\u0027 like _discover._VERSION_HACKS.add_discover_hack","commit_id":"ec57b35bc8edb933fe259db2b96c393874166dc0"}],"keystoneclient/tests/auth/test_identity_common.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"76c6dc0877da873f64ee6e24096ae8dea6716f87","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        self.stub_url(httpretty.POST, [\u0027tokens\u0027], **kwargs)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"# class CatalogHackPlugin(base.BaseIdentityPlugin):"},{"line_number":425,"context_line":"#"},{"line_number":426,"context_line":"#     def __init__(self, token, hacks):"},{"line_number":427,"context_line":"#         self.token_data \u003d access.AccessInfo.factory(body\u003dtoken)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_460df08f","line":424,"updated":"2014-07-01 15:30:48.000000000","message":"remove commented out code","commit_id":"b828bae4e0bc725ae87b294c59ad0ba8d79112b5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5e130587cc41c034d89d29e2607d60294103ef29","unresolved":false,"context_lines":[{"line_number":421,"context_line":"        self.stub_url(httpretty.POST, [\u0027tokens\u0027], **kwargs)"},{"line_number":422,"context_line":""},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"# class CatalogHackPlugin(base.BaseIdentityPlugin):"},{"line_number":425,"context_line":"#"},{"line_number":426,"context_line":"#     def __init__(self, token, hacks):"},{"line_number":427,"context_line":"#         self.token_data \u003d access.AccessInfo.factory(body\u003dtoken)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_3a71fd77","line":424,"in_reply_to":"baada198_460df08f","updated":"2014-07-09 05:35:58.000000000","message":"Done","commit_id":"b828bae4e0bc725ae87b294c59ad0ba8d79112b5"},{"author":{"_account_id":11333,"name":"David J Hu","email":"david.hu@hpe.com","username":"dhu"},"change_message_id":"578e137a53b6aaee88a187c2e56e2f35e9158dc2","unresolved":false,"context_lines":[{"line_number":433,"context_line":""},{"line_number":434,"context_line":"class CatalogHackTests(utils.TestCase):"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    TEST_URL \u003d \u0027http://keystone.server:5000/v2.0\u0027"},{"line_number":437,"context_line":"    OTHER_URL \u003d \u0027http://other.server:5000/path\u0027"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    IDENTITY \u003d \u0027identity\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_cf4bd357","line":436,"updated":"2014-07-01 16:20:47.000000000","message":"Remove TEST_URL since it is not used.","commit_id":"b828bae4e0bc725ae87b294c59ad0ba8d79112b5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"5e130587cc41c034d89d29e2607d60294103ef29","unresolved":false,"context_lines":[{"line_number":433,"context_line":""},{"line_number":434,"context_line":"class CatalogHackTests(utils.TestCase):"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"    TEST_URL \u003d \u0027http://keystone.server:5000/v2.0\u0027"},{"line_number":437,"context_line":"    OTHER_URL \u003d \u0027http://other.server:5000/path\u0027"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    IDENTITY \u003d \u0027identity\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_9a684989","line":436,"in_reply_to":"baada198_cf4bd357","updated":"2014-07-09 05:35:58.000000000","message":"TEST_URL is read as part of the stub_url code.","commit_id":"b828bae4e0bc725ae87b294c59ad0ba8d79112b5"}]}
