)]}'
{"gnocchi/indexer/alembic/versions/aba5a217ca9b_merge_created_in_creator.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"9da27b85ad37df1d2c82e600dfa71702f82de99f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                creator\u003d("},{"line_number":49,"context_line":"                    created_by_user_id_col + \":\" + created_by_project_id_col"},{"line_number":50,"context_line":"                )).where((created_by_user_id_col is not None)"},{"line_number":51,"context_line":"                         | (created_by_project_id_col is not None)))"},{"line_number":52,"context_line":"        op.drop_column(table_name, \"created_by_user_id\")"},{"line_number":53,"context_line":"        op.drop_column(table_name, \"created_by_project_id\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_7d59235b","line":51,"range":{"start_line":51,"start_character":25,"end_line":51,"end_character":26},"updated":"2017-01-10 15:41:57.000000000","message":"should this be an \u0026 or do we plan on building:\n\n  None + \":\" + \u003cstring\u003e","commit_id":"bc5063e007dced112e77a7ee6bf6f1c99f744649"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b89f39e8e10f491ecfad69d5dc2c9f46a11fd86c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"                creator\u003d("},{"line_number":49,"context_line":"                    created_by_user_id_col + \":\" + created_by_project_id_col"},{"line_number":50,"context_line":"                )).where((created_by_user_id_col is not None)"},{"line_number":51,"context_line":"                         | (created_by_project_id_col is not None)))"},{"line_number":52,"context_line":"        op.drop_column(table_name, \"created_by_user_id\")"},{"line_number":53,"context_line":"        op.drop_column(table_name, \"created_by_project_id\")"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_256ea1c9","line":51,"range":{"start_line":51,"start_character":25,"end_line":51,"end_character":26},"in_reply_to":"ba5201f7_7d59235b","updated":"2017-01-10 15:49:11.000000000","message":"it\u0027ll be \":\u003cstring\u003e\"","commit_id":"bc5063e007dced112e77a7ee6bf6f1c99f744649"}],"gnocchi/indexer/sqlalchemy.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"b6d1ea3e034a924e68cd4a658f53323af489e98a","unresolved":false,"context_lines":[{"line_number":1156,"context_line":"                except AttributeError:"},{"line_number":1157,"context_line":"                    pass"},{"line_number":1158,"context_line":"                return creator.like(\"%s:%%\" % value)"},{"line_number":1159,"context_line":"            raise indexer.QueryValueError(value, field_name)"},{"line_number":1160,"context_line":"        elif field_name \u003d\u003d \"created_by_project_id\":"},{"line_number":1161,"context_line":"            if op \u003d\u003d operator.eq:"},{"line_number":1162,"context_line":"                try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_d99da35a","line":1159,"range":{"start_line":1159,"start_character":12,"end_line":1159,"end_character":60},"updated":"2017-01-04 07:47:23.000000000","message":"This is a small API breakage :( but I got we do not want to implements all operators for backward compat and some of them looks impossible to do (like in).\n\nperhaps we could add at least ne and like:\n\nne : sqlalchemy.not_(creator.like(...)) or the shorter one: ~creator.like(...)\n\nfor like: we can prefix/suffix %%: and :%% to the value to ensure we did not match unwanted line.","commit_id":"bd25666b2a5f5bc9eb716f5872781f08b0ac3613"}],"gnocchi/indexer/sqlalchemy_base.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"b6d1ea3e034a924e68cd4a658f53323af489e98a","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            d[\u0027metrics\u0027] \u003d dict((m.name, six.text_type(m.id))"},{"line_number":303,"context_line":"                                for m in self.metrics)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        if self.creator is None:"},{"line_number":306,"context_line":"            d[\u0027created_by_user_id\u0027] \u003d d[\u0027created_by_project_id\u0027] \u003d None"},{"line_number":307,"context_line":"        else:"},{"line_number":308,"context_line":"            d[\u0027created_by_user_id\u0027], _, d[\u0027created_by_project_id\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_59c1b32d","line":305,"updated":"2017-01-04 07:47:23.000000000","message":"Should we do that only if the keystone is used ?\n\nAnyways bringing the oslo.cfg object here is just awful, I like this lazy version.","commit_id":"bd25666b2a5f5bc9eb716f5872781f08b0ac3613"}],"gnocchi/rest/auth_helper.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"39346034e85ef6db9a3d54384da9c31203fdf286","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        # FIXME(jd) should have domain but should not break existing :("},{"line_number":26,"context_line":"        user_id \u003d headers.get(\"X-User-Id\", \"\")"},{"line_number":27,"context_line":"        project_id \u003d headers.get(\"X-Project-Id\", \"\")"},{"line_number":28,"context_line":"        return user_id + \":\" + project_id"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    @staticmethod"},{"line_number":31,"context_line":"    def get_auth_info(headers):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba5201f7_3936c852","line":28,"range":{"start_line":28,"start_character":26,"end_line":28,"end_character":27},"updated":"2017-01-03 17:00:05.000000000","message":"I wonder if \u0027:\u0027 is the best here. User-Id/Project-Id is kind of free-from and can have \u0027:\u0027 ...\n\nAnyways, sql and ldap backends don\u0027t use \u0027:\u0027, so we are fine with opensource/reference keystone implementations.","commit_id":"7f058592f1109b325710d9ac1589a293bbbc76a8"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"e85ccd4f4a3e99525a923b3957c016c298a90df7","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            return {\"or\": policy_filter}"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"class NoAuthHelper(KeystoneAuthHelper):"},{"line_number":89,"context_line":"    @staticmethod"},{"line_number":90,"context_line":"    def get_current_user(headers):"},{"line_number":91,"context_line":"        # FIXME(jd) Should be a single header"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba5201f7_394b0fcb","line":88,"updated":"2017-01-04 07:48:46.000000000","message":"Not really useful, but I have seen it will be removed in next patch so.","commit_id":"bd25666b2a5f5bc9eb716f5872781f08b0ac3613"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"9da27b85ad37df1d2c82e600dfa71702f82de99f","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        user_id \u003d headers.get(\"X-User-Id\")"},{"line_number":33,"context_line":"        project_id \u003d headers.get(\"X-Project-Id\")"},{"line_number":34,"context_line":"        return {"},{"line_number":35,"context_line":"            \"user\": (user_id or \"\") + \":\" + (project_id or \"\"),"},{"line_number":36,"context_line":"            \"user_id\": user_id,"},{"line_number":37,"context_line":"            \"project_id\": project_id,"},{"line_number":38,"context_line":"            \u0027domain_id\u0027: headers.get(\"X-Domain-Id\"),"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_32ab458b","line":35,"range":{"start_line":35,"start_character":14,"end_line":35,"end_character":15},"updated":"2017-01-10 15:41:57.000000000","message":"creator... i feel like this should\u0027ve failed somewhere no?","commit_id":"bc5063e007dced112e77a7ee6bf6f1c99f744649"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b89f39e8e10f491ecfad69d5dc2c9f46a11fd86c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        user_id \u003d headers.get(\"X-User-Id\")"},{"line_number":33,"context_line":"        project_id \u003d headers.get(\"X-Project-Id\")"},{"line_number":34,"context_line":"        return {"},{"line_number":35,"context_line":"            \"user\": (user_id or \"\") + \":\" + (project_id or \"\"),"},{"line_number":36,"context_line":"            \"user_id\": user_id,"},{"line_number":37,"context_line":"            \"project_id\": project_id,"},{"line_number":38,"context_line":"            \u0027domain_id\u0027: headers.get(\"X-Domain-Id\"),"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_c5b4f536","line":35,"range":{"start_line":35,"start_character":14,"end_line":35,"end_character":15},"in_reply_to":"ba5201f7_32ab458b","updated":"2017-01-10 15:49:11.000000000","message":"This is the oslo policy creds. We pass user as the user doing the request.","commit_id":"bc5063e007dced112e77a7ee6bf6f1c99f744649"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"7dec1b42d3f074040a01d0e609ddb9c9090b4670","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        user_id \u003d headers.get(\"X-User-Id\")"},{"line_number":33,"context_line":"        project_id \u003d headers.get(\"X-Project-Id\")"},{"line_number":34,"context_line":"        return {"},{"line_number":35,"context_line":"            \"user\": (user_id or \"\") + \":\" + (project_id or \"\"),"},{"line_number":36,"context_line":"            \"user_id\": user_id,"},{"line_number":37,"context_line":"            \"project_id\": project_id,"},{"line_number":38,"context_line":"            \u0027domain_id\u0027: headers.get(\"X-Domain-Id\"),"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_43d1ddcc","line":35,"range":{"start_line":35,"start_character":14,"end_line":35,"end_character":15},"in_reply_to":"ba5201f7_c5b4f536","updated":"2017-01-10 16:27:35.000000000","message":"errr ok.","commit_id":"bc5063e007dced112e77a7ee6bf6f1c99f744649"}],"gnocchi/tests/test_indexer.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"9da27b85ad37df1d2c82e600dfa71702f82de99f","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                          \"revision_start\": rc.revision_start,"},{"line_number":209,"context_line":"                          \"revision_end\": None,"},{"line_number":210,"context_line":"                          \"creator\": creator,"},{"line_number":211,"context_line":"                          \"created_by_user_id\": creator,"},{"line_number":212,"context_line":"                          \"created_by_project_id\": \"\","},{"line_number":213,"context_line":"                          \"user_id\": None,"},{"line_number":214,"context_line":"                          \"project_id\": None,"},{"line_number":215,"context_line":"                          \"started_at\": rc.started_at,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_d272f910","line":212,"range":{"start_line":211,"start_character":56,"end_line":212,"end_character":54},"updated":"2017-01-10 15:41:57.000000000","message":"can we validate this actually gets populated? like it can parse \u0027:\u0027","commit_id":"bc5063e007dced112e77a7ee6bf6f1c99f744649"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"7dec1b42d3f074040a01d0e609ddb9c9090b4670","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                          \"revision_start\": rc.revision_start,"},{"line_number":209,"context_line":"                          \"revision_end\": None,"},{"line_number":210,"context_line":"                          \"creator\": creator,"},{"line_number":211,"context_line":"                          \"created_by_user_id\": creator,"},{"line_number":212,"context_line":"                          \"created_by_project_id\": \"\","},{"line_number":213,"context_line":"                          \"user_id\": None,"},{"line_number":214,"context_line":"                          \"project_id\": None,"},{"line_number":215,"context_line":"                          \"started_at\": rc.started_at,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_6338a13e","line":212,"range":{"start_line":211,"start_character":56,"end_line":212,"end_character":54},"in_reply_to":"ba5201f7_457f2566","updated":"2017-01-10 16:27:35.000000000","message":"pass in creator as str(uuid.uuid4()):str(uuid.uuid4()) i assume that\u0027s what rest is giving indexer?","commit_id":"bc5063e007dced112e77a7ee6bf6f1c99f744649"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"3328d911b2a34810093e0c837bc0e0f340523184","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                          \"revision_start\": rc.revision_start,"},{"line_number":209,"context_line":"                          \"revision_end\": None,"},{"line_number":210,"context_line":"                          \"creator\": creator,"},{"line_number":211,"context_line":"                          \"created_by_user_id\": creator,"},{"line_number":212,"context_line":"                          \"created_by_project_id\": \"\","},{"line_number":213,"context_line":"                          \"user_id\": None,"},{"line_number":214,"context_line":"                          \"project_id\": None,"},{"line_number":215,"context_line":"                          \"started_at\": rc.started_at,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_d9fe9cad","line":212,"range":{"start_line":211,"start_character":56,"end_line":212,"end_character":54},"in_reply_to":"ba5201f7_6338a13e","updated":"2017-01-10 16:50:25.000000000","message":"oh right. i think it\u0027s validate in the API later, but I can add a test here!","commit_id":"bc5063e007dced112e77a7ee6bf6f1c99f744649"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b89f39e8e10f491ecfad69d5dc2c9f46a11fd86c","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                          \"revision_start\": rc.revision_start,"},{"line_number":209,"context_line":"                          \"revision_end\": None,"},{"line_number":210,"context_line":"                          \"creator\": creator,"},{"line_number":211,"context_line":"                          \"created_by_user_id\": creator,"},{"line_number":212,"context_line":"                          \"created_by_project_id\": \"\","},{"line_number":213,"context_line":"                          \"user_id\": None,"},{"line_number":214,"context_line":"                          \"project_id\": None,"},{"line_number":215,"context_line":"                          \"started_at\": rc.started_at,"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_457f2566","line":212,"range":{"start_line":211,"start_character":56,"end_line":212,"end_character":54},"in_reply_to":"ba5201f7_d272f910","updated":"2017-01-10 15:49:11.000000000","message":"I don\u0027t understand what you mean.","commit_id":"bc5063e007dced112e77a7ee6bf6f1c99f744649"}],"gnocchi/tests/test_rest.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"9da27b85ad37df1d2c82e600dfa71702f82de99f","unresolved":false,"context_lines":[{"line_number":631,"context_line":"        # Set original_resource_id"},{"line_number":632,"context_line":"        self.resource[\u0027original_resource_id\u0027] \u003d self.resource[\u0027id\u0027]"},{"line_number":633,"context_line":"        if self.auth:"},{"line_number":634,"context_line":"            self.resource[\u0027created_by_user_id\u0027] \u003d TestingApp.USER_ID"},{"line_number":635,"context_line":"            self.resource[\u0027created_by_project_id\u0027] \u003d TestingApp.PROJECT_ID"},{"line_number":636,"context_line":"            self.resource[\u0027creator\u0027] \u003d ("},{"line_number":637,"context_line":"                TestingApp.USER_ID + \":\" + TestingApp.PROJECT_ID"},{"line_number":638,"context_line":"            )"},{"line_number":639,"context_line":"        else:"},{"line_number":640,"context_line":"            self.resource[\u0027created_by_user_id\u0027] \u003d None"},{"line_number":641,"context_line":"            self.resource[\u0027created_by_project_id\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_f2945de9","line":638,"range":{"start_line":634,"start_character":0,"end_line":638,"end_character":13},"updated":"2017-01-10 15:41:57.000000000","message":"why do we keep both? shouldn\u0027t it be one or the other?","commit_id":"bc5063e007dced112e77a7ee6bf6f1c99f744649"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"3328d911b2a34810093e0c837bc0e0f340523184","unresolved":false,"context_lines":[{"line_number":631,"context_line":"        # Set original_resource_id"},{"line_number":632,"context_line":"        self.resource[\u0027original_resource_id\u0027] \u003d self.resource[\u0027id\u0027]"},{"line_number":633,"context_line":"        if self.auth:"},{"line_number":634,"context_line":"            self.resource[\u0027created_by_user_id\u0027] \u003d TestingApp.USER_ID"},{"line_number":635,"context_line":"            self.resource[\u0027created_by_project_id\u0027] \u003d TestingApp.PROJECT_ID"},{"line_number":636,"context_line":"            self.resource[\u0027creator\u0027] \u003d ("},{"line_number":637,"context_line":"                TestingApp.USER_ID + \":\" + TestingApp.PROJECT_ID"},{"line_number":638,"context_line":"            )"},{"line_number":639,"context_line":"        else:"},{"line_number":640,"context_line":"            self.resource[\u0027created_by_user_id\u0027] \u003d None"},{"line_number":641,"context_line":"            self.resource[\u0027created_by_project_id\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_79e77012","line":638,"range":{"start_line":634,"start_character":0,"end_line":638,"end_character":13},"in_reply_to":"ba5201f7_237cd9ea","updated":"2017-01-10 16:50:25.000000000","message":"it\u0027s used for comparison in the test, e.g. self.assertEqual(self.resource, what-the-api-returned)","commit_id":"bc5063e007dced112e77a7ee6bf6f1c99f744649"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"7dec1b42d3f074040a01d0e609ddb9c9090b4670","unresolved":false,"context_lines":[{"line_number":631,"context_line":"        # Set original_resource_id"},{"line_number":632,"context_line":"        self.resource[\u0027original_resource_id\u0027] \u003d self.resource[\u0027id\u0027]"},{"line_number":633,"context_line":"        if self.auth:"},{"line_number":634,"context_line":"            self.resource[\u0027created_by_user_id\u0027] \u003d TestingApp.USER_ID"},{"line_number":635,"context_line":"            self.resource[\u0027created_by_project_id\u0027] \u003d TestingApp.PROJECT_ID"},{"line_number":636,"context_line":"            self.resource[\u0027creator\u0027] \u003d ("},{"line_number":637,"context_line":"                TestingApp.USER_ID + \":\" + TestingApp.PROJECT_ID"},{"line_number":638,"context_line":"            )"},{"line_number":639,"context_line":"        else:"},{"line_number":640,"context_line":"            self.resource[\u0027created_by_user_id\u0027] \u003d None"},{"line_number":641,"context_line":"            self.resource[\u0027created_by_project_id\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_237cd9ea","line":638,"range":{"start_line":634,"start_character":0,"end_line":638,"end_character":13},"in_reply_to":"ba5201f7_c5e2352f","updated":"2017-01-10 16:27:35.000000000","message":"won\u0027t your code just ignore created_by_* since there\u0027s a creator value passed in?","commit_id":"bc5063e007dced112e77a7ee6bf6f1c99f744649"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b89f39e8e10f491ecfad69d5dc2c9f46a11fd86c","unresolved":false,"context_lines":[{"line_number":631,"context_line":"        # Set original_resource_id"},{"line_number":632,"context_line":"        self.resource[\u0027original_resource_id\u0027] \u003d self.resource[\u0027id\u0027]"},{"line_number":633,"context_line":"        if self.auth:"},{"line_number":634,"context_line":"            self.resource[\u0027created_by_user_id\u0027] \u003d TestingApp.USER_ID"},{"line_number":635,"context_line":"            self.resource[\u0027created_by_project_id\u0027] \u003d TestingApp.PROJECT_ID"},{"line_number":636,"context_line":"            self.resource[\u0027creator\u0027] \u003d ("},{"line_number":637,"context_line":"                TestingApp.USER_ID + \":\" + TestingApp.PROJECT_ID"},{"line_number":638,"context_line":"            )"},{"line_number":639,"context_line":"        else:"},{"line_number":640,"context_line":"            self.resource[\u0027created_by_user_id\u0027] \u003d None"},{"line_number":641,"context_line":"            self.resource[\u0027created_by_project_id\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba5201f7_c5e2352f","line":638,"range":{"start_line":634,"start_character":0,"end_line":638,"end_character":13},"in_reply_to":"ba5201f7_f2945de9","updated":"2017-01-10 15:49:11.000000000","message":"No, for API compatibility, the old fields are still returned – though they\u0027re now useless and \"deprecated\", but how the hell do we deprecate things in a REST API I don\u0027t know yet.","commit_id":"bc5063e007dced112e77a7ee6bf6f1c99f744649"}]}
