)]}'
{"gnocchi/storage/__init__.py":[{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"e236a1432337de0943988734fd0b354f69d7d49a","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"class StorageDriver(object):"},{"line_number":81,"context_line":"    def __init__(self, conf):"},{"line_number":82,"context_line":"        self.aggregation_types \u003d list(AGGREGATION_TYPES)"},{"line_number":83,"context_line":"        self.coord \u003d None"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_90aa6fd0","line":81,"updated":"2014-08-01 13:25:28.000000000","message":"I moved some duplicated code in the init, maybe we can afford this two lines of duplicated code?","commit_id":"40e9d2416917db5012100f0d92c4578470b28259"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"300b46e7a652c54e11d3187f789bbe6afd6c6e4a","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"class StorageDriver(object):"},{"line_number":81,"context_line":"    def __init__(self, conf):"},{"line_number":82,"context_line":"        self.aggregation_types \u003d list(AGGREGATION_TYPES)"},{"line_number":83,"context_line":"        self.coord \u003d None"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_c696f148","line":81,"in_reply_to":"baada198_90aa6fd0","updated":"2014-08-01 14:22:35.000000000","message":"I am not really sure that all drivers will need coordinator, so I\u0027d prefer to see swift inheriting from file or vice-versa actually.","commit_id":"40e9d2416917db5012100f0d92c4578470b28259"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e2b808a19b690c7ec1fc520f00eafb6f657e8a7a","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"class StorageDriver(object):"},{"line_number":81,"context_line":"    def __init__(self, conf):"},{"line_number":82,"context_line":"        self.aggregation_types \u003d list(AGGREGATION_TYPES)"},{"line_number":83,"context_line":"        self.coord \u003d None"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_1e29b4f1","line":81,"in_reply_to":"baada198_9bd876f1","updated":"2014-08-12 15:56:37.000000000","message":"Mixing sounds good to me.","commit_id":"40e9d2416917db5012100f0d92c4578470b28259"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"b7e3b9df17e26480db6c700e03d6a86ec99274d6","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"class StorageDriver(object):"},{"line_number":81,"context_line":"    def __init__(self, conf):"},{"line_number":82,"context_line":"        self.aggregation_types \u003d list(AGGREGATION_TYPES)"},{"line_number":83,"context_line":"        self.coord \u003d None"},{"line_number":84,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_9bd876f1","line":81,"in_reply_to":"baada198_c696f148","updated":"2014-08-12 15:43:50.000000000","message":"Is inheriting swift from file and overriding every method relevant? Why not using a mixin to add the coordinator to backend needing it?","commit_id":"40e9d2416917db5012100f0d92c4578470b28259"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b5996cf1d8a955ea81aba7596b5ac46cab752633","unresolved":false,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"class CoordinatorMixin(object):"},{"line_number":84,"context_line":"    coord \u003d None"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def _init_coordinator(self, url):"},{"line_number":87,"context_line":"        self.aggregation_types \u003d list(AGGREGATION_TYPES)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_8b3b8a37","line":84,"updated":"2014-08-26 09:57:58.000000000","message":"Useless.","commit_id":"14e067bb8edf41cca78ae7f68a4676e58bb3a4a0"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b5996cf1d8a955ea81aba7596b5ac46cab752633","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"class StorageDriver(object):"},{"line_number":100,"context_line":"    def __init__(self, conf):"},{"line_number":101,"context_line":"        self.aggregation_types \u003d list(AGGREGATION_TYPES)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @staticmethod"},{"line_number":104,"context_line":"    def create_entity(entity, archive):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_cbee62b4","line":101,"updated":"2014-08-26 09:57:58.000000000","message":"Remove that, assignation is done in _init_coordinator.","commit_id":"14e067bb8edf41cca78ae7f68a4676e58bb3a4a0"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"7321175d91248deef217eb8fbe4809cd8f80755a","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"class StorageDriver(object):"},{"line_number":100,"context_line":"    def __init__(self, conf):"},{"line_number":101,"context_line":"        self.aggregation_types \u003d list(AGGREGATION_TYPES)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @staticmethod"},{"line_number":104,"context_line":"    def create_entity(entity, archive):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_c64ad9ab","line":101,"in_reply_to":"1abeadc6_0bc13ae4","updated":"2014-08-26 10:24:41.000000000","message":"For now nothing shows that other drivers will need to know about the different aggregation types :)","commit_id":"14e067bb8edf41cca78ae7f68a4676e58bb3a4a0"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"59e51639b02f316d984ead3946ea8482e454a90f","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"class StorageDriver(object):"},{"line_number":100,"context_line":"    def __init__(self, conf):"},{"line_number":101,"context_line":"        self.aggregation_types \u003d list(AGGREGATION_TYPES)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    @staticmethod"},{"line_number":104,"context_line":"    def create_entity(entity, archive):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_0bc13ae4","line":101,"in_reply_to":"1abeadc6_cbee62b4","updated":"2014-08-26 10:04:16.000000000","message":"What about drivers that may not use coordinator ? This will be undefined.","commit_id":"14e067bb8edf41cca78ae7f68a4676e58bb3a4a0"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"8f74bf2c67f7c95f7fe81c707982a60bcc7195de","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class StorageDriver(object):"},{"line_number":98,"context_line":"    def __init__(self, conf):"},{"line_number":99,"context_line":"        pass"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":13,"id":"1abeadc6_24b9c02e","line":98,"updated":"2014-08-26 13:04:26.000000000","message":"You changed this without any good reason, please revert. :)","commit_id":"421218f24caa9165f4446cf42701cbc13cfaab40"}],"gnocchi/storage/file.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e95f812a9e33e33ac8543e2dbba045bfc8bd6995","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    cfg.StrOpt(\u0027file_basepath\u0027,"},{"line_number":33,"context_line":"               default\u003d\u0027/var/lib/gnocchi/\u0027,"},{"line_number":34,"context_line":"               help\u003d\u0027Path used to store gnocchi data files.\u0027),"},{"line_number":35,"context_line":"    cfg.BoolOpt(\u0027use_coordination_driver\u0027,"},{"line_number":36,"context_line":"                help\u003d\u0027Use coordination driver in case of a shared filesystem.\u0027,"},{"line_number":37,"context_line":"                default\u003dFalse),"},{"line_number":38,"context_line":"    cfg.StrOpt(\u0027file_coordination_driver\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_aab071fe","line":35,"updated":"2014-07-29 11:52:36.000000000","message":"If you keep that isolated to the file driver, you should prefix it.\n\nHowever, since you can anyway have several HTTP workers manipulating the file, you definitely need a locking mechanism in add_measure. It might not be distributed and it could be a simple file locking mechanism, but you need one.\n\nI\u0027m gonna take a look as if we can add that in tooz directly rather than having another lib to use.","commit_id":"627411e10af29e1ba7a685d0ac1f22513954fa68"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e95f812a9e33e33ac8543e2dbba045bfc8bd6995","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        path \u003d os.path.join(self.basepath, entity)"},{"line_number":64,"context_line":"        if os.path.exists(path):"},{"line_number":65,"context_line":"            raise storage.EntityAlreadyExists(entity)"},{"line_number":66,"context_line":"        os.mkdir(path, 0o750)"},{"line_number":67,"context_line":"        for aggregation in self.aggregation_types:"},{"line_number":68,"context_line":"            # TODO(jd) Having the TimeSerieArchive.timeserie duplicated in"},{"line_number":69,"context_line":"            # each archive isn\u0027t the most efficient way of doing things. We"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_4a98b575","line":66,"updated":"2014-07-29 11:52:36.000000000","message":"This is a potential race condition. You should try to mkdir() and raise EntityAlreadyExists if mkdir() fails because it path already exists.","commit_id":"627411e10af29e1ba7a685d0ac1f22513954fa68"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e95f812a9e33e33ac8543e2dbba045bfc8bd6995","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        path \u003d os.path.join(self.basepath, entity)"},{"line_number":82,"context_line":"        if not os.path.exists(path):"},{"line_number":83,"context_line":"            raise storage.EntityDoesNotExist(entity)"},{"line_number":84,"context_line":"        shutil.rmtree(path)"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    def add_measures(self, entity, measures):"},{"line_number":87,"context_line":"        # We are going to iterate multiple time over measures, so if it\u0027s a"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_8a89ed27","line":84,"updated":"2014-07-29 11:52:36.000000000","message":"Same as above I\u0027d say.","commit_id":"627411e10af29e1ba7a685d0ac1f22513954fa68"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e95f812a9e33e33ac8543e2dbba045bfc8bd6995","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            if self.coord:"},{"line_number":108,"context_line":"                with self.coord.get_lock(b\"gnocchi-\" + entity.encode(\u0027ascii\u0027)"},{"line_number":109,"context_line":"                                         + b\"-\" + aggregation.encode(\u0027ascii\u0027)):"},{"line_number":110,"context_line":"                    aggregate()"},{"line_number":111,"context_line":"            else:"},{"line_number":112,"context_line":"                aggregate()"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_cab125e2","line":110,"updated":"2014-07-29 11:52:36.000000000","message":"Rather than defining a function/closure, you could juse use the acquire() and release() methods of the lock.","commit_id":"627411e10af29e1ba7a685d0ac1f22513954fa68"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"e95f812a9e33e33ac8543e2dbba045bfc8bd6995","unresolved":false,"context_lines":[{"line_number":117,"context_line":"        if not os.path.exists(path):"},{"line_number":118,"context_line":"            raise storage.EntityDoesNotExist(entity)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        contents \u003d open(path).read()"},{"line_number":121,"context_line":"        tsc \u003d carbonara.TimeSerieArchive.unserialize(contents)"},{"line_number":122,"context_line":"        return dict(tsc.fetch(from_timestamp, to_timestamp))"}],"source_content_type":"text/x-python","patch_set":1,"id":"baada198_6a00196a","line":120,"updated":"2014-07-29 11:52:36.000000000","message":"You should just try to open() and raises EntityDoesNotExist if the open() fails because the file does not exist.","commit_id":"627411e10af29e1ba7a685d0ac1f22513954fa68"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"31fca3dc38929663151be72d9c361a4139c340dd","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        path \u003d os.path.join(self.basepath, entity)"},{"line_number":64,"context_line":"        try:"},{"line_number":65,"context_line":"            os.mkdir(path, 0o750)"},{"line_number":66,"context_line":"        except OSError:"},{"line_number":67,"context_line":"            raise storage.EntityAlreadyExists(entity)"},{"line_number":68,"context_line":"        for aggregation in self.aggregation_types:"},{"line_number":69,"context_line":"            # TODO(jd) Having the TimeSerieArchive.timeserie duplicated in"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_1357d428","line":66,"updated":"2014-07-29 13:37:39.000000000","message":"You need to check the type of OSError you have before raising that error.","commit_id":"30558e2bda4b78af7d6845d0b942c02daf139ab6"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"31fca3dc38929663151be72d9c361a4139c340dd","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                 for second, size in archive],"},{"line_number":75,"context_line":"                aggregation_method\u003daggregation)"},{"line_number":76,"context_line":"            aggregation_path \u003d os.path.join(path, aggregation)"},{"line_number":77,"context_line":"            aggregation_file \u003d open(aggregation_path, \u0027wb\u0027)"},{"line_number":78,"context_line":"            aggregation_file.write(tsc.serialize())"},{"line_number":79,"context_line":"            aggregation_file.close()"},{"line_number":80,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f307c01c","line":77,"updated":"2014-07-29 13:37:39.000000000","message":"use with open():","commit_id":"30558e2bda4b78af7d6845d0b942c02daf139ab6"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"31fca3dc38929663151be72d9c361a4139c340dd","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        path \u003d os.path.join(self.basepath, entity)"},{"line_number":83,"context_line":"        try:"},{"line_number":84,"context_line":"            shutil.rmtree(path)"},{"line_number":85,"context_line":"        except Exception:"},{"line_number":86,"context_line":"            raise storage.EntityDoesNotExist(entity)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    def add_measures(self, entity, measures):"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_9332040e","line":85,"updated":"2014-07-29 13:37:39.000000000","message":"Same here.","commit_id":"30558e2bda4b78af7d6845d0b942c02daf139ab6"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"31fca3dc38929663151be72d9c361a4139c340dd","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                lock.acquire()"},{"line_number":99,"context_line":"            try:"},{"line_number":100,"context_line":"                aggregation_path \u003d os.path.join(entity_path, aggregation)"},{"line_number":101,"context_line":"                aggregation_file \u003d open(aggregation_path, \u0027rb\u0027)"},{"line_number":102,"context_line":"                contents \u003d aggregation_file.read()"},{"line_number":103,"context_line":"                aggregation_file.close()"},{"line_number":104,"context_line":"            except IOError:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_9319248a","line":101,"updated":"2014-07-29 13:37:39.000000000","message":"rather use with open():","commit_id":"30558e2bda4b78af7d6845d0b942c02daf139ab6"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"31fca3dc38929663151be72d9c361a4139c340dd","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            else:"},{"line_number":107,"context_line":"                tsc \u003d carbonara.TimeSerieArchive.unserialize(contents)"},{"line_number":108,"context_line":"                tsc.set_values([(m.timestamp, m.value) for m in measures])"},{"line_number":109,"context_line":"                aggregation_file \u003d open(aggregation_path, \u0027wb\u0027)"},{"line_number":110,"context_line":"                aggregation_file.write(tsc.serialize())"},{"line_number":111,"context_line":"                aggregation_file.close()"},{"line_number":112,"context_line":"            finally:"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b30e283c","line":109,"updated":"2014-07-29 13:37:39.000000000","message":"use with open():","commit_id":"30558e2bda4b78af7d6845d0b942c02daf139ab6"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"31fca3dc38929663151be72d9c361a4139c340dd","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        try:"},{"line_number":121,"context_line":"            contents \u003d open(path).read()"},{"line_number":122,"context_line":"        except IOError:"},{"line_number":123,"context_line":"            raise storage.EntityDoesNotExist(entity)"},{"line_number":124,"context_line":"        tsc \u003d carbonara.TimeSerieArchive.unserialize(contents)"},{"line_number":125,"context_line":"        return dict(tsc.fetch(from_timestamp, to_timestamp))"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_b33708fe","line":122,"updated":"2014-07-29 13:37:39.000000000","message":"Same here. Also don\u0027t catch .read() at the same time.","commit_id":"30558e2bda4b78af7d6845d0b942c02daf139ab6"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"33a163ac7c5302a65501c5d41aa453b10bd42c5c","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                default\u003dFalse),"},{"line_number":40,"context_line":"    cfg.StrOpt(\u0027file_coordination_driver\u0027,"},{"line_number":41,"context_line":"               help\u003d\u0027File based storage coordination driver\u0027,"},{"line_number":42,"context_line":"               default\u003d\u0027memcached\u0027),"},{"line_number":43,"context_line":"]"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"cfg.CONF.register_opts(OPTIONS, group\u003d\"storage\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_e69fd24f","line":42,"updated":"2014-07-30 12:41:08.000000000","message":"I got an idea: you could remove a configuration option and simplify it be setting this to None by default. And if it\u0027s None, just consider you don\u0027t need it and use lockutils.","commit_id":"2d0c780e3a5695c12f0347b835029e4d35bebf08"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"33a163ac7c5302a65501c5d41aa453b10bd42c5c","unresolved":false,"context_lines":[{"line_number":99,"context_line":"            lock_name \u003d (b\"gnocchi-\" + entity.encode(\u0027ascii\u0027)"},{"line_number":100,"context_line":"                         + b\"-\" + aggregation.encode(\u0027ascii\u0027))"},{"line_number":101,"context_line":"            if self.coord:"},{"line_number":102,"context_line":"                lock \u003d self.coord.get_lock(lock_name)"},{"line_number":103,"context_line":"            else:"},{"line_number":104,"context_line":"                lock \u003d lockutils.lock(lock_name)"},{"line_number":105,"context_line":"            with lock:"}],"source_content_type":"text/x-python","patch_set":7,"id":"baada198_86a1b6aa","line":102,"updated":"2014-07-30 12:41:08.000000000","message":"I think you should init self.lock at __init__ time so you just have to acquire() and release() it here.","commit_id":"2d0c780e3a5695c12f0347b835029e4d35bebf08"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"d857de195ced703d0107ec47cdc21be90e01a7d8","unresolved":false,"context_lines":[{"line_number":57,"context_line":"            # Gnocchi with multiple processses, let\u0027s randomize what we iter"},{"line_number":58,"context_line":"            # over so there are less chances we fight for the same lock!"},{"line_number":59,"context_line":"            random.shuffle(self.aggregation_types)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    def create_entity(self, entity, archive):"},{"line_number":62,"context_line":"        path \u003d os.path.join(self.basepath, entity)"},{"line_number":63,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_a24114a8","line":60,"updated":"2014-07-31 14:53:02.000000000","message":"Can you promote the copy\u0027n\u0027pasted code from the swift driver to the super-class?\n\n(i.e. lines 51-59)","commit_id":"2149344638516890dd11f46954188d2f1eb9e6a8"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"b5996cf1d8a955ea81aba7596b5ac46cab752633","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"OPTIONS \u003d ["},{"line_number":30,"context_line":"    cfg.StrOpt(\u0027file_basepath\u0027,"},{"line_number":31,"context_line":"               default\u003d\u0027/var/lib/gnocchi/\u0027,"},{"line_number":32,"context_line":"               help\u003d\u0027Path used to store gnocchi data files.\u0027),"},{"line_number":33,"context_line":"]"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_eb115eb0","line":31,"updated":"2014-08-26 09:57:58.000000000","message":"/var/lib/gnocchi","commit_id":"14e067bb8edf41cca78ae7f68a4676e58bb3a4a0"}],"gnocchi/tests/__init__.py":[{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"31fca3dc38929663151be72d9c361a4139c340dd","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                                 \u0027gnocchi.storage.file\u0027,"},{"line_number":142,"context_line":"                                 group\u003d\u0027storage\u0027)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"            self.tempdir \u003d tempfile.mkdtemp(\u0027-gnocchi-tests\u0027)"},{"line_number":145,"context_line":"            self.conf.set_override(\u0027file_basepath\u0027,"},{"line_number":146,"context_line":"                                   self.tempdir,"},{"line_number":147,"context_line":"                                   \u0027storage\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_5efb1315","line":144,"updated":"2014-07-29 13:37:39.000000000","message":"I think there\u0027s a fixture in oslo for that kind of thing.","commit_id":"30558e2bda4b78af7d6845d0b942c02daf139ab6"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"6ecb2c90f081b410be582bd2f8cedb0ee0e4f019","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                                 \u0027gnocchi.storage.file\u0027,"},{"line_number":142,"context_line":"                                 group\u003d\u0027storage\u0027)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"            self.tempdir \u003d tempfile.mkdtemp(\u0027-gnocchi-tests\u0027)"},{"line_number":145,"context_line":"            self.conf.set_override(\u0027file_basepath\u0027,"},{"line_number":146,"context_line":"                                   self.tempdir,"},{"line_number":147,"context_line":"                                   \u0027storage\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_595c0d81","line":144,"in_reply_to":"baada198_5ecf938b","updated":"2014-07-29 14:16:35.000000000","message":"Actually it\u0027s in fixture itself:\n\nfixtures.TempDir","commit_id":"30558e2bda4b78af7d6845d0b942c02daf139ab6"},{"author":{"_account_id":7042,"name":"Stéphane Albert","email":"sheeprine@nullplace.com","username":"sheeprine"},"change_message_id":"7b611c17800de8164d48fb511d3cf40aca948d5d","unresolved":false,"context_lines":[{"line_number":141,"context_line":"                                 \u0027gnocchi.storage.file\u0027,"},{"line_number":142,"context_line":"                                 group\u003d\u0027storage\u0027)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"            self.tempdir \u003d tempfile.mkdtemp(\u0027-gnocchi-tests\u0027)"},{"line_number":145,"context_line":"            self.conf.set_override(\u0027file_basepath\u0027,"},{"line_number":146,"context_line":"                                   self.tempdir,"},{"line_number":147,"context_line":"                                   \u0027storage\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_5ecf938b","line":144,"in_reply_to":"baada198_5efb1315","updated":"2014-07-29 14:15:35.000000000","message":"The only fixture I see is to simulate files and their content. But nothing to generate a clean environment to do our tests. Maybe I\u0027m not searching in the good repositories.","commit_id":"30558e2bda4b78af7d6845d0b942c02daf139ab6"}]}
