def __init__(self, file_name, record_name): self.file_name = file_name self.record_name = record_name self.record = [] self.db_recorder = AllDBRecorder(self.on_op) self.cache_recorder = AllCacheRecorder(self.on_op)
def __init__(self, file_name, record_name, capture_traceback): self.file_name = file_name self.record_name = record_name self.record = [] self.db_recorder = AllDBRecorder(self.on_op) self.cache_recorder = AllCacheRecorder(self.on_op) self.capture_traceback = capture_traceback
class PerformanceRecorder: def __init__(self, file_name, record_name, capture_traceback): self.file_name = file_name self.record_name = record_name self.record = [] self.db_recorder = AllDBRecorder(self.on_op) self.cache_recorder = AllCacheRecorder(self.on_op) self.capture_traceback = capture_traceback def __enter__(self): self.db_recorder.__enter__() self.cache_recorder.__enter__() self.load_recordings() def __exit__(self, exc_type, exc_value, exc_traceback): self.cache_recorder.__exit__(exc_type, exc_value, exc_traceback) self.db_recorder.__exit__(exc_type, exc_value, exc_traceback) if exc_type is None: self.save_or_assert() def on_op(self, op): record = {op.name: op.query} if self.capture_traceback and self.capture_traceback(op): record["traceback"] = traceback.StackSummary.from_list( op.traceback).format() self.record.append(record) def load_recordings(self): self.records_file = KVFile(self.file_name) def save_or_assert(self): orig_record = self.records_file.get(self.record_name, None) if perf_rec_settings.MODE == "none": assert ( orig_record is not None ), "Original performance record does not exist for {}".format( self.record_name) if orig_record is not None: msg = "Performance record did not match for {}".format( self.record_name) if not pytest_plugin.in_pytest: msg += "\n{}".format(record_diff(orig_record, self.record)) assert self.record == orig_record, msg self.records_file.set_and_save(self.record_name, self.record) if perf_rec_settings.MODE == "all": assert ( orig_record is not None ), "Original performance record did not exist for {}".format( self.record_name)
def test_records_all(self): callback = mock.Mock() with AllDBRecorder(callback): run_query('replica', 'SELECT 1') run_query('default', 'SELECT 2') run_query('second', 'SELECT 3') assert callback.mock_calls == [ mock.call(DBOp('replica', 'SELECT #')), mock.call(DBOp('default', 'SELECT #')), mock.call(DBOp('second', 'SELECT #')), ]
def test_records_all(self): callback = mock.Mock() with AllDBRecorder(callback): run_query("replica", "SELECT 1") run_query("default", "SELECT 2") run_query("second", "SELECT 3") assert callback.mock_calls == [ mock.call(DBOp("replica", "SELECT #")), mock.call(DBOp("default", "SELECT #")), mock.call(DBOp("second", "SELECT #")), ]
class PerformanceRecorder: def __init__(self, file_name, record_name): self.file_name = file_name self.record_name = record_name self.record = [] self.db_recorder = AllDBRecorder(self.on_db_op) self.cache_recorder = AllCacheRecorder(self.on_cache_op) def __enter__(self): self.db_recorder.__enter__() self.cache_recorder.__enter__() self.load_recordings() def __exit__(self, exc_type, exc_value, exc_traceback): self.cache_recorder.__exit__(exc_type, exc_value, exc_traceback) self.db_recorder.__exit__(exc_type, exc_value, exc_traceback) if exc_type is None: self.save_or_assert() def on_db_op(self, db_op): name_parts = ["db"] if db_op.alias != DEFAULT_DB_ALIAS: name_parts.append(db_op.alias) name = "|".join(name_parts) self.record.append({name: db_op.sql}) def on_cache_op(self, cache_op): name_parts = ["cache"] if cache_op.alias != DEFAULT_CACHE_ALIAS: name_parts.append(cache_op.alias) name_parts.append(cache_op.operation) name = "|".join(name_parts) self.record.append({name: cache_op.key_or_keys}) def load_recordings(self): self.records_file = KVFile(self.file_name) def save_or_assert(self): orig_record = self.records_file.get(self.record_name, None) if perf_rec_settings.MODE == "none": assert ( orig_record is not None ), "Original performance record does not exist for {}".format( self.record_name) if orig_record is not None: msg = "Performance record did not match for {}".format( self.record_name) if not pytest_plugin.in_pytest: msg += "\n{}".format(record_diff(orig_record, self.record)) assert self.record == orig_record, msg self.records_file.set_and_save(self.record_name, self.record) if perf_rec_settings.MODE == "all": assert ( orig_record is not None ), "Original performance record did not exist for {}".format( self.record_name)