)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"cf1c977e77dad8f2a0cd4b0106621cce9ac8bcdb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Fengqian Gao \u003cfengqian.gao@intel.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-08-19 16:16:28 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add pagination parameter to the base class of stroage"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Put all parameters for pagination into class named pagination,"},{"line_number":10,"context_line":"add this paramter to the interface of the database driver."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"AAAARn%2F%2F%2BoQ%3D","line":7,"updated":"2013-08-19 12:11:56.000000000","message":"Typo on storage.","commit_id":"fdba5a546e236773b5c225e6b02282353b583d32"}],"ceilometer/storage/base.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"506398ffdfd1d085314120f41122dab9a22d38f0","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.sort_dirs \u003d sort_dirs"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @staticmethod"},{"line_number":100,"context_line":"    def _get_default_sort_keys_dirs(model_name):"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        sort_keys_default \u003d {\u0027alarm\u0027: [\u0027name\u0027, \u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":103,"context_line":"                             \u0027meter\u0027: [\u0027user_id\u0027, \u0027project_id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F6iM%3D","line":100,"updated":"2013-08-20 09:36:22.000000000","message":"Why prefix the method with a _, it seems to be used outside the class ?","commit_id":"61299a2d91f4dd189ef35e0a8ab087d5caa966cb"},{"author":{"_account_id":7642,"name":"Fengqian Gao","email":"fengqian.gao@intel.com","username":"Fengqian"},"change_message_id":"90770485f8d09030d931567157c0f9eda55e7c40","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.sort_dirs \u003d sort_dirs"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    @staticmethod"},{"line_number":100,"context_line":"    def _get_default_sort_keys_dirs(model_name):"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        sort_keys_default \u003d {\u0027alarm\u0027: [\u0027name\u0027, \u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":103,"context_line":"                             \u0027meter\u0027: [\u0027user_id\u0027, \u0027project_id\u0027],"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F6fI%3D","line":100,"in_reply_to":"AAAARn%2F%2F6iM%3D","updated":"2013-08-20 09:43:40.000000000","message":"My bad:), bad programming habits:).","commit_id":"61299a2d91f4dd189ef35e0a8ab087d5caa966cb"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"506398ffdfd1d085314120f41122dab9a22d38f0","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            sort_dirs \u003d [\u0027desc\u0027] * len(sort_keys)"},{"line_number":110,"context_line":"        return sort_keys, sort_dirs"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def _split_pagination_parameters(self, model_name):"},{"line_number":113,"context_line":"        \"\"\"Split the pagination parameters."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        :param model_name: Database model name be query.(alarm, meter, etc.)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F6iQ%3D","line":112,"updated":"2013-08-20 09:36:22.000000000","message":"Same","commit_id":"61299a2d91f4dd189ef35e0a8ab087d5caa966cb"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"506398ffdfd1d085314120f41122dab9a22d38f0","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        return limit, marker_pair, sort_keys, sort_dirs"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    @staticmethod"},{"line_number":134,"context_line":"    def _get_all_default_values(model_name):"},{"line_number":135,"context_line":"        \"\"\"Provide default values if no pagination parameter specified.\"\"\""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        sort_keys, sort_dirs \u003d\\"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F6iI%3D","line":134,"updated":"2013-08-20 09:36:22.000000000","message":"Same","commit_id":"61299a2d91f4dd189ef35e0a8ab087d5caa966cb"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"65b4b89896cab73a6e4b3272b7c6e368e54e7920","unresolved":false,"context_lines":[{"line_number":135,"context_line":"        \"\"\"Provide default values if no pagination parameter specified.\"\"\""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        sort_keys, sort_dirs \u003d\\"},{"line_number":138,"context_line":"            Pagination._get_default_sort_keys_dirs(model_name)"},{"line_number":139,"context_line":"        return None, None, sort_keys, sort_dirs"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAARn%2F%2F60I%3D","line":138,"updated":"2013-08-20 08:41:38.000000000","message":"Shouldn\u0027t be static if you need this :)","commit_id":"61299a2d91f4dd189ef35e0a8ab087d5caa966cb"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e75d86b76285074ab2932a7159c39a30d88937e9","unresolved":false,"context_lines":[{"line_number":82,"context_line":"class Pagination(object):"},{"line_number":83,"context_line":"    \"\"\"Class for pagination query."},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    It put all paramters used for paginate query together, includes:"},{"line_number":86,"context_line":"    1) \u0027limit\u0027, which limits the maximum number of items to return;"},{"line_number":87,"context_line":"    2) \u0027marker_pair\u0027, attribute-value pair to identify the last item of"},{"line_number":88,"context_line":"        the previous page;"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASX%2F%2F69E%3D","line":85,"updated":"2013-08-23 18:28:12.000000000","message":"s/It put all paramters used/This puts all parameters used/","commit_id":"04e791c57c992970cc13fcecdecf6ef58b7f0da5"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e75d86b76285074ab2932a7159c39a30d88937e9","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    2) \u0027marker_pair\u0027, attribute-value pair to identify the last item of"},{"line_number":88,"context_line":"        the previous page;"},{"line_number":89,"context_line":"    3) \u0027sort_keys\u0027, array of attributes by which results should be sorted;"},{"line_number":90,"context_line":"    4) \u0027sort_dirs\u0027, per-column array of sort_dirs, corresponding to sort_keys."},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":"    def __init__(self, limit\u003dNone, sort_keys\u003d[], sort_dirs\u003d[],"},{"line_number":93,"context_line":"                 marker_pair\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASX%2F%2F68s%3D","line":90,"updated":"2013-08-23 18:28:12.000000000","message":"maybe move this as docstring for __init__. similar to split_pagination_parameters()","commit_id":"04e791c57c992970cc13fcecdecf6ef58b7f0da5"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e75d86b76285074ab2932a7159c39a30d88937e9","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                            3)\u0027sort_keys\u0027, array of attributes by which results"},{"line_number":221,"context_line":"                            should be sorted;"},{"line_number":222,"context_line":"                            4)\u0027sort_dirs\u0027, per-column array of sort_dirs,"},{"line_number":223,"context_line":"                            corresponding to sort_keys."},{"line_number":224,"context_line":"        \"\"\""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASX%2F%2F67E%3D","line":223,"updated":"2013-08-23 18:28:12.000000000","message":"i don\u0027t know if we need this list again -- it\u0027ll give us two places to maintain now.\n\n:param pagination: Optional pagination query. would be fine for me.","commit_id":"04e791c57c992970cc13fcecdecf6ef58b7f0da5"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e75d86b76285074ab2932a7159c39a30d88937e9","unresolved":false,"context_lines":[{"line_number":242,"context_line":"                            3)\u0027sort_keys\u0027, array of attributes by which results"},{"line_number":243,"context_line":"                            should be sorted;"},{"line_number":244,"context_line":"                            4)\u0027sort_dirs\u0027, per-column array of sort_dirs,"},{"line_number":245,"context_line":"                            corresponding to sort_keys."},{"line_number":246,"context_line":"        \"\"\""},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    @abc.abstractmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASX%2F%2F668%3D","line":245,"updated":"2013-08-23 18:28:12.000000000","message":"same as above","commit_id":"04e791c57c992970cc13fcecdecf6ef58b7f0da5"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aaaf70f65dfd37667a82d4b6a7687c5778d1107d","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        sort_keys_default \u003d {\u0027alarm\u0027: [\u0027name\u0027, \u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":105,"context_line":"                             \u0027meter\u0027: [\u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":106,"context_line":"                             \u0027resource\u0027: [\u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":107,"context_line":"                             }"},{"line_number":108,"context_line":"        sort_keys \u003d sort_keys_default.get(model_name, [])"},{"line_number":109,"context_line":"        sort_dirs \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASX%2F%2F1cI%3D","line":106,"updated":"2013-08-26 15:31:57.000000000","message":"I would recommend the default sort key for all above resources be \"created_at\" first. The natural pagination for these types of queries is \"get me the latest X number of things\"","commit_id":"83b88712011765ef4d769943ac5e92b3082a0760"},{"author":{"_account_id":7642,"name":"Fengqian Gao","email":"fengqian.gao@intel.com","username":"Fengqian"},"change_message_id":"8fff88e6b33ee7d4b103420a2b1e11ae0c5fb99c","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        sort_keys_default \u003d {\u0027alarm\u0027: [\u0027name\u0027, \u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":105,"context_line":"                             \u0027meter\u0027: [\u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":106,"context_line":"                             \u0027resource\u0027: [\u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":107,"context_line":"                             }"},{"line_number":108,"context_line":"        sort_keys \u003d sort_keys_default.get(model_name, [])"},{"line_number":109,"context_line":"        sort_dirs \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2F%2Fu8%3D","line":106,"in_reply_to":"AAAASX%2F%2F1cI%3D","updated":"2013-08-27 02:21:27.000000000","message":"But the database model of ceilometer doesn\u0027t have \"created_at\" key. It is different from the database of Nova.","commit_id":"83b88712011765ef4d769943ac5e92b3082a0760"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"354e08d39fb8e36265f68abc7658cfa9f582295d","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        sort_keys_default \u003d {\u0027alarm\u0027: [\u0027name\u0027, \u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":105,"context_line":"                             \u0027meter\u0027: [\u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":106,"context_line":"                             \u0027resource\u0027: [\u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":107,"context_line":"                             }"},{"line_number":108,"context_line":"        sort_keys \u003d sort_keys_default.get(model_name, [])"},{"line_number":109,"context_line":"        sort_dirs \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2F91k%3D","line":106,"in_reply_to":"AAAASn%2F%2F%2Fu8%3D","updated":"2013-08-27 13:19:14.000000000","message":"Sure it does:\n\nhttps://github.com/openstack/ceilometer/blob/master/ceilometer/storage/sqlalchemy/models.py#L134\n\nIt\u0027s just called timestamp, not created_at.\n\nAnd for the event table, it\u0027s called \"generated\", not created_at:\n\nhttps://github.com/openstack/ceilometer/blob/master/ceilometer/storage/sqlalchemy/models.py#L229","commit_id":"83b88712011765ef4d769943ac5e92b3082a0760"},{"author":{"_account_id":7642,"name":"Fengqian Gao","email":"fengqian.gao@intel.com","username":"Fengqian"},"change_message_id":"0771f2f778b59d9d9459f304a156ffe16366c157","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        sort_keys_default \u003d {\u0027alarm\u0027: [\u0027name\u0027, \u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":105,"context_line":"                             \u0027meter\u0027: [\u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":106,"context_line":"                             \u0027resource\u0027: [\u0027user_id\u0027, \u0027project_id\u0027],"},{"line_number":107,"context_line":"                             }"},{"line_number":108,"context_line":"        sort_keys \u003d sort_keys_default.get(model_name, [])"},{"line_number":109,"context_line":"        sort_dirs \u003d []"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2F9no%3D","line":106,"in_reply_to":"AAAASn%2F%2F91k%3D","updated":"2013-08-27 14:15:42.000000000","message":"That is the model of sqlalchemy, how about mongoDB?","commit_id":"83b88712011765ef4d769943ac5e92b3082a0760"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aaaf70f65dfd37667a82d4b6a7687c5778d1107d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        sort_keys \u003d sort_keys_default.get(model_name, [])"},{"line_number":109,"context_line":"        sort_dirs \u003d []"},{"line_number":110,"context_line":"        if sort_keys:"},{"line_number":111,"context_line":"            sort_dirs \u003d [\u0027desc\u0027] * len(sort_keys)"},{"line_number":112,"context_line":"        return sort_keys, sort_dirs"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def split_pagination_parameters(self, model_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASX%2F%2F1cQ%3D","line":111,"updated":"2013-08-26 15:31:57.000000000","message":"I don\u0027t think you want to do this... except if your sort key is a monotonically increasing field, like created_at or a sequence like autoincrementing IDs. Sorting DESC on things like alarm name or meter user_id does not make much sense...","commit_id":"83b88712011765ef4d769943ac5e92b3082a0760"},{"author":{"_account_id":7642,"name":"Fengqian Gao","email":"fengqian.gao@intel.com","username":"Fengqian"},"change_message_id":"8fff88e6b33ee7d4b103420a2b1e11ae0c5fb99c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        sort_keys \u003d sort_keys_default.get(model_name, [])"},{"line_number":109,"context_line":"        sort_dirs \u003d []"},{"line_number":110,"context_line":"        if sort_keys:"},{"line_number":111,"context_line":"            sort_dirs \u003d [\u0027desc\u0027] * len(sort_keys)"},{"line_number":112,"context_line":"        return sort_keys, sort_dirs"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def split_pagination_parameters(self, model_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2F%2Fuo%3D","line":111,"in_reply_to":"AAAASX%2F%2F1cQ%3D","updated":"2013-08-27 02:21:27.000000000","message":"But the database model does not have \"autoincrementing IDs\" in ceilometer.","commit_id":"83b88712011765ef4d769943ac5e92b3082a0760"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"354e08d39fb8e36265f68abc7658cfa9f582295d","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        sort_keys \u003d sort_keys_default.get(model_name, [])"},{"line_number":109,"context_line":"        sort_dirs \u003d []"},{"line_number":110,"context_line":"        if sort_keys:"},{"line_number":111,"context_line":"            sort_dirs \u003d [\u0027desc\u0027] * len(sort_keys)"},{"line_number":112,"context_line":"        return sort_keys, sort_dirs"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def split_pagination_parameters(self, model_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2F90k%3D","line":111,"in_reply_to":"AAAASn%2F%2F%2Fuo%3D","updated":"2013-08-27 13:19:14.000000000","message":"That is not what I said. I said you do not want to hard-code DESC direction for all sort keys...","commit_id":"83b88712011765ef4d769943ac5e92b3082a0760"},{"author":{"_account_id":7642,"name":"Fengqian Gao","email":"fengqian.gao@intel.com","username":"Fengqian"},"change_message_id":"0771f2f778b59d9d9459f304a156ffe16366c157","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        sort_keys \u003d sort_keys_default.get(model_name, [])"},{"line_number":109,"context_line":"        sort_dirs \u003d []"},{"line_number":110,"context_line":"        if sort_keys:"},{"line_number":111,"context_line":"            sort_dirs \u003d [\u0027desc\u0027] * len(sort_keys)"},{"line_number":112,"context_line":"        return sort_keys, sort_dirs"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    def split_pagination_parameters(self, model_name):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2F9mk%3D","line":111,"in_reply_to":"AAAASn%2F%2F90k%3D","updated":"2013-08-27 14:15:42.000000000","message":"Sorry for the misunderstanding:). yes,  i think it should be better to only sort on primary key if no sort keys passed in.","commit_id":"83b88712011765ef4d769943ac5e92b3082a0760"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"aaaf70f65dfd37667a82d4b6a7687c5778d1107d","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        marker_pair \u003d self.marker_pair"},{"line_number":128,"context_line":"        sort_keys \u003d self.sort_keys"},{"line_number":129,"context_line":"        sort_dirs \u003d self.sort_dirs"},{"line_number":130,"context_line":"        if not (sort_keys and sort_dirs):"},{"line_number":131,"context_line":"            sort_keys, sort_dirs \u003d self.get_default_sort_keys_dirs(model_name)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        return limit, marker_pair, sort_keys, sort_dirs"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASX%2F%2F1bI%3D","line":130,"updated":"2013-08-26 15:31:57.000000000","message":"What this effectively means is that if the caller passes the sort_keys, but not the sort_dirs, then their sort_keys will be ignored in favor of the default sort_keys. Is that what you intend?","commit_id":"83b88712011765ef4d769943ac5e92b3082a0760"},{"author":{"_account_id":7642,"name":"Fengqian Gao","email":"fengqian.gao@intel.com","username":"Fengqian"},"change_message_id":"8fff88e6b33ee7d4b103420a2b1e11ae0c5fb99c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"        marker_pair \u003d self.marker_pair"},{"line_number":128,"context_line":"        sort_keys \u003d self.sort_keys"},{"line_number":129,"context_line":"        sort_dirs \u003d self.sort_dirs"},{"line_number":130,"context_line":"        if not (sort_keys and sort_dirs):"},{"line_number":131,"context_line":"            sort_keys, sort_dirs \u003d self.get_default_sort_keys_dirs(model_name)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        return limit, marker_pair, sort_keys, sort_dirs"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2F%2Fuw%3D","line":130,"in_reply_to":"AAAASX%2F%2F1bI%3D","updated":"2013-08-27 02:21:27.000000000","message":"Yes, you are correct. But now, i think it is not so good to do this. Maybe i should provide the default value for the missing part not ignore  it.","commit_id":"83b88712011765ef4d769943ac5e92b3082a0760"}],"ceilometer/storage/impl_hbase.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e75d86b76285074ab2932a7159c39a30d88937e9","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                            3)\u0027sort_keys\u0027, array of attributes by which results"},{"line_number":303,"context_line":"                            should be sorted;"},{"line_number":304,"context_line":"                            4)\u0027sort_dirs\u0027, per-column array of sort_dirs,"},{"line_number":305,"context_line":"                            corresponding to sort_keys."},{"line_number":306,"context_line":"        \"\"\""},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        def make_resource(data, first_ts, last_ts):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASX%2F%2F664%3D","line":305,"updated":"2013-08-23 18:28:12.000000000","message":"too verbose for my liking (see base.py comment)","commit_id":"04e791c57c992970cc13fcecdecf6ef58b7f0da5"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"e75d86b76285074ab2932a7159c39a30d88937e9","unresolved":false,"context_lines":[{"line_number":388,"context_line":"                            3)\u0027sort_keys\u0027, array of attributes by which results"},{"line_number":389,"context_line":"                            should be sorted;"},{"line_number":390,"context_line":"                            4)\u0027sort_dirs\u0027, per-column array of sort_dirs,"},{"line_number":391,"context_line":"                            corresponding to sort_keys."},{"line_number":392,"context_line":"        \"\"\""},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"        resource_table \u003d self.conn.table(self.RESOURCE_TABLE)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASX%2F%2F66w%3D","line":391,"updated":"2013-08-23 18:28:12.000000000","message":"same as above","commit_id":"04e791c57c992970cc13fcecdecf6ef58b7f0da5"}]}
