)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7336,"name":"Phil Neal","email":"phil.neal@hp.com","username":"nealph"},"change_message_id":"e3c95e263204b72da9ca4fea67aaf1f27f8d3bb0","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     John Herndon \u003cjohn.herndon@hp.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-08-13 06:41:49 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add event queries"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds event queries needed by the event api."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAARH%2F%2F9qM%3D","line":7,"updated":"2013-08-14 14:59:46.000000000","message":"This commit message could use some clean-up....add more specifics about the functionality it supports and remove the duplicate text.","commit_id":"91214bcd21fea9edcb34779e901de8265f1b68b5"}],"ceilometer/storage/base.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"e2f4a189e1ba885d953e5c912ebd13e233bbcf45","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    @abc.abstractmethod"},{"line_number":218,"context_line":"    def get_event_types(self):"},{"line_number":219,"context_line":"        \"\"\"Return an iterable of string that correspond to"},{"line_number":220,"context_line":"        models.Event.event_name."},{"line_number":221,"context_line":"        \"\"\""},{"line_number":222,"context_line":"        raise NotImplementedError(\u0027EventTypes not implemented.\u0027)"},{"line_number":223,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F4LA%3D","line":220,"updated":"2013-08-15 20:48:22.000000000","message":"\"strings\" and the field name is changed to event_type, right?","commit_id":"2ae81b8136a0d9436cf2656c970e9f101d216f49"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"e2f4a189e1ba885d953e5c912ebd13e233bbcf45","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        \"\"\"Return an iterable of string that correspond to"},{"line_number":220,"context_line":"        models.Event.event_name."},{"line_number":221,"context_line":"        \"\"\""},{"line_number":222,"context_line":"        raise NotImplementedError(\u0027EventTypes not implemented.\u0027)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def get_traits_by_event_type(self, event_type):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F4KQ%3D","line":222,"updated":"2013-08-15 20:48:22.000000000","message":"It\u0027s not necessary to raise here. This method will never be called, unless the subclass calls it, and the subclass should raise directly.","commit_id":"2ae81b8136a0d9436cf2656c970e9f101d216f49"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"e2f4a189e1ba885d953e5c912ebd13e233bbcf45","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        raise NotImplementedError(\u0027EventTypes not implemented.\u0027)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def get_traits_by_event_type(self, event_type):"},{"line_number":226,"context_line":"        \"\"\"Return an iterable of model.Trait that correspond to traits"},{"line_number":227,"context_line":"        associated with the given event type."},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F4Ks%3D","line":225,"updated":"2013-08-15 20:48:22.000000000","message":"Rather than adding separate methods for the different queries, let\u0027s keep the API small and add a get_traits() with optional arguments for filtering the list of results (as we do with samples).","commit_id":"2ae81b8136a0d9436cf2656c970e9f101d216f49"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"8fe68b6daf4c0be21b79205a42e5eb7a32ef8045","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        raise NotImplementedError(\u0027EventTypes not implemented.\u0027)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def get_traits_by_event_type(self, event_type):"},{"line_number":226,"context_line":"        \"\"\"Return an iterable of model.Trait that correspond to traits"},{"line_number":227,"context_line":"        associated with the given event type."},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F3ug%3D","line":225,"in_reply_to":"AAAARH%2F%2F31o%3D","updated":"2013-08-15 22:41:12.000000000","message":"We\u0027ll have to talk about the REST endpoint names separately -- for the sample API we opted to just have /v2/samples and pass the filter values as query arguments, and I think we should be consistent here.\n\nThat aside, if one API wants to return strings (the names of the traits) and the other returns objects, then I agree they should be separate methods. How about get_trait_names(self, event_type) and get_traits(self, event_type, trait_name\u003dNone)?","commit_id":"2ae81b8136a0d9436cf2656c970e9f101d216f49"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"82e9dacebc1b8e8da8bcfe500bb9c7d3c8a29e5e","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        raise NotImplementedError(\u0027EventTypes not implemented.\u0027)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def get_traits_by_event_type(self, event_type):"},{"line_number":226,"context_line":"        \"\"\"Return an iterable of model.Trait that correspond to traits"},{"line_number":227,"context_line":"        associated with the given event type."},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F3t0%3D","line":225,"in_reply_to":"AAAARH%2F%2F3ug%3D","updated":"2013-08-15 22:44:36.000000000","message":"Ok, the API patch is waiting on this one :). Maybe you can comment here? https://wiki.openstack.org/wiki/Ceilometer/blueprints/Ceilometer-specify-event-api \n\nCurrently thinking /v2/event_types/\u003cevent_type\u003e/traits will return the trait name and the data type. I\u0027ll rename these two (agreed, the current names suck).","commit_id":"2ae81b8136a0d9436cf2656c970e9f101d216f49"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"781427b6b5249001182639f4281e1b77240e3484","unresolved":false,"context_lines":[{"line_number":222,"context_line":"        raise NotImplementedError(\u0027EventTypes not implemented.\u0027)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"    @abc.abstractmethod"},{"line_number":225,"context_line":"    def get_traits_by_event_type(self, event_type):"},{"line_number":226,"context_line":"        \"\"\"Return an iterable of model.Trait that correspond to traits"},{"line_number":227,"context_line":"        associated with the given event type."},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F31o%3D","line":225,"in_reply_to":"AAAARH%2F%2F4Ks%3D","updated":"2013-08-15 22:08:37.000000000","message":"After some more consideration, I believe this query is wrong altogether. The /v2/event_types/\u003cevent_type\u003e/ call is supposed to return the available trait_names for an event type, the result of which is passed to /v2/event_types/\u003cevent_type\u003e/traits/\u003ctrait_name\u003e to retrieve all traits of the given name for the event type. I\u0027ll update my implementation here, but in that case I two methods are needed.","commit_id":"2ae81b8136a0d9436cf2656c970e9f101d216f49"}],"ceilometer/storage/impl_mongodb.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"10a07caaf30c4ccb5b800b2f98caec1d4eb78923","unresolved":false,"context_lines":[{"line_number":819,"context_line":"        \"\"\""},{"line_number":820,"context_line":"        raise NotImplementedError(\u0027Events not implemented.\u0027)"},{"line_number":821,"context_line":""},{"line_number":822,"context_line":"    @staticmethod"},{"line_number":823,"context_line":"    def get_event_types(self):"},{"line_number":824,"context_line":"        \"\"\"Return an iterable of string that correspond to"},{"line_number":825,"context_line":"        models.Event.event_name."}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAARn%2F%2F2BY%3D","line":822,"updated":"2013-08-21 08:53:18.000000000","message":"You can use staticmethod if you wish, but then don\u0027t use self in the prototype. :)","commit_id":"714a935ca7849f1c638ddb6ba5a74664c7b12d6f"}],"ceilometer/storage/impl_sqlalchemy.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"e2f4a189e1ba885d953e5c912ebd13e233bbcf45","unresolved":false,"context_lines":[{"line_number":772,"context_line":"                      EventType.desc \u003d\u003d event_type))"},{"line_number":773,"context_line":""},{"line_number":774,"context_line":"            # Convert data back to an api Trait Model"},{"line_number":775,"context_line":"            trait_models \u003d []"},{"line_number":776,"context_line":"            for trait in query.all():"},{"line_number":777,"context_line":"                trait_models.append(api_models.Trait(name\u003dtrait.name.key,"},{"line_number":778,"context_line":"                                                     dtype\u003dtrait.t_type,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F4J8%3D","line":775,"updated":"2013-08-15 20:48:22.000000000","message":"This method could return a generator expression instead of building the list in memory.","commit_id":"2ae81b8136a0d9436cf2656c970e9f101d216f49"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"e2f4a189e1ba885d953e5c912ebd13e233bbcf45","unresolved":false,"context_lines":[{"line_number":796,"context_line":"                .join(UniqueName, and_(UniqueName.id \u003d\u003d Trait.name_id,"},{"line_number":797,"context_line":"                                       UniqueName.key \u003d\u003d trait_name))"},{"line_number":798,"context_line":""},{"line_number":799,"context_line":"            trait_models \u003d []"},{"line_number":800,"context_line":"            for trait in query.all():"},{"line_number":801,"context_line":"                trait_models.append(api_models.Trait(name\u003dtrait.name.key,"},{"line_number":802,"context_line":"                                                     dtype\u003dtrait.t_type,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F4J4%3D","line":799,"updated":"2013-08-15 20:48:22.000000000","message":"Ditto on avoiding creating the list.","commit_id":"2ae81b8136a0d9436cf2656c970e9f101d216f49"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9da356fa4032df753e1bbcb5cef543b034a0515d","unresolved":false,"context_lines":[{"line_number":591,"context_line":"            session.query(Alarm).filter(Alarm.id \u003d\u003d alarm_id).delete()"},{"line_number":592,"context_line":"            session.flush()"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"    def _get_or_create_trait_type(self, trait_type, session\u003dNone):"},{"line_number":595,"context_line":"        \"\"\"Find if this trait already exists in the database, and"},{"line_number":596,"context_line":"        if it does not, create a new entry in the trait type table."},{"line_number":597,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARn%2F%2F%2FGQ%3D","line":594,"updated":"2013-08-19 09:24:32.000000000","message":"Not your fault but this is actually a @staticmethod","commit_id":"269530eb82380d0c0eed761c1bc2ed7b6744ba83"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9da356fa4032df753e1bbcb5cef543b034a0515d","unresolved":false,"context_lines":[{"line_number":757,"context_line":"        with session.begin():"},{"line_number":758,"context_line":"            # Query all UniqueNames for events."},{"line_number":759,"context_line":"            for event_type in session.query(EventType.desc).all():"},{"line_number":760,"context_line":"                yield event_type[0]"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"    def get_trait_types(self, event_type):"},{"line_number":763,"context_line":"        \"\"\"Return an iterable of TraitTypes."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARn%2F%2F%2FGE%3D","line":760,"updated":"2013-08-19 09:24:32.000000000","message":"I think it\u0027d be better to have a model here.","commit_id":"269530eb82380d0c0eed761c1bc2ed7b6744ba83"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"c02860b6543c7f3bf9930588d20a0c5396ff6d1e","unresolved":false,"context_lines":[{"line_number":757,"context_line":"        with session.begin():"},{"line_number":758,"context_line":"            # Query all UniqueNames for events."},{"line_number":759,"context_line":"            for event_type in session.query(EventType.desc).all():"},{"line_number":760,"context_line":"                yield event_type[0]"},{"line_number":761,"context_line":""},{"line_number":762,"context_line":"    def get_trait_types(self, event_type):"},{"line_number":763,"context_line":"        \"\"\"Return an iterable of TraitTypes."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARn%2F%2F%2BcE%3D","line":760,"in_reply_to":"AAAARn%2F%2F%2FGE%3D","updated":"2013-08-19 12:58:18.000000000","message":"Yes, I think you\u0027re right. If traittype gets a model, I suppose this should too.","commit_id":"269530eb82380d0c0eed761c1bc2ed7b6744ba83"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"254af7a8281d85b2a016bb56d17fc36287b220cc","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        event_models \u003d event_models_dict.values()"},{"line_number":751,"context_line":"        return sorted(event_models, key\u003doperator.attrgetter(\u0027generated\u0027))"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"    def get_event_types(self):"},{"line_number":754,"context_line":"        \"\"\"Return an iterable of string that correspond to"},{"line_number":755,"context_line":"        models.Event.event_type."},{"line_number":756,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAARn%2F%2F6yU%3D","line":753,"updated":"2013-08-20 08:45:51.000000000","message":"This and all methods below are actually staticmethod too.","commit_id":"8e3beab8c2137f0a770ae8c8d3fcfb5f0eb250c4"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"a7e605f7f02f441212a1302318b075514134f38d","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        event_models \u003d event_models_dict.values()"},{"line_number":751,"context_line":"        return sorted(event_models, key\u003doperator.attrgetter(\u0027generated\u0027))"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"    def get_event_types(self):"},{"line_number":754,"context_line":"        \"\"\"Return an iterable of string that correspond to"},{"line_number":755,"context_line":"        models.Event.event_type."},{"line_number":756,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAARn%2F%2F5x8%3D","line":753,"in_reply_to":"AAAARn%2F%2F5%2Fw%3D","updated":"2013-08-20 13:36:03.000000000","message":"Cool, thanks for the link. (although not sure in which universe a Calzone is a Pizza :p).","commit_id":"8e3beab8c2137f0a770ae8c8d3fcfb5f0eb250c4"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"a74071c1b4e2bf4705d0ab2fc16bb078aaeb1059","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        event_models \u003d event_models_dict.values()"},{"line_number":751,"context_line":"        return sorted(event_models, key\u003doperator.attrgetter(\u0027generated\u0027))"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"    def get_event_types(self):"},{"line_number":754,"context_line":"        \"\"\"Return an iterable of string that correspond to"},{"line_number":755,"context_line":"        models.Event.event_type."},{"line_number":756,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAARn%2F%2F5%2Fw%3D","line":753,"in_reply_to":"AAAARn%2F%2F6EU%3D","updated":"2013-08-20 11:59:21.000000000","message":"Abstract method does not influence the prototype actually.\n\nCheck:\nhttp://julien.danjou.info/blog/2013/guide-python-static-class-astract-methods","commit_id":"8e3beab8c2137f0a770ae8c8d3fcfb5f0eb250c4"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"12b32346b03c0ff29005b26e26e590e4e04a498f","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        event_models \u003d event_models_dict.values()"},{"line_number":751,"context_line":"        return sorted(event_models, key\u003doperator.attrgetter(\u0027generated\u0027))"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"    def get_event_types(self):"},{"line_number":754,"context_line":"        \"\"\"Return an iterable of string that correspond to"},{"line_number":755,"context_line":"        models.Event.event_type."},{"line_number":756,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAARn%2F%2F6EU%3D","line":753,"in_reply_to":"AAAARn%2F%2F6Ew%3D","updated":"2013-08-20 11:33:31.000000000","message":"Ah, perhaps they should be classmethods?","commit_id":"8e3beab8c2137f0a770ae8c8d3fcfb5f0eb250c4"},{"author":{"_account_id":5678,"name":"John Herndon","email":"john.herndon@hp.com","username":"john-herndon"},"change_message_id":"5b8801146d3187833a128898a43695da25bdd836","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        event_models \u003d event_models_dict.values()"},{"line_number":751,"context_line":"        return sorted(event_models, key\u003doperator.attrgetter(\u0027generated\u0027))"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"    def get_event_types(self):"},{"line_number":754,"context_line":"        \"\"\"Return an iterable of string that correspond to"},{"line_number":755,"context_line":"        models.Event.event_type."},{"line_number":756,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAARn%2F%2F6Ew%3D","line":753,"in_reply_to":"AAAARn%2F%2F6yU%3D","updated":"2013-08-20 11:32:02.000000000","message":"the problem though is that they are defined as abstract in storage/base.py, so the signature has to be \"def get_event_types(self)\". Or at least that was my assumption :)","commit_id":"8e3beab8c2137f0a770ae8c8d3fcfb5f0eb250c4"}],"ceilometer/storage/models.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"ef1e17673d1d9f03144bd0e865ee97ee82b2fae1","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                     FLOAT_TYPE: \"t_float\","},{"line_number":82,"context_line":"                     DATETIME_TYPE: \"t_datetime\"}"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def get_type(self):"},{"line_number":85,"context_line":"        return self.int_to_string.get(self.dtype, \"t_text\")"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def __init__(self, name, dtype, value):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAARH%2F%2F6BM%3D","line":84,"updated":"2013-08-15 13:13:42.000000000","message":"stylistic nit: move under the __init__ method.","commit_id":"fc20ab4ef7fdb775301cb442d2eb9cd14cff43e8"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"e2f4a189e1ba885d953e5c912ebd13e233bbcf45","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    FLOAT_TYPE \u003d 3"},{"line_number":78,"context_line":"    DATETIME_TYPE \u003d 4"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    int_to_string \u003d {INT_TYPE: \"t_int\","},{"line_number":81,"context_line":"                     FLOAT_TYPE: \"t_float\","},{"line_number":82,"context_line":"                     DATETIME_TYPE: \"t_datetime\"}"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F4JM%3D","line":80,"updated":"2013-08-15 20:48:22.000000000","message":"Why prefix the type names with \"t_\"?","commit_id":"2ae81b8136a0d9436cf2656c970e9f101d216f49"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"e2f4a189e1ba885d953e5c912ebd13e233bbcf45","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    def __init__(self, name, dtype, value):"},{"line_number":85,"context_line":"        Model.__init__(self, name\u003dname, dtype\u003ddtype, value\u003dvalue)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def get_type(self):"},{"line_number":88,"context_line":"        return self.int_to_string.get(self.dtype, \"t_text\")"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def __repr__(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAARH%2F%2F4JI%3D","line":87,"updated":"2013-08-15 20:48:22.000000000","message":"Where is this used?","commit_id":"2ae81b8136a0d9436cf2656c970e9f101d216f49"}],"run-tests.sh":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"10a07caaf30c4ccb5b800b2f98caec1d4eb78923","unresolved":false,"context_lines":[{"line_number":36,"context_line":"# + that gives us the log on screen"},{"line_number":37,"context_line":"cat ${MONGO_DATA}/out \u003e /dev/null \u0026"},{"line_number":38,"context_line":"export CEILOMETER_TEST_MONGODB_URL\u003d\"mongodb://localhost:29000/ceilometer\""},{"line_number":39,"context_line":"python setup.py testr --slowest --testr-args\u003d\"--concurrency\u003d5 $*\" $COVERAGE_ARG"}],"source_content_type":"text/x-sh","patch_set":8,"id":"AAAARn%2F%2F2BE%3D","line":39,"updated":"2013-08-21 08:53:18.000000000","message":"Spurious change?","commit_id":"714a935ca7849f1c638ddb6ba5a74664c7b12d6f"}],"tests/storage/base.py":[{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"ef1e17673d1d9f03144bd0e865ee97ee82b2fae1","unresolved":false,"context_lines":[{"line_number":1250,"context_line":"        self.assertEquals(4, len(traits))"},{"line_number":1251,"context_line":""},{"line_number":1252,"context_line":"        #format results in a way that makes them easier to"},{"line_number":1253,"context_line":"        #work with"},{"line_number":1254,"context_line":"        trait_dict \u003d {}"},{"line_number":1255,"context_line":"        for trait in traits:"},{"line_number":1256,"context_line":"            trait_dict[trait.name] \u003d trait.dtype"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAARH%2F%2F6BE%3D","line":1253,"updated":"2013-08-15 13:13:42.000000000","message":"# Format results in a way that makes them easier to work with.\n\n(white space, caps and punctuation)","commit_id":"fc20ab4ef7fdb775301cb442d2eb9cd14cff43e8"}]}
