)]}'
{"ceilometer/storage/impl_hbase.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"dc140cd29a608de68e2eae9ffeb74fd79b16fa29","unresolved":false,"context_lines":[{"line_number":494,"context_line":"            timeutils.delta_seconds(stat.duration_start,"},{"line_number":495,"context_line":"                                    stat.duration_end)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    def get_meter_statistics(self, sample_filter, period\u003dNone, groupby\u003dNone):"},{"line_number":498,"context_line":"        \"\"\"Return an iterable of models.Statistics instances containing meter"},{"line_number":499,"context_line":"        statistics described by the query parameters."},{"line_number":500,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F4Ic%3D","line":497,"updated":"2013-08-15 20:56:15.000000000","message":"In the drivers that don\u0027t support groupby, please raise a NotImplemented exception if a group value is provided. That way callers will get an error, instead of invalid data.","commit_id":"3db19644d66e102ab5f80431e3ca855541db5d8f"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e83e4d59779b8bb2880d4d7d4e761028d567ae05","unresolved":false,"context_lines":[{"line_number":494,"context_line":"            timeutils.delta_seconds(stat.duration_start,"},{"line_number":495,"context_line":"                                    stat.duration_end)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":"    def get_meter_statistics(self, sample_filter, period\u003dNone, groupby\u003dNone):"},{"line_number":498,"context_line":"        \"\"\"Return an iterable of models.Statistics instances containing meter"},{"line_number":499,"context_line":"        statistics described by the query parameters."},{"line_number":500,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F2ZY%3D","line":497,"in_reply_to":"AAAARH%2F%2F4Ic%3D","updated":"2013-08-16 08:58:38.000000000","message":"Done","commit_id":"3db19644d66e102ab5f80431e3ca855541db5d8f"}],"ceilometer/storage/impl_log.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"dc140cd29a608de68e2eae9ffeb74fd79b16fa29","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":"        return []"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def get_meter_statistics(self, sample_filter, period\u003dNone, groupby\u003dNone):"},{"line_number":137,"context_line":"        \"\"\"Return a dictionary containing meter statistics."},{"line_number":138,"context_line":"        described by the query parameters."},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F4IU%3D","line":136,"updated":"2013-08-15 20:56:15.000000000","message":"No error is needed here, since this driver doesn\u0027t ever return any data. :-)","commit_id":"3db19644d66e102ab5f80431e3ca855541db5d8f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4010272f88520b94005c2ff57291fdf32b2a05d6","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":"        return []"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def get_meter_statistics(self, sample_filter, period\u003dNone, groupby\u003dNone):"},{"line_number":137,"context_line":"        \"\"\"Return a dictionary containing meter statistics."},{"line_number":138,"context_line":"        described by the query parameters."},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAARH%2F%2F1Hw%3D","line":136,"updated":"2013-08-16 16:13:01.000000000","message":"Why not raise NotImplementedError like mongo and hbase drivers?","commit_id":"324ead7bd4fca015716663e8f71181cc7b49a390"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"2b741880c872b794b77481dbb34baf219c63b832","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":"        return []"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def get_meter_statistics(self, sample_filter, period\u003dNone, groupby\u003dNone):"},{"line_number":137,"context_line":"        \"\"\"Return a dictionary containing meter statistics."},{"line_number":138,"context_line":"        described by the query parameters."},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAARH%2F%2F05k%3D","line":136,"in_reply_to":"AAAARH%2F%2F1Hw%3D","updated":"2013-08-16 16:54:15.000000000","message":"Because it never returns any data (See Doug\u0027s comment on previous patchset)","commit_id":"324ead7bd4fca015716663e8f71181cc7b49a390"}],"ceilometer/storage/impl_mongodb.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"dc140cd29a608de68e2eae9ffeb74fd79b16fa29","unresolved":false,"context_lines":[{"line_number":713,"context_line":"            query\u003dq,"},{"line_number":714,"context_line":"        )"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        # TODO(jd) implement groupby and remove this code"},{"line_number":717,"context_line":"        for r in results[\u0027results\u0027]:"},{"line_number":718,"context_line":"            r[\u0027value\u0027][\u0027groupby\u0027] \u003d None"},{"line_number":719,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F4IQ%3D","line":716,"updated":"2013-08-15 20:56:15.000000000","message":"Instead of a TODO, let\u0027s have an explicit error until that\u0027s implemented.","commit_id":"3db19644d66e102ab5f80431e3ca855541db5d8f"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e83e4d59779b8bb2880d4d7d4e761028d567ae05","unresolved":false,"context_lines":[{"line_number":713,"context_line":"            query\u003dq,"},{"line_number":714,"context_line":"        )"},{"line_number":715,"context_line":""},{"line_number":716,"context_line":"        # TODO(jd) implement groupby and remove this code"},{"line_number":717,"context_line":"        for r in results[\u0027results\u0027]:"},{"line_number":718,"context_line":"            r[\u0027value\u0027][\u0027groupby\u0027] \u003d None"},{"line_number":719,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F2ZU%3D","line":716,"in_reply_to":"AAAARH%2F%2F4IQ%3D","updated":"2013-08-16 08:58:38.000000000","message":"Done","commit_id":"3db19644d66e102ab5f80431e3ca855541db5d8f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4010272f88520b94005c2ff57291fdf32b2a05d6","unresolved":false,"context_lines":[{"line_number":718,"context_line":""},{"line_number":719,"context_line":"        # TODO(jd) implement groupby and remove this code"},{"line_number":720,"context_line":"        for r in results[\u0027results\u0027]:"},{"line_number":721,"context_line":"            r[\u0027value\u0027][\u0027groupby\u0027] \u003d None"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"        return sorted((models.Statistics(**(r[\u0027value\u0027]))"},{"line_number":724,"context_line":"                       for r in results[\u0027results\u0027]),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAARH%2F%2F1Hk%3D","line":721,"updated":"2013-08-16 16:13:01.000000000","message":"I would remove this and stick with the NotImplementedError above...","commit_id":"324ead7bd4fca015716663e8f71181cc7b49a390"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e4a88c7d57c25221b02689f84c2891c53bf923dc","unresolved":false,"context_lines":[{"line_number":718,"context_line":""},{"line_number":719,"context_line":"        # TODO(jd) implement groupby and remove this code"},{"line_number":720,"context_line":"        for r in results[\u0027results\u0027]:"},{"line_number":721,"context_line":"            r[\u0027value\u0027][\u0027groupby\u0027] \u003d None"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"        return sorted((models.Statistics(**(r[\u0027value\u0027]))"},{"line_number":724,"context_line":"                       for r in results[\u0027results\u0027]),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAARH%2F%2F02Y%3D","line":721,"in_reply_to":"AAAARH%2F%2F05g%3D","updated":"2013-08-16 17:12:58.000000000","message":"Ah, I see... ok, thx.","commit_id":"324ead7bd4fca015716663e8f71181cc7b49a390"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"2b741880c872b794b77481dbb34baf219c63b832","unresolved":false,"context_lines":[{"line_number":718,"context_line":""},{"line_number":719,"context_line":"        # TODO(jd) implement groupby and remove this code"},{"line_number":720,"context_line":"        for r in results[\u0027results\u0027]:"},{"line_number":721,"context_line":"            r[\u0027value\u0027][\u0027groupby\u0027] \u003d None"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"        return sorted((models.Statistics(**(r[\u0027value\u0027]))"},{"line_number":724,"context_line":"                       for r in results[\u0027results\u0027]),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAARH%2F%2F05g%3D","line":721,"in_reply_to":"AAAARH%2F%2F1Hk%3D","updated":"2013-08-16 16:54:15.000000000","message":"We can\u0027t, we have to pass this argument to the model.","commit_id":"324ead7bd4fca015716663e8f71181cc7b49a390"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"124e749835dd932f552066f2bbccf1e692670de6","unresolved":false,"context_lines":[{"line_number":718,"context_line":""},{"line_number":719,"context_line":"        # TODO(jd) implement groupby and remove this code"},{"line_number":720,"context_line":"        for r in results[\u0027results\u0027]:"},{"line_number":721,"context_line":"            r[\u0027value\u0027][\u0027groupby\u0027] \u003d None"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"        return sorted((models.Statistics(**(r[\u0027value\u0027]))"},{"line_number":724,"context_line":"                       for r in results[\u0027results\u0027]),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAARn%2F%2FugQ%3D","line":721,"updated":"2013-08-22 17:33:02.000000000","message":"i think groupby can be set in FINALIZE_STATS to avoid loop but i guess this is fine if we\u0027re removing it","commit_id":"3fa527f75242cecf0462b046034a15a8511e400e"},{"author":{"_account_id":7399,"name":"Terri Yu","email":"teryu@alum.mit.edu","username":"terriyu"},"change_message_id":"c38d4dff9a9f04406a1e56dde37fdbf049edcfa4","unresolved":false,"context_lines":[{"line_number":718,"context_line":""},{"line_number":719,"context_line":"        # TODO(jd) implement groupby and remove this code"},{"line_number":720,"context_line":"        for r in results[\u0027results\u0027]:"},{"line_number":721,"context_line":"            r[\u0027value\u0027][\u0027groupby\u0027] \u003d None"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"        return sorted((models.Statistics(**(r[\u0027value\u0027]))"},{"line_number":724,"context_line":"                       for r in results[\u0027results\u0027]),"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAASX%2F%2F%2FPk%3D","line":721,"in_reply_to":"AAAARn%2F%2FugQ%3D","updated":"2013-08-22 21:03:22.000000000","message":"This code block is being removed in this patch\n\nhttps://review.openstack.org/#/c/43043/\n\nwhich is under review.","commit_id":"3fa527f75242cecf0462b046034a15a8511e400e"}],"ceilometer/storage/impl_sqlalchemy.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"1eaf60332665e6bbf2132041220c19716e57ab7a","unresolved":false,"context_lines":[{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    @staticmethod"},{"line_number":434,"context_line":"    def _make_stats_query(sample_filter, groupby):"},{"line_number":435,"context_line":"        session \u003d sqlalchemy_session.get_session()"},{"line_number":436,"context_line":"        if groupby:"},{"line_number":437,"context_line":"            group_attributes \u003d [getattr(Meter, g) for g in groupby]"},{"line_number":438,"context_line":"            query \u003d session.query("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F5cc%3D","line":435,"updated":"2013-08-15 19:43:38.000000000","message":"To avoid dup code, how about:\n\nselects \u003d [\n    Meter.counter_unit.label(\u0027unit\u0027),\n    ...\n]\n\nif groupby:\n    group_attributes \u003d [getattr(Meter, g) for g in groupby]\n    selects.extend(group_attributes)\n    query \u003d session.query(*selects).group_by(*group_attributes)\nelse:\n    query \u003d session.query(*selects)","commit_id":"3db19644d66e102ab5f80431e3ca855541db5d8f"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e83e4d59779b8bb2880d4d7d4e761028d567ae05","unresolved":false,"context_lines":[{"line_number":432,"context_line":""},{"line_number":433,"context_line":"    @staticmethod"},{"line_number":434,"context_line":"    def _make_stats_query(sample_filter, groupby):"},{"line_number":435,"context_line":"        session \u003d sqlalchemy_session.get_session()"},{"line_number":436,"context_line":"        if groupby:"},{"line_number":437,"context_line":"            group_attributes \u003d [getattr(Meter, g) for g in groupby]"},{"line_number":438,"context_line":"            query \u003d session.query("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F2Y8%3D","line":435,"in_reply_to":"AAAARH%2F%2F5cc%3D","updated":"2013-08-16 08:58:38.000000000","message":"Done","commit_id":"3db19644d66e102ab5f80431e3ca855541db5d8f"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"1eaf60332665e6bbf2132041220c19716e57ab7a","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        The filter must have a meter value set."},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        \"\"\""},{"line_number":492,"context_line":"        if groupby:"},{"line_number":493,"context_line":"            for group in groupby:"},{"line_number":494,"context_line":"                if group not in [\u0027user_id\u0027, \u0027project_id\u0027, \u0027resource_id\u0027]:"},{"line_number":495,"context_line":"                    raise NotImplementedError("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F5aU%3D","line":492,"updated":"2013-08-15 19:43:38.000000000","message":"Would we want to validate this on an earlier layer so that all implementations can take advantage of it and avoid dup code.","commit_id":"3db19644d66e102ab5f80431e3ca855541db5d8f"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e83e4d59779b8bb2880d4d7d4e761028d567ae05","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        The filter must have a meter value set."},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        \"\"\""},{"line_number":492,"context_line":"        if groupby:"},{"line_number":493,"context_line":"            for group in groupby:"},{"line_number":494,"context_line":"                if group not in [\u0027user_id\u0027, \u0027project_id\u0027, \u0027resource_id\u0027]:"},{"line_number":495,"context_line":"                    raise NotImplementedError("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F2YM%3D","line":492,"in_reply_to":"AAAARH%2F%2F3fY%3D","updated":"2013-08-16 08:58:38.000000000","message":"Yes, we want to allow group by on any other field.\nThe problem is that while it was really simple to implement group by on these 3 fields, implementing on the other fields for *this* driver is a PITA. So I stopped there, for now. Anybody can jump in and finish the job.\n\nLet\u0027s recall we don\u0027t even haven metadata filtering in SQL… So talking about group by on this driver for metadata is… premature? :)","commit_id":"3db19644d66e102ab5f80431e3ca855541db5d8f"},{"author":{"_account_id":7399,"name":"Terri Yu","email":"teryu@alum.mit.edu","username":"terriyu"},"change_message_id":"94c64f3667afebfb7c399e294f54b89f09658a99","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        The filter must have a meter value set."},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        \"\"\""},{"line_number":492,"context_line":"        if groupby:"},{"line_number":493,"context_line":"            for group in groupby:"},{"line_number":494,"context_line":"                if group not in [\u0027user_id\u0027, \u0027project_id\u0027, \u0027resource_id\u0027]:"},{"line_number":495,"context_line":"                    raise NotImplementedError("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F3fY%3D","line":492,"in_reply_to":"AAAARH%2F%2F4HU%3D","updated":"2013-08-16 00:44:17.000000000","message":"The last time I spoke with jd, we decided to not support group by on metadata fields, at least not on a first pass.","commit_id":"3db19644d66e102ab5f80431e3ca855541db5d8f"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"dc140cd29a608de68e2eae9ffeb74fd79b16fa29","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        The filter must have a meter value set."},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"        \"\"\""},{"line_number":492,"context_line":"        if groupby:"},{"line_number":493,"context_line":"            for group in groupby:"},{"line_number":494,"context_line":"                if group not in [\u0027user_id\u0027, \u0027project_id\u0027, \u0027resource_id\u0027]:"},{"line_number":495,"context_line":"                    raise NotImplementedError("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F4HU%3D","line":492,"in_reply_to":"AAAARH%2F%2F5aU%3D","updated":"2013-08-15 20:56:15.000000000","message":"Is there any particular reason not to allow for grouping on other fields? To replace the flavor meter, for example, we will need to be able to group by both the resource_id and the metadata field that holds the instance flavor id, which isn\u0027t in this list.","commit_id":"3db19644d66e102ab5f80431e3ca855541db5d8f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"4010272f88520b94005c2ff57291fdf32b2a05d6","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        \"\"\""},{"line_number":489,"context_line":"        if groupby:"},{"line_number":490,"context_line":"            for group in groupby:"},{"line_number":491,"context_line":"                if group not in [\u0027user_id\u0027, \u0027project_id\u0027, \u0027resource_id\u0027]:"},{"line_number":492,"context_line":"                    raise NotImplementedError("},{"line_number":493,"context_line":"                        \"Unable to group by these fields\")"},{"line_number":494,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAARH%2F%2F1GY%3D","line":491,"updated":"2013-08-16 16:13:01.000000000","message":"I would recommend making the above list into a constant at the module level.","commit_id":"324ead7bd4fca015716663e8f71181cc7b49a390"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"e4a88c7d57c25221b02689f84c2891c53bf923dc","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        \"\"\""},{"line_number":489,"context_line":"        if groupby:"},{"line_number":490,"context_line":"            for group in groupby:"},{"line_number":491,"context_line":"                if group not in [\u0027user_id\u0027, \u0027project_id\u0027, \u0027resource_id\u0027]:"},{"line_number":492,"context_line":"                    raise NotImplementedError("},{"line_number":493,"context_line":"                        \"Unable to group by these fields\")"},{"line_number":494,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAARH%2F%2F02M%3D","line":491,"in_reply_to":"AAAARH%2F%2F05Q%3D","updated":"2013-08-16 17:12:58.000000000","message":"Sure, understood. Just thought it would be easier and more readable to have a constant. And I\u0027m happy to help with the group_by source_id stuff, sure :)","commit_id":"324ead7bd4fca015716663e8f71181cc7b49a390"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"2b741880c872b794b77481dbb34baf219c63b832","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        \"\"\""},{"line_number":489,"context_line":"        if groupby:"},{"line_number":490,"context_line":"            for group in groupby:"},{"line_number":491,"context_line":"                if group not in [\u0027user_id\u0027, \u0027project_id\u0027, \u0027resource_id\u0027]:"},{"line_number":492,"context_line":"                    raise NotImplementedError("},{"line_number":493,"context_line":"                        \"Unable to group by these fields\")"},{"line_number":494,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAARH%2F%2F05Q%3D","line":491,"in_reply_to":"AAAARH%2F%2F1GY%3D","updated":"2013-08-16 16:54:15.000000000","message":"Fair enough, though this is *current* limitation we plan to remove… (hint: help welcome)","commit_id":"324ead7bd4fca015716663e8f71181cc7b49a390"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"124e749835dd932f552066f2bbccf1e692670de6","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        if groupby:"},{"line_number":490,"context_line":"            for group in groupby:"},{"line_number":491,"context_line":"                if group not in [\u0027user_id\u0027, \u0027project_id\u0027, \u0027resource_id\u0027]:"},{"line_number":492,"context_line":"                    raise NotImplementedError("},{"line_number":493,"context_line":"                        \"Unable to group by these fields\")"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        if not period:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAARn%2F%2Fuac%3D","line":492,"updated":"2013-08-22 17:33:02.000000000","message":"this should probably be a ValueError -- the test case passes in a value that would never be right but raises notimplementederror which doesn\u0027t make sense.","commit_id":"3fa527f75242cecf0462b046034a15a8511e400e"},{"author":{"_account_id":7399,"name":"Terri Yu","email":"teryu@alum.mit.edu","username":"terriyu"},"change_message_id":"7774785631f078aa0952a857dc271da0b54a19be","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        if groupby:"},{"line_number":490,"context_line":"            for group in groupby:"},{"line_number":491,"context_line":"                if group not in [\u0027user_id\u0027, \u0027project_id\u0027, \u0027resource_id\u0027]:"},{"line_number":492,"context_line":"                    raise NotImplementedError("},{"line_number":493,"context_line":"                        \"Unable to group by these fields\")"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        if not period:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAASX%2F%2F%2F2M%3D","line":492,"in_reply_to":"AAAARn%2F%2Fuac%3D","updated":"2013-08-22 18:52:33.000000000","message":"There\u0027s the possibility of metadata fields, which we decided not to implement right now.  So maybe NotImplementedError is still appropriate.","commit_id":"3fa527f75242cecf0462b046034a15a8511e400e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ab73707515f6eaa46c22e2d0d50d6bd0929143a4","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        if groupby:"},{"line_number":490,"context_line":"            for group in groupby:"},{"line_number":491,"context_line":"                if group not in [\u0027user_id\u0027, \u0027project_id\u0027, \u0027resource_id\u0027]:"},{"line_number":492,"context_line":"                    raise NotImplementedError("},{"line_number":493,"context_line":"                        \"Unable to group by these fields\")"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        if not period:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAASX%2F%2F%2FwU%3D","line":492,"in_reply_to":"AAAASX%2F%2F%2F2M%3D","updated":"2013-08-22 19:16:57.000000000","message":"not a major issue. maybe a conditional statement eventually when it\u0027s a valid value raise notimplementederror and when it\u0027s not a valueerror.  throwing notimplementederror for someone trying to groupby \u0027wtf\u0027 seems misleading. :)","commit_id":"3fa527f75242cecf0462b046034a15a8511e400e"},{"author":{"_account_id":7399,"name":"Terri Yu","email":"teryu@alum.mit.edu","username":"terriyu"},"change_message_id":"c38d4dff9a9f04406a1e56dde37fdbf049edcfa4","unresolved":false,"context_lines":[{"line_number":489,"context_line":"        if groupby:"},{"line_number":490,"context_line":"            for group in groupby:"},{"line_number":491,"context_line":"                if group not in [\u0027user_id\u0027, \u0027project_id\u0027, \u0027resource_id\u0027]:"},{"line_number":492,"context_line":"                    raise NotImplementedError("},{"line_number":493,"context_line":"                        \"Unable to group by these fields\")"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        if not period:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAASX%2F%2F%2FQM%3D","line":492,"in_reply_to":"AAAASX%2F%2F%2FwU%3D","updated":"2013-08-22 21:03:22.000000000","message":"All good points.  Thanks for explaining.\n\nThis if statement could also be refactored to something like:\n\nif (groupby and set(groupby) -\n    set([\u0027user_id\u0027, \u0027project_id\u0027, \u0027resource_id\u0027, \u0027source\u0027])):\n...","commit_id":"3fa527f75242cecf0462b046034a15a8511e400e"}],"tests/storage/base.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"124e749835dd932f552066f2bbccf1e692670de6","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"            meter\u003d\u0027instance\u0027,"},{"line_number":1068,"context_line":"        )"},{"line_number":1069,"context_line":"        result \u003d self.conn.get_meter_statistics("},{"line_number":1070,"context_line":"            f, groupby\u003d[\u0027wtf\u0027])"},{"line_number":1071,"context_line":"        self.assertRaises("},{"line_number":1072,"context_line":"            NotImplementedError,"},{"line_number":1073,"context_line":"            list,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAARn%2F%2Fubw%3D","line":1070,"updated":"2013-08-22 17:33:02.000000000","message":"these dummy values are getting pretty colourful. ;)","commit_id":"3fa527f75242cecf0462b046034a15a8511e400e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"124e749835dd932f552066f2bbccf1e692670de6","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"            list,"},{"line_number":1074,"context_line":"            result)"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":"    def test_group_by_metadata(self):"},{"line_number":1077,"context_line":"        pass"},{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"    def test_group_by_multiple_regular(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAARn%2F%2Fubs%3D","line":1076,"updated":"2013-08-22 17:33:02.000000000","message":"add TODO to tests we are skipping","commit_id":"3fa527f75242cecf0462b046034a15a8511e400e"},{"author":{"_account_id":7399,"name":"Terri Yu","email":"teryu@alum.mit.edu","username":"terriyu"},"change_message_id":"7774785631f078aa0952a857dc271da0b54a19be","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"            list,"},{"line_number":1074,"context_line":"            result)"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":"    def test_group_by_metadata(self):"},{"line_number":1077,"context_line":"        pass"},{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"    def test_group_by_multiple_regular(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAASX%2F%2F%2F2E%3D","line":1076,"in_reply_to":"AAAARn%2F%2Fubs%3D","updated":"2013-08-22 18:52:33.000000000","message":"Sure, what\u0027s the convention for adding TODO?  Can you give an example? (I\u0027ve never done that before.)","commit_id":"3fa527f75242cecf0462b046034a15a8511e400e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ab73707515f6eaa46c22e2d0d50d6bd0929143a4","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"            list,"},{"line_number":1074,"context_line":"            result)"},{"line_number":1075,"context_line":""},{"line_number":1076,"context_line":"    def test_group_by_metadata(self):"},{"line_number":1077,"context_line":"        pass"},{"line_number":1078,"context_line":""},{"line_number":1079,"context_line":"    def test_group_by_multiple_regular(self):"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAASX%2F%2F%2Fw8%3D","line":1076,"in_reply_to":"AAAASX%2F%2F%2F2E%3D","updated":"2013-08-22 19:16:57.000000000","message":"above the test put:\n\n# TODO(terriyu): \u003cwhat needs to be done\u003e","commit_id":"3fa527f75242cecf0462b046034a15a8511e400e"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"124e749835dd932f552066f2bbccf1e692670de6","unresolved":false,"context_lines":[{"line_number":1232,"context_line":"                self.assertEqual(r.min, 4)"},{"line_number":1233,"context_line":"                self.assertEqual(r.max, 4)"},{"line_number":1234,"context_line":"                self.assertEqual(r.sum, 4)"},{"line_number":1235,"context_line":"                self.assertEqual(r.avg, 4)"},{"line_number":1236,"context_line":""},{"line_number":1237,"context_line":"    def test_group_by_metadata_with_query_filter_multiple(self):"},{"line_number":1238,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAARn%2F%2FuW4%3D","line":1235,"updated":"2013-08-22 17:33:02.000000000","message":"probably should have the same else check as test_group_by_multiple_regular() to make sure we\u0027re checking the right conditions in loop","commit_id":"3fa527f75242cecf0462b046034a15a8511e400e"},{"author":{"_account_id":7399,"name":"Terri Yu","email":"teryu@alum.mit.edu","username":"terriyu"},"change_message_id":"7774785631f078aa0952a857dc271da0b54a19be","unresolved":false,"context_lines":[{"line_number":1232,"context_line":"                self.assertEqual(r.min, 4)"},{"line_number":1233,"context_line":"                self.assertEqual(r.max, 4)"},{"line_number":1234,"context_line":"                self.assertEqual(r.sum, 4)"},{"line_number":1235,"context_line":"                self.assertEqual(r.avg, 4)"},{"line_number":1236,"context_line":""},{"line_number":1237,"context_line":"    def test_group_by_metadata_with_query_filter_multiple(self):"},{"line_number":1238,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAASX%2F%2F%2F1s%3D","line":1235,"in_reply_to":"AAAARn%2F%2FuW4%3D","updated":"2013-08-22 18:52:33.000000000","message":"Thanks, good catch.","commit_id":"3fa527f75242cecf0462b046034a15a8511e400e"}]}
