)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"eb98126e87c5fe2a5ad3a072e5f8e37e068a2a3b","unresolved":false,"context_lines":[{"line_number":10,"context_line":"with a limit value in decreasing order."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"event-listing has been modified to use oslo.db\u0027s pagination option. This"},{"line_number":13,"context_line":"also results in disabling the limit option for non-sql databases."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-bug: #1615699"},{"line_number":16,"context_line":"Change-Id: I0441ca6283be5859c09c3d381ffbb52ca4a79eca"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5a8bc5a2_5fa4cbb8","line":13,"updated":"2016-09-26 20:11:34.000000000","message":"I think you should explain in more details the new options in the API in the commit message.","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"}],"panko/api/controllers/v2/events.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"25c3ae93db5b8240cafe6666ba6930153467bed7","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        rbac.enforce(\"events:index\", pecan.request)"},{"line_number":286,"context_line":"        q \u003d q or []"},{"line_number":287,"context_line":"        if limit is None:"},{"line_number":288,"context_line":"            limit \u003d pecan.request.cfg.api.default_api_return_limit"},{"line_number":289,"context_line":"            LOG.info(_LI(\u0027No limit value provided, result set will be\u0027"},{"line_number":290,"context_line":"                         \u0027 limited to %(limit)d.\u0027), {\u0027limit\u0027: limit})"},{"line_number":291,"context_line":"        if not limit or limit \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_3f1fba0a","side":"PARENT","line":288,"range":{"start_line":288,"start_character":34,"end_line":288,"end_character":66},"updated":"2016-09-27 21:52:43.000000000","message":"we need to keep this (maybe in utils). something like this line https://github.com/openstack/gnocchi/blob/master/gnocchi/rest/__init__.py#L242","commit_id":"70b64454807db4f371f72672bbc63055d3af0732"},{"author":{"_account_id":23122,"name":"Amy Fong","email":"amy.fong@windriver.com","username":"afong"},"change_message_id":"97628275c03ee5b414d6f7d22e5670b0640dd7ae","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        rbac.enforce(\"events:index\", pecan.request)"},{"line_number":286,"context_line":"        q \u003d q or []"},{"line_number":287,"context_line":"        if limit is None:"},{"line_number":288,"context_line":"            limit \u003d pecan.request.cfg.api.default_api_return_limit"},{"line_number":289,"context_line":"            LOG.info(_LI(\u0027No limit value provided, result set will be\u0027"},{"line_number":290,"context_line":"                         \u0027 limited to %(limit)d.\u0027), {\u0027limit\u0027: limit})"},{"line_number":291,"context_line":"        if not limit or limit \u003c\u003d 0:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a98d1f4_8df186d0","side":"PARENT","line":288,"range":{"start_line":288,"start_character":34,"end_line":288,"end_character":66},"in_reply_to":"5a8bc5a2_3f1fba0a","updated":"2016-09-28 18:28:23.000000000","message":"Done","commit_id":"70b64454807db4f371f72672bbc63055d3af0732"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"249e3c3072b5ac4296eb80fd5170768ca7cc6768","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        :param q: Filter arguments for which Events to return"},{"line_number":283,"context_line":"        :param limit: Maximum number of samples to be returned."},{"line_number":284,"context_line":"        :param sort: a pair of sort key and sort dir combined with \":\""},{"line_number":285,"context_line":"        :param marker: The pagination query marker, message id of the last"},{"line_number":286,"context_line":"                       item viewed"},{"line_number":287,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a98d1f4_e4b2a093","line":284,"updated":"2016-09-30 15:11:17.000000000","message":"nit: s/a pair/A pair/\n\ns/sort dir/sort direction/\n\nLet\u0027s make sure this text has no errors since docs are generated based on it.","commit_id":"3d1a96363232091899735bbb3a56171a4e1cf7f5"},{"author":{"_account_id":23122,"name":"Amy Fong","email":"amy.fong@windriver.com","username":"afong"},"change_message_id":"78970abd9ae0c6f9796c2c21720ef2bc1a36d02f","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        :param q: Filter arguments for which Events to return"},{"line_number":283,"context_line":"        :param limit: Maximum number of samples to be returned."},{"line_number":284,"context_line":"        :param sort: a pair of sort key and sort dir combined with \":\""},{"line_number":285,"context_line":"        :param marker: The pagination query marker, message id of the last"},{"line_number":286,"context_line":"                       item viewed"},{"line_number":287,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a98d1f4_323046e8","line":284,"in_reply_to":"3a98d1f4_e4b2a093","updated":"2016-09-30 15:18:23.000000000","message":"Done","commit_id":"3d1a96363232091899735bbb3a56171a4e1cf7f5"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"1678deb515f748293559f7f95f5c2c794a4e0cce","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        :param q: Filter arguments for which Events to return"},{"line_number":283,"context_line":"        :param limit: Maximum number of samples to be returned."},{"line_number":284,"context_line":"        :param sort: a pair of sort key and sort direction combined with \":\""},{"line_number":285,"context_line":"        :param marker: The pagination query marker, message id of the last"},{"line_number":286,"context_line":"                       item viewed"},{"line_number":287,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a98d1f4_f2dc1e75","line":284,"updated":"2016-09-30 15:20:43.000000000","message":"s/a pair/A pair/","commit_id":"f03461c190f4ad435a43158a46c2f640c484dffa"}],"panko/api/controllers/v2/utils.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"25c3ae93db5b8240cafe6666ba6930153467bed7","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import functools"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import pecan"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import wsme"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from panko.api.controllers.v2 import base"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_3f95fa87","line":24,"updated":"2016-09-27 21:52:43.000000000","message":"remove empty line","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"},{"author":{"_account_id":23122,"name":"Amy Fong","email":"amy.fong@windriver.com","username":"afong"},"change_message_id":"793bdf7c6ff5cc6b5dd3025a8a14951058dbc3a3","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import functools"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import pecan"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import wsme"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from panko.api.controllers.v2 import base"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a98d1f4_c617f352","line":24,"in_reply_to":"5a8bc5a2_3f95fa87","updated":"2016-09-28 15:18:46.000000000","message":"Done","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"eb98126e87c5fe2a5ad3a072e5f8e37e068a2a3b","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    return wrapped"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"def set_pagination_options(sort, limit, marker, api_model):"},{"line_number":78,"context_line":"    if limit and limit \u003c\u003d 0:"},{"line_number":79,"context_line":"        raise wsme.exc.InvalidInput(\u0027limit\u0027, limit,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_5f9e8bb9","line":76,"updated":"2016-09-26 20:11:34.000000000","message":"It would be nice to have documentation for this method and it\u0027s arguments.","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"},{"author":{"_account_id":23122,"name":"Amy Fong","email":"amy.fong@windriver.com","username":"afong"},"change_message_id":"793bdf7c6ff5cc6b5dd3025a8a14951058dbc3a3","unresolved":false,"context_lines":[{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    return wrapped"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"def set_pagination_options(sort, limit, marker, api_model):"},{"line_number":78,"context_line":"    if limit and limit \u003c\u003d 0:"},{"line_number":79,"context_line":"        raise wsme.exc.InvalidInput(\u0027limit\u0027, limit,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a98d1f4_3cdb46ef","line":76,"in_reply_to":"5a8bc5a2_5f9e8bb9","updated":"2016-09-28 15:18:46.000000000","message":"def set_pagination_options(sort, limit, marker, api_model):\n    \"\"\"Sets the options for pagination specifying query options\n\n    Arguments:\n    sort -- list of sorting criteria. Each sorting option has to format\n            \u003csort key\u003e:\u003csort direction\u003e\n            Valid sort keys: message_id, generated\n                    (SUPPORT_SORT_KEYS in panko/event/storage/models.py)\n            Valid sort directions: asc (ascending), desc (descending)\n                    (SUPPORT_DIRS in panko/event/storage/models.py)\n                    This defaults to asc if unspecified\n                    (DEFAULT_DIR in panko/event/storage/models.py)\n\n            If sort list is empty, this defaults to\n            [\u0027generated:asc\u0027, \u0027message_id:asc\u0027]\n                    (DEFAULT_SORT in panko/event/storage/models.py)\n\n    limit -- integer specifying maximum number of values to return\n\n            If unspecified, this defaults to 100\n                    (DEFAULT_LIMIT in panko/event/storage/models.py)\n    marker -- If specified, assumed to be an integer and assumed to be the\n              identifier of the last object on the previous page of the results\n    api_model -- specifies the class implementing the api model to use for\n                 this pagination. The class is expected to provide the following\n                 members:\n\n                 SUPPORT_DIRS\n                 SUPPORT_SORT_KEYS\n                 DEFAULT_DIR\n                 DEFAULT_SORT\n                 PRIMARY_KEY\n                 DEFAULT_LIMIT\n    \"\"\"","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"},{"author":{"_account_id":17973,"name":"Ludovic Beliveau","email":"lbeliveau@gmail.com","username":"lbeliveau"},"change_message_id":"249e3c3072b5ac4296eb80fd5170768ca7cc6768","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    \"\"\""},{"line_number":110,"context_line":"    if limit and limit \u003c\u003d 0:"},{"line_number":111,"context_line":"        raise wsme.exc.InvalidInput(\u0027limit\u0027, limit,"},{"line_number":112,"context_line":"                                    \u0027it should be a positive integer.\u0027)"},{"line_number":113,"context_line":"    if not limit:"},{"line_number":114,"context_line":"        limit \u003d pecan.request.cfg.api.default_api_return_limit"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a98d1f4_07686eb8","line":112,"updated":"2016-09-30 15:11:17.000000000","message":"nit: s/it should/the limit should/","commit_id":"3d1a96363232091899735bbb3a56171a4e1cf7f5"},{"author":{"_account_id":23122,"name":"Amy Fong","email":"amy.fong@windriver.com","username":"afong"},"change_message_id":"78970abd9ae0c6f9796c2c21720ef2bc1a36d02f","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    \"\"\""},{"line_number":110,"context_line":"    if limit and limit \u003c\u003d 0:"},{"line_number":111,"context_line":"        raise wsme.exc.InvalidInput(\u0027limit\u0027, limit,"},{"line_number":112,"context_line":"                                    \u0027it should be a positive integer.\u0027)"},{"line_number":113,"context_line":"    if not limit:"},{"line_number":114,"context_line":"        limit \u003d pecan.request.cfg.api.default_api_return_limit"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a98d1f4_529dd2ba","line":112,"in_reply_to":"3a98d1f4_07686eb8","updated":"2016-09-30 15:18:23.000000000","message":"Done","commit_id":"3d1a96363232091899735bbb3a56171a4e1cf7f5"}],"panko/event/storage/impl_elasticsearch.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"25c3ae93db5b8240cafe6666ba6930153467bed7","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        return q_args"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def get_events(self, event_filter, pagination\u003dNone):"},{"line_number":184,"context_line":"        if pagination:"},{"line_number":185,"context_line":"            raise panko.NotImplementedError(\u0027Pagination query not implemented\u0027)"},{"line_number":186,"context_line":"        iclient \u003d es.client.IndicesClient(self.conn)"},{"line_number":187,"context_line":"        indices \u003d iclient.get_mapping(\u0027%s_*\u0027 % self.index_name).keys()"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_fffc7274","line":184,"updated":"2016-09-27 21:52:43.000000000","message":"i think we should still be keeping limit to avoid breaking existing functinoality","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"},{"author":{"_account_id":23122,"name":"Amy Fong","email":"amy.fong@windriver.com","username":"afong"},"change_message_id":"97628275c03ee5b414d6f7d22e5670b0640dd7ae","unresolved":false,"context_lines":[{"line_number":181,"context_line":"        return q_args"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    def get_events(self, event_filter, pagination\u003dNone):"},{"line_number":184,"context_line":"        if pagination:"},{"line_number":185,"context_line":"            raise panko.NotImplementedError(\u0027Pagination query not implemented\u0027)"},{"line_number":186,"context_line":"        iclient \u003d es.client.IndicesClient(self.conn)"},{"line_number":187,"context_line":"        indices \u003d iclient.get_mapping(\u0027%s_*\u0027 % self.index_name).keys()"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a98d1f4_cb1d2c68","line":184,"in_reply_to":"5a8bc5a2_fffc7274","updated":"2016-09-28 18:28:23.000000000","message":"k. I\u0027ll do the same for the other implementations and log a warning if there\u0027s sorting arg is non-null.","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bb44d5f0f96950502645f0838f7990450cc6ad52","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        limit \u003d None"},{"line_number":184,"context_line":"        if pagination:"},{"line_number":185,"context_line":"            if pagination.get(\u0027sort\u0027):"},{"line_number":186,"context_line":"                LOG.warning(_LI(\u0027elasticsearch: Sorting is not supported\u0027))"},{"line_number":187,"context_line":"            limit \u003d pagination.get(\u0027limit\u0027)"},{"line_number":188,"context_line":"            if limit \u003d\u003d 0:"},{"line_number":189,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a95cdbc_21db2aef","line":186,"updated":"2016-10-04 14:45:35.000000000","message":"s/LI/LW/\n\ni would also drop the driver name and just put \"Driver does not support sort functionality\"","commit_id":"9e5c6bf3d14cc6c5fcd0e612544f5dc48ae6b5ae"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ea0884e41f2cb5fbd287db2472a232caa42fc8a8","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        limit \u003d None"},{"line_number":184,"context_line":"        if pagination:"},{"line_number":185,"context_line":"            if pagination.get(\u0027sort\u0027):"},{"line_number":186,"context_line":"                LOG.warning(_LI(\u0027Driver does not support sort functionality\u0027))"},{"line_number":187,"context_line":"            limit \u003d pagination.get(\u0027limit\u0027)"},{"line_number":188,"context_line":"            if limit \u003d\u003d 0:"},{"line_number":189,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a95cdbc_a99c746a","line":186,"updated":"2016-10-04 17:57:26.000000000","message":"you forgot to replace LI with LW\n\nsame for the other instances","commit_id":"ee904165e9049c395b12f9ed6282354699199c31"},{"author":{"_account_id":23122,"name":"Amy Fong","email":"amy.fong@windriver.com","username":"afong"},"change_message_id":"8ff2b8c11e4c76d8ea22d27d3219f162fb99d5e1","unresolved":false,"context_lines":[{"line_number":183,"context_line":"        limit \u003d None"},{"line_number":184,"context_line":"        if pagination:"},{"line_number":185,"context_line":"            if pagination.get(\u0027sort\u0027):"},{"line_number":186,"context_line":"                LOG.warning(_LI(\u0027Driver does not support sort functionality\u0027))"},{"line_number":187,"context_line":"            limit \u003d pagination.get(\u0027limit\u0027)"},{"line_number":188,"context_line":"            if limit \u003d\u003d 0:"},{"line_number":189,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a95cdbc_a9aab46e","line":186,"in_reply_to":"1a95cdbc_a99c746a","updated":"2016-10-04 18:01:25.000000000","message":"Ooops! My bad, will fix.","commit_id":"ee904165e9049c395b12f9ed6282354699199c31"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"cd773a481073729bbc3a1dcaf5d9f34fe4498a7b","unresolved":false,"context_lines":[{"line_number":182,"context_line":"    def get_events(self, event_filter, pagination\u003dNone):"},{"line_number":183,"context_line":"        limit \u003d None"},{"line_number":184,"context_line":"        if pagination:"},{"line_number":185,"context_line":"            if pagination.get(\u0027sort\u0027):"},{"line_number":186,"context_line":"                LOG.warning(_LW(\u0027Driver does not support sort functionality\u0027))"},{"line_number":187,"context_line":"            limit \u003d pagination.get(\u0027limit\u0027)"},{"line_number":188,"context_line":"            if limit \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_ba656f46","line":185,"updated":"2016-10-05 12:43:04.000000000","message":"\u0027sort\u0027 in pagination","commit_id":"272c872f2fe9d0658f059538c019836d093a5486"}],"panko/event/storage/impl_hbase.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bb44d5f0f96950502645f0838f7990450cc6ad52","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        limit \u003d None"},{"line_number":131,"context_line":"        if pagination:"},{"line_number":132,"context_line":"            if pagination.get(\u0027sort\u0027):"},{"line_number":133,"context_line":"                LOG.warning(_LI(\u0027hbase: Sorting is not supported\u0027))"},{"line_number":134,"context_line":"            limit \u003d pagination.get(\u0027limit\u0027)"},{"line_number":135,"context_line":"            if limit \u003d\u003d 0:"},{"line_number":136,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a95cdbc_6181b28f","line":133,"updated":"2016-10-04 14:45:35.000000000","message":"s/LI/LW/\n\ni would also drop the driver name and just put \"Driver does not support sort functionality\"","commit_id":"9e5c6bf3d14cc6c5fcd0e612544f5dc48ae6b5ae"}],"panko/event/storage/impl_sqlalchemy.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"25c3ae93db5b8240cafe6666ba6930153467bed7","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        marker \u003d None"},{"line_number":218,"context_line":"        if pagination.get(\u0027marker\u0027):"},{"line_number":219,"context_line":"            key_attr \u003d getattr(model, api_model.PRIMARY_KEY)"},{"line_number":220,"context_line":"            marker_query \u003d copy.copy(query)"},{"line_number":221,"context_line":"            marker_query \u003d marker_query.filter("},{"line_number":222,"context_line":"                key_attr \u003d\u003d pagination[\u0027marker\u0027])"},{"line_number":223,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_fad3a05d","line":220,"updated":"2016-09-27 21:52:43.000000000","message":"i don\u0027t think this is safe. the query already has it\u0027s own filters so if you run it, it doesn\u0027t necessarily have the marker in the results.","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"942aed0d48e0569fb155c378c1936eed06d75667","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        marker \u003d None"},{"line_number":218,"context_line":"        if pagination.get(\u0027marker\u0027):"},{"line_number":219,"context_line":"            key_attr \u003d getattr(model, api_model.PRIMARY_KEY)"},{"line_number":220,"context_line":"            marker_query \u003d copy.copy(query)"},{"line_number":221,"context_line":"            marker_query \u003d marker_query.filter("},{"line_number":222,"context_line":"                key_attr \u003d\u003d pagination[\u0027marker\u0027])"},{"line_number":223,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a98d1f4_b1be98fd","line":220,"in_reply_to":"3a98d1f4_86932bfa","updated":"2016-09-28 16:26:59.000000000","message":":( that\u0027s not good. probably a potential bug there too (unless my initial assessment was wrong)\n\nso you really just need the Event model so i think it should be a completely new query, not the passed in query that has existing filters attached to it.\n\nsomething like https://github.com/openstack/gnocchi/blob/master/gnocchi/indexer/sqlalchemy.py#L681-L686","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"},{"author":{"_account_id":23122,"name":"Amy Fong","email":"amy.fong@windriver.com","username":"afong"},"change_message_id":"793bdf7c6ff5cc6b5dd3025a8a14951058dbc3a3","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        marker \u003d None"},{"line_number":218,"context_line":"        if pagination.get(\u0027marker\u0027):"},{"line_number":219,"context_line":"            key_attr \u003d getattr(model, api_model.PRIMARY_KEY)"},{"line_number":220,"context_line":"            marker_query \u003d copy.copy(query)"},{"line_number":221,"context_line":"            marker_query \u003d marker_query.filter("},{"line_number":222,"context_line":"                key_attr \u003d\u003d pagination[\u0027marker\u0027])"},{"line_number":223,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a98d1f4_86932bfa","line":220,"in_reply_to":"5a8bc5a2_fad3a05d","updated":"2016-09-28 15:18:46.000000000","message":"So something like this instead?\n(btw, I copied this from aodh...)\n\n        marker \u003d None\n        if pagination.get(\u0027marker\u0027):\n            key_attr \u003d getattr(model, api_model.PRIMARY_KEY)\n            query \u003d query.filter(\n                key_attr \u003d\u003d pagination[\u0027marker\u0027])\n            try:\n                marker \u003d query.limit(1).one()\n            except exc.NoResultFound:\n                raise storage.InvalidMarker(\n                    \u0027Marker %s not found.\u0027 % pagination[\u0027marker\u0027])","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"25c3ae93db5b8240cafe6666ba6930153467bed7","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            query \u003d self._get_pagination_query("},{"line_number":307,"context_line":"                query, pagination, api_models.Event, models.Event)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"            event_list \u003d list()"},{"line_number":310,"context_line":"            msg_event_id \u003d dict()"},{"line_number":311,"context_line":"            # get a list of all events that match filters"},{"line_number":312,"context_line":"            for (id_, generated, message_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_3a450817","line":309,"updated":"2016-09-27 21:52:43.000000000","message":"is there a reason we have all these changes afterwards? we shouldn\u0027t really need them as you are just changing what the query result scope is... not the format.","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"},{"author":{"_account_id":23122,"name":"Amy Fong","email":"amy.fong@windriver.com","username":"afong"},"change_message_id":"6a2da4470cb403201ffc215836426d12460d333e","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            query \u003d self._get_pagination_query("},{"line_number":307,"context_line":"                query, pagination, api_models.Event, models.Event)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"            event_list \u003d list()"},{"line_number":310,"context_line":"            msg_event_id \u003d dict()"},{"line_number":311,"context_line":"            # get a list of all events that match filters"},{"line_number":312,"context_line":"            for (id_, generated, message_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_ab92a7f4","line":309,"in_reply_to":"5a8bc5a2_3a450817","updated":"2016-09-28 01:05:18.000000000","message":"To preserve the sorting order from the query, the results were stored in a list (as opposed to the former dict) and since I\u0027m just storing items of type Event, the id gets lost, hence adding msg_event_id. The changes afterwards were introduced to find some sort of way to get the traits information into the list, so I create the dict of lists and then populate the Event using the msg id/event id (msg_event_id) mapping.\n\nLet me know if there\u0027s a much better way to do this!","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"942aed0d48e0569fb155c378c1936eed06d75667","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            query \u003d self._get_pagination_query("},{"line_number":307,"context_line":"                query, pagination, api_models.Event, models.Event)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"            event_list \u003d list()"},{"line_number":310,"context_line":"            msg_event_id \u003d dict()"},{"line_number":311,"context_line":"            # get a list of all events that match filters"},{"line_number":312,"context_line":"            for (id_, generated, message_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a98d1f4_916fdc91","line":309,"in_reply_to":"5a8bc5a2_ab92a7f4","updated":"2016-09-28 16:26:59.000000000","message":"hmm.. i\u0027ll need to think about this. maybe this is the best way.","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bb44d5f0f96950502645f0838f7990450cc6ad52","unresolved":false,"context_lines":[{"line_number":377,"context_line":"            for e in event_list:"},{"line_number":378,"context_line":"                id \u003d msg_event_id[e.message_id]"},{"line_number":379,"context_line":"                if id in event_traits:"},{"line_number":380,"context_line":"                    for trait in event_traits[id]:"},{"line_number":381,"context_line":"                        e.append_trait(trait)"},{"line_number":382,"context_line":"            return event_list"},{"line_number":383,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a95cdbc_64e540a7","line":380,"updated":"2016-10-04 14:45:35.000000000","message":"i\u0027ll test this part. i don\u0027t really like the fact we need to double loop here.","commit_id":"9e5c6bf3d14cc6c5fcd0e612544f5dc48ae6b5ae"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"95e9d7b00bc690a31a8c82385cf33571a6262ac2","unresolved":false,"context_lines":[{"line_number":377,"context_line":"            for e in event_list:"},{"line_number":378,"context_line":"                id \u003d msg_event_id[e.message_id]"},{"line_number":379,"context_line":"                if id in event_traits:"},{"line_number":380,"context_line":"                    for trait in event_traits[id]:"},{"line_number":381,"context_line":"                        e.append_trait(trait)"},{"line_number":382,"context_line":"            return event_list"},{"line_number":383,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1a95cdbc_0fbbb573","line":380,"in_reply_to":"1a95cdbc_64e540a7","updated":"2016-10-04 15:03:14.000000000","message":"ooohhh, ok, i think i got it now. you can\u0027t use dict because it loses ordering.\n\ninstead of these changes, i would just use collections.OrderedDict().  let me know if this is wrong.\n\nhere is my diff:\n\n-            event_list \u003d list()\n-            msg_event_id \u003d dict()\n+            event_list \u003d collections.OrderedDict()\n             # get a list of all events that match filters\n             for (id_, generated, message_id,\n                  desc, raw) in query.add_columns(\n                      models.Event.generated, models.Event.message_id,\n                      models.EventType.desc, models.Event.raw).all():\n-                event_list.append(api_models.Event(message_id, desc,\n-                                                   generated, [], raw))\n-                msg_event_id[message_id] \u003d id_\n+                event_list[id_] \u003d api_models.Event(message_id, desc,\n+                                                   generated, [], raw)\n \n             # Query all traits related to events.\n             # NOTE (gordc): cast is done because pgsql defaults to TEXT when\n@@ -364,9 +363,7 @@ class Connection(base.Connection):\n \n                 try:\n                     trait_model \u003d api_models.Trait(key, dtype, val)\n-                    if id_ not in event_traits:\n-                        event_traits[id_] \u003d list()\n-                    event_traits[id_].append(trait_model)\n+                    event_list[id_].append_trait(trait_model)\n                 except KeyError:\n                     # NOTE(gordc): this is expected as we do not set REPEATABLE\n                     # READ (bug 1506717). if query is run while recording new\n@@ -374,12 +371,7 @@ class Connection(base.Connection):\n                     # query. they can be safely discarded.\n                     pass\n \n-            for e in event_list:\n-                id \u003d msg_event_id[e.message_id]\n-                if id in event_traits:\n-                    for trait in event_traits[id]:\n-                        e.append_trait(trait)\n-            return event_list\n+            return event_list.values()","commit_id":"9e5c6bf3d14cc6c5fcd0e612544f5dc48ae6b5ae"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ea0884e41f2cb5fbd287db2472a232caa42fc8a8","unresolved":false,"context_lines":[{"line_number":370,"context_line":"                    # query. they can be safely discarded."},{"line_number":371,"context_line":"                    pass"},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"            return list(event_list.values())"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    def get_event_types(self):"},{"line_number":376,"context_line":"        \"\"\"Return all event types as an iterable of strings.\"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"1a95cdbc_c9a0e0a8","line":373,"updated":"2016-10-04 17:57:26.000000000","message":"i think you should change it in line 218 instead","commit_id":"ee904165e9049c395b12f9ed6282354699199c31"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"cd773a481073729bbc3a1dcaf5d9f34fe4498a7b","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        marker \u003d None"},{"line_number":215,"context_line":"        if pagination.get(\u0027marker\u0027):"},{"line_number":216,"context_line":"            marker_filter \u003d event_storage.EventFilter("},{"line_number":217,"context_line":"                message_id\u003dpagination.get(\u0027marker\u0027))"},{"line_number":218,"context_line":"            markers \u003d list(self.get_events(marker_filter))"},{"line_number":219,"context_line":"            if markers:"},{"line_number":220,"context_line":"                marker \u003d markers[0]"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a95cdbc_5ae62bb5","line":217,"updated":"2016-10-05 12:43:04.000000000","message":"if you call get(), at least store the value so you don\u0027t call it twice :)","commit_id":"272c872f2fe9d0658f059538c019836d093a5486"}],"panko/event/storage/pymongo_base.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bb44d5f0f96950502645f0838f7990450cc6ad52","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        limit \u003d None"},{"line_number":82,"context_line":"        if pagination:"},{"line_number":83,"context_line":"            if pagination.get(\u0027sort\u0027):"},{"line_number":84,"context_line":"                LOG.warning(_LI(\u0027pymongo: Sorting is not supported\u0027))"},{"line_number":85,"context_line":"            limit \u003d pagination.get(\u0027limit\u0027)"},{"line_number":86,"context_line":"            if limit \u003d\u003d 0:"},{"line_number":87,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":8,"id":"1a95cdbc_a473c8b3","line":84,"updated":"2016-10-04 14:45:35.000000000","message":"s/LI/LW/\n\ni would also drop the driver name and just put \"Driver does not support sort functionality\"","commit_id":"9e5c6bf3d14cc6c5fcd0e612544f5dc48ae6b5ae"}],"panko/tests/functional/api/v2/test_event_scenarios.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"25c3ae93db5b8240cafe6666ba6930153467bed7","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Test event, event_type and trait retrieval.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import datetime"},{"line_number":18,"context_line":"from oslo_serialization import jsonutils"},{"line_number":19,"context_line":"import uuid"},{"line_number":20,"context_line":"import webtest.app"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a8bc5a2_7fa94224","line":18,"updated":"2016-09-27 21:52:43.000000000","message":"should be group inbetween native and 3rd party libs\n\n  import datetime\n  import uuid\n\n  from oslo_serialization import jsonutils\n  import webtest.app","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"},{"author":{"_account_id":23122,"name":"Amy Fong","email":"amy.fong@windriver.com","username":"afong"},"change_message_id":"793bdf7c6ff5cc6b5dd3025a8a14951058dbc3a3","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Test event, event_type and trait retrieval.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import datetime"},{"line_number":18,"context_line":"from oslo_serialization import jsonutils"},{"line_number":19,"context_line":"import uuid"},{"line_number":20,"context_line":"import webtest.app"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a98d1f4_263a5737","line":18,"in_reply_to":"5a8bc5a2_7fa94224","updated":"2016-09-28 15:18:46.000000000","message":"done","commit_id":"66b2268366b2244dc0f36059aace0fd6faf257bd"}]}
