)]}'
{"gnocchi/aggregates/__init__.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"7bcb8a299832851e87d66cbac7a7f1ccfedc4ed2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Authors: Ana Malagon  \u003catmalagon@gmail.com\u003e"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_8a869ed9","line":2,"updated":"2014-11-14 17:34:29.000000000","message":"Missing copyright line?","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"6ec2898c1fe1c97d52be53a0ea0d633bac2170ea","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Authors: Ana Malagon  \u003catmalagon@gmail.com\u003e"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_cd6600ed","line":2,"in_reply_to":"5a890539_8a869ed9","updated":"2014-11-14 18:57:02.000000000","message":"Done","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"7bcb8a299832851e87d66cbac7a7f1ccfedc4ed2","unresolved":false,"context_lines":[{"line_number":38,"context_line":"       :param entity_id: entity id"},{"line_number":39,"context_line":"       :param start: start timestamp"},{"line_number":40,"context_line":"       :param stop: stop timestamp"},{"line_number":41,"context_line":"       :param window: time window (implicit units of seconds) over which to do"},{"line_number":42,"context_line":"           aggregation."},{"line_number":43,"context_line":"       :param **param: optional parameters are resolution and center."},{"line_number":44,"context_line":"           resolution\u003d\u0027high\u0027 (default) means the custom aggregation is done"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_ca00a636","line":41,"updated":"2014-11-14 17:34:29.000000000","message":"Is window applicable to all custom aggregators?\n\nShould that be moved instead to the variadic params?","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"6ec2898c1fe1c97d52be53a0ea0d633bac2170ea","unresolved":false,"context_lines":[{"line_number":38,"context_line":"       :param entity_id: entity id"},{"line_number":39,"context_line":"       :param start: start timestamp"},{"line_number":40,"context_line":"       :param stop: stop timestamp"},{"line_number":41,"context_line":"       :param window: time window (implicit units of seconds) over which to do"},{"line_number":42,"context_line":"           aggregation."},{"line_number":43,"context_line":"       :param **param: optional parameters are resolution and center."},{"line_number":44,"context_line":"           resolution\u003d\u0027high\u0027 (default) means the custom aggregation is done"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_4d7bf08b","line":41,"in_reply_to":"5a890539_ca00a636","updated":"2014-11-14 18:57:02.000000000","message":"You\u0027re right - it\u0027s not applicable to holt-winters. Thanks, will change.","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"6d51826a6b8325d9d38683dc28cb7d2ec53d382f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"class CustomAggregator(object):"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @staticmethod"},{"line_number":39,"context_line":"    def check_window_valid(window):"},{"line_number":40,"context_line":"        \"\"\"Takes in the window parameter string, reformats as a float.\"\"\""},{"line_number":41,"context_line":"        if window is None:"},{"line_number":42,"context_line":"            msg \u003d \u0027Moving aggregate must have window specified.\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_00b44f33","line":39,"updated":"2014-11-14 18:16:54.000000000","message":"This is specific to moving averages, shouldn\u0027t be in the generic superclass, or?","commit_id":"14fb003128b857515b6344ced7adf8ca85d346c3"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"49220cacb6b08cdf634aebd777235326f2fdc44b","unresolved":false,"context_lines":[{"line_number":36,"context_line":"class CustomAggregator(object):"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @staticmethod"},{"line_number":39,"context_line":"    def check_window_valid(window):"},{"line_number":40,"context_line":"        \"\"\"Takes in the window parameter string, reformats as a float.\"\"\""},{"line_number":41,"context_line":"        if window is None:"},{"line_number":42,"context_line":"            msg \u003d \u0027Moving aggregate must have window specified.\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_43a2e1fd","line":39,"in_reply_to":"5a890539_00b44f33","updated":"2014-11-14 20:27:15.000000000","message":"you\u0027re absolutely right - I got carried away with re-organizing code...moving out.","commit_id":"14fb003128b857515b6344ced7adf8ca85d346c3"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f8b1a07242c68eca0fca1cd9dd846969ec65a3c4","unresolved":false,"context_lines":[{"line_number":34,"context_line":"class CustomAggregator(object):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @abc.abstractmethod"},{"line_number":37,"context_line":"    def compute(storage_obj, entity_id, start, stop, **param):"},{"line_number":38,"context_line":"        \"\"\"Returns custom aggregate in a dict of timestamp, value pairs."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"       :param storage_obj: storage object for retrieving the data"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_f29b7063","line":37,"updated":"2014-11-17 16:32:15.000000000","message":"Since this is abstract and not static, you need to put self as the first argument or…\n\nmy suggestion would be to remove abc usage and use @staticmethod, with the default being NotImplemented as you wrote.","commit_id":"cfba8c1e6555825c5ba55312666b8179d807c3c2"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"1605924f34aef874413bc458a6748bf5d4cd5355","unresolved":false,"context_lines":[{"line_number":34,"context_line":"class CustomAggregator(object):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @abc.abstractmethod"},{"line_number":37,"context_line":"    def compute(storage_obj, entity_id, start, stop, **param):"},{"line_number":38,"context_line":"        \"\"\"Returns custom aggregate in a dict of timestamp, value pairs."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"       :param storage_obj: storage object for retrieving the data"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_45c71796","line":37,"in_reply_to":"5a890539_f29b7063","updated":"2014-11-17 19:09:19.000000000","message":"That is a good suggestion, thanks, I will change it -","commit_id":"cfba8c1e6555825c5ba55312666b8179d807c3c2"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c334c7d81a44a589f5adc4f8da926ccccada7609","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        super(CustomAggFailure, self).__init__(msg)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":34,"context_line":"class CustomAggregator(object):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_b4b9667b","line":33,"updated":"2014-11-20 09:58:51.000000000","message":"You are not actually using ABC in any method, so you can remove it here also.","commit_id":"91f1ef486a4262b6d98d4fdc9e8febeb32ace865"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"3e7aee01ff0bec310f6197c72ffa2bb1ece30b50","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        super(CustomAggFailure, self).__init__(msg)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":34,"context_line":"class CustomAggregator(object):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_c6c288e8","line":33,"in_reply_to":"5a890539_b4b9667b","updated":"2014-11-25 12:23:36.000000000","message":"Ack - I made a mistake here. The way I implemented compute in \nhttps://review.openstack.org/#/c/135678/\nit now relies on other methods in the MovingAggregate class so I\u0027ll add self to the function and make this an abstractmethod.","commit_id":"91f1ef486a4262b6d98d4fdc9e8febeb32ace865"}],"gnocchi/aggregates/null.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"7bcb8a299832851e87d66cbac7a7f1ccfedc4ed2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright Â© 2014 Openstack Foundatin"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Authors: Ana Malagon \u003catmalagon@gmail.com\u003e"},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_8a0f7e87","line":3,"updated":"2014-11-14 17:34:29.000000000","message":"This line got munged ^^^\n\ns/Â©/©/\ns/Foundatin/Foundation/","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"6ec2898c1fe1c97d52be53a0ea0d633bac2170ea","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright Â© 2014 Openstack Foundatin"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Authors: Ana Malagon \u003catmalagon@gmail.com\u003e"},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_6dc8aca8","line":3,"in_reply_to":"5a890539_8a0f7e87","updated":"2014-11-14 18:57:02.000000000","message":"Done","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"7bcb8a299832851e87d66cbac7a7f1ccfedc4ed2","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class NullAggregate(aggregates.CustomAggregator):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @staticmethod"},{"line_number":24,"context_line":"    def compute(self, storage_obj, entity_id, start, stop, window, center,"},{"line_number":25,"context_line":"                resolution):"},{"line_number":26,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_eae2c29e","line":23,"updated":"2014-11-14 17:34:29.000000000","message":"staticmethod with a \u0027self\u0027 param?","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"6ec2898c1fe1c97d52be53a0ea0d633bac2170ea","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class NullAggregate(aggregates.CustomAggregator):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @staticmethod"},{"line_number":24,"context_line":"    def compute(self, storage_obj, entity_id, start, stop, window, center,"},{"line_number":25,"context_line":"                resolution):"},{"line_number":26,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_cd49a032","line":23,"in_reply_to":"5a890539_eae2c29e","updated":"2014-11-14 18:57:02.000000000","message":"Ack! Dunno why I had this here, taking out.","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"7bcb8a299832851e87d66cbac7a7f1ccfedc4ed2","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @staticmethod"},{"line_number":24,"context_line":"    def compute(self, storage_obj, entity_id, start, stop, window, center,"},{"line_number":25,"context_line":"                resolution):"},{"line_number":26,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_aa8a7abc","line":25,"updated":"2014-11-14 17:34:29.000000000","message":"s/window, center, resultion/**params/","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"6ec2898c1fe1c97d52be53a0ea0d633bac2170ea","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @staticmethod"},{"line_number":24,"context_line":"    def compute(self, storage_obj, entity_id, start, stop, window, center,"},{"line_number":25,"context_line":"                resolution):"},{"line_number":26,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_ed52dcdc","line":25,"in_reply_to":"5a890539_aa8a7abc","updated":"2014-11-14 18:57:02.000000000","message":"Done","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f8b1a07242c68eca0fca1cd9dd846969ec65a3c4","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class NullAggregate(aggregates.CustomAggregator):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def compute(self, storage_obj, entity_id, start, stop, **param):"},{"line_number":24,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_12fb9c79","line":23,"updated":"2014-11-17 16:32:15.000000000","message":"Here you could drop that entirely if you remove abc uage in __init__ as suggested.","commit_id":"cfba8c1e6555825c5ba55312666b8179d807c3c2"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"1605924f34aef874413bc458a6748bf5d4cd5355","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class NullAggregate(aggregates.CustomAggregator):"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def compute(self, storage_obj, entity_id, start, stop, **param):"},{"line_number":24,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_c50867dc","line":23,"in_reply_to":"5a890539_12fb9c79","updated":"2014-11-17 19:09:19.000000000","message":"Done","commit_id":"cfba8c1e6555825c5ba55312666b8179d807c3c2"}],"gnocchi/rest/__init__.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"7bcb8a299832851e87d66cbac7a7f1ccfedc4ed2","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                     or %(custom)s\u0027\u0027\u0027"},{"line_number":251,"context_line":"            pecan.abort(400, msg % dict(agg\u003daggregation,"},{"line_number":252,"context_line":"                                        std\u003dstr(storage.AGGREGATION_TYPES),"},{"line_number":253,"context_line":"                                        custom\u003dstr(self.custom_agg.keys())))"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        if start is not None:"},{"line_number":256,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_6a6b32f1","line":253,"updated":"2014-11-14 17:34:29.000000000","message":"Will this error message always include \u0027null\u0027?\n\nIn which case, should we remove it for the keys list?","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"6ec2898c1fe1c97d52be53a0ea0d633bac2170ea","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                     or %(custom)s\u0027\u0027\u0027"},{"line_number":251,"context_line":"            pecan.abort(400, msg % dict(agg\u003daggregation,"},{"line_number":252,"context_line":"                                        std\u003dstr(storage.AGGREGATION_TYPES),"},{"line_number":253,"context_line":"                                        custom\u003dstr(self.custom_agg.keys())))"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        if start is not None:"},{"line_number":256,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_8d5b18f5","line":253,"in_reply_to":"5a890539_6a6b32f1","updated":"2014-11-14 18:57:02.000000000","message":"Good point - will fix.","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"6d51826a6b8325d9d38683dc28cb7d2ec53d382f","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                                         invoke_on_load\u003dTrue)"},{"line_number":236,"context_line":"        self.custom_agg \u003d dict((x.name, x.obj) for x in mgr)"},{"line_number":237,"context_line":"        if \u0027null\u0027 in self.custom_agg:"},{"line_number":238,"context_line":"            del self.custom_agg[\u0027null\u0027]"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    Measures \u003d voluptuous.Schema([{"},{"line_number":241,"context_line":"        voluptuous.Required(\"timestamp\"):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_40a2d7fd","line":238,"updated":"2014-11-14 18:16:54.000000000","message":"Neater as:\n\n  self.custom_agg \u003d dict((x.name, x.obj) for x in mgr if x.name !\u003d \u0027null\u0027)","commit_id":"14fb003128b857515b6344ced7adf8ca85d346c3"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"49220cacb6b08cdf634aebd777235326f2fdc44b","unresolved":false,"context_lines":[{"line_number":235,"context_line":"                                         invoke_on_load\u003dTrue)"},{"line_number":236,"context_line":"        self.custom_agg \u003d dict((x.name, x.obj) for x in mgr)"},{"line_number":237,"context_line":"        if \u0027null\u0027 in self.custom_agg:"},{"line_number":238,"context_line":"            del self.custom_agg[\u0027null\u0027]"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    Measures \u003d voluptuous.Schema([{"},{"line_number":241,"context_line":"        voluptuous.Required(\"timestamp\"):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a890539_636c3dd1","line":238,"in_reply_to":"5a890539_40a2d7fd","updated":"2014-11-14 20:27:15.000000000","message":"Done","commit_id":"14fb003128b857515b6344ced7adf8ca85d346c3"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f8b1a07242c68eca0fca1cd9dd846969ec65a3c4","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        mgr \u003d extension.ExtensionManager(namespace\u003d\u0027gnocchi.aggregates\u0027,"},{"line_number":235,"context_line":"                                         invoke_on_load\u003dTrue)"},{"line_number":236,"context_line":"        self.custom_agg \u003d dict((x.name, x.obj) for x in mgr"},{"line_number":237,"context_line":"                               if x.name !\u003d \u0027null\u0027)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    Measures \u003d voluptuous.Schema([{"},{"line_number":240,"context_line":"        voluptuous.Required(\"timestamp\"):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_b231e85b","line":237,"updated":"2014-11-17 16:32:15.000000000","message":"I\u0027d prefer not to have that hardcoded actually. If you don\u0027t use it, just remove it.","commit_id":"cfba8c1e6555825c5ba55312666b8179d807c3c2"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"1605924f34aef874413bc458a6748bf5d4cd5355","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        mgr \u003d extension.ExtensionManager(namespace\u003d\u0027gnocchi.aggregates\u0027,"},{"line_number":235,"context_line":"                                         invoke_on_load\u003dTrue)"},{"line_number":236,"context_line":"        self.custom_agg \u003d dict((x.name, x.obj) for x in mgr"},{"line_number":237,"context_line":"                               if x.name !\u003d \u0027null\u0027)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    Measures \u003d voluptuous.Schema([{"},{"line_number":240,"context_line":"        voluptuous.Required(\"timestamp\"):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_e5a723bb","line":237,"in_reply_to":"5a890539_724860b3","updated":"2014-11-17 19:09:19.000000000","message":"but if I keep \u0027null\u0027 in the dict, it would appear in the error message (L282) as a possible custom aggregation method...wdyt?","commit_id":"cfba8c1e6555825c5ba55312666b8179d807c3c2"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"9c361f99b89bc9b010f7fdd77e75dc1153ba8945","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        mgr \u003d extension.ExtensionManager(namespace\u003d\u0027gnocchi.aggregates\u0027,"},{"line_number":235,"context_line":"                                         invoke_on_load\u003dTrue)"},{"line_number":236,"context_line":"        self.custom_agg \u003d dict((x.name, x.obj) for x in mgr"},{"line_number":237,"context_line":"                               if x.name !\u003d \u0027null\u0027)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    Measures \u003d voluptuous.Schema([{"},{"line_number":240,"context_line":"        voluptuous.Required(\"timestamp\"):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_724860b3","line":237,"in_reply_to":"5a890539_b231e85b","updated":"2014-11-17 16:32:51.000000000","message":"My comment makes no sense. I\u0027d prefer to have it not removed by default; even if it returns nothing, it\u0027s not a big deal.","commit_id":"cfba8c1e6555825c5ba55312666b8179d807c3c2"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"3b763dee224e7ce88d40614f3952df32622b1407","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        mgr \u003d extension.ExtensionManager(namespace\u003d\u0027gnocchi.aggregates\u0027,"},{"line_number":235,"context_line":"                                         invoke_on_load\u003dTrue)"},{"line_number":236,"context_line":"        self.custom_agg \u003d dict((x.name, x.obj) for x in mgr"},{"line_number":237,"context_line":"                               if x.name !\u003d \u0027null\u0027)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    Measures \u003d voluptuous.Schema([{"},{"line_number":240,"context_line":"        voluptuous.Required(\"timestamp\"):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_d7d45849","line":237,"in_reply_to":"5a890539_bba1ae47","updated":"2014-11-19 13:12:30.000000000","message":"fair point - I did want to keep the extension mechanism in a separate patch from the actual aggregate functions, but you\u0027re right, null isn\u0027t really doing anything useful; I think I got too caught up in mimicking the structure of the storage/indexer layers. I\u0027ll upload the next patch with an operation implemented and delete null from this one -","commit_id":"cfba8c1e6555825c5ba55312666b8179d807c3c2"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"78cfd87c5bbe05ffe5fa3e361edb6370fe66f7d7","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        mgr \u003d extension.ExtensionManager(namespace\u003d\u0027gnocchi.aggregates\u0027,"},{"line_number":235,"context_line":"                                         invoke_on_load\u003dTrue)"},{"line_number":236,"context_line":"        self.custom_agg \u003d dict((x.name, x.obj) for x in mgr"},{"line_number":237,"context_line":"                               if x.name !\u003d \u0027null\u0027)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    Measures \u003d voluptuous.Schema([{"},{"line_number":240,"context_line":"        voluptuous.Required(\"timestamp\"):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a890539_bba1ae47","line":237,"in_reply_to":"5a890539_e5a723bb","updated":"2014-11-18 08:13:25.000000000","message":"I don\u0027t mind. It can be useful as a debugging feature anyway.\n\nThough maybe we could change that null driver to something very simple and more useful like one or several basic operations (+, -, x, etc), WDYT?","commit_id":"cfba8c1e6555825c5ba55312666b8179d807c3c2"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"c334c7d81a44a589f5adc4f8da926ccccada7609","unresolved":false,"context_lines":[{"line_number":243,"context_line":"    def __init__(self, entity_id):"},{"line_number":244,"context_line":"        self.entity_id \u003d entity_id"},{"line_number":245,"context_line":"        mgr \u003d extension.ExtensionManager(namespace\u003d\u0027gnocchi.aggregates\u0027,"},{"line_number":246,"context_line":"                                         invoke_on_load\u003dTrue)"},{"line_number":247,"context_line":"        self.custom_agg \u003d dict((x.name, x.obj) for x in mgr)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    Measures \u003d voluptuous.Schema([{"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a890539_3453b63a","line":246,"updated":"2014-11-20 09:58:51.000000000","message":"I saw you completely removed the unit tests. If you mock this call in the unit tests, you can still test all your code here.\n\nJust mock the ExtensionManager so it returns a fake custom aggregator and you\u0027ll be able to do some tests.\n\nThat, or just provide a simple plugin so you can still test.","commit_id":"91f1ef486a4262b6d98d4fdc9e8febeb32ace865"}],"gnocchi/tests/test_aggregates.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"7bcb8a299832851e87d66cbac7a7f1ccfedc4ed2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright Â© 2014 Openstack Foundatin"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Authors: Ana Malagon \u003catmalagon@gmail.com\u003e"},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_2a620a3e","line":3,"updated":"2014-11-14 17:34:29.000000000","message":"s/Â©/©/\n\ns/Foundatin/Foundation/","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"6ec2898c1fe1c97d52be53a0ea0d633bac2170ea","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright Â© 2014 Openstack Foundatin"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"# Authors: Ana Malagon \u003catmalagon@gmail.com\u003e"},{"line_number":6,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_ed69fc8c","line":3,"in_reply_to":"5a890539_2a620a3e","updated":"2014-11-14 18:57:02.000000000","message":"bah!","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"7bcb8a299832851e87d66cbac7a7f1ccfedc4ed2","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from gnocchi.tests import base as tests_base"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"load_tests \u003d testscenarios.load_tests_apply_scenarios"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TestAggregates(tests_base.TestCase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_8ad4debd","line":25,"updated":"2014-11-14 17:34:29.000000000","message":"Do we need this line?","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"},{"author":{"_account_id":10683,"name":"Ana Malagon","email":"atmalagon@gmail.com","username":"atmalagon"},"change_message_id":"6ec2898c1fe1c97d52be53a0ea0d633bac2170ea","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from gnocchi.tests import base as tests_base"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"load_tests \u003d testscenarios.load_tests_apply_scenarios"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class TestAggregates(tests_base.TestCase):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a890539_0d6728b8","line":25,"in_reply_to":"5a890539_8ad4debd","updated":"2014-11-14 18:57:02.000000000","message":"if I take it out I get:\n\nFAIL: tests.test_aggregates.TestAggregates.test_extension_dict\ntags: worker-1\n----------------------------------------------------------------------\nTraceback (most recent call last):\n  File \"gnocchi/tests/base.py\", line 51, in skip_if_not_implemented\n    return func(*args, **kwargs)\n  File \"gnocchi/tests/base.py\", line 162, in setUp\n    self.conf.set_override(\u0027driver\u0027, self.indexer_engine, \u0027indexer\u0027)\nAttributeError: \u0027TestAggregates\u0027 object has no attribute \u0027indexer_engine\u0027\n\ndon\u0027t understand it, but will keep line in for now","commit_id":"829136ec3b5f499cc0e94368899dcf468ce2e0ca"}]}
