)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"59e9f505bac7e3e8c87c890b4e0fcb0099600934","unresolved":false,"context_lines":[{"line_number":12,"context_line":" - if a host belongs to an aggregate and if this aggregate defines"},{"line_number":13,"context_line":"   metadata that match with the image properties then the host"},{"line_number":14,"context_line":"   is a candidate to boot the instance."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I3b9325e2e103f3bb6eed66789ac2c82941e94397"},{"line_number":17,"context_line":"Implements: blueprint aggregate-host-isolation-based-image-properties"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAAT3%2F%2F1xs%3D","line":15,"updated":"2013-12-30 11:50:38.000000000","message":"DocImpact","commit_id":"b1d0890c3475ac90dea52fbc569ede7ed85a2027"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"57cc88d60016280d8e42fcf70d4478a31f4cb838","unresolved":false,"context_lines":[{"line_number":12,"context_line":" - if a host belongs to an aggregate and if this aggregate defines"},{"line_number":13,"context_line":"   metadata that match with the image properties then the host"},{"line_number":14,"context_line":"   is a candidate to boot the instance."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I3b9325e2e103f3bb6eed66789ac2c82941e94397"},{"line_number":17,"context_line":"Implements: blueprint aggregate-host-isolation-based-image-properties"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"AAAAT3%2F%2F1q4%3D","line":15,"in_reply_to":"AAAAT3%2F%2F1xs%3D","updated":"2013-12-30 12:22:58.000000000","message":"Done","commit_id":"b1d0890c3475ac90dea52fbc569ede7ed85a2027"}],"doc/source/devref/filter_scheduler.rst":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c50e891fedc03b1872987ba27e84b9349c9a3bcb","unresolved":false,"context_lines":[{"line_number":107,"context_line":"* |GroupAffinityFilter| - ensures that each instance in group is on a same"},{"line_number":108,"context_line":"  host with one of the instance host in a group."},{"line_number":109,"context_line":"* |AggregateMultiTenancyIsolation| - isolate tenants in specific aggregates."},{"line_number":110,"context_line":"* |AggregateImagePropertiesIsolation| - isolates hosts based on images "},{"line_number":111,"context_line":"  properties and aggregates metadata."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Now we can focus on these standard filter classes in details. I will pass the"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAT3%2F%2F814%3D","line":110,"updated":"2013-12-26 13:00:55.000000000","message":"whitespace","commit_id":"aea62791f9933ca067e00ccb8277029cba9123f9"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"fca0c34f88e7f70e9731594d5a978a698c87f687","unresolved":false,"context_lines":[{"line_number":107,"context_line":"* |GroupAffinityFilter| - ensures that each instance in group is on a same"},{"line_number":108,"context_line":"  host with one of the instance host in a group."},{"line_number":109,"context_line":"* |AggregateMultiTenancyIsolation| - isolate tenants in specific aggregates."},{"line_number":110,"context_line":"* |AggregateImagePropertiesIsolation| - isolates hosts based on images "},{"line_number":111,"context_line":"  properties and aggregates metadata."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Now we can focus on these standard filter classes in details. I will pass the"}],"source_content_type":"text/x-rst","patch_set":10,"id":"AAAAT3%2F%2F6i4%3D","line":110,"in_reply_to":"AAAAT3%2F%2F814%3D","updated":"2013-12-27 08:29:53.000000000","message":"Done","commit_id":"aea62791f9933ca067e00ccb8277029cba9123f9"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"872eca1c6d07d9d69a3824337718ea8390ba5685","unresolved":false,"context_lines":[{"line_number":107,"context_line":"* |GroupAffinityFilter| - ensures that each instance in group is on a same"},{"line_number":108,"context_line":"  host with one of the instance host in a group."},{"line_number":109,"context_line":"* |AggregateMultiTenancyIsolation| - isolate tenants in specific aggregates."},{"line_number":110,"context_line":"* |AggregateImagePropertiesIsolation| - isolates hosts based on images"},{"line_number":111,"context_line":"  properties and aggregates metadata."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Now we can focus on these standard filter classes in details. I will pass the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAT3%2F%2F0hU%3D","line":110,"updated":"2013-12-30 20:14:08.000000000","message":"s/images/image/ (femtonit)","commit_id":"7ad6c078be664a6d678ca02d8cae708c801881ec"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2edec308df6e2db271acb8bca73fbbaa59032335","unresolved":false,"context_lines":[{"line_number":107,"context_line":"* |GroupAffinityFilter| - ensures that each instance in group is on a same"},{"line_number":108,"context_line":"  host with one of the instance host in a group."},{"line_number":109,"context_line":"* |AggregateMultiTenancyIsolation| - isolate tenants in specific aggregates."},{"line_number":110,"context_line":"* |AggregateImagePropertiesIsolation| - isolates hosts based on images"},{"line_number":111,"context_line":"  properties and aggregates metadata."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Now we can focus on these standard filter classes in details. I will pass the"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAT3%2F%2F0P0%3D","line":110,"in_reply_to":"AAAAT3%2F%2F0hU%3D","updated":"2013-12-30 22:10:52.000000000","message":"Done","commit_id":"7ad6c078be664a6d678ca02d8cae708c801881ec"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"872eca1c6d07d9d69a3824337718ea8390ba5685","unresolved":false,"context_lines":[{"line_number":108,"context_line":"  host with one of the instance host in a group."},{"line_number":109,"context_line":"* |AggregateMultiTenancyIsolation| - isolate tenants in specific aggregates."},{"line_number":110,"context_line":"* |AggregateImagePropertiesIsolation| - isolates hosts based on images"},{"line_number":111,"context_line":"  properties and aggregates metadata."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Now we can focus on these standard filter classes in details. I will pass the"},{"line_number":114,"context_line":"simplest ones, such as |AllHostsFilter|, |CoreFilter| and |RamFilter| are,"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAT3%2F%2F0hQ%3D","line":111,"updated":"2013-12-30 20:14:08.000000000","message":"s/aggregates/aggregate/ (femtonit)","commit_id":"7ad6c078be664a6d678ca02d8cae708c801881ec"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2edec308df6e2db271acb8bca73fbbaa59032335","unresolved":false,"context_lines":[{"line_number":108,"context_line":"  host with one of the instance host in a group."},{"line_number":109,"context_line":"* |AggregateMultiTenancyIsolation| - isolate tenants in specific aggregates."},{"line_number":110,"context_line":"* |AggregateImagePropertiesIsolation| - isolates hosts based on images"},{"line_number":111,"context_line":"  properties and aggregates metadata."},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"Now we can focus on these standard filter classes in details. I will pass the"},{"line_number":114,"context_line":"simplest ones, such as |AllHostsFilter|, |CoreFilter| and |RamFilter| are,"}],"source_content_type":"text/x-rst","patch_set":12,"id":"AAAAT3%2F%2F0Pw%3D","line":111,"in_reply_to":"AAAAT3%2F%2F0hQ%3D","updated":"2013-12-30 22:10:52.000000000","message":"Done","commit_id":"7ad6c078be664a6d678ca02d8cae708c801881ec"}],"nova/scheduler/filters/aggregate_image_properties_isolation.py":[{"author":{"_account_id":4573,"name":"yunhong-jiang","email":"yunhong.jiang@intel.com","username":"yunhong-jiang"},"change_message_id":"f6b37f69fc973334442ee9e55ebf425db37ac9d0","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        image_props \u003d spec.get(\u0027image\u0027, {}).get(\u0027properties\u0027, {})"},{"line_number":37,"context_line":"        context \u003d filter_properties[\u0027context\u0027].elevated()"},{"line_number":38,"context_line":"        metadata \u003d db.aggregate_metadata_get_by_host(context, host_state.host)"},{"line_number":39,"context_line":"        for key, options in metadata.iteritems():"},{"line_number":40,"context_line":"            prop \u003d image_props.get(key)"},{"line_number":41,"context_line":"            if prop and prop not in options:"},{"line_number":42,"context_line":"                LOG.debug(_(\"%(host_state)s fails image aggregate properties \""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BTOQ%3D","line":39,"updated":"2013-11-27 17:14:14.000000000","message":"Why you use the aggregate metadata as the loop, instead of the image props? The host may have several types of metadata like core ratio, ram ratio etc.","commit_id":"3d3021db27b1074c53cbd23a7d41f240ebb96330"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"ab4fcf12264f37e292c9ae144eab53d433e10f7b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        image_props \u003d spec.get(\u0027image\u0027, {}).get(\u0027properties\u0027, {})"},{"line_number":37,"context_line":"        context \u003d filter_properties[\u0027context\u0027].elevated()"},{"line_number":38,"context_line":"        metadata \u003d db.aggregate_metadata_get_by_host(context, host_state.host)"},{"line_number":39,"context_line":"        for key, options in metadata.iteritems():"},{"line_number":40,"context_line":"            prop \u003d image_props.get(key)"},{"line_number":41,"context_line":"            if prop and prop not in options:"},{"line_number":42,"context_line":"                LOG.debug(_(\"%(host_state)s fails image aggregate properties \""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BQpo%3D","line":39,"in_reply_to":"AAAATn%2F%2BTOQ%3D","updated":"2013-11-28 08:37:26.000000000","message":"I\u0027m not sure to understand your point. If i\u0027m using a loop on image props i need a second loop to parse meta data for each aggregates.\n\nCould you give me more information about your point?","commit_id":"3d3021db27b1074c53cbd23a7d41f240ebb96330"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"c50e891fedc03b1872987ba27e84b9349c9a3bcb","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        metadata \u003d db.aggregate_metadata_get_by_host(context, host_state.host)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        for key, options in metadata.iteritems():"},{"line_number":57,"context_line":"            if cfg_namespace and \\"},{"line_number":58,"context_line":"                    not key.startswith(cfg_namespace + cfg_separator):"},{"line_number":59,"context_line":"                continue"},{"line_number":60,"context_line":"            prop \u003d image_props.get(key)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAT3%2F%2F81w%3D","line":57,"updated":"2013-12-26 13:00:55.000000000","message":"can we try and write this with the \\\nif (cfg_namespace and\n    not key.startswith(cfg_namespace + cfg_separator)):","commit_id":"aea62791f9933ca067e00ccb8277029cba9123f9"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"fca0c34f88e7f70e9731594d5a978a698c87f687","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        metadata \u003d db.aggregate_metadata_get_by_host(context, host_state.host)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"        for key, options in metadata.iteritems():"},{"line_number":57,"context_line":"            if cfg_namespace and \\"},{"line_number":58,"context_line":"                    not key.startswith(cfg_namespace + cfg_separator):"},{"line_number":59,"context_line":"                continue"},{"line_number":60,"context_line":"            prop \u003d image_props.get(key)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAT3%2F%2F6iU%3D","line":57,"in_reply_to":"AAAAT3%2F%2F81w%3D","updated":"2013-12-27 08:29:53.000000000","message":"Done","commit_id":"aea62791f9933ca067e00ccb8277029cba9123f9"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"59e9f505bac7e3e8c87c890b4e0fcb0099600934","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    cfg.StrOpt(\u0027aggregate_image_properties_isolation_namespace\u0027,"},{"line_number":25,"context_line":"                default\u003d\"\","},{"line_number":26,"context_line":"                help\u003d\u0027Force the filter to consider only keys matching \u0027"},{"line_number":27,"context_line":"               \u0027the given namespace.\u0027),"},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027aggregate_image_properties_isolation_separator\u0027,"},{"line_number":29,"context_line":"                default\u003d\".\","},{"line_number":30,"context_line":"                help\u003d\u0027The separator used between the namespace and keys\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAT3%2F%2F1xg%3D","line":27,"updated":"2013-12-30 11:50:38.000000000","message":"nit: Keep align with \u0027Force\u0027","commit_id":"b1d0890c3475ac90dea52fbc569ede7ed85a2027"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"57cc88d60016280d8e42fcf70d4478a31f4cb838","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    cfg.StrOpt(\u0027aggregate_image_properties_isolation_namespace\u0027,"},{"line_number":25,"context_line":"                default\u003d\"\","},{"line_number":26,"context_line":"                help\u003d\u0027Force the filter to consider only keys matching \u0027"},{"line_number":27,"context_line":"               \u0027the given namespace.\u0027),"},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027aggregate_image_properties_isolation_separator\u0027,"},{"line_number":29,"context_line":"                default\u003d\".\","},{"line_number":30,"context_line":"                help\u003d\u0027The separator used between the namespace and keys\u0027),"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAT3%2F%2F1rA%3D","line":27,"in_reply_to":"AAAAT3%2F%2F1xg%3D","updated":"2013-12-30 12:22:58.000000000","message":"Done","commit_id":"b1d0890c3475ac90dea52fbc569ede7ed85a2027"},{"author":{"_account_id":7494,"name":"Guangya Liu","email":"gyliu513@gmail.com","username":"JayLau"},"change_message_id":"59e9f505bac7e3e8c87c890b4e0fcb0099600934","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    run_filter_once_per_request \u003d True"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def host_passes(self, host_state, filter_properties):"},{"line_number":45,"context_line":"        \"\"\"Checks an host in an aggregate that metadata key/value match"},{"line_number":46,"context_line":"        with image properties."},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        cfg_namespace \u003d CONF.aggregate_image_properties_isolation_namespace"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAT3%2F%2F1w8%3D","line":45,"updated":"2013-12-30 11:50:38.000000000","message":"an host \u003d\u003e a host","commit_id":"b1d0890c3475ac90dea52fbc569ede7ed85a2027"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"57cc88d60016280d8e42fcf70d4478a31f4cb838","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    run_filter_once_per_request \u003d True"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def host_passes(self, host_state, filter_properties):"},{"line_number":45,"context_line":"        \"\"\"Checks an host in an aggregate that metadata key/value match"},{"line_number":46,"context_line":"        with image properties."},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        cfg_namespace \u003d CONF.aggregate_image_properties_isolation_namespace"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAT3%2F%2F1q8%3D","line":45,"in_reply_to":"AAAAT3%2F%2F1w8%3D","updated":"2013-12-30 12:22:58.000000000","message":"Done","commit_id":"b1d0890c3475ac90dea52fbc569ede7ed85a2027"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"872eca1c6d07d9d69a3824337718ea8390ba5685","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            prop \u003d image_props.get(key)"},{"line_number":61,"context_line":"            if prop and prop not in options:"},{"line_number":62,"context_line":"                LOG.debug(_(\"%(host_state)s fails image aggregate properties \""},{"line_number":63,"context_line":"                            \"requirements. Property %(prop)s not \""},{"line_number":64,"context_line":"                            \"match %(options)s.\"),"},{"line_number":65,"context_line":"                          {\u0027host_state\u0027: host_state,"},{"line_number":66,"context_line":"                           \u0027prop\u0027: prop,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2F0hE%3D","line":63,"updated":"2013-12-30 20:14:08.000000000","message":"s/not/does not/ (femtonit)","commit_id":"7ad6c078be664a6d678ca02d8cae708c801881ec"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"2edec308df6e2db271acb8bca73fbbaa59032335","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            prop \u003d image_props.get(key)"},{"line_number":61,"context_line":"            if prop and prop not in options:"},{"line_number":62,"context_line":"                LOG.debug(_(\"%(host_state)s fails image aggregate properties \""},{"line_number":63,"context_line":"                            \"requirements. Property %(prop)s not \""},{"line_number":64,"context_line":"                            \"match %(options)s.\"),"},{"line_number":65,"context_line":"                          {\u0027host_state\u0027: host_state,"},{"line_number":66,"context_line":"                           \u0027prop\u0027: prop,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAT3%2F%2F0Qk%3D","line":63,"in_reply_to":"AAAAT3%2F%2F0hE%3D","updated":"2013-12-30 22:10:52.000000000","message":"I\u0027m working on a new patchset to correct that. Thanks.","commit_id":"7ad6c078be664a6d678ca02d8cae708c801881ec"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"4ad62c0306737738da437ff93735a5db2ae15b75","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"opts \u003d ["},{"line_number":24,"context_line":"    cfg.StrOpt(\u0027aggregate_image_properties_isolation_namespace\u0027,"},{"line_number":25,"context_line":"                default\u003d\"\","},{"line_number":26,"context_line":"                help\u003d\u0027Force the filter to consider only keys matching \u0027"},{"line_number":27,"context_line":"                     \u0027the given namespace.\u0027),"},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027aggregate_image_properties_isolation_separator\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAT3%2F%2FytA%3D","line":25,"updated":"2013-12-31 13:48:59.000000000","message":"Do we need the default set as \"\". BY default the default value is None. I think that it would suffice if you just did not set this.","commit_id":"eb10670cbc9d221a142c2595e0573680ff19ec8a"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"bb36754abc1cb5ddfa8efdeea2ab55289da1e7f6","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"opts \u003d ["},{"line_number":24,"context_line":"    cfg.StrOpt(\u0027aggregate_image_properties_isolation_namespace\u0027,"},{"line_number":25,"context_line":"                default\u003d\"\","},{"line_number":26,"context_line":"                help\u003d\u0027Force the filter to consider only keys matching \u0027"},{"line_number":27,"context_line":"                     \u0027the given namespace.\u0027),"},{"line_number":28,"context_line":"    cfg.StrOpt(\u0027aggregate_image_properties_isolation_separator\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAT3%2F%2FysY%3D","line":25,"in_reply_to":"AAAAT3%2F%2FytA%3D","updated":"2013-12-31 13:57:39.000000000","message":"Sure Gary, I\u0027m going to work on that if all run well i will push a new patchset.","commit_id":"eb10670cbc9d221a142c2595e0573680ff19ec8a"}],"nova/tests/scheduler/test_host_filters.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"01bfe53f1dddc62462f983ef59ff0da980fb431c","unresolved":false,"context_lines":[{"line_number":1636,"context_line":"                          host, filter_properties)"},{"line_number":1637,"context_line":""},{"line_number":1638,"context_line":"    def test_aggregate_image_properties_isolation_passes(self):"},{"line_number":1639,"context_line":"        \"\"\"Tests property setted in the aggregate and image.\"\"\""},{"line_number":1640,"context_line":"        self._stub_service_is_up(True)"},{"line_number":1641,"context_line":"        filt_cls \u003d self.class_map[\u0027AggregateImagePropertiesIsolation\u0027]()"},{"line_number":1642,"context_line":"        aggr_meta \u003d {\u0027foo\u0027: \u0027bar\u0027}"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BD4I%3D","line":1639,"updated":"2013-12-02 23:08:34.000000000","message":"Please eliminate the docstrings on test methods.  Test infrastructures have been known to use the docstring to identify the test that failed, rather than the test method name; this makes it difficult to identify the source of the failure.","commit_id":"6f4ad09b493689dd809c01da5b35ab3c55b92728"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"01bfe53f1dddc62462f983ef59ff0da980fb431c","unresolved":false,"context_lines":[{"line_number":1730,"context_line":"                                                    \u0027foo2\u0027: \u0027bar3\u0027}}}}"},{"line_number":1731,"context_line":"        host \u003d fakes.FakeHostState(\u0027host1\u0027, \u0027compute\u0027, {})"},{"line_number":1732,"context_line":"        self.assertFalse(filt_cls.host_passes(host, filter_properties))"},{"line_number":1733,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2BD34%3D","line":1733,"updated":"2013-12-02 23:08:34.000000000","message":"This blank line at the end of the file is the source of your PEP8 failure.","commit_id":"6f4ad09b493689dd809c01da5b35ab3c55b92728"}]}
