)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"fd50832743dc8bcad249b02696b5bca26c6798b8","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug: #1208547"},{"line_number":18,"context_line":"Related-Bug: #1201701"},{"line_number":19,"context_line":"Implements: hbase-meter-table-enhancement"},{"line_number":20,"context_line":"Change-Id: Ib09e21cbc7bbd45a6ecc321403e9947df837e14b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAASn%2F%2Fu%2BA%3D","line":19,"updated":"2013-08-30 08:28:52.000000000","message":"You meant Blueprint I think? There\u0027s no link at least :)","commit_id":"776ffd83200152bff77f173a70e218b06283cbbb"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ac427e1757f84382f507fb7b8e810fd35f16b1d1","unresolved":false,"context_lines":[{"line_number":10,"context_line":"the MongoDB, SQLAlchemy, and HBase drivers. The DB2 driver"},{"line_number":11,"context_line":"appears to be lacking support for grouping on the meter"},{"line_number":12,"context_line":"collection, so that was written up for someone more familiar"},{"line_number":13,"context_line":"with the DB2 NoSQL work to address, as advised. A schema"},{"line_number":14,"context_line":"change was required for HBase, because it was overwriting"},{"line_number":15,"context_line":"historical metadata."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAASn%2F%2Fd4w%3D","line":13,"updated":"2013-09-04 18:08:39.000000000","message":"db2 driver note is not relevant anymore.","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ac427e1757f84382f507fb7b8e810fd35f16b1d1","unresolved":false,"context_lines":[{"line_number":15,"context_line":"historical metadata."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug: #1208547"},{"line_number":18,"context_line":"Related-Bug: #1201701"},{"line_number":19,"context_line":"Implements: blueprint hbase-meter-table-enhancement"},{"line_number":20,"context_line":"Change-Id: Ib09e21cbc7bbd45a6ecc321403e9947df837e14b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAASn%2F%2Fc%2B4%3D","line":18,"updated":"2013-09-04 18:08:39.000000000","message":"add bug 1218047 as well i think.","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"7314b7d2766ec8aa4cd5792af6a0e71f3f903693","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fix to return latest resource metadata"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Addresses the latest resource metadata not being returned in"},{"line_number":10,"context_line":"the MongoDB, SQLAlchemy, and HBase drivers. The DB2 driver"},{"line_number":11,"context_line":"appears to be lacking support for grouping on the meter"},{"line_number":12,"context_line":"collection, so that was written up for someone more familiar"},{"line_number":13,"context_line":"with the DB2 NoSQL work to address, as advised. A schema"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAASn%2F%2FW4M%3D","line":10,"updated":"2013-09-05 19:33:10.000000000","message":"remove db2 disclaimer since it\u0027s non-issue.","commit_id":"56ccc31ec729097115c9defdfe237b83bfef2ca0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"7314b7d2766ec8aa4cd5792af6a0e71f3f903693","unresolved":false,"context_lines":[{"line_number":15,"context_line":"historical metadata."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Closes-Bug: #1208547"},{"line_number":18,"context_line":"Related-Bug: #1201701"},{"line_number":19,"context_line":"Implements: blueprint hbase-meter-table-enhancement"},{"line_number":20,"context_line":"Change-Id: Ib09e21cbc7bbd45a6ecc321403e9947df837e14b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAASn%2F%2FW34%3D","line":18,"updated":"2013-09-05 19:33:10.000000000","message":"add Bug #1218047","commit_id":"56ccc31ec729097115c9defdfe237b83bfef2ca0"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"a7e5da9289eda9feb2633d5a8731d3b56f7954fd","unresolved":false,"context_lines":[{"line_number":12,"context_line":"historical metadata."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes-Bug: #1208547"},{"line_number":15,"context_line":"Related-Bug: #1201701"},{"line_number":16,"context_line":"Implements: blueprint hbase-meter-table-enhancement"},{"line_number":17,"context_line":"Change-Id: Ib09e21cbc7bbd45a6ecc321403e9947df837e14b"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"AAAASn%2F%2FOXQ%3D","line":15,"updated":"2013-09-09 18:01:55.000000000","message":"closes Bug #1218047 also","commit_id":"241e480e79a03204eb3f23fe27ce2cd3fd501984"}],"ceilometer/storage/impl_db2.py":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"c019bbc19b4c28d631219b755a5d28ff2daf0cbc","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        raise NotImplementedError("},{"line_number":365,"context_line":"            _(\"\"\"get_resources has not implemented timestamp ordering to handle"},{"line_number":366,"context_line":"                samples stored out of order when filtering\"\"\")"},{"line_number":367,"context_line":"        )"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        if limit or marker_pairs or sort_key or sort_dir:"},{"line_number":370,"context_line":"            raise NotImplementedError(_(\u0027Pagination not implemented\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAASn%2F%2Fwhc%3D","line":367,"updated":"2013-08-29 23:15:58.000000000","message":"Make sure our pot file cover such new message definition.","commit_id":"776ffd83200152bff77f173a70e218b06283cbbb"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"64a77c8e7173bac30c49cbeddf71515d72425d7d","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        :param pagination: Optional pagination query."},{"line_number":356,"context_line":"        \"\"\""},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        raise NotImplementedError("},{"line_number":359,"context_line":"            _(\"\"\"get_resources has not implemented timestamp ordering to handle"},{"line_number":360,"context_line":"                samples stored out of order when filtering\"\"\")"},{"line_number":361,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2Fppo%3D","line":358,"updated":"2013-09-01 14:01:59.000000000","message":"It would be better to open a bug against this driver than to check something in that breaks it.","commit_id":"0f7d7596d12e896f1b7323a043ccc143984dfbce"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"d7aa8dee7532910cf1647f340c0ca90579d0d60b","unresolved":false,"context_lines":[{"line_number":355,"context_line":"        :param pagination: Optional pagination query."},{"line_number":356,"context_line":"        \"\"\""},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        raise NotImplementedError("},{"line_number":359,"context_line":"            _(\"\"\"get_resources has not implemented timestamp ordering to handle"},{"line_number":360,"context_line":"                samples stored out of order when filtering\"\"\")"},{"line_number":361,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FjeY%3D","line":358,"in_reply_to":"AAAASn%2F%2Fppo%3D","updated":"2013-09-03 15:20:17.000000000","message":"We decided on IRC today to leave this raise in the driver for now, so ignore the previous comment.","commit_id":"0f7d7596d12e896f1b7323a043ccc143984dfbce"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ac427e1757f84382f507fb7b8e810fd35f16b1d1","unresolved":false,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        meters \u003d self.db.meter.find(q, sort\u003dsort_instructions)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        def _get_resource():"},{"line_number":418,"context_line":"            resource_id \u003d None"},{"line_number":419,"context_line":"            resource_meters \u003d []"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FcTs%3D","line":417,"updated":"2013-09-04 18:08:39.000000000","message":"this part can be cleaned up. at the very least this method isn\u0027t needed, just keep what is inside...and you can the resource_meters\u003d[] initialization as well.","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"5792939464affbd250f018d19ef696581204045b","unresolved":false,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        meters \u003d self.db.meter.find(q, sort\u003dsort_instructions)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        def _get_resource():"},{"line_number":418,"context_line":"            resource_id \u003d None"},{"line_number":419,"context_line":"            resource_meters \u003d []"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FYRc%3D","line":417,"in_reply_to":"AAAASn%2F%2FaQg%3D","updated":"2013-09-05 13:23:13.000000000","message":"I think that method definition can be removed, so just\nyield as it needs to. so at the end, we do not have to call the method. That should be ok. It does not affect the logic.","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"edc4e8fec314a4c7f9d3cc98a43142ddf4ff407f","unresolved":false,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        meters \u003d self.db.meter.find(q, sort\u003dsort_instructions)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        def _get_resource():"},{"line_number":418,"context_line":"            resource_id \u003d None"},{"line_number":419,"context_line":"            resource_meters \u003d []"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FaQg%3D","line":417,"in_reply_to":"AAAASn%2F%2FcEQ%3D","updated":"2013-09-05 01:43:43.000000000","message":"this is a generator. why you want to remove this?","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"a8c9cf045a968fe6f6ef7d8b8994edc460d3bd07","unresolved":false,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        meters \u003d self.db.meter.find(q, sort\u003dsort_instructions)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        def _get_resource():"},{"line_number":418,"context_line":"            resource_id \u003d None"},{"line_number":419,"context_line":"            resource_meters \u003d []"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FcEQ%3D","line":417,"in_reply_to":"AAAASn%2F%2FcGI%3D","updated":"2013-09-04 18:41:37.000000000","message":"ah right, i didn\u0027t think about whether he did this to handle db2. i can\u0027t see it affecting the logic if the method is remove but maybe hold off on changes to this file unless someone else comments.","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"c8f476501f7b4644fcdda2260a7e8fc50ce05540","unresolved":false,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        meters \u003d self.db.meter.find(q, sort\u003dsort_instructions)"},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        def _get_resource():"},{"line_number":418,"context_line":"            resource_id \u003d None"},{"line_number":419,"context_line":"            resource_meters \u003d []"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FcGI%3D","line":417,"in_reply_to":"AAAASn%2F%2FcTs%3D","updated":"2013-09-04 18:30:59.000000000","message":"I will try to clean this up. A little concerned since I don\u0027t have a DB2 backend, just the tests - I probably should have waited for Tong\u0027s review to complete for the change. :\\","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ac427e1757f84382f507fb7b8e810fd35f16b1d1","unresolved":false,"context_lines":[{"line_number":418,"context_line":"            resource_id \u003d None"},{"line_number":419,"context_line":"            resource_meters \u003d []"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"            def _create_model_resource():"},{"line_number":422,"context_line":"                return models.Resource(resource_id\u003dresource_id,"},{"line_number":423,"context_line":"                                       project_id\u003dproject_id,"},{"line_number":424,"context_line":"                                       first_sample_timestamp\u003dfirst_timestamp,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FcTA%3D","line":421,"updated":"2013-09-04 18:08:39.000000000","message":"thinking of an alternative to this but this looks weird...or maybe that\u0027s just me.","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":2860,"name":"litong01","email":"email4tong@yahoo.com","username":"litong01"},"change_message_id":"edc4e8fec314a4c7f9d3cc98a43142ddf4ff407f","unresolved":false,"context_lines":[{"line_number":418,"context_line":"            resource_id \u003d None"},{"line_number":419,"context_line":"            resource_meters \u003d []"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"            def _create_model_resource():"},{"line_number":422,"context_line":"                return models.Resource(resource_id\u003dresource_id,"},{"line_number":423,"context_line":"                                       project_id\u003dproject_id,"},{"line_number":424,"context_line":"                                       first_sample_timestamp\u003dfirst_timestamp,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FaQo%3D","line":421,"in_reply_to":"AAAASn%2F%2FcTA%3D","updated":"2013-09-05 01:43:43.000000000","message":"why is this weird?","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"a7e5da9289eda9feb2633d5a8731d3b56f7954fd","unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        meters \u003d self.db.meter.find(q, sort\u003dsort_instructions)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        def _get_resource():"},{"line_number":428,"context_line":"            resource_id \u003d None"},{"line_number":429,"context_line":"            resource_meters \u003d []"},{"line_number":430,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2FOX0%3D","line":427,"updated":"2013-09-09 18:01:55.000000000","message":"the code doesn\u0027t need to be wrapped in a function. let\u0027s keep the code inside and remove the function def","commit_id":"241e480e79a03204eb3f23fe27ce2cd3fd501984"}],"ceilometer/storage/impl_hbase.py":[{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"b55f7edf8a012badd8b795d7b1506eab72acb6ba","unresolved":false,"context_lines":[{"line_number":359,"context_line":"                _format_meter_reference(m[\u0027f:counter_name\u0027],"},{"line_number":360,"context_line":"                                        m[\u0027f:counter_type\u0027],"},{"line_number":361,"context_line":"                                        m[\u0027f:counter_unit\u0027])"},{"line_number":362,"context_line":"                for m in meter_rows]"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"            latest_data \u003d meter_rows[-1]"},{"line_number":365,"context_line":"            min_ts \u003d _timestamp_from_document(meter_rows[0])"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2FxqY%3D","line":362,"updated":"2013-08-29 18:27:50.000000000","message":"Second thought: Looks like it returns a reference to all samples, not distinct meters.","commit_id":"3e6a985d30aac0aaeea944b34ce5730f3a3aeac5"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"8d70b1b32e6c505e9398c8d7786e7990dd50498e","unresolved":false,"context_lines":[{"line_number":359,"context_line":"                _format_meter_reference(m[\u0027f:counter_name\u0027],"},{"line_number":360,"context_line":"                                        m[\u0027f:counter_type\u0027],"},{"line_number":361,"context_line":"                                        m[\u0027f:counter_unit\u0027])"},{"line_number":362,"context_line":"                for m in meter_rows]"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"            latest_data \u003d meter_rows[-1]"},{"line_number":365,"context_line":"            min_ts \u003d _timestamp_from_document(meter_rows[0])"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2FxJQ%3D","line":362,"in_reply_to":"AAAASn%2F%2FxqY%3D","updated":"2013-08-29 20:22:19.000000000","message":"Nope, I\u0027m wrong - that\u0027s what all of the drivers do. Will look into this more.","commit_id":"3e6a985d30aac0aaeea944b34ce5730f3a3aeac5"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"64a77c8e7173bac30c49cbeddf71515d72425d7d","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        if data[\u0027resource_metadata\u0027]:"},{"line_number":176,"context_line":"            resource_metadata \u003d dict((\u0027f:r_%s\u0027 % k, v)"},{"line_number":177,"context_line":"                                     for (k, v)"},{"line_number":178,"context_line":"                                     in data[\u0027resource_metadata\u0027].iteritems())"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        # Make sure we know about the user and project"},{"line_number":181,"context_line":"        if data[\u0027user_id\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FptQ%3D","line":178,"updated":"2013-09-01 14:01:59.000000000","message":"Some of the resources have nested dictionaries for metadata. Do those structures need to be flattened here? If so, there\u0027s some code in ceilometer/api/controllers/v2.py that may be useful. That change could be made in another patch, since it\u0027s not really related to what you\u0027re doing here.","commit_id":"0f7d7596d12e896f1b7323a043ccc143984dfbce"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"64a77c8e7173bac30c49cbeddf71515d72425d7d","unresolved":false,"context_lines":[{"line_number":359,"context_line":"            latest_data \u003d meter_rows[-1]"},{"line_number":360,"context_line":"            min_ts \u003d _timestamp_from_document(meter_rows[0])"},{"line_number":361,"context_line":"            max_ts \u003d _timestamp_from_document(meter_rows[-1])"},{"line_number":362,"context_line":"            if len(metaquery) \u003e 0:"},{"line_number":363,"context_line":"                for k, v in metaquery.iteritems():"},{"line_number":364,"context_line":"                    if latest_data[\u0027f:r_\u0027 + k.split(\u0027.\u0027, 1)[1]] \u003d\u003d v:"},{"line_number":365,"context_line":"                        yield make_resource("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FpsI%3D","line":362,"updated":"2013-09-01 14:01:59.000000000","message":"if metaquery:","commit_id":"0f7d7596d12e896f1b7323a043ccc143984dfbce"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"64a77c8e7173bac30c49cbeddf71515d72425d7d","unresolved":false,"context_lines":[{"line_number":923,"context_line":"    return _timestamp_from_document(record[1])"},{"line_number":924,"context_line":""},{"line_number":925,"context_line":""},{"line_number":926,"context_line":"def _resource_id_from_record_tuple(record):"},{"line_number":927,"context_line":"    \"\"\"Extract resource_id from HBase tuple record"},{"line_number":928,"context_line":"    \"\"\""},{"line_number":929,"context_line":"    return _resource_id_from_document(record[1])"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FpsY%3D","line":926,"updated":"2013-09-01 14:01:59.000000000","message":"The extra levels of abstraction in the implementation here means it takes 2 function calls on top of the 2 item lookups to get the resource id to produce the sort key for sorting the list of meters. I would collapse the implementation of _resource_id_from_document() into this function to avoid one function call.","commit_id":"0f7d7596d12e896f1b7323a043ccc143984dfbce"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ac427e1757f84382f507fb7b8e810fd35f16b1d1","unresolved":false,"context_lines":[{"line_number":890,"context_line":"    return \"%s!%s!%s\" % (counter_name, counter_type, counter_unit)"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":""},{"line_number":893,"context_line":"def _metadata_from_document(doc):"},{"line_number":894,"context_line":"    \"\"\"Extract resource metadata from HBase document using prefix specific"},{"line_number":895,"context_line":"    to HBase implementation."},{"line_number":896,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FclU%3D","line":893,"updated":"2013-09-04 18:08:39.000000000","message":"this is only used once, so not much value as a discrete function... maybe make docstring a note to explain its purpose","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"a8c9cf045a968fe6f6ef7d8b8994edc460d3bd07","unresolved":false,"context_lines":[{"line_number":890,"context_line":"    return \"%s!%s!%s\" % (counter_name, counter_type, counter_unit)"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":""},{"line_number":893,"context_line":"def _metadata_from_document(doc):"},{"line_number":894,"context_line":"    \"\"\"Extract resource metadata from HBase document using prefix specific"},{"line_number":895,"context_line":"    to HBase implementation."},{"line_number":896,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FcDE%3D","line":893,"in_reply_to":"AAAASn%2F%2FcHw%3D","updated":"2013-09-04 18:41:37.000000000","message":"maybe hold of this for now. i generally only make a function when it\u0027s going to be reused or if its multiple lines of unique code but i\u0027m not completely against this. it was just weird personally having to jump down to see what it was doing exactly.","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"c8f476501f7b4644fcdda2260a7e8fc50ce05540","unresolved":false,"context_lines":[{"line_number":890,"context_line":"    return \"%s!%s!%s\" % (counter_name, counter_type, counter_unit)"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":""},{"line_number":893,"context_line":"def _metadata_from_document(doc):"},{"line_number":894,"context_line":"    \"\"\"Extract resource metadata from HBase document using prefix specific"},{"line_number":895,"context_line":"    to HBase implementation."},{"line_number":896,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FcHw%3D","line":893,"in_reply_to":"AAAASn%2F%2FclU%3D","updated":"2013-09-04 18:30:59.000000000","message":"These were all to help with readability, since all of the inline operations and object diving was making it more difficult to understand what the function was doing at a glance. I used this one specifically since it\u0027s sort of a standard way to store a meter reference in this driver. I feel I ought to make this a constituent of the Connection class. Would you agree with that?","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ac427e1757f84382f507fb7b8e810fd35f16b1d1","unresolved":false,"context_lines":[{"line_number":898,"context_line":"        (k[4:], v) for k, v in doc.iteritems() if k.startswith(\u0027f:r_\u0027))"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"def _metadata_from_record_tuple(record):"},{"line_number":902,"context_line":"    \"\"\"Extract resource metadata from HBase record tuple using prefix specific"},{"line_number":903,"context_line":"    to HBase implementation."},{"line_number":904,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2Fclg%3D","line":901,"updated":"2013-09-04 18:08:39.000000000","message":"this is never used","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"c8f476501f7b4644fcdda2260a7e8fc50ce05540","unresolved":false,"context_lines":[{"line_number":898,"context_line":"        (k[4:], v) for k, v in doc.iteritems() if k.startswith(\u0027f:r_\u0027))"},{"line_number":899,"context_line":""},{"line_number":900,"context_line":""},{"line_number":901,"context_line":"def _metadata_from_record_tuple(record):"},{"line_number":902,"context_line":"    \"\"\"Extract resource metadata from HBase record tuple using prefix specific"},{"line_number":903,"context_line":"    to HBase implementation."},{"line_number":904,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FcIE%3D","line":901,"in_reply_to":"AAAASn%2F%2Fclg%3D","updated":"2013-09-04 18:30:59.000000000","message":"I\u0027ll remove it.","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ac427e1757f84382f507fb7b8e810fd35f16b1d1","unresolved":false,"context_lines":[{"line_number":905,"context_line":"    return _metadata_from_document(record[1])"},{"line_number":906,"context_line":""},{"line_number":907,"context_line":""},{"line_number":908,"context_line":"def _timestamp_from_record_tuple(record):"},{"line_number":909,"context_line":"    \"\"\"Extract timestamp from HBase tuple record"},{"line_number":910,"context_line":"    \"\"\""},{"line_number":911,"context_line":"    return timeutils.parse_strtime(record[1][\u0027f:timestamp\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FclA%3D","line":908,"updated":"2013-09-04 18:08:39.000000000","message":"this is only used once, so not much value as a discrete function... maybe make docstring a note to explain its purpose","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ac427e1757f84382f507fb7b8e810fd35f16b1d1","unresolved":false,"context_lines":[{"line_number":911,"context_line":"    return timeutils.parse_strtime(record[1][\u0027f:timestamp\u0027])"},{"line_number":912,"context_line":""},{"line_number":913,"context_line":""},{"line_number":914,"context_line":"def _resource_id_from_record_tuple(record):"},{"line_number":915,"context_line":"    \"\"\"Extract resource_id from HBase tuple record"},{"line_number":916,"context_line":"    \"\"\""},{"line_number":917,"context_line":"    return record[1][\u0027f:resource_id\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2Fck4%3D","line":914,"updated":"2013-09-04 18:08:39.000000000","message":"same as above","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"7314b7d2766ec8aa4cd5792af6a0e71f3f903693","unresolved":false,"context_lines":[{"line_number":919,"context_line":"        (k[4:], v) for k, v in doc.iteritems() if k.startswith(\u0027f:r_\u0027))"},{"line_number":920,"context_line":""},{"line_number":921,"context_line":""},{"line_number":922,"context_line":"def _metadata_from_record_tuple(record):"},{"line_number":923,"context_line":"    \"\"\"Extract resource metadata from HBase record tuple using prefix specific"},{"line_number":924,"context_line":"    to HBase implementation."},{"line_number":925,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAASn%2F%2FW5Q%3D","line":922,"updated":"2013-09-05 19:33:10.000000000","message":"never used","commit_id":"56ccc31ec729097115c9defdfe237b83bfef2ca0"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"193020f562066509ff02ea496d4a6a1b58e39263","unresolved":false,"context_lines":[{"line_number":919,"context_line":"        (k[4:], v) for k, v in doc.iteritems() if k.startswith(\u0027f:r_\u0027))"},{"line_number":920,"context_line":""},{"line_number":921,"context_line":""},{"line_number":922,"context_line":"def _metadata_from_record_tuple(record):"},{"line_number":923,"context_line":"    \"\"\"Extract resource metadata from HBase record tuple using prefix specific"},{"line_number":924,"context_line":"    to HBase implementation."},{"line_number":925,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAASn%2F%2FWr4%3D","line":922,"in_reply_to":"AAAASn%2F%2FW5Q%3D","updated":"2013-09-05 19:54:24.000000000","message":"Removed it.","commit_id":"56ccc31ec729097115c9defdfe237b83bfef2ca0"}],"ceilometer/storage/impl_mongodb.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"64a77c8e7173bac30c49cbeddf71515d72425d7d","unresolved":false,"context_lines":[{"line_number":478,"context_line":"        :return: sort parameters, query to use"},{"line_number":479,"context_line":"        \"\"\""},{"line_number":480,"context_line":"        all_sort \u003d []"},{"line_number":481,"context_line":"        op_mapping \u003d {\u0027desc\u0027: \u0027$lt\u0027, \u0027asc\u0027: \u0027$gt\u0027}"},{"line_number":482,"context_line":"        _op \u003d op_mapping.get(sort_dir, op_mapping[\u0027desc\u0027])"},{"line_number":483,"context_line":""},{"line_number":484,"context_line":"        all_sort \u003d cls._build_sort_instructions(sort_keys, sort_dir)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2Fprs%3D","line":481,"updated":"2013-09-01 14:01:59.000000000","message":"If this mapping is constant, it could move to a class attribute.","commit_id":"0f7d7596d12e896f1b7323a043ccc143984dfbce"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"64a77c8e7173bac30c49cbeddf71515d72425d7d","unresolved":false,"context_lines":[{"line_number":509,"context_line":"        :return: sort parameters"},{"line_number":510,"context_line":"        \"\"\""},{"line_number":511,"context_line":"        sort_instructions \u003d []"},{"line_number":512,"context_line":"        sort_mapping \u003d {\u0027desc\u0027: pymongo.DESCENDING, \u0027asc\u0027: pymongo.ASCENDING}"},{"line_number":513,"context_line":"        _sort_dir \u003d sort_mapping.get(sort_dir, sort_mapping[\u0027desc\u0027])"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        for _sort_key in sort_keys:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FprI%3D","line":512,"updated":"2013-09-01 14:01:59.000000000","message":"This looks like it could be a class attribute, too.","commit_id":"0f7d7596d12e896f1b7323a043ccc143984dfbce"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ac427e1757f84382f507fb7b8e810fd35f16b1d1","unresolved":false,"context_lines":[{"line_number":483,"context_line":"        all_sort \u003d []"},{"line_number":484,"context_line":"        _op \u003d cls.SORT_OPERATION_MAPPING.get("},{"line_number":485,"context_line":"            sort_dir, cls.SORT_OPERATION_MAPPING[\u0027desc\u0027])[1]"},{"line_number":486,"context_line":"        all_sort \u003d cls._build_sort_instructions(sort_keys, sort_dir)"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        if marker is not None:"},{"line_number":489,"context_line":"            sort_criteria_list \u003d []"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2Fcq8%3D","line":486,"updated":"2013-09-04 18:08:39.000000000","message":"_build_sort_instructions could probably return _op as well so you don\u0027t need to have, \n cls.SORT_OPERATION_MAPPING.get(sort_dir, cls.SORT_OPERATION_MAPPING[\u0027desc\u0027]) in two places","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"c8f476501f7b4644fcdda2260a7e8fc50ce05540","unresolved":false,"context_lines":[{"line_number":483,"context_line":"        all_sort \u003d []"},{"line_number":484,"context_line":"        _op \u003d cls.SORT_OPERATION_MAPPING.get("},{"line_number":485,"context_line":"            sort_dir, cls.SORT_OPERATION_MAPPING[\u0027desc\u0027])[1]"},{"line_number":486,"context_line":"        all_sort \u003d cls._build_sort_instructions(sort_keys, sort_dir)"},{"line_number":487,"context_line":""},{"line_number":488,"context_line":"        if marker is not None:"},{"line_number":489,"context_line":"            sort_criteria_list \u003d []"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FcJI%3D","line":486,"in_reply_to":"AAAASn%2F%2Fcq8%3D","updated":"2013-09-04 18:30:59.000000000","message":"Ah, right - that makes sense since the sort direction determines this. I\u0027ll make this change.","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ac427e1757f84382f507fb7b8e810fd35f16b1d1","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        \"\"\""},{"line_number":513,"context_line":"        sort_instructions \u003d []"},{"line_number":514,"context_line":"        sort_mapping \u003d {\u0027desc\u0027: pymongo.DESCENDING, \u0027asc\u0027: pymongo.ASCENDING}"},{"line_number":515,"context_line":"        _sort_dir \u003d sort_mapping.get(sort_dir, sort_mapping[\u0027desc\u0027])"},{"line_number":516,"context_line":"        _sort_dir \u003d cls.SORT_OPERATION_MAPPING.get("},{"line_number":517,"context_line":"            sort_dir, cls.SORT_OPERATION_MAPPING[\u0027desc\u0027])[0]"},{"line_number":518,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2Fcqk%3D","line":515,"updated":"2013-09-04 18:08:39.000000000","message":"the two lines above are not needed since it just gets overridden by next line","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"c8f476501f7b4644fcdda2260a7e8fc50ce05540","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        \"\"\""},{"line_number":513,"context_line":"        sort_instructions \u003d []"},{"line_number":514,"context_line":"        sort_mapping \u003d {\u0027desc\u0027: pymongo.DESCENDING, \u0027asc\u0027: pymongo.ASCENDING}"},{"line_number":515,"context_line":"        _sort_dir \u003d sort_mapping.get(sort_dir, sort_mapping[\u0027desc\u0027])"},{"line_number":516,"context_line":"        _sort_dir \u003d cls.SORT_OPERATION_MAPPING.get("},{"line_number":517,"context_line":"            sort_dir, cls.SORT_OPERATION_MAPPING[\u0027desc\u0027])[0]"},{"line_number":518,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FcOo%3D","line":515,"in_reply_to":"AAAASn%2F%2Fcqk%3D","updated":"2013-09-04 18:30:59.000000000","message":"Meant to remove that. Sorry!","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"7314b7d2766ec8aa4cd5792af6a0e71f3f903693","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        all_sort \u003d []"},{"line_number":491,"context_line":"        _op \u003d cls.SORT_OPERATION_MAPPING.get("},{"line_number":492,"context_line":"            sort_dir, cls.SORT_OPERATION_MAPPING[\u0027desc\u0027])[1]"},{"line_number":493,"context_line":"        all_sort \u003d cls._build_sort_instructions(sort_keys, sort_dir)"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        if marker is not None:"},{"line_number":496,"context_line":"            sort_criteria_list \u003d []"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAASn%2F%2FW4U%3D","line":493,"updated":"2013-09-05 19:33:10.000000000","message":"return all_sort, _op from _build_sort_instructions()... just so we don\u0027t have to set cls.SORT_OPERATION_MAPPING[\u0027desc\u0027] default at multiple places","commit_id":"56ccc31ec729097115c9defdfe237b83bfef2ca0"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"193020f562066509ff02ea496d4a6a1b58e39263","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        all_sort \u003d []"},{"line_number":491,"context_line":"        _op \u003d cls.SORT_OPERATION_MAPPING.get("},{"line_number":492,"context_line":"            sort_dir, cls.SORT_OPERATION_MAPPING[\u0027desc\u0027])[1]"},{"line_number":493,"context_line":"        all_sort \u003d cls._build_sort_instructions(sort_keys, sort_dir)"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"        if marker is not None:"},{"line_number":496,"context_line":"            sort_criteria_list \u003d []"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAASn%2F%2FWs4%3D","line":493,"in_reply_to":"AAAASn%2F%2FW4U%3D","updated":"2013-09-05 19:54:24.000000000","message":"Ah, missed this one. That\u0027s probably why these were combined before. I broke them out when pagination was removed. Just changed it and running unit tests.","commit_id":"56ccc31ec729097115c9defdfe237b83bfef2ca0"}],"ceilometer/storage/impl_sqlalchemy.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"64a77c8e7173bac30c49cbeddf71515d72425d7d","unresolved":false,"context_lines":[{"line_number":306,"context_line":"            func.min(Meter.timestamp).label(\"min_ts\")"},{"line_number":307,"context_line":"        ).group_by(Meter.resource_id)"},{"line_number":308,"context_line":""},{"line_number":309,"context_line":"        if resource is not None:"},{"line_number":310,"context_line":"            ts_subquery \u003d ts_subquery.filter("},{"line_number":311,"context_line":"                Meter.resource_id \u003d\u003d resource)"},{"line_number":312,"context_line":"        if user is not None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASn%2F%2FpqM%3D","line":309,"updated":"2013-09-01 14:01:59.000000000","message":"This pattern is repeating enough that it could be a loop.\n\n  for value, col in [ (resource, Meter.resource_id), ...]:\n    if value is not None:\n      ts_subquery \u003d ts_subquery.filter(column \u003d\u003d value)","commit_id":"0f7d7596d12e896f1b7323a043ccc143984dfbce"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"ac427e1757f84382f507fb7b8e810fd35f16b1d1","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        if project is not None:"},{"line_number":428,"context_line":"            query \u003d query.filter(Resource.project_id \u003d\u003d project)"},{"line_number":429,"context_line":"        if metaquery:"},{"line_number":430,"context_line":"            raise NotImplementedError(_(\u0027metaquery not implemented\u0027))"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        for resource, meter in query.all():"},{"line_number":433,"context_line":"            yield api_models.Meter("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2Fc1k%3D","line":430,"updated":"2013-09-04 18:08:39.000000000","message":"move this to the top of function as well?","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"c8f476501f7b4644fcdda2260a7e8fc50ce05540","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        if project is not None:"},{"line_number":428,"context_line":"            query \u003d query.filter(Resource.project_id \u003d\u003d project)"},{"line_number":429,"context_line":"        if metaquery:"},{"line_number":430,"context_line":"            raise NotImplementedError(_(\u0027metaquery not implemented\u0027))"},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"        for resource, meter in query.all():"},{"line_number":433,"context_line":"            yield api_models.Meter("}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAASn%2F%2FcPA%3D","line":430,"in_reply_to":"AAAASn%2F%2Fc1k%3D","updated":"2013-09-04 18:30:59.000000000","message":"Definitely. Sorry about that.","commit_id":"25d6271982c85039b3df38ac0021931f807bae11"}],"tests/storage/test_storage_scenarios.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"5f58c9e36c41bccda78f4e445555ee13fa4ceaab","unresolved":false,"context_lines":[{"line_number":352,"context_line":""},{"line_number":353,"context_line":""},{"line_number":354,"context_line":"class ResourceTestOrdering(DBTestBase,"},{"line_number":355,"context_line":"                           tests_db.MixinTestsWithBackendScenariosSkipDB2):"},{"line_number":356,"context_line":"    # Skipping DB2 scenario to be fixed at a later date. Once fixed, these can"},{"line_number":357,"context_line":"    # be moved up into the base ResourceTest class, although it\u0027ll add to the"},{"line_number":358,"context_line":"    # other tests\u0027 samples."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2Fyqg%3D","line":355,"updated":"2013-08-29 15:03:17.000000000","message":"No, just raise NotImplemented in DB2","commit_id":"3e6a985d30aac0aaeea944b34ce5730f3a3aeac5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"5f58c9e36c41bccda78f4e445555ee13fa4ceaab","unresolved":false,"context_lines":[{"line_number":506,"context_line":"        results \u003d list(self.conn.get_samples(f))"},{"line_number":507,"context_line":"        self.assertEqual(len(results), 3)"},{"line_number":508,"context_line":"        for meter in results:"},{"line_number":509,"context_line":"            assert meter.as_dict() in self.msgs[:3]"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    def test_get_samples_by_user_limit(self):"},{"line_number":512,"context_line":"        f \u003d storage.SampleFilter(user\u003d\u0027user-id\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2Fyqw%3D","line":509,"updated":"2013-08-29 15:03:17.000000000","message":"Could you change that to self.assertIn while you\u0027re at it?","commit_id":"3e6a985d30aac0aaeea944b34ce5730f3a3aeac5"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"5f58c9e36c41bccda78f4e445555ee13fa4ceaab","unresolved":false,"context_lines":[{"line_number":523,"context_line":"        results \u003d list(self.conn.get_samples(f))"},{"line_number":524,"context_line":"        assert results"},{"line_number":525,"context_line":"        for meter in results:"},{"line_number":526,"context_line":"            assert meter.as_dict() in self.msgs[:4]"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def test_get_samples_by_resource(self):"},{"line_number":529,"context_line":"        f \u003d storage.SampleFilter(user\u003d\u0027user-id\u0027, resource\u003d\u0027resource-id\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAASn%2F%2Fyqs%3D","line":526,"updated":"2013-08-29 15:03:17.000000000","message":"Same here.","commit_id":"3e6a985d30aac0aaeea944b34ce5730f3a3aeac5"}]}
