SYMBOL INDEX (1925 symbols across 148 files) FILE: buzz/action.py class Action (line 6) | class Action(QAction): method setShortcut (line 7) | def setShortcut( method get_tooltip (line 15) | def get_tooltip(cls, action: QAction): FILE: buzz/assets.py function get_path (line 11) | def get_path(path: str): FILE: buzz/buzz.py function main (line 53) | def main(): FILE: buzz/cache.py class TasksCache (line 12) | class TasksCache: method __init__ (line 13) | def __init__(self, cache_dir=user_cache_dir("Buzz")): method save (line 19) | def save(self, tasks: List[FileTranscriptionTask]): method load (line 22) | def load(self) -> List[FileTranscriptionTask]: method load_json_tasks (line 39) | def load_json_tasks(self) -> List[FileTranscriptionTask]: method save_json_tasks (line 61) | def save_json_tasks(self, tasks: List[FileTranscriptionTask]): method get_task_path (line 72) | def get_task_path(self, task_id: int): method clear (line 77) | def clear(self): FILE: buzz/cli.py class CommandLineError (line 26) | class CommandLineError(Exception): method __init__ (line 27) | def __init__(self, message: str): class CommandLineModelType (line 31) | class CommandLineModelType(enum.Enum): function parse_command_line (line 39) | def parse_command_line(app: Application): function is_url (line 48) | def is_url(path: str) -> bool: function parse (line 52) | def parse(app: Application, parser: QCommandLineParser): function parse_enum_option (line 243) | def parse_enum_option( function join_values (line 252) | def join_values(enum_class: typing.Type[enum.Enum]) -> str: FILE: buzz/conn.py class ConnWriter (line 6) | class ConnWriter: method __init__ (line 7) | def __init__(self, conn: Connection): method write (line 10) | def write(self, s: str): function pipe_stderr (line 15) | def pipe_stderr(conn: Connection): FILE: buzz/cuda_setup.py function _get_nvidia_package_lib_dirs (line 24) | def _get_nvidia_package_lib_dirs() -> list[Path]: function _setup_windows_dll_directories (line 67) | def _setup_windows_dll_directories(): function _preload_linux_libraries (line 77) | def _preload_linux_libraries(): function setup_cuda_libraries (line 114) | def setup_cuda_libraries(): FILE: buzz/db/dao/dao.py class DAO (line 12) | class DAO(ABC, Generic[T]): method __init__ (line 16) | def __init__(self, table: str, db: QSqlDatabase): method insert (line 20) | def insert(self, record: T): method find_by_id (line 37) | def find_by_id(self, id: Any) -> T | None: method to_entity (line 43) | def to_entity(self, record: QSqlRecord) -> T: method _execute (line 47) | def _execute(self, query: QSqlQuery) -> T | None: method _execute_all (line 54) | def _execute_all(self, query: QSqlQuery) -> List[T]: method _create_query (line 62) | def _create_query(self): FILE: buzz/db/dao/transcription_dao.py class TranscriptionDAO (line 12) | class TranscriptionDAO(DAO[Transcription]): method __init__ (line 15) | def __init__(self, db: QSqlDatabase): method create_transcription (line 18) | def create_transcription(self, task: FileTranscriptionTask): method copy_transcription (line 107) | def copy_transcription(self, id: UUID) -> UUID: method update_transcription_as_started (line 172) | def update_transcription_as_started(self, id: UUID): method update_transcription_as_failed (line 188) | def update_transcription_as_failed(self, id: UUID, error: str): method update_transcription_as_canceled (line 205) | def update_transcription_as_canceled(self, id: UUID): method update_transcription_progress (line 221) | def update_transcription_progress(self, id: UUID, progress: float): method update_transcription_as_completed (line 237) | def update_transcription_as_completed(self, id: UUID): method update_transcription_file_and_name (line 253) | def update_transcription_file_and_name(self, id: UUID, file_path: str,... method update_transcription_name (line 269) | def update_transcription_name(self, id: UUID, name: str): method update_transcription_notes (line 286) | def update_transcription_notes(self, id: UUID, notes: str): method reset_transcription_for_restart (line 303) | def reset_transcription_for_restart(self, id: UUID): FILE: buzz/db/dao/transcription_segment_dao.py class TranscriptionSegmentDAO (line 10) | class TranscriptionSegmentDAO(DAO[TranscriptionSegment]): method __init__ (line 14) | def __init__(self, db: QSqlDatabase): method get_segments (line 17) | def get_segments(self, transcription_id: UUID) -> List[TranscriptionSe... method delete_segments (line 28) | def delete_segments(self, transcription_id: UUID): method update_segment_translation (line 40) | def update_segment_translation(self, segment_id: int, translation: str): FILE: buzz/db/db.py function setup_app_db (line 16) | def setup_app_db() -> QSqlDatabase: function setup_test_db (line 22) | def setup_test_db() -> QSqlDatabase: function _setup_db (line 26) | def _setup_db(path: str) -> QSqlDatabase: function close_app_db (line 46) | def close_app_db(): FILE: buzz/db/entity/entity.py class Entity (line 6) | class Entity(ABC): method from_record (line 8) | def from_record(cls, record: QSqlRecord): FILE: buzz/db/entity/transcription.py class Transcription (line 13) | class Transcription(Entity): method id_as_uuid (line 37) | def id_as_uuid(self): method status_as_status (line 41) | def status_as_status(self): method get_output_file_path (line 44) | def get_output_file_path( FILE: buzz/db/entity/transcription_segment.py class TranscriptionSegment (line 7) | class TranscriptionSegment(Entity): FILE: buzz/db/helpers.py function copy_transcriptions_from_json_to_sqlite (line 10) | def copy_transcriptions_from_json_to_sqlite(conn: Connection): function run_sqlite_migrations (line 71) | def run_sqlite_migrations(db: Connection): function mark_in_progress_and_queued_transcriptions_as_canceled (line 79) | def mark_in_progress_and_queued_transcriptions_as_canceled(conn: Connect... FILE: buzz/db/migrator.py function dumb_migrate_db (line 17) | def dumb_migrate_db(db, schema, allow_deletions=False): class DBMigrator (line 50) | class DBMigrator: method __init__ (line 51) | def __init__(self, db, schema, allow_deletions=False): method log_execute (line 62) | def log_execute(self, msg, sql, args=None): method __enter__ (line 77) | def __enter__(self): method __exit__ (line 91) | def __exit__(self, exc_type, exc_value, exc_tb): method migrate (line 116) | def migrate(self): method _migrate_pragma (line 258) | def _migrate_pragma(self, pragma): function _left_pad (line 271) | def _left_pad(text, indent=" "): function normalise_sql (line 276) | def normalise_sql(sql): FILE: buzz/db/service/transcription_service.py class TranscriptionService (line 10) | class TranscriptionService: method __init__ (line 11) | def __init__( method create_transcription (line 19) | def create_transcription(self, task): method copy_transcription (line 22) | def copy_transcription(self, id: UUID) -> UUID: method update_transcription_as_started (line 25) | def update_transcription_as_started(self, id: UUID): method update_transcription_as_failed (line 28) | def update_transcription_as_failed(self, id: UUID, error: str): method update_transcription_as_canceled (line 31) | def update_transcription_as_canceled(self, id: UUID): method update_transcription_progress (line 34) | def update_transcription_progress(self, id: UUID, progress: float): method update_transcription_as_completed (line 37) | def update_transcription_as_completed(self, id: UUID, segments: List[S... method update_transcription_file_and_name (line 50) | def update_transcription_file_and_name(self, id: UUID, file_path: str,... method update_transcription_name (line 53) | def update_transcription_name(self, id: UUID, name: str): method update_transcription_notes (line 56) | def update_transcription_notes(self, id: UUID, notes: str): method reset_transcription_for_restart (line 59) | def reset_transcription_for_restart(self, id: UUID): method replace_transcription_segments (line 62) | def replace_transcription_segments(self, id: UUID, segments: List[Segm... method get_transcription_segments (line 75) | def get_transcription_segments(self, transcription_id: UUID): method update_segment_translation (line 78) | def update_segment_translation(self, segment_id: int, translation: str): FILE: buzz/dialogs.py function show_model_download_error_dialog (line 4) | def show_model_download_error_dialog(parent: QWidget, error: str): FILE: buzz/file_transcriber_queue_worker.py function _patched_run (line 31) | def _patched_run(*args, **kwargs): function _patched_check_output (line 41) | def _patched_check_output(*args, **kwargs): class FileTranscriberQueueWorker (line 66) | class FileTranscriberQueueWorker(QObject): method __init__ (line 81) | def __init__(self, parent: Optional[QObject] = None): method run (line 93) | def run(self): method _on_task_finished (line 215) | def _on_task_finished(self): method add_task (line 221) | def add_task(self, task: FileTranscriptionTask): method cancel_task (line 232) | def cancel_task(self, task_id: UUID): method on_task_error (line 244) | def on_task_error(self, error: str): method on_task_progress (line 259) | def on_task_progress(self, progress: Tuple[int, int]): method on_task_download_progress (line 263) | def on_task_download_progress(self, fraction_downloaded: float): method on_task_completed (line 268) | def on_task_completed(self, segments: List[Segment]): method stop (line 279) | def stop(self): FILE: buzz/model_loader.py function _hf_session_factory (line 46) | def _hf_session_factory() -> requests.Session: function _windows_create_symlink (line 68) | def _windows_create_symlink(src: Path, dst: Path, new_blob: bool = False... class WhisperModelSize (line 110) | class WhisperModelSize(str, enum.Enum): method to_faster_whisper_model_size (line 126) | def to_faster_whisper_model_size(self) -> str: method to_whisper_cpp_model_size (line 131) | def to_whisper_cpp_model_size(self) -> str: method __str__ (line 136) | def __str__(self): function get_expected_whisper_model_size (line 155) | def get_expected_whisper_model_size(size: WhisperModelSize) -> Optional[... class ModelType (line 159) | class ModelType(enum.Enum): method supports_initial_prompt (line 167) | def supports_initial_prompt(self): method is_available (line 175) | def is_available(self): method is_manually_downloadable (line 185) | def is_manually_downloadable(self): function map_language_to_mms (line 244) | def map_language_to_mms(language_code: str) -> str: function is_mms_model (line 257) | def is_mms_model(model_id: str) -> bool: class TranscriptionModel (line 287) | class TranscriptionModel: method __init__ (line 288) | def __init__( method __str__ (line 298) | def __str__(self): method is_deletable (line 313) | def is_deletable(self): method open_file_location (line 320) | def open_file_location(self): method default (line 332) | def default(): method open_path (line 339) | def open_path(path: str): method delete_local_file (line 346) | def delete_local_file(self): method get_local_model_path (line 389) | def get_local_model_path(self) -> Optional[str]: function get_whisper_cpp_file_path (line 446) | def get_whisper_cpp_file_path(size: WhisperModelSize) -> str: function get_whisper_file_path (line 471) | def get_whisper_file_path(size: WhisperModelSize) -> str: class HuggingfaceDownloadMonitor (line 481) | class HuggingfaceDownloadMonitor: method __init__ (line 482) | def __init__(self, model_root: str, progress: pyqtSignal(tuple), total... method set_download_roots (line 491) | def set_download_roots(self): method clean_tmp_files (line 498) | def clean_tmp_files(self): method monitor_file_size (line 503) | def monitor_file_size(self): method start_monitoring (line 530) | def start_monitoring(self): method stop_monitoring (line 535) | def stop_monitoring(self): function get_file_size (line 543) | def get_file_size(url): function download_from_huggingface (line 549) | def download_from_huggingface( function download_faster_whisper_model (line 612) | def download_faster_whisper_model( class ModelDownloader (line 655) | class ModelDownloader(QRunnable): class Signals (line 656) | class Signals(QObject): method __init__ (line 661) | def __init__(self, model: TranscriptionModel, custom_model_url: Option... method run (line 671) | def run(self) -> None: method download_model_to_path (line 791) | def download_model_to_path( method download_model (line 811) | def download_model( method cancel (line 1014) | def cancel(self): FILE: buzz/paths.py function file_path_as_title (line 4) | def file_path_as_title(file_path: str): FILE: buzz/recording.py class RecordingAmplitudeListener (line 9) | class RecordingAmplitudeListener(QObject): method __init__ (line 16) | def __init__( method start_recording (line 27) | def start_recording(self): method stop_recording (line 41) | def stop_recording(self): method stream_callback (line 47) | def stream_callback(self, in_data: np.ndarray, frame_count, time_info,... FILE: buzz/schema.sql type transcription (line 1) | CREATE TABLE transcription ( type transcription_segment (line 25) | CREATE TABLE transcription_segment ( type idx_transcription_id (line 34) | CREATE INDEX idx_transcription_id ON transcription_segment(transcription... FILE: buzz/settings/recording_transcriber_mode.py class RecordingTranscriberMode (line 4) | class RecordingTranscriberMode(Enum): FILE: buzz/settings/settings.py class Settings (line 11) | class Settings: method __init__ (line 12) | def __init__(self, application=""): class Key (line 16) | class Key(enum.Enum): method get_user_identifier (line 88) | def get_user_identifier(self) -> str: method set_value (line 95) | def set_value(self, key: Key, value: typing.Any) -> None: method save_custom_model_id (line 98) | def save_custom_model_id(self, model) -> None: method load_custom_model_id (line 112) | def load_custom_model_id(self, model) -> str: method value (line 128) | def value( method clear (line 149) | def clear(self): method begin_group (line 152) | def begin_group(self, group: Key) -> None: method end_group (line 155) | def end_group(self) -> None: method sync (line 158) | def sync(self): method get_default_export_file_template (line 161) | def get_default_export_file_template(self) -> str: FILE: buzz/settings/shortcut.py class Shortcut (line 6) | class Shortcut(str, enum.Enum): method __new__ (line 10) | def __new__(cls, sequence: str, description: str): method get_default_shortcuts (line 42) | def get_default_shortcuts() -> typing.Dict[str, str]: FILE: buzz/settings/shortcuts.py class Shortcuts (line 7) | class Shortcuts: method __init__ (line 8) | def __init__(self, settings: Settings): method get (line 11) | def get(self, shortcut: Shortcut) -> str: method set (line 15) | def set(self, shortcut: Shortcut, sequence: str) -> None: method clear (line 20) | def clear(self) -> None: method get_custom_shortcuts (line 23) | def get_custom_shortcuts(self) -> typing.Dict[str, str]: FILE: buzz/store/keyring_store.py class Key (line 14) | class Key(enum.Enum): function _is_linux (line 18) | def _is_linux() -> bool: function _get_secrets_file_path (line 22) | def _get_secrets_file_path() -> str: function _get_portal_secret (line 31) | def _get_portal_secret() -> bytes | None: function _derive_key (line 99) | def _derive_key(master_secret: bytes, key_name: str) -> bytes: function _encrypt_value (line 111) | def _encrypt_value(value: str, key: bytes) -> str: function _decrypt_value (line 121) | def _decrypt_value(encrypted: str, key: bytes) -> str: function _load_local_secrets (line 129) | def _load_local_secrets() -> dict: function _save_local_secrets (line 141) | def _save_local_secrets(secrets: dict) -> None: function _get_portal_password (line 153) | def _get_portal_password(key: Key) -> str | None: function _set_portal_password (line 172) | def _set_portal_password(key: Key, password: str) -> bool: function _delete_portal_password (line 191) | def _delete_portal_password(key: Key) -> bool: function get_password (line 201) | def get_password(key: Key) -> str | None: function set_password (line 221) | def set_password(username: Key, password: str) -> None: function delete_password (line 231) | def delete_password(key: Key) -> None: FILE: buzz/transcriber/file_transcriber.py class FileTranscriber (line 27) | class FileTranscriber(QObject): method __init__ (line 34) | def __init__(self, task: FileTranscriptionTask, parent: Optional["QObj... method run (line 39) | def run(self): method on_download_progress (line 169) | def on_download_progress(self, data: dict): method transcribe (line 174) | def transcribe(self) -> List[Segment]: method stop (line 178) | def stop(self): function write_output (line 182) | def write_output( function to_timestamp (line 229) | def to_timestamp(ms: float, ms_separator=".") -> str: function is_video_file (line 241) | def is_video_file(path: str) -> bool: FILE: buzz/transcriber/local_whisper_cpp_server_transcriber.py class LocalWhisperCppServerTranscriber (line 17) | class LocalWhisperCppServerTranscriber(OpenAIWhisperAPIFileTranscriber): method __init__ (line 19) | def __init__(self, task: FileTranscriptionTask, parent: Optional["QObj... method transcribe (line 71) | def transcribe(self) -> List[Segment]: method stop (line 77) | def stop(self): method __del__ (line 93) | def __del__(self): FILE: buzz/transcriber/openai_whisper_api_file_transcriber.py function append_segment (line 19) | def append_segment(result, txt: bytes, start: int, end: int): class OpenAIWhisperAPIFileTranscriber (line 38) | class OpenAIWhisperAPIFileTranscriber(FileTranscriber): method __init__ (line 39) | def __init__(self, task: FileTranscriptionTask, parent: Optional["QObj... method transcribe (line 58) | def transcribe(self) -> List[Segment]: method get_value (line 186) | def get_value(segment, key, default=None): method get_segments_for_file (line 193) | def get_segments_for_file(self, file: str, offset_ms: int = 0): method stop (line 292) | def stop(self): FILE: buzz/transcriber/recording_transcriber.py class RecordingTranscriber (line 37) | class RecordingTranscriber(QObject): method __init__ (line 47) | def __init__( method start (line 82) | def start(self): method get_device_sample_rate (line 338) | def get_device_sample_rate(device_id: Optional[int]) -> int: method stream_callback (line 353) | def stream_callback(self, in_data: np.ndarray, frame_count, time_info,... method find_silence_cut_point (line 365) | def find_silence_cut_point(samples: np.ndarray, sample_rate: int, method amplitude (line 397) | def amplitude(arr: np.ndarray): method _drain_stderr (line 400) | def _drain_stderr(self): method stop_recording (line 405) | def stop_recording(self): method start_local_whisper_server (line 415) | def start_local_whisper_server(self): method __del__ (line 518) | def __del__(self): FILE: buzz/transcriber/transcriber.py class Task (line 18) | class Task(enum.Enum): class Segment (line 30) | class Segment: class TranscriptionOptions (line 142) | class TranscriptionOptions: function humanize_language (line 161) | def humanize_language(language: str) -> str: class FileTranscriptionOptions (line 168) | class FileTranscriptionOptions: class FileTranscriptionTask (line 176) | class FileTranscriptionTask: class Status (line 177) | class Status(enum.Enum): class Source (line 184) | class Source(enum.Enum): class OutputFormat (line 211) | class OutputFormat(enum.Enum): class Stopped (line 217) | class Stopped(Exception): function get_output_file_path (line 227) | def get_output_file_path( FILE: buzz/transcriber/whisper_cpp.py class WhisperCpp (line 35) | class WhisperCpp: method transcribe (line 37) | def transcribe(task: FileTranscriptionTask) -> List[Segment]: FILE: buzz/transcriber/whisper_file_transcriber.py function check_file_has_audio_stream (line 40) | def check_file_has_audio_stream(file_path: str) -> None: class WhisperFileTranscriber (line 56) | class WhisperFileTranscriber(FileTranscriber): method __init__ (line 65) | def __init__( method transcribe (line 76) | def transcribe(self) -> List[Segment]: method transcribe_whisper (line 145) | def transcribe_whisper( method transcribe_whisper_cpp (line 211) | def transcribe_whisper_cpp(cls, task: FileTranscriptionTask) -> List[S... method transcribe_hugging_face (line 215) | def transcribe_hugging_face(cls, task: FileTranscriptionTask) -> List[... method transcribe_faster_whisper (line 251) | def transcribe_faster_whisper(cls, task: FileTranscriptionTask) -> Lis... method transcribe_openai_whisper (line 327) | def transcribe_openai_whisper(cls, task: FileTranscriptionTask) -> Lis... method stop (line 388) | def stop(self): method read_line (line 417) | def read_line(self, pipe: Connection): FILE: buzz/transformers_whisper.py function is_intel_mac (line 21) | def is_intel_mac() -> bool: function is_peft_model (line 26) | def is_peft_model(model_id: str) -> bool: class PipelineWithProgress (line 31) | class PipelineWithProgress(AutomaticSpeechRecognitionPipeline): # pragm... method chunk_iter (line 34) | def chunk_iter(inputs, feature_extractor, chunk_len, stride_left, stri... method preprocess (line 60) | def preprocess(self, inputs, chunk_length_s=0, stride_length_s=None): class TransformersTranscriber (line 183) | class TransformersTranscriber: method __init__ (line 186) | def __init__(self, model_id: str): method is_mms_model (line 192) | def is_mms_model(self) -> bool: method is_peft_model (line 197) | def is_peft_model(self) -> bool: method transcribe (line 201) | def transcribe( method _transcribe_whisper (line 214) | def _transcribe_whisper( method _load_peft_model (line 317) | def _load_peft_model(self, device: str, torch_dtype): method _get_peft_repo_id (line 385) | def _get_peft_repo_id(self) -> str: method _get_mms_repo_id (line 404) | def _get_mms_repo_id(self) -> str: method _transcribe_mms (line 428) | def _transcribe_mms( FILE: buzz/translator.py class Translator (line 20) | class Translator(QObject): method __init__ (line 24) | def __init__( method _translate_single (line 59) | def _translate_single(self, transcript: str, transcript_id: int) -> Tu... method _translate_batch (line 82) | def _translate_batch(self, items: List[Tuple[str, int]]) -> List[Tuple... method _parse_batch_response (line 131) | def _parse_batch_response(response: str, expected_count: int) -> List[... method start (line 147) | def start(self): method on_transcription_options_changed (line 188) | def on_transcription_options_changed( method enqueue (line 193) | def enqueue(self, transcript: str, transcript_id: Optional[int] = None): method stop (line 196) | def stop(self): FILE: buzz/update_checker.py class UpdateInfo (line 15) | class UpdateInfo: class UpdateChecker (line 20) | class UpdateChecker(QObject): method __init__ (line 27) | def __init__( method should_check_for_updates (line 42) | def should_check_for_updates(self) -> bool: method check_for_updates (line 69) | def check_for_updates(self) -> None: method _on_reply_finished (line 80) | def _on_reply_finished(self, reply: QNetworkReply) -> None: method _get_download_url (line 131) | def _get_download_url(self, download_urls: dict) -> list: method _is_newer_version (line 147) | def _is_newer_version(self, remote_version: str) -> bool: FILE: buzz/whisper_audio.py function load_audio (line 19) | def load_audio(file: str, sr: int = SAMPLE_RATE): FILE: buzz/widgets/about_dialog.py class AboutDialog (line 25) | class AboutDialog(QDialog): method __init__ (line 31) | def __init__( method on_click_check_for_updates (line 103) | def on_click_check_for_updates(self): method on_click_show_logs (line 108) | def on_click_show_logs(self): method on_latest_release_reply (line 112) | def on_latest_release_reply(self, reply: QNetworkReply): method is_version_lower (line 123) | def is_version_lower(version_a: str, version_b: str): FILE: buzz/widgets/application.py class Application (line 25) | class Application(QApplication): method __init__ (line 28) | def __init__(self, argv: list) -> None: method show_main_window (line 96) | def show_main_window(self): method add_task (line 100) | def add_task(self, task: FileTranscriptionTask, quit_on_complete: bool... method close_database (line 104) | def close_database(self): FILE: buzz/widgets/audio_devices_combo_box.py class AudioDevicesComboBox (line 8) | class AudioDevicesComboBox(QComboBox): method __init__ (line 14) | def __init__(self, parent: Optional[QWidget] = None) -> None: method get_audio_devices (line 26) | def get_audio_devices(self) -> List[Tuple[int, str]]: method on_index_changed (line 43) | def on_index_changed(self, index: int): method get_default_device_id (line 46) | def get_default_device_id(self) -> Optional[int]: FILE: buzz/widgets/audio_meter_widget.py class AudioMeterWidget (line 11) | class AudioMeterWidget(QWidget): method __init__ (line 22) | def __init__(self, parent: Optional[QWidget] = None): method paintEvent (line 46) | def paintEvent(self, event: QtGui.QPaintEvent) -> None: method reset_amplitude (line 84) | def reset_amplitude(self): method update_amplitude (line 90) | def update_amplitude(self, amplitude: float): method update_average_amplitude (line 96) | def update_average_amplitude(self, amplitude: float): method update_queue_size (line 100) | def update_queue_size(self, size: int): FILE: buzz/widgets/audio_player.py class AudioPlayer (line 14) | class AudioPlayer(QWidget): method __init__ (line 17) | def __init__(self, file_path: str): method on_duration_changed (line 112) | def on_duration_changed(self, duration_ms: int): method on_position_changed (line 117) | def on_position_changed(self, position_ms: int): method on_playback_state_changed (line 140) | def on_playback_state_changed(self, state: QMediaPlayer.PlaybackState): method on_media_status_changed (line 146) | def on_media_status_changed(self, status: QMediaPlayer.MediaStatus): method on_error_occurred (line 154) | def on_error_occurred(self, error: QMediaPlayer.Error, error_string: s... method set_invalid_media (line 157) | def set_invalid_media(self, invalid_media: bool): method toggle_play (line 169) | def toggle_play(self): method set_range (line 175) | def set_range(self, range_ms: Tuple[int, int]): method clear_range (line 185) | def clear_range(self): method _reset_looping_flag (line 189) | def _reset_looping_flag(self): method on_slider_moved (line 193) | def on_slider_moved(self, position_ms: int): method on_slider_pressed (line 202) | def on_slider_pressed(self): method on_slider_released (line 206) | def on_slider_released(self): method set_position (line 212) | def set_position(self, position_ms: int): method update_time_label (line 215) | def update_time_label(self): method stop (line 220) | def stop(self): method closeEvent (line 223) | def closeEvent(self, a0: QtGui.QCloseEvent) -> None: method hideEvent (line 227) | def hideEvent(self, a0: QtGui.QHideEvent) -> None: FILE: buzz/widgets/form_label.py class FormLabel (line 7) | class FormLabel(QLabel): method __init__ (line 8) | def __init__(self, name: str, parent: Optional[QWidget], *args) -> None: FILE: buzz/widgets/icon.py class Icon (line 7) | class Icon(QIcon): method __init__ (line 11) | def __init__(self, path: str, parent: QWidget): method create_default_pixmap (line 23) | def create_default_pixmap(self, path, color): method create_disabled_pixmap (line 31) | def create_disabled_pixmap(self, pixmap, color): method get_color (line 45) | def get_color(self) -> QColor: class PlayIcon (line 52) | class PlayIcon(Icon): method __init__ (line 53) | def __init__(self, parent: QWidget): class PauseIcon (line 57) | class PauseIcon(Icon): method __init__ (line 58) | def __init__(self, parent: QWidget): class UndoIcon (line 62) | class UndoIcon(Icon): method __init__ (line 63) | def __init__(self, parent: QWidget): class RedoIcon (line 67) | class RedoIcon(Icon): method __init__ (line 68) | def __init__(self, parent: QWidget): class FileDownloadIcon (line 72) | class FileDownloadIcon(Icon): method __init__ (line 73) | def __init__(self, parent: QWidget): class TranslateIcon (line 77) | class TranslateIcon(Icon): method __init__ (line 78) | def __init__(self, parent: QWidget): class ResizeIcon (line 81) | class ResizeIcon(Icon): method __init__ (line 82) | def __init__(self, parent: QWidget): class SpeakerIdentificationIcon (line 85) | class SpeakerIdentificationIcon(Icon): method __init__ (line 86) | def __init__(self, parent: QWidget): class VisibilityIcon (line 89) | class VisibilityIcon(Icon): method __init__ (line 90) | def __init__(self, parent: QWidget): class ScrollToCurrentIcon (line 96) | class ScrollToCurrentIcon(Icon): method __init__ (line 97) | def __init__(self, parent: QWidget): class NewWindowIcon (line 102) | class NewWindowIcon(Icon): method __init__ (line 103) | def __init__(self, parent: QWidget): class FullscreenIcon (line 107) | class FullscreenIcon(Icon): method __init__ (line 108) | def __init__(self, parent: QWidget): class ColorBackgroundIcon (line 112) | class ColorBackgroundIcon(Icon): method __init__ (line 113) | def __init__(self, parent: QWidget): class TextColorIcon (line 117) | class TextColorIcon(Icon): method __init__ (line 118) | def __init__(self, parent: QWidget): FILE: buzz/widgets/icon_presentation.py class PresentationIcon (line 7) | class PresentationIcon: method __init__ (line 9) | def __init__(self, parent, svg_path: str, color: str = None): method get_default_color (line 15) | def get_default_color(self) -> str: method get_icon (line 22) | def get_icon(self) -> QIcon: FILE: buzz/widgets/import_url_dialog.py class ImportURLDialog (line 10) | class ImportURLDialog(QDialog): method __init__ (line 16) | def __init__(self, parent: Optional[QWidget] = None): method accept (line 38) | def accept(self): method prompt (line 48) | def prompt(cls, parent: Optional[QWidget] = None) -> Optional[str]: FILE: buzz/widgets/line_edit.py class LineEdit (line 7) | class LineEdit(QLineEdit): method __init__ (line 8) | def __init__(self, default_text: str = "", parent: Optional[QWidget] =... FILE: buzz/widgets/main_window.py class MainWindow (line 56) | class MainWindow(QMainWindow): method __init__ (line 60) | def __init__(self, transcription_service: TranscriptionService): method on_preferences_changed (line 168) | def on_preferences_changed(self, preferences: Preferences): method save_preferences (line 174) | def save_preferences(self, preferences: Preferences): method load_preferences (line 179) | def load_preferences(self, settings: Settings): method dragEnterEvent (line 185) | def dragEnterEvent(self, event): method dropEvent (line 192) | def dropEvent(self, event): method on_file_transcriber_triggered (line 196) | def on_file_transcriber_triggered( method on_clear_history_action_triggered (line 221) | def on_clear_history_action_triggered(self): method on_stop_transcription_action_triggered (line 246) | def on_stop_transcription_action_triggered(self): method on_new_transcription_action_triggered (line 257) | def on_new_transcription_action_triggered(self): method on_new_url_transcription_action_triggered (line 266) | def on_new_url_transcription_action_triggered(self): method on_import_folder_action_triggered (line 271) | def on_import_folder_action_triggered(self): method open_file_transcriber_widget (line 285) | def open_file_transcriber_widget( method on_openai_access_token_changed (line 303) | def on_openai_access_token_changed(access_token: str): method open_transcript_viewer (line 312) | def open_transcript_viewer(self): method on_table_selection_changed (line 318) | def on_table_selection_changed(self): method should_enable_open_transcript_action (line 329) | def should_enable_open_transcript_action(self): method can_open_transcript (line 339) | def can_open_transcript(transcription: Transcription) -> bool: method should_enable_stop_transcription_action (line 345) | def should_enable_stop_transcription_action(self): method should_enable_clear_history_action (line 353) | def should_enable_clear_history_action(self): method selected_tasks_have_status (line 362) | def selected_tasks_have_status(self, statuses: List[FileTranscriptionT... method on_table_double_clicked (line 374) | def on_table_double_clicked(self, index: QModelIndex): method open_transcription_viewer (line 380) | def open_transcription_viewer(self, transcription: Transcription): method add_task (line 391) | def add_task(self, task: FileTranscriptionTask): method on_transcriptions_updated (line 396) | def on_transcriptions_updated(self): method on_task_started (line 399) | def on_task_started(self, task: FileTranscriptionTask): method on_task_progress (line 403) | def on_task_progress(self, task: FileTranscriptionTask, progress: float): method on_task_download_progress (line 407) | def on_task_download_progress( method on_task_completed (line 413) | def on_task_completed(self, task: FileTranscriptionTask, segments: Lis... method on_task_error (line 430) | def on_task_error(self, task: FileTranscriptionTask, error: str): method on_shortcuts_changed (line 438) | def on_shortcuts_changed(self): method resizeEvent (line 442) | def resizeEvent(self, event): method closeEvent (line 445) | def closeEvent(self, event: QtGui.QCloseEvent) -> None: method save_geometry (line 491) | def save_geometry(self): method load_geometry (line 496) | def load_geometry(self): method _init_update_checker (line 506) | def _init_update_checker(self): method _on_update_available (line 514) | def _on_update_available(self, update_info: UpdateInfo): method on_update_action_triggered (line 519) | def on_update_action_triggered(self): FILE: buzz/widgets/main_window_toolbar.py class MainWindowToolbar (line 25) | class MainWindowToolbar(ToolBar): method __init__ (line 34) | def __init__(self, shortcuts: Shortcuts, parent: Optional[QWidget]): method reset_shortcuts (line 105) | def reset_shortcuts(self): method on_record_action_triggered (line 116) | def on_record_action_triggered(self): method set_stop_transcription_action_enabled (line 122) | def set_stop_transcription_action_enabled(self, enabled: bool): method set_open_transcript_action_enabled (line 125) | def set_open_transcript_action_enabled(self, enabled: bool): method set_clear_history_action_enabled (line 128) | def set_clear_history_action_enabled(self, enabled: bool): method set_update_available (line 131) | def set_update_available(self, available: bool): FILE: buzz/widgets/menu_bar.py class MenuBar (line 20) | class MenuBar(QMenuBar): method __init__ (line 29) | def __init__( method on_about_action_triggered (line 75) | def on_about_action_triggered(self): method on_preferences_action_triggered (line 79) | def on_preferences_action_triggered(self): method on_preferences_dialog_finished (line 92) | def on_preferences_dialog_finished(self, result): method on_help_action_triggered (line 98) | def on_help_action_triggered(self): method reset_shortcuts (line 101) | def reset_shortcuts(self): FILE: buzz/widgets/model_download_progress_dialog.py class ModelDownloadProgressDialog (line 18) | class ModelDownloadProgressDialog(QProgressDialog): method __init__ (line 19) | def __init__( method update_label_text (line 49) | def update_label_text(self, fraction_completed: float): method set_value (line 61) | def set_value(self, fraction_completed: float): method cancel (line 69) | def cancel(self) -> None: FILE: buzz/widgets/model_type_combo_box.py class ModelTypeComboBox (line 9) | class ModelTypeComboBox(QComboBox): method __init__ (line 12) | def __init__( method on_text_changed (line 32) | def on_text_changed(self, text: str): FILE: buzz/widgets/openai_api_key_line_edit.py class OpenAIAPIKeyLineEdit (line 12) | class OpenAIAPIKeyLineEdit(LineEdit): method __init__ (line 16) | def __init__(self, key: str, parent: Optional[QWidget] = None): method focusOutEvent (line 36) | def focusOutEvent(self, event): method on_toggle_show_action_triggered (line 40) | def on_toggle_show_action_triggered(self): method on_openai_api_key_changed (line 48) | def on_openai_api_key_changed(self, key: str): FILE: buzz/widgets/preferences_dialog/folder_watch_preferences_widget.py class FolderWatchPreferencesWidget (line 32) | class FolderWatchPreferencesWidget(QWidget): method __init__ (line 35) | def __init__( method on_click_browse_input_folder (line 114) | def on_click_browse_input_folder(self): method on_input_folder_changed (line 119) | def on_input_folder_changed(self, folder): method on_click_browse_output_folder (line 123) | def on_click_browse_output_folder(self): method on_output_folder_changed (line 128) | def on_output_folder_changed(self, folder): method _set_settings_enabled (line 132) | def _set_settings_enabled(self, enabled: bool): method on_enable_changed (line 140) | def on_enable_changed(self, state: int): method on_delete_processed_files_changed (line 146) | def on_delete_processed_files_changed(self, state: int): method on_transcription_options_changed (line 150) | def on_transcription_options_changed( FILE: buzz/widgets/preferences_dialog/general_preferences_widget.py class GeneralPreferencesWidget (line 52) | class GeneralPreferencesWidget(QWidget): method __init__ (line 55) | def __init__( method on_default_export_file_name_changed (line 226) | def on_default_export_file_name_changed(self, text: str): method update_test_openai_api_key_button (line 229) | def update_test_openai_api_key_button(self): method on_click_test_openai_api_key_button (line 232) | def on_click_test_openai_api_key_button(self): method on_test_openai_api_key_success (line 243) | def on_test_openai_api_key_success(self): method on_test_openai_api_key_failure (line 251) | def on_test_openai_api_key_failure(self, error: str): method on_openai_api_key_changed (line 255) | def on_openai_api_key_changed(self, key: str): method on_openai_api_key_focus_out (line 260) | def on_openai_api_key_focus_out(self): method on_custom_openai_base_url_changed (line 268) | def on_custom_openai_base_url_changed(self, text: str): method on_openai_api_model_changed (line 271) | def on_openai_api_model_changed(self, text: str): method on_recording_export_enable_changed (line 274) | def on_recording_export_enable_changed(self, state: int): method on_click_browse_export_folder (line 285) | def on_click_browse_export_folder(self): method on_recording_export_folder_changed (line 290) | def on_recording_export_folder_changed(self, folder): method on_language_changed (line 296) | def on_language_changed(self, index): method on_font_size_changed (line 304) | def on_font_size_changed(self, value): method on_recording_transcriber_mode_changed (line 313) | def on_recording_transcriber_mode_changed(self, value): method on_force_cpu_changed (line 316) | def on_force_cpu_changed(self, state: int): method on_reduce_gpu_memory_changed (line 326) | def on_reduce_gpu_memory_changed(self, state: int): class ValidateOpenAIApiKeyJob (line 337) | class ValidateOpenAIApiKeyJob(QRunnable): class Signals (line 338) | class Signals(QObject): method __init__ (line 342) | def __init__(self, api_key: str): method run (line 347) | def run(self): FILE: buzz/widgets/preferences_dialog/models/file_transcription_preferences.py class FileTranscriptionPreferences (line 16) | class FileTranscriptionPreferences: method save (line 28) | def save(self, settings: QSettings) -> None: method load (line 44) | def load(cls, settings: QSettings) -> "FileTranscriptionPreferences": method from_transcription_options (line 84) | def from_transcription_options( method to_transcription_options (line 102) | def to_transcription_options( FILE: buzz/widgets/preferences_dialog/models/folder_watch_preferences.py class FolderWatchPreferences (line 11) | class FolderWatchPreferences: method save (line 18) | def save(self, settings: QSettings): method load (line 28) | def load(cls, settings: QSettings) -> "FolderWatchPreferences": FILE: buzz/widgets/preferences_dialog/models/preferences.py class Preferences (line 11) | class Preferences: method save (line 14) | def save(self, settings: QSettings): method load (line 20) | def load(cls, settings: QSettings) -> "Preferences": FILE: buzz/widgets/preferences_dialog/models_preferences_widget.py class ModelsPreferencesWidget (line 32) | class ModelsPreferencesWidget(QWidget): method __init__ (line 35) | def __init__( method on_model_size_changed (line 119) | def on_model_size_changed(self, current: QTreeWidgetItem, _: QTreeWidg... method reset (line 128) | def reset(self): method on_model_type_changed (line 205) | def on_model_type_changed(self, model_type: ModelType): method on_custom_model_id_input_changed (line 209) | def on_custom_model_id_input_changed(self, text): method on_custom_model_link_input_changed (line 216) | def on_custom_model_link_input_changed(self, text): method on_download_button_clicked (line 219) | def on_download_button_clicked(self): method on_delete_button_clicked (line 243) | def on_delete_button_clicked(self): method on_show_file_location_button_clicked (line 260) | def on_show_file_location_button_clicked(self): method on_download_completed (line 263) | def on_download_completed(self, _: str): method on_download_error (line 269) | def on_download_error(self, error: str): method on_download_progress (line 278) | def on_download_progress(self, progress: tuple): method on_progress_dialog_canceled (line 282) | def on_progress_dialog_canceled(self): FILE: buzz/widgets/preferences_dialog/preferences_dialog.py class PreferencesDialog (line 27) | class PreferencesDialog(QDialog): method __init__ (line 33) | def __init__( FILE: buzz/widgets/preferences_dialog/shortcuts_editor_preferences_widget.py class ShortcutsEditorPreferencesWidget (line 14) | class ShortcutsEditorPreferencesWidget(QWidget): method __init__ (line 17) | def __init__(self, shortcuts: Shortcuts, parent: Optional[QWidget] = N... method get_key_sequence_changed (line 39) | def get_key_sequence_changed(self, shortcut: Shortcut): method reset_to_defaults (line 46) | def reset_to_defaults(self): FILE: buzz/widgets/presentation_window.py class PresentationWindow (line 13) | class PresentationWindow(QWidget): method __init__ (line 16) | def __init__(self, parent: Optional[QWidget] = None): method load_settings (line 49) | def load_settings(self): method apply_styling (line 89) | def apply_styling(self, text_color: str, bg_color: str, text_size: int): method update_transcripts (line 113) | def update_transcripts(self, text: str): method update_translations (line 138) | def update_translations(self, text: str): method toggle_fullscreen (line 165) | def toggle_fullscreen(self): method keyPressEvent (line 172) | def keyPressEvent(self, event): method get_css_file_path (line 182) | def get_css_file_path(self) -> str: FILE: buzz/widgets/record_button.py class RecordButton (line 8) | class RecordButton(QPushButton): method __init__ (line 9) | def __init__(self, parent: Optional[QWidget]) -> None: method set_stopped (line 16) | def set_stopped(self): method set_recording (line 20) | def set_recording(self): FILE: buzz/widgets/record_delegate.py class RecordDelegate (line 7) | class RecordDelegate(QStyledItemDelegate): method __init__ (line 8) | def __init__(self, text_getter: Callable[[QSqlRecord], str]): method initStyleOption (line 12) | def initStyleOption(self, option, index): FILE: buzz/widgets/recording_transcriber_widget.py class RecordingTranscriberWidget (line 63) | class RecordingTranscriberWidget(QWidget): class RecordingStatus (line 76) | class RecordingStatus(enum.Enum): method __init__ (line 80) | def __init__( method create_presentation_options_bar (line 244) | def create_presentation_options_bar(self) -> QWidget: method create_copy_actions_bar (line 320) | def create_copy_actions_bar(self) -> QWidget: method on_copy_transcript_clicked (line 336) | def on_copy_transcript_clicked(self): method on_show_presentation_clicked (line 370) | def on_show_presentation_clicked(self): method on_text_size_changed (line 394) | def on_text_size_changed(self, value: int): method on_theme_changed (line 404) | def on_theme_changed(self, index: int): method on_text_color_clicked (line 422) | def on_text_color_clicked(self): method on_bg_color_clicked (line 439) | def on_bg_color_clicked(self): method on_fullscreen_clicked (line 456) | def on_fullscreen_clicked(self): method setup_for_export (line 461) | def setup_for_export(self): method on_recording_mode_changed (line 510) | def on_recording_mode_changed(self, mode: RecordingTranscriberMode): method on_hide_unconfirmed_changed (line 513) | def on_hide_unconfirmed_changed(self, value: bool): method on_transcription_options_changed (line 516) | def on_transcription_options_changed( method reset_transcriber_controls (line 528) | def reset_transcriber_controls(self): method on_device_changed (line 541) | def on_device_changed(self, device_id: int): method reset_recording_amplitude_listener (line 545) | def reset_recording_amplitude_listener(self): method on_record_button_clicked (line 572) | def on_record_button_clicked(self): method start_recording (line 600) | def start_recording(self): method on_model_loaded (line 622) | def on_model_loaded(self, model_path: str): method on_download_model_progress (line 701) | def on_download_model_progress(self, progress: Tuple[float, float]): method set_recording_status_stopped (line 717) | def set_recording_status_stopped(self): method on_download_model_error (line 726) | def on_download_model_error(self, error: str): method strip_newlines (line 735) | def strip_newlines(text): method filter_text (line 739) | def filter_text(text: str): method write_to_export_file (line 748) | def write_to_export_file(file_path: str, content: str, mode: str = "a"... method write_csv_export (line 765) | def write_csv_export(file_path: str, text: str, max_entries: int): method write_txt_export (line 800) | def write_txt_export(file_path: str, text: str, mode: str, max_entries... method read_export_file (line 827) | def read_export_file(file_path: str, retries: int = 5, delay: float = ... method find_common_part (line 846) | def find_common_part(text1: str, text2: str) -> str: method merge_text_no_overlap (line 868) | def merge_text_no_overlap(text1: str, text2: str) -> str: method process_transcription_merge (line 876) | def process_transcription_merge(self, text: str, texts, text_box, expo... method on_next_transcription (line 924) | def on_next_transcription(self, text: str): method on_next_translation (line 994) | def on_next_translation(self, text: str, _: Optional[int] = None): method stop_recording (line 1056) | def stop_recording(self): method on_transcriber_finished (line 1066) | def on_transcriber_finished(self): method on_transcriber_error (line 1072) | def on_transcriber_error(self, error: str): method on_cancel_model_progress_dialog (line 1087) | def on_cancel_model_progress_dialog(self): method reset_model_download (line 1095) | def reset_model_download(self): method reset_recording_controls (line 1103) | def reset_recording_controls(self): method reset_record_button (line 1109) | def reset_record_button(self): method on_recording_amplitude_changed (line 1112) | def on_recording_amplitude_changed(self, amplitude: float): method closeEvent (line 1115) | def closeEvent(self, event: QCloseEvent) -> None: method _on_close_transcriber_finished (line 1151) | def _on_close_transcriber_finished(self): method _do_close (line 1155) | def _do_close(self): FILE: buzz/widgets/sequence_edit.py class SequenceEdit (line 9) | class SequenceEdit(QKeySequenceEdit): method __init__ (line 10) | def __init__(self, sequence: str, parent: Optional[QWidget] = None): method keyPressEvent (line 16) | def keyPressEvent(self, event: QtGui.QKeyEvent) -> None: FILE: buzz/widgets/text_display_box.py class TextDisplayBox (line 6) | class TextDisplayBox(QPlainTextEdit): method __init__ (line 9) | def __init__(self, parent: Optional[QWidget], *args) -> None: FILE: buzz/widgets/toolbar.py class ToolBar (line 9) | class ToolBar(QToolBar): method __init__ (line 10) | def __init__(self, parent: typing.Optional[QWidget] = None): method addAction (line 17) | def addAction(self, *args): method addActions (line 22) | def addActions(self, actions: typing.Iterable[QtGui.QAction]) -> None: method fix_spacing_on_mac (line 26) | def fix_spacing_on_mac(self): FILE: buzz/widgets/transcriber/advanced_settings_button.py class AdvancedSettingsButton (line 7) | class AdvancedSettingsButton(QPushButton): method __init__ (line 8) | def __init__(self, parent: Optional[QWidget]) -> None: FILE: buzz/widgets/transcriber/advanced_settings_dialog.py class AdvancedSettingsDialog (line 27) | class AdvancedSettingsDialog(QDialog): method __init__ (line 33) | def __init__( method on_initial_prompt_changed (line 239) | def on_initial_prompt_changed(self): method on_enable_llm_translation_changed (line 245) | def on_enable_llm_translation_changed(self, state): method on_llm_model_changed (line 255) | def on_llm_model_changed(self, text: str): method on_llm_prompt_changed (line 259) | def on_llm_prompt_changed(self): method on_silence_threshold_changed (line 265) | def on_silence_threshold_changed(self, value: float): method on_line_separator_changed (line 269) | def on_line_separator_changed(self, text: str): method on_recording_mode_changed (line 276) | def on_recording_mode_changed(self, index: int): method _update_recording_mode_visibility (line 282) | def _update_recording_mode_visibility(self, mode: RecordingTranscriber... method on_transcription_step_changed (line 291) | def on_transcription_step_changed(self, value: float): method on_hide_unconfirmed_changed (line 295) | def on_hide_unconfirmed_changed(self, state: int): method on_export_enabled_changed (line 300) | def on_export_enabled_changed(self, state: int): method on_export_folder_changed (line 316) | def on_export_folder_changed(self, text: str): method on_browse_export_folder (line 319) | def on_browse_export_folder(self): method on_export_file_name_changed (line 324) | def on_export_file_name_changed(self, text: str): method on_export_file_type_changed (line 327) | def on_export_file_type_changed(self, index: int): method on_export_max_entries_changed (line 331) | def on_export_max_entries_changed(self, value: int): FILE: buzz/widgets/transcriber/file_transcriber_widget.py class FileTranscriberWidget (line 31) | class FileTranscriberWidget(QWidget): method __init__ (line 42) | def __init__( method get_title (line 97) | def get_title(self) -> str: method load_preferences (line 104) | def load_preferences(self): method save_preferences (line 110) | def save_preferences(self): method on_click_run (line 118) | def on_click_run(self): method on_model_loaded (line 132) | def on_model_loaded(self, model_path: str): method on_download_model_progress (line 140) | def on_download_model_progress(self, progress: Tuple[float, float]): method on_download_model_error (line 156) | def on_download_model_error(self, error: str): method reset_transcriber_controls (line 161) | def reset_transcriber_controls(self): method on_cancel_model_progress_dialog (line 174) | def on_cancel_model_progress_dialog(self): method reset_model_download (line 180) | def reset_model_download(self): method on_word_level_timings_changed (line 185) | def on_word_level_timings_changed(self, value: int): method closeEvent (line 190) | def closeEvent(self, event: QtGui.QCloseEvent) -> None: FILE: buzz/widgets/transcriber/file_transcription_form_widget.py class FileTranscriptionFormWidget (line 19) | class FileTranscriptionFormWidget(QWidget): method __init__ (line 23) | def __init__( method on_transcription_options_changed (line 83) | def on_transcription_options_changed( method on_word_level_timings_changed (line 95) | def on_word_level_timings_changed(self, value: int): method on_extract_speech_changed (line 104) | def on_extract_speech_changed(self, value: int): method get_on_checkbox_state_changed_callback (line 113) | def get_on_checkbox_state_changed_callback(self, output_format: Output... FILE: buzz/widgets/transcriber/hugging_face_search_line_edit.py class HuggingFaceSearchLineEdit (line 25) | class HuggingFaceSearchLineEdit(LineEdit): method __init__ (line 29) | def __init__( method focusInEvent (line 65) | def focusInEvent(self, event): method on_text_edited (line 70) | def on_text_edited(self, text: str): method on_select_item (line 73) | def on_select_item(self): method fetch_models (line 82) | def fetch_models(self): method on_popup_selected (line 97) | def on_popup_selected(self): method on_request_response (line 100) | def on_request_response(self, network_reply: QNetworkReply): method eventFilter (line 132) | def eventFilter(self, target: QObject, event: QEvent): FILE: buzz/widgets/transcriber/initial_prompt_text_edit.py class InitialPromptTextEdit (line 7) | class InitialPromptTextEdit(QPlainTextEdit): method __init__ (line 8) | def __init__(self, text: str, model_type: ModelType, parent: QWidget |... FILE: buzz/widgets/transcriber/languages_combo_box.py class LanguagesComboBox (line 12) | class LanguagesComboBox(QComboBox): method __init__ (line 18) | def __init__( method on_index_changed (line 52) | def on_index_changed(self, index: int): method showPopup (line 55) | def showPopup(self): FILE: buzz/widgets/transcriber/mms_language_line_edit.py class MMSLanguageLineEdit (line 10) | class MMSLanguageLineEdit(LineEdit): method __init__ (line 19) | def __init__( method _on_text_changed (line 37) | def _on_text_changed(self, text: str): method language (line 42) | def language(self) -> str: method setLanguage (line 46) | def setLanguage(self, language: str): FILE: buzz/widgets/transcriber/tasks_combo_box.py class TasksComboBox (line 9) | class TasksComboBox(QComboBox): method __init__ (line 14) | def __init__(self, default_task: Task, parent: Optional[QWidget], *arg... method on_index_changed (line 21) | def on_index_changed(self, index: int): FILE: buzz/widgets/transcriber/transcription_options_group_box.py class TranscriptionOptionsGroupBox (line 27) | class TranscriptionOptionsGroupBox(QGroupBox): method __init__ (line 31) | def __init__( method on_openai_access_token_edit_changed (line 137) | def on_openai_access_token_edit_changed(self, access_token: str): method on_language_changed (line 141) | def on_language_changed(self, language: str): method on_mms_language_changed (line 148) | def on_mms_language_changed(self, language: str): method on_task_changed (line 156) | def on_task_changed(self, task: Task): method open_advanced_settings (line 160) | def open_advanced_settings(self): method on_transcription_options_changed (line 163) | def on_transcription_options_changed( method reset_visible_rows (line 169) | def reset_visible_rows(self): method on_model_type_changed (line 255) | def on_model_type_changed(self, model_type: ModelType): method on_whisper_model_size_changed (line 267) | def on_whisper_model_size_changed(self, text: str): method on_hugging_face_model_changed (line 275) | def on_hugging_face_model_changed(self, model: str): method _update_language_widget_visibility (line 284) | def _update_language_widget_visibility(self): FILE: buzz/widgets/transcription_record.py class TranscriptionRecord (line 9) | class TranscriptionRecord: method id (line 11) | def id(record: QSqlRecord) -> UUID: method model (line 15) | def model(record: QSqlRecord) -> TranscriptionModel: method task (line 27) | def task(record: QSqlRecord) -> Task: FILE: buzz/widgets/transcription_task_folder_watcher.py class TranscriptionTaskFolderWatcher (line 21) | class TranscriptionTaskFolderWatcher(QFileSystemWatcher): method __init__ (line 26) | def __init__( method set_preferences (line 38) | def set_preferences(self, preferences: FolderWatchPreferences): method find_tasks (line 53) | def find_tasks(self): FILE: buzz/widgets/transcription_tasks_table_widget.py class Column (line 33) | class Column(enum.Enum): class ColDef (line 58) | class ColDef: function format_record_status_text (line 67) | def format_record_status_text(record: QSqlRecord) -> str: class TranscriptionTasksTableHeaderView (line 166) | class TranscriptionTasksTableHeaderView(QHeaderView): method __init__ (line 167) | def __init__(self, orientation, parent=None): method contextMenuEvent (line 170) | def contextMenuEvent(self, event): method on_column_checked (line 190) | def on_column_checked(self, column_index: int, checked: bool): class TranscriptionTasksTableWidget (line 231) | class TranscriptionTasksTableWidget(QTableView): method __init__ (line 235) | def __init__(self, parent: Optional[QWidget] = None): method contextMenuEvent (line 294) | def contextMenuEvent(self, event): method save_column_visibility (line 316) | def save_column_visibility(self): method on_column_resized (line 326) | def on_column_resized(self, logical_index: int, old_size: int, new_siz... method on_column_moved (line 330) | def on_column_moved(self, logical_index: int, old_visual_index: int, n... method on_sort_indicator_changed (line 336) | def on_sort_indicator_changed(self, logical_index: int, order: Qt.Sort... method on_double_click (line 340) | def on_double_click(self, index: QModelIndex): method save_column_widths (line 345) | def save_column_widths(self): method save_column_order (line 356) | def save_column_order(self): method load_column_widths (line 369) | def load_column_widths(self): method save_sort_state (line 379) | def save_sort_state(self): method load_sort_state (line 387) | def load_sort_state(self): method load_column_visibility (line 398) | def load_column_visibility(self): method load_column_order (line 415) | def load_column_order(self): method reset_column_order (line 435) | def reset_column_order(self): method reload_column_order_from_settings (line 483) | def reload_column_order_from_settings(self): method copy_selected_fields (line 545) | def copy_selected_fields(self): method mouseDoubleClickEvent (line 557) | def mouseDoubleClickEvent(self, event: QtGui.QMouseEvent) -> None: method keyPressEvent (line 568) | def keyPressEvent(self, event: QtGui.QKeyEvent) -> None: method selected_transcriptions (line 583) | def selected_transcriptions(self) -> List[Transcription]: method delete_transcriptions (line 587) | def delete_transcriptions(self, rows: List[QModelIndex]): method transcription (line 592) | def transcription(self, index: QModelIndex) -> Transcription: method refresh_all (line 595) | def refresh_all(self): method refresh_row (line 598) | def refresh_row(self, id: UUID): method format_timedelta (line 606) | def format_timedelta(delta: timedelta): method on_rename_action (line 617) | def on_rename_action(self): method on_notes_action (line 650) | def on_notes_action(self): method on_restart_transcription_action (line 677) | def on_restart_transcription_action(self): method _restart_transcription_task (line 708) | def _restart_transcription_task(self, transcription): FILE: buzz/widgets/transcription_viewer/export_transcription_menu.py class ExportTranscriptionMenu (line 16) | class ExportTranscriptionMenu(QMenu): method __init__ (line 17) | def __init__( method extract_format_and_segment_key (line 49) | def extract_format_and_segment_key(action_text: str): method on_translation_available (line 57) | def on_translation_available(self): method on_menu_triggered (line 61) | def on_menu_triggered(self, action: QAction): FILE: buzz/widgets/transcription_viewer/speaker_identification_widget.py function process_in_batches (line 50) | def process_in_batches( class IdentificationWorker (line 108) | class IdentificationWorker(QObject): method __init__ (line 113) | def __init__(self, transcription, transcription_service): method cancel (line 119) | def cancel(self): method get_transcript (line 123) | def get_transcript(self, audio, **kwargs) -> dict: method run (line 152) | def run(self): class SpeakerIdentificationWidget (line 413) | class SpeakerIdentificationWidget(QWidget): method __init__ (line 418) | def __init__( method on_identify_button_clicked (line 553) | def on_identify_button_clicked(self): method on_cancel_button_clicked (line 576) | def on_cancel_button_clicked(self): method _reset_buttons (line 586) | def _reset_buttons(self): method _on_thread_finished (line 593) | def _on_thread_finished(self, result): method on_identification_error (line 602) | def on_identification_error(self, error_message): method on_progress_update (line 608) | def on_progress_update(self, progress): method on_identification_finished (line 623) | def on_identification_finished(self, result): method on_speaker_preview (line 667) | def on_speaker_preview(self, speaker_id): method on_save_button_clicked (line 687) | def on_save_button_clicked(self): method changeEvent (line 762) | def changeEvent(self, event): method closeEvent (line 771) | def closeEvent(self, event): method _cleanup_thread (line 784) | def _cleanup_thread(self): FILE: buzz/widgets/transcription_viewer/transcription_resizer_widget.py class TranscriptionWorker (line 42) | class TranscriptionWorker(QObject): method __init__ (line 45) | def __init__(self, transcription, transcription_options, transcription... method get_transcript (line 52) | def get_transcript(self, audio, **kwargs) -> dict: method run (line 95) | def run(self): class TranscriptionResizerWidget (line 135) | class TranscriptionResizerWidget(QWidget): method __init__ (line 140) | def __init__( method load_preferences (line 298) | def load_preferences(self): method on_resize_button_clicked (line 304) | def on_resize_button_clicked(self): method on_extend_button_clicked (line 348) | def on_extend_button_clicked(self): method on_merge_button_clicked (line 386) | def on_merge_button_clicked(self): method on_transcription_completed (line 432) | def on_transcription_completed(self, segments): method closeEvent (line 441) | def closeEvent(self, event): FILE: buzz/widgets/transcription_viewer/transcription_segments_editor_widget.py class Column (line 25) | class Column(enum.Enum): class ColDef (line 35) | class ColDef: function parse_timestamp (line 42) | def parse_timestamp(timestamp_str: str) -> Optional[int]: class TimeStampLineEdit (line 72) | class TimeStampLineEdit(QLineEdit): method __init__ (line 75) | def __init__(self, parent=None): method set_milliseconds (line 84) | def set_milliseconds(self, ms: int): method get_milliseconds (line 88) | def get_milliseconds(self) -> int: method keyPressEvent (line 94) | def keyPressEvent(self, event): method focusOutEvent (line 106) | def focusOutEvent(self, event): class TimeStampDelegate (line 118) | class TimeStampDelegate(QStyledItemDelegate): method displayText (line 119) | def displayText(self, value, locale): class TimeStampEditorDelegate (line 123) | class TimeStampEditorDelegate(QStyledItemDelegate): method createEditor (line 128) | def createEditor(self, parent, option, index): method on_editor_text_changed (line 134) | def on_editor_text_changed(self, editor, index): method setEditorData (line 139) | def setEditorData(self, editor, index): method setModelData (line 145) | def setModelData(self, editor, model, index): method displayText (line 198) | def displayText(self, value, locale): class CustomTextEdit (line 202) | class CustomTextEdit(QTextEdit): method __init__ (line 205) | def __init__(self, parent=None): method keyPressEvent (line 208) | def keyPressEvent(self, event): class WordWrapDelegate (line 218) | class WordWrapDelegate(QStyledItemDelegate): method createEditor (line 219) | def createEditor(self, parent, option, index): method setModelData (line 227) | def setModelData(self, editor, model, index): class TranscriptionSegmentModel (line 231) | class TranscriptionSegmentModel(QSqlTableModel): method __init__ (line 232) | def __init__(self, transcription_id: UUID): class TranscriptionSegmentsEditorWidget (line 239) | class TranscriptionSegmentsEditorWidget(QTableView): method keyPressEvent (line 244) | def keyPressEvent(self, event): method __init__ (line 254) | def __init__( method init_row_height (line 321) | def init_row_height(self): method has_non_empty_translation (line 329) | def has_non_empty_translation(self) -> bool: method resizeEvent (line 335) | def resizeEvent(self, event): method update_translation (line 352) | def update_translation(self, translation: str, segment_id: Optional[in... method on_selection_changed (line 361) | def on_selection_changed( method segment (line 367) | def segment(self, index: QModelIndex) -> QSqlRecord: method segments (line 370) | def segments(self) -> list[QSqlRecord]: method highlight_and_scroll_to_row (line 373) | def highlight_and_scroll_to_row(self, row_index: int): FILE: buzz/widgets/transcription_viewer/transcription_view_mode_tool_button.py class ViewMode (line 15) | class ViewMode(Enum): class TranscriptionViewModeToolButton (line 21) | class TranscriptionViewModeToolButton(QToolButton): method __init__ (line 24) | def __init__( method on_translation_available (line 65) | def on_translation_available(self): FILE: buzz/widgets/transcription_viewer/transcription_viewer_widget.py class TranscriptionViewerWidget (line 73) | class TranscriptionViewerWidget(QWidget): method __init__ (line 78) | def __init__( method load_transcription_media (line 384) | def load_transcription_media(self): method on_transcript_segment_clicked (line 396) | def on_transcript_segment_clicked(self, segment): method restore_ui_state (line 405) | def restore_ui_state(self): method create_search_bar (line 415) | def create_search_bar(self): method create_loop_controls (line 479) | def create_loop_controls(self): method show_loop_controls (line 573) | def show_loop_controls(self): method hide_loop_controls (line 582) | def hide_loop_controls(self): method toggle_playback_controls_visibility (line 591) | def toggle_playback_controls_visibility(self): method toggle_audio_playback (line 598) | def toggle_audio_playback(self): method replay_current_segment (line 605) | def replay_current_segment(self): method decrease_segment_start (line 621) | def decrease_segment_start(self): method increase_segment_start (line 625) | def increase_segment_start(self): method decrease_segment_end (line 629) | def decrease_segment_end(self): method increase_segment_end (line 633) | def increase_segment_end(self): method _adjust_segment_timestamp (line 637) | def _adjust_segment_timestamp(self, field: str, delta_ms: int): method on_audio_playback_state_changed (line 724) | def on_audio_playback_state_changed(self, state): method initialize_speed_control (line 733) | def initialize_speed_control(self): method on_speed_changed (line 749) | def on_speed_changed(self, speed_text: str): method increase_speed (line 782) | def increase_speed(self): method decrease_speed (line 788) | def decrease_speed(self): method get_current_speed (line 794) | def get_current_speed(self) -> float: method set_speed (line 802) | def set_speed(self, speed: float): method on_search_text_changed (line 817) | def on_search_text_changed(self, text: str): method perform_search (line 830) | def perform_search(self): method search_in_table (line 842) | def search_in_table(self): method search_in_text (line 868) | def search_in_text(self): method update_search_ui (line 888) | def update_search_ui(self): method highlight_current_match (line 905) | def highlight_current_match(self): method highlight_table_match (line 919) | def highlight_table_match(self, row_index: int): method highlight_text_match (line 927) | def highlight_text_match(self, start_pos: int): method search_next (line 939) | def search_next(self): method search_previous (line 949) | def search_previous(self): method search_next_if_results (line 959) | def search_next_if_results(self): method search_previous_if_results (line 964) | def search_previous_if_results(self): method update_search_results_label (line 969) | def update_search_results_label(self): method clear_search (line 979) | def clear_search(self): method hide_search_bar (line 999) | def hide_search_bar(self): method setup_shortcuts (line 1011) | def setup_shortcuts(self): method focus_search_input (line 1068) | def focus_search_input(self): method toggle_search_bar_visibility (line 1083) | def toggle_search_bar_visibility(self): method show_search_bar (line 1095) | def show_search_bar(self): method eventFilter (line 1107) | def eventFilter(self, obj, event): method reset_view (line 1121) | def reset_view(self): method on_view_mode_changed (line 1182) | def on_view_mode_changed(self, view_mode: ViewMode) -> None: method on_segment_selected (line 1190) | def on_segment_selected(self, segment: QSqlRecord): method on_timestamp_being_edited (line 1230) | def on_timestamp_being_edited(self, row: int, column: int, new_value_m... method on_audio_player_position_ms_changed (line 1258) | def on_audio_player_position_ms_changed(self, position_ms: int) -> None: method resize_current_segment_frame (line 1311) | def resize_current_segment_frame(self): method load_preferences (line 1353) | def load_preferences(self): method open_advanced_settings (line 1360) | def open_advanced_settings(self): method on_transcription_options_changed (line 1363) | def on_transcription_options_changed( method on_translate_button_clicked (line 1368) | def on_translate_button_clicked(self): method run_translation (line 1386) | def run_translation(self): method on_resize_button_clicked (line 1394) | def on_resize_button_clicked(self): method on_speaker_identification_button_clicked (line 1405) | def on_speaker_identification_button_clicked(self): method on_loop_toggle_changed (line 1420) | def on_loop_toggle_changed(self, enabled: bool): method on_follow_audio_toggle_changed (line 1459) | def on_follow_audio_toggle_changed(self, enabled: bool): method on_scroll_to_current_button_clicked (line 1478) | def on_scroll_to_current_button_clicked(self): method auto_scroll_to_current_position (line 1507) | def auto_scroll_to_current_position(self): method resizeEvent (line 1541) | def resizeEvent(self, event): method closeEvent (line 1547) | def closeEvent(self, event): method save_geometry (line 1584) | def save_geometry(self): method load_geometry (line 1590) | def load_geometry(self): method save_splitter_sizes (line 1601) | def save_splitter_sizes(self): method load_splitter_sizes (line 1617) | def load_splitter_sizes(self): method on_splitter_moved (line 1640) | def on_splitter_moved(self, pos: int, index: int): FILE: buzz/widgets/update_dialog.py class UpdateDialog (line 29) | class UpdateDialog(QDialog): method __init__ (line 31) | def __init__( method _setup_ui (line 52) | def _setup_ui(self): method _on_download_clicked (line 120) | def _on_download_clicked(self): method _download_next_file (line 138) | def _download_next_file(self): method _on_download_progress (line 158) | def _on_download_progress(self, bytes_received: int, bytes_total: int): method _on_download_finished (line 174) | def _on_download_finished(self): method _all_downloads_finished (line 223) | def _all_downloads_finished(self): method _run_installer (line 229) | def _run_installer(self): method _reset_ui (line 257) | def _reset_ui(self): FILE: buzz/widgets/video_player.py class VideoPlayer (line 9) | class VideoPlayer(QWidget): method __init__ (line 12) | def __init__(self, file_path: str, parent=None): method on_error_occurred (line 85) | def on_error_occurred(self, error: QMediaPlayer.Error, error_string: s... method on_media_status_changed (line 88) | def on_media_status_changed(self, status: QMediaPlayer.MediaStatus): method toggle_playback (line 100) | def toggle_playback(self): method on_slider_moved (line 106) | def on_slider_moved(self, position): method on_slider_pressed (line 109) | def on_slider_pressed(self): method on_slider_released (line 113) | def on_slider_released(self): method set_position (line 119) | def set_position(self, position_ms: int): method on_position_changed (line 122) | def on_position_changed(self, position_ms: int): method on_duration_changed (line 143) | def on_duration_changed(self, duration_ms: int): method on_playback_state_changed (line 148) | def on_playback_state_changed(self, state: QMediaPlayer.PlaybackState): method update_time_label (line 154) | def update_time_label(self): method set_range (line 159) | def set_range(self, range_ms: Tuple[int, int]): method clear_range (line 167) | def clear_range(self): method stop (line 171) | def stop(self): FILE: docs/src/pages/index.tsx function Home (line 8) | function Home(): JSX.Element { FILE: hatch_build.py class CustomBuildHook (line 10) | class CustomBuildHook(BuildHookInterface): method initialize (line 13) | def initialize(self, version, build_data): FILE: msgfmt.py function usage (line 26) | def usage(ecode, msg=""): function make (line 36) | def make(filename, outfile): function main (line 41) | def main(): FILE: tests/app_main.py class TestMain (line 5) | class TestMain: method test_main (line 6) | def test_main(self): FILE: tests/cache_test.py class TestTasksCache (line 9) | class TestTasksCache: method test_should_save_and_load (line 10) | def test_should_save_and_load(self, tmp_path): FILE: tests/cli_test.py class TestCLI (line 12) | class TestCLI: method test_cli (line 33) | def test_cli(self, qapp, qapp_args, qtbot: QtBot): FILE: tests/conftest.py function db (line 30) | def db() -> QSqlDatabase: function transcription_dao (line 38) | def transcription_dao(db, request: SubRequest) -> TranscriptionDAO: function transcription_service (line 48) | def transcription_service( function transcription_segment_dao (line 55) | def transcription_segment_dao(db) -> TranscriptionSegmentDAO: function qapp_cls (line 60) | def qapp_cls(): function qapp_args (line 65) | def qapp_args(request): function settings (line 73) | def settings(): function shortcuts (line 84) | def shortcuts(settings): FILE: tests/db/dao/transcription_dao_test.py function db (line 11) | def db(): function transcription_dao (line 50) | def transcription_dao(db): function sample_transcription (line 56) | def sample_transcription(): class TestTranscriptionDAO (line 70) | class TestTranscriptionDAO: method test_insert_transcription_with_name_and_notes (line 71) | def test_insert_transcription_with_name_and_notes(self, transcription_... method test_update_transcription_name (line 86) | def test_update_transcription_name(self, transcription_dao, sample_tra... method test_update_transcription_notes (line 103) | def test_update_transcription_notes(self, transcription_dao, sample_tr... method test_update_transcription_name_nonexistent_id (line 120) | def test_update_transcription_name_nonexistent_id(self, transcription_... method test_update_transcription_notes_nonexistent_id (line 128) | def test_update_transcription_notes_nonexistent_id(self, transcription... method test_update_transcription_name_empty_string (line 136) | def test_update_transcription_name_empty_string(self, transcription_da... method test_update_transcription_notes_empty_string (line 152) | def test_update_transcription_notes_empty_string(self, transcription_d... method test_update_transcription_name_with_none (line 168) | def test_update_transcription_name_with_none(self, transcription_dao, ... method test_update_transcription_notes_with_none (line 185) | def test_update_transcription_notes_with_none(self, transcription_dao,... method test_insert_transcription_without_name_and_notes (line 202) | def test_insert_transcription_without_name_and_notes(self, transcripti... method test_database_error_handling (line 227) | def test_database_error_handling(self, transcription_dao): FILE: tests/db/entity/transcription_test.py class TestTranscription (line 7) | class TestTranscription: method test_transcription_creation_with_name_and_notes (line 8) | def test_transcription_creation_with_name_and_notes(self): method test_transcription_creation_without_name_and_notes (line 24) | def test_transcription_creation_without_name_and_notes(self): method test_transcription_creation_with_empty_name_and_notes (line 38) | def test_transcription_creation_with_empty_name_and_notes(self): method test_transcription_name_assignment (line 54) | def test_transcription_name_assignment(self): method test_transcription_notes_assignment (line 77) | def test_transcription_notes_assignment(self): method test_transcription_with_unicode_name_and_notes (line 100) | def test_transcription_with_unicode_name_and_notes(self): method test_transcription_with_long_name_and_notes (line 116) | def test_transcription_with_long_name_and_notes(self): method test_transcription_name_with_special_characters (line 137) | def test_transcription_name_with_special_characters(self): method test_transcription_notes_with_newlines (line 153) | def test_transcription_notes_with_newlines(self): method test_transcription_equality_with_name_and_notes (line 176) | def test_transcription_equality_with_name_and_notes(self): method test_transcription_inequality_with_different_name_and_notes (line 205) | def test_transcription_inequality_with_different_name_and_notes(self): method test_transcription_id_as_uuid_property (line 234) | def test_transcription_id_as_uuid_property(self): method test_transcription_string_representation_with_name_and_notes (line 252) | def test_transcription_string_representation_with_name_and_notes(self): method test_transcription_with_none_values_in_other_fields (line 269) | def test_transcription_with_none_values_in_other_fields(self): FILE: tests/db/service/transcription_service_test.py function mock_transcription_dao (line 10) | def mock_transcription_dao(): function mock_transcription_segment_dao (line 16) | def mock_transcription_segment_dao(): function transcription_service (line 22) | def transcription_service(mock_transcription_dao, mock_transcription_seg... function sample_transcription (line 28) | def sample_transcription(): class TestTranscriptionService (line 42) | class TestTranscriptionService: method test_update_transcription_name (line 43) | def test_update_transcription_name(self, transcription_service, mock_t... method test_update_transcription_notes (line 54) | def test_update_transcription_notes(self, transcription_service, mock_... method test_update_transcription_name_with_empty_string (line 65) | def test_update_transcription_name_with_empty_string(self, transcripti... method test_update_transcription_notes_with_empty_string (line 76) | def test_update_transcription_notes_with_empty_string(self, transcript... method test_update_transcription_name_with_none (line 87) | def test_update_transcription_name_with_none(self, transcription_servi... method test_update_transcription_notes_with_none (line 97) | def test_update_transcription_notes_with_none(self, transcription_serv... method test_update_transcription_name_propagates_dao_exception (line 107) | def test_update_transcription_name_propagates_dao_exception(self, tran... method test_update_transcription_notes_propagates_dao_exception (line 119) | def test_update_transcription_notes_propagates_dao_exception(self, tra... method test_update_transcription_name_with_string_uuid (line 131) | def test_update_transcription_name_with_string_uuid(self, transcriptio... method test_update_transcription_notes_with_string_uuid (line 145) | def test_update_transcription_notes_with_string_uuid(self, transcripti... method test_update_transcription_name_multiple_calls (line 159) | def test_update_transcription_name_multiple_calls(self, transcription_... method test_update_transcription_notes_multiple_calls (line 175) | def test_update_transcription_notes_multiple_calls(self, transcription... method test_update_transcription_name_with_unicode (line 191) | def test_update_transcription_name_with_unicode(self, transcription_se... method test_update_transcription_notes_with_unicode (line 202) | def test_update_transcription_notes_with_unicode(self, transcription_s... FILE: tests/gui_test.py function audio_setup (line 43) | def audio_setup(): class TestLanguagesComboBox (line 52) | class TestLanguagesComboBox: method test_should_show_sorted_whisper_languages (line 53) | def test_should_show_sorted_whisper_languages(self, qtbot): method test_should_select_en_as_default_language (line 59) | def test_should_select_en_as_default_language(self, qtbot): method test_should_select_detect_language_as_default (line 64) | def test_should_select_detect_language_as_default(self, qtbot): class TestAudioDevicesComboBox (line 70) | class TestAudioDevicesComboBox: method test_get_devices (line 71) | def test_get_devices(self): method test_select_default_mic_when_no_default (line 82) | def test_select_default_mic_when_no_default(self): function clear_settings (line 90) | def clear_settings(): class TestAboutDialog (line 95) | class TestAboutDialog: method test_should_check_for_updates (line 96) | def test_should_check_for_updates(self, qtbot: QtBot): class TestAdvancedSettingsDialog (line 113) | class TestAdvancedSettingsDialog: method test_should_update_advanced_settings (line 114) | def test_should_update_advanced_settings(self, qtbot: QtBot): class TestHuggingFaceSearchLineEdit (line 149) | class TestHuggingFaceSearchLineEdit: method test_should_update_selected_model_on_type (line 150) | def test_should_update_selected_model_on_type(self, qtbot: QtBot): method test_should_show_list_of_models (line 163) | def test_should_show_list_of_models(self, qtbot: QtBot): method test_should_select_model_from_list (line 175) | def test_should_select_model_from_list(self, qtbot: QtBot): method network_access_manager (line 206) | def network_access_manager(): method _set_text_and_wait_response (line 213) | def _set_text_and_wait_response(qtbot: QtBot, widget: HuggingFaceSearc... class TestTranscriptionOptionsGroupBox (line 219) | class TestTranscriptionOptionsGroupBox: method test_should_update_model_type (line 220) | def test_should_update_model_type(self, qtbot): FILE: tests/mock_qt.py class MockNetworkReply (line 8) | class MockNetworkReply(QNetworkReply): method __init__ (line 9) | def __init__(self, data: object, _: Optional[QObject] = None) -> None: method readAll (line 12) | def readAll(self) -> "QByteArray": method error (line 15) | def error(self) -> "QNetworkReply.NetworkError": method deleteLater (line 18) | def deleteLater(self) -> None: class MockNetworkAccessManager (line 22) | class MockNetworkAccessManager(QNetworkAccessManager): method __init__ (line 26) | def __init__( method get (line 32) | def get(self, _: "QNetworkRequest") -> "QNetworkReply": class MockDownloadReply (line 37) | class MockDownloadReply(QObject): method __init__ (line 42) | def __init__( method readAll (line 55) | def readAll(self) -> QByteArray: method error (line 58) | def error(self) -> "QNetworkReply.NetworkError": method errorString (line 61) | def errorString(self) -> str: method abort (line 64) | def abort(self) -> None: method deleteLater (line 67) | def deleteLater(self) -> None: method emit_finished (line 70) | def emit_finished(self) -> None: class MockDownloadNetworkManager (line 74) | class MockDownloadNetworkManager(QNetworkAccessManager): method __init__ (line 77) | def __init__( method get (line 86) | def get(self, _: "QNetworkRequest") -> "MockDownloadReply": FILE: tests/mock_sounddevice.py class MockInputStream (line 97) | class MockInputStream: method __init__ (line 101) | def __init__( method start (line 121) | def start(self): method target (line 124) | def target(self): method stop (line 150) | def stop(self): method close (line 155) | def close(self): method __enter__ (line 158) | def __enter__(self): method __exit__ (line 161) | def __exit__(self, exc_type, exc_val, exc_tb): class MockSoundDevice (line 165) | class MockSoundDevice: method __init__ (line 166) | def __init__(self): method InputStream (line 169) | def InputStream(self, *args, **kwargs): method query_devices (line 172) | def query_devices(self, device=None): method check_input_settings (line 178) | def check_input_settings(self, device=None, samplerate=None): FILE: tests/model_loader.py function get_model_path (line 4) | def get_model_path(transcription_model: TranscriptionModel) -> str: FILE: tests/model_loader_test.py class TestModelLoader (line 24) | class TestModelLoader: method test_download_model (line 34) | def test_download_model(self, model: TranscriptionModel): class TestMapLanguageToMms (line 45) | class TestMapLanguageToMms: method test_empty_returns_english (line 46) | def test_empty_returns_english(self): method test_two_letter_known_code (line 49) | def test_two_letter_known_code(self): method test_three_letter_code_returned_as_is (line 54) | def test_three_letter_code_returned_as_is(self): method test_unknown_two_letter_code_returned_as_is (line 58) | def test_unknown_two_letter_code_returned_as_is(self): method test_various_language_codes (line 71) | def test_various_language_codes(self, code, expected): class TestIsMmsModel (line 75) | class TestIsMmsModel: method test_empty_string (line 76) | def test_empty_string(self): method test_mms_in_model_id (line 79) | def test_mms_in_model_id(self): method test_mms_case_insensitive (line 82) | def test_mms_case_insensitive(self): method test_non_mms_model (line 85) | def test_non_mms_model(self): class TestWhisperModelSize (line 89) | class TestWhisperModelSize: method test_to_faster_whisper_model_size_large (line 90) | def test_to_faster_whisper_model_size_large(self): method test_to_faster_whisper_model_size_tiny (line 93) | def test_to_faster_whisper_model_size_tiny(self): method test_to_faster_whisper_model_size_largev3 (line 96) | def test_to_faster_whisper_model_size_largev3(self): method test_to_whisper_cpp_model_size_large (line 99) | def test_to_whisper_cpp_model_size_large(self): method test_to_whisper_cpp_model_size_tiny (line 102) | def test_to_whisper_cpp_model_size_tiny(self): method test_str (line 105) | def test_str(self): class TestModelType (line 112) | class TestModelType: method test_supports_initial_prompt (line 113) | def test_supports_initial_prompt(self): method test_is_available (line 129) | def test_is_available(self, platform_system, platform_machine, expecte... method test_is_manually_downloadable (line 141) | def test_is_manually_downloadable(self): class TestTranscriptionModel (line 149) | class TestTranscriptionModel: method test_str_whisper (line 150) | def test_str_whisper(self): method test_str_whisper_cpp (line 156) | def test_str_whisper_cpp(self): method test_str_hugging_face (line 162) | def test_str_hugging_face(self): method test_str_faster_whisper (line 169) | def test_str_faster_whisper(self): method test_str_openai_api (line 176) | def test_str_openai_api(self): method test_default (line 180) | def test_default(self): method test_get_local_model_path_openai_api (line 185) | def test_get_local_model_path_openai_api(self): class TestGetExpectedWhisperModelSize (line 190) | class TestGetExpectedWhisperModelSize: method test_known_sizes (line 191) | def test_known_sizes(self): method test_unknown_size_returns_none (line 195) | def test_unknown_size_returns_none(self): method test_all_defined_sizes_have_values (line 199) | def test_all_defined_sizes_have_values(self): class TestGetWhisperFilePath (line 204) | class TestGetWhisperFilePath: method test_custom_size (line 205) | def test_custom_size(self): method test_tiny_size (line 210) | def test_tiny_size(self): class TestTranscriptionModelIsDeletable (line 216) | class TestTranscriptionModelIsDeletable: method test_whisper_model_not_downloaded (line 217) | def test_whisper_model_not_downloaded(self): method test_whisper_model_downloaded (line 222) | def test_whisper_model_downloaded(self): method test_openai_api_not_deletable (line 227) | def test_openai_api_not_deletable(self): method test_hugging_face_not_deletable (line 231) | def test_hugging_face_not_deletable(self): class TestTranscriptionModelGetLocalModelPath (line 239) | class TestTranscriptionModelGetLocalModelPath: method test_whisper_cpp_file_not_exists (line 240) | def test_whisper_cpp_file_not_exists(self): method test_whisper_file_not_exists (line 246) | def test_whisper_file_not_exists(self): method test_whisper_file_too_small (line 251) | def test_whisper_file_too_small(self): method test_whisper_file_valid (line 258) | def test_whisper_file_valid(self): method test_faster_whisper_not_found (line 267) | def test_faster_whisper_not_found(self): method test_hugging_face_not_found (line 272) | def test_hugging_face_not_found(self): class TestTranscriptionModelOpenPath (line 282) | class TestTranscriptionModelOpenPath: method test_open_path_linux (line 283) | def test_open_path_linux(self): method test_open_path_darwin (line 289) | def test_open_path_darwin(self): class TestTranscriptionModelOpenFileLocation (line 296) | class TestTranscriptionModelOpenFileLocation: method test_whisper_opens_parent_directory (line 297) | def test_whisper_opens_parent_directory(self): method test_hugging_face_opens_grandparent_directory (line 304) | def test_hugging_face_opens_grandparent_directory(self): method test_faster_whisper_opens_grandparent_directory (line 315) | def test_faster_whisper_opens_grandparent_directory(self): method test_no_model_path_does_nothing (line 323) | def test_no_model_path_does_nothing(self): class TestTranscriptionModelDeleteLocalFile (line 331) | class TestTranscriptionModelDeleteLocalFile: method test_whisper_model_removes_file (line 332) | def test_whisper_model_removes_file(self, tmp_path): method test_whisper_cpp_custom_removes_file (line 340) | def test_whisper_cpp_custom_removes_file(self, tmp_path): method test_whisper_cpp_non_custom_removes_bin_file (line 348) | def test_whisper_cpp_non_custom_removes_bin_file(self, tmp_path): method test_whisper_cpp_non_custom_removes_coreml_files (line 356) | def test_whisper_cpp_non_custom_removes_coreml_files(self, tmp_path): method test_hugging_face_removes_directory_tree (line 370) | def test_hugging_face_removes_directory_tree(self, tmp_path): method test_faster_whisper_removes_directory_tree (line 389) | def test_faster_whisper_removes_directory_tree(self, tmp_path): class TestHuggingfaceDownloadMonitorFileSize (line 404) | class TestHuggingfaceDownloadMonitorFileSize: method _make_monitor (line 405) | def _make_monitor(self, tmp_path): method test_emits_progress_for_tmp_files (line 417) | def test_emits_progress_for_tmp_files(self, tmp_path): method test_emits_progress_for_incomplete_files (line 451) | def test_emits_progress_for_incomplete_files(self, tmp_path): method test_stop_monitoring_emits_100_percent (line 471) | def test_stop_monitoring_emits_100_percent(self, tmp_path): class TestModelDownloaderDownloadModel (line 480) | class TestModelDownloaderDownloadModel: method _make_downloader (line 481) | def _make_downloader(self, model): method test_download_model_fresh_success (line 488) | def test_download_model_fresh_success(self, tmp_path): method test_download_model_already_downloaded_sha256_match (line 511) | def test_download_model_already_downloaded_sha256_match(self, tmp_path): method test_download_model_sha256_mismatch_redownloads (line 534) | def test_download_model_sha256_mismatch_redownloads(self, tmp_path): method test_download_model_stopped_mid_download (line 569) | def test_download_model_stopped_mid_download(self, tmp_path): method test_download_model_resumes_partial (line 596) | def test_download_model_resumes_partial(self, tmp_path): class TestModelDownloaderWhisperCpp (line 637) | class TestModelDownloaderWhisperCpp: method _make_downloader (line 638) | def _make_downloader(self, model, custom_url=None): method test_standard_model_calls_download_from_huggingface (line 646) | def test_standard_model_calls_download_from_huggingface(self): method test_lumii_model_uses_lumii_repo (line 668) | def test_lumii_model_uses_lumii_repo(self): method test_custom_url_calls_download_model_to_path (line 686) | def test_custom_url_calls_download_model_to_path(self): method test_coreml_model_includes_mlmodelc_in_file_list (line 701) | def test_coreml_model_includes_mlmodelc_in_file_list(self): method test_coreml_zip_extracted_and_existing_dir_removed (line 724) | def test_coreml_zip_extracted_and_existing_dir_removed(self, tmp_path): class TestModelLoaderCertifiImportError (line 753) | class TestModelLoaderCertifiImportError: method test_certifi_import_error_path (line 754) | def test_certifi_import_error_path(self): method test_configure_http_backend_import_error (line 763) | def test_configure_http_backend_import_error(self): FILE: tests/recording_test.py class TestRecordingAmplitudeListenerInit (line 8) | class TestRecordingAmplitudeListenerInit: method test_initial_buffer_is_empty (line 9) | def test_initial_buffer_is_empty(self): method test_initial_accumulation_size_is_zero (line 15) | def test_initial_accumulation_size_is_zero(self): class TestRecordingAmplitudeListenerStreamCallback (line 20) | class TestRecordingAmplitudeListenerStreamCallback: method _make_listener (line 21) | def _make_listener(self) -> RecordingAmplitudeListener: method test_emits_amplitude_changed (line 26) | def test_emits_amplitude_changed(self): method test_amplitude_is_rms (line 37) | def test_amplitude_is_rms(self): method test_accumulates_buffer (line 47) | def test_accumulates_buffer(self): method test_emits_average_amplitude_when_buffer_full (line 54) | def test_emits_average_amplitude_when_buffer_full(self): method test_resets_buffer_after_emitting_average (line 67) | def test_resets_buffer_after_emitting_average(self): method test_does_not_emit_average_before_buffer_full (line 77) | def test_does_not_emit_average_before_buffer_full(self): method test_average_amplitude_is_rms_of_accumulated_buffer (line 89) | def test_average_amplitude_is_rms_of_accumulated_buffer(self): class TestRecordingAmplitudeListenerStart (line 105) | class TestRecordingAmplitudeListenerStart: method test_accumulation_size_set_from_sample_rate (line 106) | def test_accumulation_size_set_from_sample_rate(self): FILE: tests/recording_transcriber_test.py function make_transcriber (line 14) | def make_transcriber( class TestRecordingTranscriberInit (line 41) | class TestRecordingTranscriberInit: method test_default_batch_size_is_5_seconds (line 42) | def test_default_batch_size_is_5_seconds(self): method test_append_and_correct_mode_batch_size_uses_transcription_step (line 46) | def test_append_and_correct_mode_batch_size_uses_transcription_step(se... method test_append_and_correct_mode_keep_sample_seconds (line 51) | def test_append_and_correct_mode_keep_sample_seconds(self): method test_default_keep_sample_seconds (line 56) | def test_default_keep_sample_seconds(self): method test_queue_starts_empty (line 60) | def test_queue_starts_empty(self): method test_max_queue_size_is_three_batches (line 64) | def test_max_queue_size_is_three_batches(self): class TestAmplitude (line 69) | class TestAmplitude: method test_silence_returns_zero (line 70) | def test_silence_returns_zero(self): method test_unit_signal_returns_one (line 74) | def test_unit_signal_returns_one(self): method test_rms_calculation (line 78) | def test_rms_calculation(self): class TestStreamCallback (line 84) | class TestStreamCallback: method test_emits_amplitude_changed (line 85) | def test_emits_amplitude_changed(self): method test_appends_to_queue_when_not_full (line 95) | def test_appends_to_queue_when_not_full(self): method test_drops_chunk_when_queue_full (line 102) | def test_drops_chunk_when_queue_full(self): method test_thread_safety_with_concurrent_callbacks (line 113) | def test_thread_safety_with_concurrent_callbacks(self): class TestGetDeviceSampleRate (line 133) | class TestGetDeviceSampleRate: method test_returns_whisper_sample_rate_when_supported (line 134) | def test_returns_whisper_sample_rate_when_supported(self): method test_falls_back_to_device_default_sample_rate (line 139) | def test_falls_back_to_device_default_sample_rate(self): method test_falls_back_to_whisper_rate_when_query_returns_non_dict (line 145) | def test_falls_back_to_whisper_rate_when_query_returns_non_dict(self): class TestStopRecording (line 152) | class TestStopRecording: method test_sets_is_running_false (line 153) | def test_sets_is_running_false(self): method test_terminates_running_process (line 159) | def test_terminates_running_process(self): method test_kills_process_on_timeout (line 169) | def test_kills_process_on_timeout(self): method test_skips_terminate_when_process_already_stopped (line 181) | def test_skips_terminate_when_process_already_stopped(self): class TestStartWithSilence (line 192) | class TestStartWithSilence: method _run_with_mock_model (line 195) | def _run_with_mock_model(self, transcription_options, samples, expecte... method test_silent_audio_skips_transcription (line 246) | def test_silent_audio_skips_transcription(self): class TestStartPortAudioError (line 283) | class TestStartPortAudioError: method test_emits_error_on_portaudio_failure (line 284) | def test_emits_error_on_portaudio_failure(self): FILE: tests/settings/settings_test.py class TestSettings (line 7) | class TestSettings: method test_transcription_tasks_table_column_order_key (line 8) | def test_transcription_tasks_table_column_order_key(self): method test_transcription_tasks_table_column_widths_key (line 13) | def test_transcription_tasks_table_column_widths_key(self): method test_transcription_tasks_table_column_visibility_key_exists (line 18) | def test_transcription_tasks_table_column_visibility_key_exists(self): method test_transcription_tasks_table_sort_state_key (line 23) | def test_transcription_tasks_table_sort_state_key(self): method test_all_transcription_tasks_table_keys_are_strings (line 28) | def test_all_transcription_tasks_table_keys_are_strings(self): method test_transcription_tasks_table_keys_have_correct_prefix (line 35) | def test_transcription_tasks_table_keys_have_correct_prefix(self): method test_transcription_tasks_table_keys_are_unique (line 44) | def test_transcription_tasks_table_keys_are_unique(self): method test_settings_key_enum_values (line 55) | def test_settings_key_enum_values(self): method test_settings_key_immutability (line 69) | def test_settings_key_immutability(self): method test_settings_key_format_consistency (line 84) | def test_settings_key_format_consistency(self): method test_settings_key_length (line 101) | def test_settings_key_length(self): method test_settings_key_naming_convention (line 114) | def test_settings_key_naming_convention(self): method test_settings_key_usage_in_code (line 129) | def test_settings_key_usage_in_code(self): FILE: tests/store/keyring_store_test.py class TestKey (line 27) | class TestKey: method test_openai_api_key_exists (line 28) | def test_openai_api_key_exists(self): method test_openai_api_key_value (line 31) | def test_openai_api_key_value(self): method test_key_is_enum (line 34) | def test_key_is_enum(self): class TestIsLinux (line 38) | class TestIsLinux: method test_returns_true_on_linux (line 40) | def test_returns_true_on_linux(self): method test_returns_true_on_linux2 (line 44) | def test_returns_true_on_linux2(self): method test_returns_false_on_macos (line 48) | def test_returns_false_on_macos(self): method test_returns_false_on_windows (line 52) | def test_returns_false_on_windows(self): class TestDeriveKey (line 56) | class TestDeriveKey: method test_derive_key_returns_32_bytes (line 57) | def test_derive_key_returns_32_bytes(self): method test_derive_key_is_deterministic (line 63) | def test_derive_key_is_deterministic(self): method test_derive_key_different_for_different_names (line 70) | def test_derive_key_different_for_different_names(self): method test_derive_key_different_for_different_secrets (line 76) | def test_derive_key_different_for_different_secrets(self): class TestEncryptDecrypt (line 83) | class TestEncryptDecrypt: method test_encrypt_decrypt_roundtrip (line 84) | def test_encrypt_decrypt_roundtrip(self): method test_encrypt_decrypt_empty_string (line 91) | def test_encrypt_decrypt_empty_string(self): method test_encrypt_decrypt_unicode (line 98) | def test_encrypt_decrypt_unicode(self): method test_encrypt_decrypt_long_string (line 105) | def test_encrypt_decrypt_long_string(self): method test_encrypted_is_base64 (line 112) | def test_encrypted_is_base64(self): method test_different_keys_produce_different_ciphertext (line 120) | def test_different_keys_produce_different_ciphertext(self): class TestLocalSecrets (line 129) | class TestLocalSecrets: method test_load_empty_file (line 130) | def test_load_empty_file(self): method test_save_and_load_secrets (line 139) | def test_save_and_load_secrets(self): method test_save_sets_restrictive_permissions (line 152) | def test_save_sets_restrictive_permissions(self): method test_load_handles_corrupted_json (line 164) | def test_load_handles_corrupted_json(self): class TestPortalPassword (line 177) | class TestPortalPassword: method test_get_portal_password_returns_none_when_no_portal (line 180) | def test_get_portal_password_returns_none_when_no_portal( method test_get_portal_password_returns_none_when_key_not_found (line 189) | def test_get_portal_password_returns_none_when_key_not_found( method test_get_portal_password_decrypts_stored_value (line 199) | def test_get_portal_password_decrypts_stored_value(self, mock_load, mo... method test_set_portal_password_returns_false_when_no_portal (line 213) | def test_set_portal_password_returns_false_when_no_portal(self, mock_p... method test_set_portal_password_encrypts_and_saves (line 221) | def test_set_portal_password_encrypts_and_saves( class TestDeletePortalPassword (line 241) | class TestDeletePortalPassword: method test_delete_existing_key (line 244) | def test_delete_existing_key(self, mock_save, mock_load): method test_delete_nonexistent_key (line 256) | def test_delete_nonexistent_key(self, mock_save, mock_load): class TestGetPassword (line 265) | class TestGetPassword: method test_returns_portal_password_on_linux (line 269) | def test_returns_portal_password_on_linux( method test_falls_back_to_keyring_when_portal_returns_none (line 283) | def test_falls_back_to_keyring_when_portal_returns_none( method test_uses_keyring_directly_on_non_linux (line 299) | def test_uses_keyring_directly_on_non_linux(self, mock_keyring, mock_i... method test_returns_empty_string_when_keyring_returns_none (line 309) | def test_returns_empty_string_when_keyring_returns_none( method test_returns_empty_string_on_keyring_exception (line 321) | def test_returns_empty_string_on_keyring_exception( class TestSetPassword (line 332) | class TestSetPassword: method test_uses_portal_on_linux_when_successful (line 336) | def test_uses_portal_on_linux_when_successful( method test_falls_back_to_keyring_when_portal_fails (line 350) | def test_falls_back_to_keyring_when_portal_fails( method test_uses_keyring_directly_on_non_linux (line 364) | def test_uses_keyring_directly_on_non_linux(self, mock_keyring, mock_i... class TestDeletePassword (line 374) | class TestDeletePassword: method test_deletes_from_both_on_linux (line 378) | def test_deletes_from_both_on_linux( method test_deletes_from_keyring_only_on_non_linux (line 393) | def test_deletes_from_keyring_only_on_non_linux(self, mock_keyring, mo... method test_ignores_password_delete_error (line 404) | def test_ignores_password_delete_error(self, mock_keyring, mock_is_lin... method test_handles_other_keyring_exceptions (line 416) | def test_handles_other_keyring_exceptions(self, mock_keyring, mock_is_... class TestIntegration (line 425) | class TestIntegration: method test_full_roundtrip_with_portal (line 429) | def test_full_roundtrip_with_portal(self, mock_portal): FILE: tests/transcriber/file_transcriber_queue_worker_test.py function qapp (line 14) | def qapp(): function worker (line 23) | def worker(qapp): function simple_worker (line 36) | def simple_worker(qapp): class TestFileTranscriberQueueWorker (line 42) | class TestFileTranscriberQueueWorker: method test_cancel_task_adds_to_canceled_set (line 43) | def test_cancel_task_adds_to_canceled_set(self, simple_worker): method test_add_task_removes_from_canceled (line 48) | def test_add_task_removes_from_canceled(self, simple_worker): method test_on_task_error_with_cancellation (line 70) | def test_on_task_error_with_cancellation(self, simple_worker): method test_on_task_error_with_regular_error (line 89) | def test_on_task_error_with_regular_error(self, simple_worker): method test_on_task_progress_conversion (line 108) | def test_on_task_progress_conversion(self, simple_worker): method test_stop_puts_sentinel_in_queue (line 128) | def test_stop_puts_sentinel_in_queue(self, simple_worker): method test_on_task_completed_with_speech_path (line 134) | def test_on_task_completed_with_speech_path(self, simple_worker, tmp_p... method test_on_task_completed_speech_path_missing (line 160) | def test_on_task_completed_speech_path_missing(self, simple_worker, tm... method test_on_task_download_progress (line 183) | def test_on_task_download_progress(self, simple_worker): method test_cancel_task_stops_current_transcriber (line 204) | def test_cancel_task_stops_current_transcriber(self, simple_worker): method test_on_task_error_task_in_canceled_set (line 223) | def test_on_task_error_task_in_canceled_set(self, simple_worker): class TestFileTranscriberQueueWorkerRun (line 245) | class TestFileTranscriberQueueWorkerRun: method _make_task (line 246) | def _make_task(self, model_type=ModelType.WHISPER_CPP, extract_speech=... method test_run_returns_early_when_already_running (line 258) | def test_run_returns_early_when_already_running(self, simple_worker): method test_run_stops_on_sentinel (line 265) | def test_run_stops_on_sentinel(self, simple_worker, qapp): method test_run_skips_canceled_task_then_stops_on_sentinel (line 275) | def test_run_skips_canceled_task_then_stops_on_sentinel(self, simple_w... method test_run_creates_openai_transcriber (line 292) | def test_run_creates_openai_transcriber(self, simple_worker, qapp): method test_run_creates_whisper_transcriber_for_whisper_cpp (line 308) | def test_run_creates_whisper_transcriber_for_whisper_cpp(self, simple_... method test_run_speech_extraction_failure_emits_error (line 322) | def test_run_speech_extraction_failure_emits_error(self, simple_worker... function test_transcription_with_whisper_cpp_tiny_no_speech_extraction (line 339) | def test_transcription_with_whisper_cpp_tiny_no_speech_extraction(worker): function test_transcription_with_whisper_cpp_tiny_with_speech_extraction (line 370) | def test_transcription_with_whisper_cpp_tiny_with_speech_extraction(work... FILE: tests/transcriber/openai_whisper_api_file_transcriber_test.py class TestAppendSegment (line 20) | class TestAppendSegment: method test_valid_utf8 (line 21) | def test_valid_utf8(self): method test_empty_bytes (line 30) | def test_empty_bytes(self): method test_invalid_utf8 (line 36) | def test_invalid_utf8(self): method test_multibyte_utf8 (line 43) | def test_multibyte_utf8(self): class TestGetValue (line 51) | class TestGetValue: method test_get_value_from_dict (line 52) | def test_get_value_from_dict(self): method test_get_value_from_object (line 57) | def test_get_value_from_object(self): method test_get_value_missing_key_dict (line 66) | def test_get_value_missing_key_dict(self): method test_get_value_missing_attribute_object (line 71) | def test_get_value_missing_attribute_object(self): class TestOpenAIWhisperAPIFileTranscriber (line 80) | class TestOpenAIWhisperAPIFileTranscriber: method mock_openai_client (line 82) | def mock_openai_client(self): method test_transcribe (line 98) | def test_transcribe(self, mock_openai_client): FILE: tests/transcriber/recording_transcriber_test.py class TestAmplitude (line 19) | class TestAmplitude: method test_symmetric_array (line 20) | def test_symmetric_array(self): method test_asymmetric_array (line 26) | def test_asymmetric_array(self): method test_all_zeros (line 32) | def test_all_zeros(self): method test_all_positive (line 37) | def test_all_positive(self): method test_all_negative (line 43) | def test_all_negative(self): method test_returns_float (line 49) | def test_returns_float(self): class TestGetDeviceSampleRate (line 55) | class TestGetDeviceSampleRate: method test_returns_default_16khz_when_supported (line 56) | def test_returns_default_16khz_when_supported(self): method test_falls_back_to_device_default (line 61) | def test_falls_back_to_device_default(self): method test_returns_default_when_query_fails (line 74) | def test_returns_default_when_query_fails(self): class TestRecordingTranscriber (line 86) | class TestRecordingTranscriber: method test_should_transcribe (line 88) | def test_should_transcribe(self, qtbot): class TestRecordingTranscriberInit (line 151) | class TestRecordingTranscriberInit: method test_init_default_mode (line 152) | def test_init_default_mode(self): method test_init_append_and_correct_mode (line 177) | def test_init_append_and_correct_mode(self): method test_init_stores_silence_threshold (line 204) | def test_init_stores_silence_threshold(self): method test_init_uses_default_sample_rate_when_none (line 223) | def test_init_uses_default_sample_rate_when_none(self): class TestStreamCallback (line 243) | class TestStreamCallback: method test_stream_callback_adds_to_queue (line 244) | def test_stream_callback_adds_to_queue(self): method test_stream_callback_emits_amplitude_changed (line 269) | def test_stream_callback_emits_amplitude_changed(self): method test_stream_callback_drops_data_when_queue_full (line 297) | def test_stream_callback_drops_data_when_queue_full(self): class TestStopRecording (line 325) | class TestStopRecording: method test_stop_recording_sets_is_running_false (line 326) | def test_stop_recording_sets_is_running_false(self): method test_stop_recording_terminates_process (line 347) | def test_stop_recording_terminates_process(self): method test_stop_recording_skips_terminated_process (line 374) | def test_stop_recording_skips_terminated_process(self): class TestStartLocalWhisperServer (line 402) | class TestStartLocalWhisperServer: method test_start_local_whisper_server_creates_openai_client (line 403) | def test_start_local_whisper_server_creates_openai_client(self): method test_start_local_whisper_server_with_language (line 439) | def test_start_local_whisper_server_with_language(self): method test_start_local_whisper_server_auto_language (line 475) | def test_start_local_whisper_server_auto_language(self): method test_start_local_whisper_server_handles_failure (line 511) | def test_start_local_whisper_server_handles_failure(self): FILE: tests/transcriber/transcriber_test.py class TestToTimestamp (line 12) | class TestToTimestamp: method test_to_timestamp (line 13) | def test_to_timestamp(self): function test_write_output (line 32) | def test_write_output( FILE: tests/transcriber/transformers_whisper_test.py class TestIsIntelMac (line 11) | class TestIsIntelMac: method test_is_intel_mac (line 22) | def test_is_intel_mac(self, sys_platform, machine, expected): class TestIsPeftModel (line 28) | class TestIsPeftModel: method test_peft_detection (line 39) | def test_peft_detection(self, model_id, expected): class TestGetPeftRepoId (line 43) | class TestGetPeftRepoId: method test_repo_id_returned_as_is (line 44) | def test_repo_id_returned_as_is(self): method test_linux_cache_path (line 49) | def test_linux_cache_path(self): method test_windows_cache_path (line 56) | def test_windows_cache_path(self): method test_fallback_returns_model_id (line 63) | def test_fallback_returns_model_id(self): class TestGetMmsRepoId (line 69) | class TestGetMmsRepoId: method test_repo_id_returned_as_is (line 72) | def test_repo_id_returned_as_is(self): method test_linux_cache_path (line 78) | def test_linux_cache_path(self): method test_windows_cache_path (line 86) | def test_windows_cache_path(self): method test_fallback_returns_model_id (line 94) | def test_fallback_returns_model_id(self): method test_nested_org_name (line 100) | def test_nested_org_name(self): FILE: tests/transcriber/whisper_cpp_test.py class TestWhisperCpp (line 16) | class TestWhisperCpp: method test_transcribe (line 17) | def test_transcribe(self): method test_transcribe_word_level_timestamps (line 42) | def test_transcribe_word_level_timestamps(self): method test_transcribe_chinese_multibyte_word_level_timestamps (line 67) | def test_transcribe_chinese_multibyte_word_level_timestamps(self): method test_transcribe_chinese_mixed_complete_and_split_chars (line 162) | def test_transcribe_chinese_mixed_complete_and_split_chars(self): FILE: tests/transcriber/whisper_file_transcriber_test.py class TestCheckFileHasAudioStream (line 33) | class TestCheckFileHasAudioStream: method test_valid_audio_file (line 34) | def test_valid_audio_file(self): method test_missing_file (line 38) | def test_missing_file(self): method test_invalid_media_file (line 42) | def test_invalid_media_file(self): class TestProgressRegex (line 54) | class TestProgressRegex: method test_integer_percentage (line 55) | def test_integer_percentage(self): method test_decimal_percentage (line 60) | def test_decimal_percentage(self): method test_no_match (line 65) | def test_no_match(self): method test_extract_percentage_value (line 69) | def test_extract_percentage_value(self): class TestWhisperFileTranscriber (line 77) | class TestWhisperFileTranscriber: method test_default_output_file (line 95) | def test_default_output_file( method test_default_output_file_with_date (line 130) | def test_default_output_file_with_date( method test_transcribe_from_file (line 231) | def test_transcribe_from_file( method test_transcribe_from_url (line 283) | def test_transcribe_from_url(self, qtbot): method test_transcribe_from_folder_watch_source (line 326) | def test_transcribe_from_folder_watch_source(self, qtbot): method test_transcribe_from_folder_watch_source_deletes_file (line 360) | def test_transcribe_from_folder_watch_source_deletes_file(self, qtbot): method test_transcribe_stop (line 397) | def test_transcribe_stop(self): FILE: tests/transformers_transcriber_test.py class TestTransformersTranscriber (line 8) | class TestTransformersTranscriber: method test_should_transcribe (line 13) | def test_should_transcribe(self): FILE: tests/translator_test.py class TestParseBatchResponse (line 14) | class TestParseBatchResponse: method test_simple_batch (line 15) | def test_simple_batch(self): method test_missing_entries_fallback (line 22) | def test_missing_entries_fallback(self): method test_multiline_entries (line 30) | def test_multiline_entries(self): method test_single_item_batch (line 37) | def test_single_item_batch(self): method test_empty_response (line 43) | def test_empty_response(self): method test_whitespace_handling (line 50) | def test_whitespace_handling(self): method test_out_of_order_entries (line 56) | def test_out_of_order_entries(self): class TestTranslator (line 63) | class TestTranslator: method test_start (line 66) | def test_start(self, mock_queue, mock_openai, qtbot): method test_translator (line 106) | def test_translator(self, mock_openai, qtbot): FILE: tests/update_checker_test.py function checker (line 26) | def checker(settings: Settings) -> UpdateChecker: class TestShouldCheckForUpdates (line 32) | class TestShouldCheckForUpdates: method test_returns_false_on_linux (line 33) | def test_returns_false_on_linux(self, checker: UpdateChecker): method test_returns_true_on_windows_first_run (line 37) | def test_returns_true_on_windows_first_run(self, checker: UpdateChecke... method test_returns_true_on_macos_first_run (line 42) | def test_returns_true_on_macos_first_run(self, checker: UpdateChecker,... method test_returns_false_when_checked_recently (line 47) | def test_returns_false_when_checked_recently( method test_returns_true_when_check_is_overdue (line 56) | def test_returns_true_when_check_is_overdue( method test_returns_true_on_invalid_date_in_settings (line 65) | def test_returns_true_on_invalid_date_in_settings( class TestIsNewerVersion (line 74) | class TestIsNewerVersion: method test_newer_major (line 75) | def test_newer_major(self, checker: UpdateChecker): method test_newer_minor (line 79) | def test_newer_minor(self, checker: UpdateChecker): method test_newer_patch (line 83) | def test_newer_patch(self, checker: UpdateChecker): method test_same_version (line 87) | def test_same_version(self, checker: UpdateChecker): method test_older_version (line 91) | def test_older_version(self, checker: UpdateChecker): method test_different_segment_count (line 95) | def test_different_segment_count(self, checker: UpdateChecker): method test_invalid_version_returns_false (line 99) | def test_invalid_version_returns_false(self, checker: UpdateChecker): class TestGetDownloadUrl (line 104) | class TestGetDownloadUrl: method test_windows_returns_windows_urls (line 105) | def test_windows_returns_windows_urls(self, checker: UpdateChecker): method test_macos_arm_returns_arm_urls (line 110) | def test_macos_arm_returns_arm_urls(self, checker: UpdateChecker): method test_macos_x86_returns_x86_urls (line 116) | def test_macos_x86_returns_x86_urls(self, checker: UpdateChecker): method test_linux_returns_empty (line 122) | def test_linux_returns_empty(self, checker: UpdateChecker): method test_wraps_plain_string_in_list (line 127) | def test_wraps_plain_string_in_list(self, checker: UpdateChecker): class TestCheckForUpdates (line 133) | class TestCheckForUpdates: method _make_checker (line 134) | def _make_checker(self, settings: Settings, version_data: dict) -> Upd... method test_emits_update_available_when_newer_version (line 140) | def test_emits_update_available_when_newer_version(self, settings: Set... method test_does_not_emit_when_version_is_current (line 156) | def test_does_not_emit_when_version_is_current(self, settings: Settings): method test_skips_network_call_on_linux (line 166) | def test_skips_network_call_on_linux(self, settings: Settings): method test_stores_last_check_date_after_reply (line 176) | def test_stores_last_check_date_after_reply(self, settings: Settings): method test_stores_available_version_when_update_found (line 186) | def test_stores_available_version_when_update_found(self, settings: Se... method test_clears_available_version_when_up_to_date (line 195) | def test_clears_available_version_when_up_to_date(self, settings: Sett... FILE: tests/widgets/advanced_settings_dialog_test.py class TestAdvancedSettingsDialogSilenceThreshold (line 8) | class TestAdvancedSettingsDialogSilenceThreshold: method test_silence_threshold_spinbox_hidden_by_default (line 9) | def test_silence_threshold_spinbox_hidden_by_default(self, qtbot: QtBot): method test_silence_threshold_spinbox_shown_when_recording_settings (line 16) | def test_silence_threshold_spinbox_shown_when_recording_settings(self,... method test_silence_threshold_spinbox_initial_value (line 26) | def test_silence_threshold_spinbox_initial_value(self, qtbot: QtBot): method test_silence_threshold_change_updates_options (line 35) | def test_silence_threshold_change_updates_options(self, qtbot: QtBot): method test_silence_threshold_change_emits_signal (line 45) | def test_silence_threshold_change_emits_signal(self, qtbot: QtBot): class TestAdvancedSettingsDialogLineSeparator (line 62) | class TestAdvancedSettingsDialogLineSeparator: method test_line_separator_shown_when_recording_settings (line 63) | def test_line_separator_shown_when_recording_settings(self, qtbot: QtB... method test_line_separator_hidden_by_default (line 72) | def test_line_separator_hidden_by_default(self, qtbot: QtBot): method test_line_separator_initial_value_displayed_as_escape (line 78) | def test_line_separator_initial_value_displayed_as_escape(self, qtbot:... method test_line_separator_change_updates_options (line 86) | def test_line_separator_change_updates_options(self, qtbot: QtBot): method test_line_separator_change_emits_signal (line 95) | def test_line_separator_change_emits_signal(self, qtbot: QtBot): method test_line_separator_invalid_escape_does_not_crash (line 107) | def test_line_separator_invalid_escape_does_not_crash(self, qtbot: QtB... method test_line_separator_tab_character (line 117) | def test_line_separator_tab_character(self, qtbot: QtBot): method test_line_separator_plain_text (line 126) | def test_line_separator_plain_text(self, qtbot: QtBot): class TestTranscriptionOptionsLineSeparator (line 136) | class TestTranscriptionOptionsLineSeparator: method test_default_line_separator (line 137) | def test_default_line_separator(self): method test_custom_line_separator (line 141) | def test_custom_line_separator(self): class TestTranscriptionOptionsSilenceThreshold (line 146) | class TestTranscriptionOptionsSilenceThreshold: method test_default_silence_threshold (line 147) | def test_default_silence_threshold(self): method test_custom_silence_threshold (line 151) | def test_custom_silence_threshold(self): FILE: tests/widgets/audio_meter_widget_test.py class TestAudioMeterWidget (line 7) | class TestAudioMeterWidget: method test_initial_amplitude_is_zero (line 8) | def test_initial_amplitude_is_zero(self, qtbot: QtBot): method test_initial_average_amplitude_is_zero (line 13) | def test_initial_average_amplitude_is_zero(self, qtbot: QtBot): method test_update_amplitude (line 18) | def test_update_amplitude(self, qtbot: QtBot): method test_update_amplitude_smoothing (line 24) | def test_update_amplitude_smoothing(self, qtbot: QtBot): method test_update_average_amplitude (line 33) | def test_update_average_amplitude(self, qtbot: QtBot): method test_reset_amplitude_clears_current (line 39) | def test_reset_amplitude_clears_current(self, qtbot: QtBot): method test_reset_amplitude_clears_average (line 46) | def test_reset_amplitude_clears_average(self, qtbot: QtBot): method test_fixed_height (line 53) | def test_fixed_height(self, qtbot: QtBot): FILE: tests/widgets/audio_player_test.py function assert_approximately_equal (line 14) | def assert_approximately_equal(actual, expected, tolerance=0.001): class TestAudioPlayer (line 19) | class TestAudioPlayer: method test_should_load_audio (line 20) | def test_should_load_audio(self, qtbot: QtBot): method test_should_update_time_label (line 28) | def test_should_update_time_label(self, qtbot: QtBot): method test_should_toggle_play_button_icon (line 40) | def test_should_toggle_play_button_icon(self, qtbot: QtBot): method test_should_have_basic_audio_controls (line 53) | def test_should_have_basic_audio_controls(self, qtbot: QtBot): method test_should_change_playback_rate_directly (line 66) | def test_should_change_playback_rate_directly(self, qtbot: QtBot): method test_should_handle_custom_playback_rates (line 75) | def test_should_handle_custom_playback_rates(self, qtbot: QtBot): method test_should_handle_various_playback_rates (line 83) | def test_should_handle_various_playback_rates(self, qtbot: QtBot): method test_should_use_single_row_layout (line 95) | def test_should_use_single_row_layout(self, qtbot: QtBot): method test_should_persist_playback_rate_setting (line 105) | def test_should_persist_playback_rate_setting(self, qtbot: QtBot): method test_should_handle_range_looping (line 116) | def test_should_handle_range_looping(self, qtbot: QtBot): method test_should_handle_invalid_media (line 128) | def test_should_handle_invalid_media(self, qtbot: QtBot): method test_should_stop_playback (line 140) | def test_should_stop_playback(self, qtbot: QtBot): method test_should_handle_media_status_changes (line 148) | def test_should_handle_media_status_changes(self, qtbot: QtBot): FILE: tests/widgets/conftest.py function mock_get_password (line 9) | def mock_get_password(): function force_gc_between_tests (line 15) | def force_gc_between_tests(): function reset_settings (line 21) | def reset_settings(): FILE: tests/widgets/export_transcription_menu_test.py class TranslationSignal (line 18) | class TranslationSignal(QObject): class TestExportTranscriptionMenu (line 22) | class TestExportTranscriptionMenu: method transcription (line 24) | def transcription( method test_should_export_segments (line 45) | def test_should_export_segments( FILE: tests/widgets/file_transcriber_widget_test.py class TestFileTranscriberWidget (line 10) | class TestFileTranscriberWidget: method test_should_set_window_title (line 11) | def test_should_set_window_title(self, qtbot: QtBot): method test_should_emit_triggered_event (line 18) | def test_should_emit_triggered_event(self, qtbot: QtBot): FILE: tests/widgets/hugging_face_search_line_edit_test.py function widget (line 15) | def widget(qtbot: QtBot): class TestHuggingFaceSearchLineEdit (line 27) | class TestHuggingFaceSearchLineEdit: method test_initial_state (line 28) | def test_initial_state(self, widget): method test_default_value_set (line 32) | def test_default_value_set(self, qtbot: QtBot): method test_on_text_edited_emits_model_selected (line 40) | def test_on_text_edited_emits_model_selected(self, widget, qtbot: QtBot): method test_fetch_models_skips_short_text (line 46) | def test_fetch_models_skips_short_text(self, widget): method test_fetch_models_makes_request_for_long_text (line 51) | def test_fetch_models_makes_request_for_long_text(self, widget): method test_fetch_models_url_contains_search_text (line 59) | def test_fetch_models_url_contains_search_text(self, widget): method test_on_request_response_network_error_does_not_populate_popup (line 66) | def test_on_request_response_network_error_does_not_populate_popup(sel... method test_on_request_response_populates_popup (line 72) | def test_on_request_response_populates_popup(self, widget): method test_on_request_response_empty_models_does_not_show_popup (line 82) | def test_on_request_response_empty_models_does_not_show_popup(self, wi... method test_on_request_response_item_has_user_role_data (line 90) | def test_on_request_response_item_has_user_role_data(self, widget): method test_on_select_item_emits_model_selected (line 99) | def test_on_select_item_emits_model_selected(self, widget, qtbot: QtBot): method test_on_select_item_hides_popup (line 112) | def test_on_select_item_hides_popup(self, widget): method test_on_popup_selected_stops_timer (line 122) | def test_on_popup_selected_stops_timer(self, widget): method test_event_filter_ignores_non_popup_target (line 128) | def test_event_filter_ignores_non_popup_target(self, widget): method test_event_filter_mouse_press_hides_popup (line 133) | def test_event_filter_mouse_press_hides_popup(self, widget): method test_event_filter_escape_hides_popup (line 141) | def test_event_filter_escape_hides_popup(self, widget, qtbot: QtBot): method test_event_filter_enter_selects_item (line 148) | def test_event_filter_enter_selects_item(self, widget, qtbot: QtBot): method test_event_filter_enter_no_item_returns_true (line 162) | def test_event_filter_enter_no_item_returns_true(self, widget, qtbot: ... method test_event_filter_navigation_keys_return_false (line 167) | def test_event_filter_navigation_keys_return_false(self, widget): method test_event_filter_other_key_hides_popup (line 173) | def test_event_filter_other_key_hides_popup(self, widget): FILE: tests/widgets/import_url_dialog_test.py class TestImportURLDialog (line 7) | class TestImportURLDialog: method test_should_show_error_with_invalid_url (line 8) | def test_should_show_error_with_invalid_url(self, qtbot): method test_should_return_url_with_valid_url (line 18) | def test_should_return_url_with_valid_url(self, qtbot): FILE: tests/widgets/main_window_test.py function get_test_asset (line 32) | def get_test_asset(filename: str): class TestMainWindow (line 36) | class TestMainWindow: method test_should_set_window_title_and_icon (line 37) | def test_should_set_window_title_and_icon(self, qtbot, transcription_s... method test_should_run_file_transcription_task (line 44) | def test_should_run_file_transcription_task( method _get_tasks_table (line 65) | def _get_tasks_table(window: MainWindow) -> QTableView: method test_should_run_url_import_file_transcription_task (line 68) | def test_should_run_url_import_file_transcription_task( method test_should_run_and_cancel_transcription_task (line 97) | def test_should_run_and_cancel_transcription_task( method test_should_load_tasks_from_cache (line 153) | def test_should_load_tasks_from_cache( method test_should_clear_history_with_rows_selected (line 194) | def test_should_clear_history_with_rows_selected( method test_should_have_clear_history_action_disabled_with_no_rows_selected (line 213) | def test_should_have_clear_history_action_disabled_with_no_rows_selected( method test_should_open_transcription_viewer_when_menu_action_is_clicked (line 225) | def test_should_open_transcription_viewer_when_menu_action_is_clicked( method test_should_open_transcription_viewer_when_return_clicked (line 252) | def test_should_open_transcription_viewer_when_return_clicked( method test_should_have_open_transcript_action_disabled_with_no_rows_selected (line 286) | def test_should_have_open_transcript_action_disabled_with_no_rows_sele... method test_import_folder_opens_file_transcriber_with_supported_files (line 297) | def test_import_folder_opens_file_transcriber_with_supported_files( method test_import_folder_does_nothing_when_cancelled (line 326) | def test_import_folder_does_nothing_when_cancelled( method test_import_folder_does_nothing_when_no_supported_files (line 340) | def test_import_folder_does_nothing_when_no_supported_files( method _import_file_and_start_transcription (line 359) | def _import_file_and_start_transcription( method _get_assert_task_status_callback (line 385) | def _get_assert_task_status_callback( method _get_status (line 399) | def _get_status(table_widget: QTableView, row_index: int): method _get_toolbar_action (line 403) | def _get_toolbar_action(window: MainWindow, text: str): FILE: tests/widgets/menu_bar_test.py class TestMenuBar (line 10) | class TestMenuBar: method test_import_folder_action_emits_signal (line 11) | def test_import_folder_action_emits_signal(self, qtbot, shortcuts): method test_open_preferences_dialog (line 23) | def test_open_preferences_dialog(self, qtbot, shortcuts): FILE: tests/widgets/model_download_progress_dialog.py class TestModelDownloadProgressDialog (line 8) | class TestModelDownloadProgressDialog: method test_should_show_dialog (line 9) | def test_should_show_dialog(self, qtbot): method test_should_update_label_on_progress (line 14) | def test_should_update_label_on_progress(self, qtbot): method test_should_be_an_application_modal (line 28) | def test_should_be_an_application_modal(self, qtbot): FILE: tests/widgets/model_type_combo_box_test.py class TestModelTypeComboBox (line 8) | class TestModelTypeComboBox: method test_should_display_items (line 29) | def test_should_display_items(self, qtbot, model_types): FILE: tests/widgets/openai_api_key_line_edit_test.py class TestOpenAIAPIKeyLineEdit (line 4) | class TestOpenAIAPIKeyLineEdit: method test_should_emit_key_changed (line 5) | def test_should_emit_key_changed(self, qtbot): method test_should_toggle_visibility (line 12) | def test_should_toggle_visibility(self, qtbot): FILE: tests/widgets/preferences_dialog/folder_watch_preferences_widget_test.py class TestFolderWatchPreferencesWidget (line 18) | class TestFolderWatchPreferencesWidget: method test_edit_folder_watch_preferences (line 19) | def test_edit_folder_watch_preferences(self, qtbot): method test_delete_processed_files_checkbox (line 64) | def test_delete_processed_files_checkbox(self, qtbot): FILE: tests/widgets/preferences_dialog/general_preferences_widget_test.py class TestGeneralPreferencesWidget (line 11) | class TestGeneralPreferencesWidget: method test_should_disable_test_button_if_no_api_key (line 12) | def test_should_disable_test_button_if_no_api_key(self, qtbot, mocker): method test_should_test_openai_api_key (line 33) | def test_should_test_openai_api_key(self, qtbot, mocker): method test_recording_export_preferences (line 61) | def test_recording_export_preferences(self, qtbot, mocker): method test_openai_base_url_preferences (line 91) | def test_openai_base_url_preferences(self, qtbot, mocker): class TestTestOpenAIApiKeyJob (line 113) | class TestTestOpenAIApiKeyJob: method test_run_success (line 115) | def test_run_success(self, mocker): method test_run_authentication_error (line 134) | def test_run_authentication_error(self, mocker): FILE: tests/widgets/preferences_dialog/models_preferences_widget_test.py class TestModelsPreferencesWidget (line 19) | class TestModelsPreferencesWidget: method clear_model_cache (line 21) | def clear_model_cache(self): method test_should_show_model_list (line 28) | def test_should_show_model_list(self, qtbot): method test_should_change_model_type (line 38) | def test_should_change_model_type(self, qtbot): method test_should_download_model (line 52) | def test_should_download_model(self, qtbot: QtBot, clear_model_cache): method default_model_path (line 92) | def default_model_path(self) -> str: method test_should_show_downloaded_model (line 95) | def test_should_show_downloaded_model(self, qtbot, default_model_path): FILE: tests/widgets/preferences_dialog/preferences_dialog_test.py class TestPreferencesDialog (line 12) | class TestPreferencesDialog: method test_create (line 17) | def test_create(self, qtbot: QtBot, shortcuts): method test_create_localized (line 33) | def test_create_localized(self, qtbot: QtBot, shortcuts, mocker): FILE: tests/widgets/presentation_window_test.py class TestPresentationWindow (line 14) | class TestPresentationWindow: method test_should_set_window_title (line 15) | def test_should_set_window_title(self, qtbot: QtBot): method test_should_have_window_flag (line 23) | def test_should_have_window_flag(self, qtbot: QtBot): method test_should_have_transcript_display (line 31) | def test_should_have_transcript_display(self, qtbot: QtBot): method test_should_have_translation_display_hidden (line 40) | def test_should_have_translation_display_hidden(self, qtbot: QtBot): method test_should_have_default_size (line 50) | def test_should_have_default_size(self, qtbot: QtBot): class TestPresentationWindowUpdateTranscripts (line 60) | class TestPresentationWindowUpdateTranscripts: method test_update_transcripts_with_text (line 61) | def test_update_transcripts_with_text(self, qtbot: QtBot): method test_update_transcripts_with_empty_text (line 72) | def test_update_transcripts_with_empty_text(self, qtbot: QtBot): method test_update_transcripts_escapes_html (line 82) | def test_update_transcripts_escapes_html(self, qtbot: QtBot): method test_update_transcripts_preserves_newlines (line 94) | def test_update_transcripts_preserves_newlines(self, qtbot: QtBot): class TestPresentationWindowUpdateTranslations (line 106) | class TestPresentationWindowUpdateTranslations: method test_update_translations_with_text (line 107) | def test_update_translations_with_text(self, qtbot: QtBot): method test_update_translations_with_empty_text (line 120) | def test_update_translations_with_empty_text(self, qtbot: QtBot): method test_update_translations_escapes_html (line 133) | def test_update_translations_escapes_html(self, qtbot: QtBot): class TestPresentationWindowLoadSettings (line 145) | class TestPresentationWindowLoadSettings: method test_load_settings_light_theme (line 146) | def test_load_settings_light_theme(self, qtbot: QtBot): method test_load_settings_dark_theme (line 158) | def test_load_settings_dark_theme(self, qtbot: QtBot): method test_load_settings_custom_theme (line 169) | def test_load_settings_custom_theme(self, qtbot: QtBot): method test_load_settings_refreshes_content (line 183) | def test_load_settings_refreshes_content(self, qtbot: QtBot): class TestPresentationWindowApplyStyling (line 200) | class TestPresentationWindowApplyStyling: method test_apply_styling_creates_css (line 201) | def test_apply_styling_creates_css(self, qtbot: QtBot): method test_apply_styling_with_custom_css_file (line 213) | def test_apply_styling_with_custom_css_file(self, qtbot: QtBot): class TestPresentationWindowFullscreen (line 235) | class TestPresentationWindowFullscreen: method test_toggle_fullscreen_enters_fullscreen (line 236) | def test_toggle_fullscreen_enters_fullscreen(self, qtbot: QtBot): method test_toggle_fullscreen_exits_fullscreen (line 249) | def test_toggle_fullscreen_exits_fullscreen(self, qtbot: QtBot): class TestPresentationWindowKeyPressEvent (line 263) | class TestPresentationWindowKeyPressEvent: method test_escape_exits_fullscreen (line 264) | def test_escape_exits_fullscreen(self, qtbot: QtBot): method test_escape_does_not_affect_normal_mode (line 284) | def test_escape_does_not_affect_normal_mode(self, qtbot: QtBot): class TestPresentationWindowGetCssFilePath (line 303) | class TestPresentationWindowGetCssFilePath: method test_get_css_file_path_returns_path (line 304) | def test_get_css_file_path_returns_path(self, qtbot: QtBot): method test_get_css_file_path_creates_directory (line 315) | def test_get_css_file_path_creates_directory(self, qtbot: QtBot): FILE: tests/widgets/recording_transcriber_widget_test.py class TestRecordingTranscriberWidget (line 22) | class TestRecordingTranscriberWidget: method test_should_set_window_title (line 23) | def test_should_set_window_title(self, qtbot: QtBot): method test_should_transcribe (line 42) | def test_should_transcribe(self, qtbot): method test_should_transcribe_and_export (line 70) | def test_should_transcribe_and_export(self, qtbot): method test_on_next_transcription_append_above (line 119) | def test_on_next_transcription_append_above(self, qtbot: QtBot): method test_find_common_part_exact_match (line 141) | def test_find_common_part_exact_match(self): method test_find_common_part_partial_match (line 144) | def test_find_common_part_partial_match(self): method test_find_common_part_no_match (line 158) | def test_find_common_part_no_match(self): method test_find_common_part_different_start (line 161) | def test_find_common_part_different_start(self): method test_find_common_part_empty_strings (line 164) | def test_find_common_part_empty_strings(self): method test_on_next_transcription_append_and_correct (line 170) | def test_on_next_transcription_append_and_correct(self, qtbot: QtBot): class TestRecordingTranscriberWidgetLineSeparator (line 197) | class TestRecordingTranscriberWidgetLineSeparator: method test_line_separator_loaded_from_settings (line 199) | def test_line_separator_loaded_from_settings(self, qtbot: QtBot): method test_line_separator_saved_on_close (line 207) | def test_line_separator_saved_on_close(self, qtbot: QtBot): method test_line_separator_used_in_append_below (line 216) | def test_line_separator_used_in_append_below(self, qtbot: QtBot): method test_line_separator_used_in_append_above (line 225) | def test_line_separator_used_in_append_above(self, qtbot: QtBot): method test_line_separator_used_in_translation_append_below (line 234) | def test_line_separator_used_in_translation_append_below(self, qtbot: ... class TestRecordingTranscriberWidgetSilenceThreshold (line 243) | class TestRecordingTranscriberWidgetSilenceThreshold: method test_silence_threshold_loaded_from_settings (line 245) | def test_silence_threshold_loaded_from_settings(self, qtbot: QtBot): method test_silence_threshold_saved_on_close (line 263) | def test_silence_threshold_saved_on_close(self, qtbot: QtBot): class TestRecordingTranscriberWidgetPresentation (line 282) | class TestRecordingTranscriberWidgetPresentation: method test_presentation_options_bar_created (line 286) | def test_presentation_options_bar_created(self, qtbot: QtBot): method test_presentation_options_bar_has_buttons (line 304) | def test_presentation_options_bar_has_buttons(self, qtbot: QtBot): method test_presentation_window_initially_none (line 326) | def test_presentation_window_initially_none(self, qtbot: QtBot): method test_on_show_presentation_clicked_creates_window (line 343) | def test_on_show_presentation_clicked_creates_window(self, qtbot: QtBot): method test_on_show_presentation_clicked_syncs_content (line 365) | def test_on_show_presentation_clicked_syncs_content(self, qtbot: QtBot): method test_on_show_presentation_clicked_brings_existing_to_front (line 387) | def test_on_show_presentation_clicked_brings_existing_to_front(self, q... method test_on_text_size_changed (line 412) | def test_on_text_size_changed(self, qtbot: QtBot): method test_on_theme_changed_light (line 437) | def test_on_theme_changed_light(self, qtbot: QtBot): method test_on_theme_changed_dark (line 462) | def test_on_theme_changed_dark(self, qtbot: QtBot): method test_on_theme_changed_custom (line 487) | def test_on_theme_changed_custom(self, qtbot: QtBot): method test_on_text_color_clicked (line 512) | def test_on_text_color_clicked(self, qtbot: QtBot): method test_on_text_color_clicked_cancel (line 536) | def test_on_text_color_clicked_cancel(self, qtbot: QtBot): method test_on_copy_transcript_clicked_with_text (line 561) | def test_on_copy_transcript_clicked_with_text(self, qtbot: QtBot): method test_on_copy_transcript_clicked_without_text (line 591) | def test_on_copy_transcript_clicked_without_text(self, qtbot: QtBot): method test_copy_actions_bar_hidden_when_recording_starts (line 615) | def test_copy_actions_bar_hidden_when_recording_starts(self, qtbot: Qt... method test_on_bg_color_clicked (line 644) | def test_on_bg_color_clicked(self, qtbot: QtBot): method test_on_fullscreen_clicked (line 668) | def test_on_fullscreen_clicked(self, qtbot: QtBot): method test_on_fullscreen_clicked_without_window (line 692) | def test_on_fullscreen_clicked_without_window(self, qtbot: QtBot): method test_presentation_window_updates_on_transcription (line 710) | def test_presentation_window_updates_on_transcription(self, qtbot: QtB... method test_close_event_closes_presentation_window (line 732) | def test_close_event_closes_presentation_window(self, qtbot: QtBot): method test_fullscreen_button_disabled_initially (line 753) | def test_fullscreen_button_disabled_initially(self, qtbot: QtBot): method test_presentation_bar_shown_when_recording (line 770) | def test_presentation_bar_shown_when_recording(self, qtbot: QtBot): function _widget_ctx (line 802) | def _widget_ctx(qtbot): class TestResetTranscriberControls (line 814) | class TestResetTranscriberControls: method test_record_button_disabled_for_faster_whisper_custom_without_hf_model (line 816) | def test_record_button_disabled_for_faster_whisper_custom_without_hf_m... method test_record_button_disabled_for_hugging_face_without_model_id (line 832) | def test_record_button_disabled_for_hugging_face_without_model_id(self... method test_record_button_enabled_for_hugging_face_with_model_id (line 847) | def test_record_button_enabled_for_hugging_face_with_model_id(self, qt... class TestOnTranscriptionOptionsChanged (line 863) | class TestOnTranscriptionOptionsChanged: method test_shows_translation_box_when_llm_enabled (line 865) | def test_shows_translation_box_when_llm_enabled(self, qtbot): method test_hides_translation_box_when_llm_disabled (line 874) | def test_hides_translation_box_when_llm_disabled(self, qtbot): method test_updates_transcription_options (line 884) | def test_updates_transcription_options(self, qtbot): function _model_loaded_ctx (line 894) | def _model_loaded_ctx(qtbot, enable_llm_translation=False): class TestTranslatorSetup (line 913) | class TestTranslatorSetup: method test_translator_created_when_llm_enabled (line 915) | def test_translator_created_when_llm_enabled(self, qtbot): method test_translator_not_created_when_llm_disabled (line 924) | def test_translator_not_created_when_llm_disabled(self, qtbot): method test_translator_translation_signal_connected_to_on_next_translation (line 933) | def test_translator_translation_signal_connected_to_on_next_translatio... class TestOnDeviceChanged (line 944) | class TestOnDeviceChanged: method test_no_new_listener_started_when_device_is_none (line 946) | def test_no_new_listener_started_when_device_is_none(self, qtbot): method test_no_new_listener_started_when_device_is_minus_one (line 953) | def test_no_new_listener_started_when_device_is_minus_one(self, qtbot): method test_device_id_updated (line 960) | def test_device_id_updated(self, qtbot): class TestOnRecordButtonClickedStop (line 967) | class TestOnRecordButtonClickedStop: method test_stop_path_sets_status_stopped (line 969) | def test_stop_path_sets_status_stopped(self, qtbot): method test_stop_path_hides_presentation_bar (line 978) | def test_stop_path_hides_presentation_bar(self, qtbot): class TestOnModelLoaded (line 988) | class TestOnModelLoaded: method test_empty_model_path_calls_transcriber_error (line 990) | def test_empty_model_path_calls_transcriber_error(self, qtbot): class TestOnTranscriberError (line 1005) | class TestOnTranscriberError: method test_shows_message_box (line 1007) | def test_shows_message_box(self, qtbot): method test_resets_record_button (line 1017) | def test_resets_record_button(self, qtbot): class TestOnCancelModelProgressDialog (line 1027) | class TestOnCancelModelProgressDialog: method test_cancels_model_loader (line 1029) | def test_cancels_model_loader(self, qtbot): method test_record_button_re_enabled (line 1040) | def test_record_button_re_enabled(self, qtbot): class TestOnNextTranscriptionExport (line 1052) | class TestOnNextTranscriptionExport: method test_append_below_writes_to_export_file (line 1054) | def test_append_below_writes_to_export_file(self, qtbot): method test_append_above_writes_to_export_file (line 1072) | def test_append_above_writes_to_export_file(self, qtbot): method test_append_above_csv_prepends_new_column (line 1095) | def test_append_above_csv_prepends_new_column(self, qtbot): method test_append_above_csv_respects_max_entries (line 1119) | def test_append_above_csv_respects_max_entries(self, qtbot): class TestUploadToServer (line 1147) | class TestUploadToServer: method test_transcript_uploaded_when_upload_url_set (line 1149) | def test_transcript_uploaded_when_upload_url_set(self, qtbot): method test_transcript_not_uploaded_when_upload_url_empty (line 1162) | def test_transcript_not_uploaded_when_upload_url_empty(self, qtbot): method test_transcript_upload_failure_does_not_raise (line 1170) | def test_transcript_upload_failure_does_not_raise(self, qtbot): method test_translation_uploaded_when_upload_url_set (line 1178) | def test_translation_uploaded_when_upload_url_set(self, qtbot): class TestOnNextTranslation (line 1191) | class TestOnNextTranslation: method test_append_below_adds_translation (line 1193) | def test_append_below_adds_translation(self, qtbot): method test_append_above_puts_new_text_first (line 1200) | def test_append_above_puts_new_text_first(self, qtbot): method test_append_and_correct_merges_translation (line 1209) | def test_append_and_correct_merges_translation(self, qtbot): method test_empty_translation_ignored (line 1220) | def test_empty_translation_ignored(self, qtbot): method test_updates_presentation_window (line 1227) | def test_updates_presentation_window(self, qtbot): class TestExportFileHelpers (line 1237) | class TestExportFileHelpers: method test_write_creates_file (line 1238) | def test_write_creates_file(self, tmp_path): method test_write_appends_by_default (line 1244) | def test_write_appends_by_default(self, tmp_path): method test_write_overwrites_with_mode_w (line 1251) | def test_write_overwrites_with_mode_w(self, tmp_path): method test_write_retries_on_permission_error (line 1258) | def test_write_retries_on_permission_error(self, tmp_path): method test_write_gives_up_after_max_retries (line 1276) | def test_write_gives_up_after_max_retries(self, tmp_path): method test_write_handles_oserror (line 1282) | def test_write_handles_oserror(self, tmp_path): method test_read_returns_file_contents (line 1287) | def test_read_returns_file_contents(self, tmp_path): method test_read_retries_on_permission_error (line 1293) | def test_read_retries_on_permission_error(self, tmp_path): method test_read_returns_empty_string_on_oserror (line 1313) | def test_read_returns_empty_string_on_oserror(self, tmp_path): method test_read_returns_empty_string_after_max_retries (line 1318) | def test_read_returns_empty_string_after_max_retries(self, tmp_path): class TestWriteCsvExport (line 1326) | class TestWriteCsvExport: method test_creates_csv_with_single_entry (line 1327) | def test_creates_csv_with_single_entry(self, tmp_path): method test_appends_column_to_existing_csv (line 1334) | def test_appends_column_to_existing_csv(self, tmp_path): method test_max_entries_limits_columns (line 1343) | def test_max_entries_limits_columns(self, tmp_path): method test_max_entries_zero_means_no_limit (line 1352) | def test_max_entries_zero_means_no_limit(self, tmp_path): method test_handles_empty_existing_file (line 1361) | def test_handles_empty_existing_file(self, tmp_path): method test_retries_on_permission_error (line 1371) | def test_retries_on_permission_error(self, tmp_path): class TestWriteTxtExport (line 1390) | class TestWriteTxtExport: method test_append_mode_adds_text (line 1391) | def test_append_mode_adds_text(self, tmp_path): method test_append_mode_max_entries_trims_oldest (line 1399) | def test_append_mode_max_entries_trims_oldest(self, tmp_path): method test_prepend_mode_puts_text_first (line 1408) | def test_prepend_mode_puts_text_first(self, tmp_path): method test_prepend_mode_max_entries_trims_oldest (line 1418) | def test_prepend_mode_max_entries_trims_oldest(self, tmp_path): method test_write_mode_overwrites (line 1428) | def test_write_mode_overwrites(self, tmp_path): method test_prepend_on_nonexistent_file (line 1436) | def test_prepend_on_nonexistent_file(self, tmp_path): method test_append_max_entries_zero_means_no_limit (line 1443) | def test_append_max_entries_zero_means_no_limit(self, tmp_path): class TestPresentationTranslationSync (line 1452) | class TestPresentationTranslationSync: method test_syncs_translation_when_llm_enabled (line 1454) | def test_syncs_translation_when_llm_enabled(self, qtbot): FILE: tests/widgets/shortcuts_editor_widget_test.py class TestShortcutsEditorWidget (line 13) | class TestShortcutsEditorWidget: method test_should_update_shortcuts (line 14) | def test_should_update_shortcuts(self, qtbot: QtBot, shortcuts): method test_should_reset_to_defaults (line 23) | def test_should_reset_to_defaults(self, qtbot, shortcuts): class TestSequenceEdit (line 64) | class TestSequenceEdit: method test_should_ignore_modifier_only_keys (line 65) | def test_should_ignore_modifier_only_keys(self, qtbot: QtBot): method test_should_record_key_combination (line 82) | def test_should_record_key_combination(self, qtbot: QtBot): method test_should_propagate_escape_to_parent (line 95) | def test_should_propagate_escape_to_parent(self, qtbot: QtBot): FILE: tests/widgets/speaker_identification_widget_test.py class TestSpeakerIdentificationWidget (line 25) | class TestSpeakerIdentificationWidget: method transcription (line 27) | def transcription( method test_widget_initialization (line 48) | def test_widget_initialization(self, qtbot: QtBot, transcription, tran... method test_identification_worker_run (line 70) | def test_identification_worker_run(self, qtbot: QtBot, transcription, ... method test_identify_button_toggles_visibility (line 93) | def test_identify_button_toggles_visibility(self, qtbot: QtBot, transc... method test_cancel_button_resets_ui (line 122) | def test_cancel_button_resets_ui(self, qtbot: QtBot, transcription, tr... method test_on_progress_update_sets_label_and_bar (line 143) | def test_on_progress_update_sets_label_and_bar(self, qtbot: QtBot, tra... method test_on_progress_update_step_8_enables_save (line 157) | def test_on_progress_update_step_8_enables_save(self, qtbot: QtBot, tr... method test_on_identification_finished_empty_result (line 174) | def test_on_identification_finished_empty_result(self, qtbot: QtBot, t... method test_on_identification_finished_populates_speakers (line 191) | def test_on_identification_finished_populates_speakers(self, qtbot: Qt... method test_on_identification_error_resets_buttons (line 210) | def test_on_identification_error_resets_buttons(self, qtbot: QtBot, tr... method test_on_save_no_merge (line 228) | def test_on_save_no_merge(self, qtbot: QtBot, transcription, transcrip... method test_on_save_with_merge (line 255) | def test_on_save_with_merge(self, qtbot: QtBot, transcription, transcr... method test_on_save_emits_transcriptions_updated (line 283) | def test_on_save_emits_transcriptions_updated(self, qtbot: QtBot, tran... method test_batch_processing_with_many_words (line 304) | def test_batch_processing_with_many_words(self): method test_batch_processing_with_assertion_error_fallback (line 339) | def test_batch_processing_with_assertion_error_fallback(self): FILE: tests/widgets/transcription_task_folder_watcher_test.py class TestTranscriptionTaskFolderWatcher (line 26) | class TestTranscriptionTaskFolderWatcher: method default_model (line 27) | def default_model(self): method test_should_add_task_not_in_tasks (line 33) | def test_should_add_task_not_in_tasks(self, qtbot: QtBot): method test_should_not_add_task_in_tasks (line 67) | def test_should_not_add_task_in_tasks(self, qtbot): method test_should_find_tasks_in_subfolders (line 119) | def test_should_find_tasks_in_subfolders(self, qtbot: QtBot): method test_should_ignore_hidden_directories (line 156) | def test_should_ignore_hidden_directories(self, qtbot: QtBot): method test_should_ignore_non_media_files (line 197) | def test_should_ignore_non_media_files(self, qtbot: QtBot): method test_should_ignore_temp_conversion_files (line 237) | def test_should_ignore_temp_conversion_files(self, qtbot: QtBot): method test_should_ignore_extracted_speech_files (line 277) | def test_should_ignore_extracted_speech_files(self, qtbot: QtBot): method test_should_set_delete_source_file_when_preference_enabled (line 317) | def test_should_set_delete_source_file_when_preference_enabled(self, q... method test_should_not_set_delete_source_file_when_preference_disabled (line 351) | def test_should_not_set_delete_source_file_when_preference_disabled(se... method test_should_set_original_file_path (line 385) | def test_should_set_original_file_path(self, qtbot: QtBot): FILE: tests/widgets/transcription_tasks_table_widget_test.py class MockFileTranscriptionTaskStatus (line 25) | class MockFileTranscriptionTaskStatus(enum.Enum): class MockFileTranscriptionTask (line 33) | class MockFileTranscriptionTask: function mock_dependencies (line 38) | def mock_dependencies(monkeypatch): function db (line 86) | def db(): function mock_record (line 127) | def mock_record(values): function test_format_timedelta (line 136) | def test_format_timedelta(delta, expected): function test_format_record_status_text_logic (line 140) | def test_format_record_status_text_logic(): function test_column_delegates_text_getters (line 159) | def test_column_delegates_text_getters(monkeypatch): function widget (line 195) | def widget(qtbot, db): class TestTranscriptionTasksTableWidget (line 203) | class TestTranscriptionTasksTableWidget: method test_init_and_save_column_visibility (line 204) | def test_init_and_save_column_visibility(self, widget): method test_copy_selected_fields (line 213) | def test_copy_selected_fields(self, widget): method test_key_press_event (line 224) | def test_key_press_event(self, widget): method test_delete_transcriptions (line 230) | def test_delete_transcriptions(self, widget): method test_selected_transcriptions (line 235) | def test_selected_transcriptions(self, widget): method test_refresh_row (line 242) | def test_refresh_row(self, widget, db): method test_context_menus (line 251) | def test_context_menus(self, widget, monkeypatch): method test_new_column_definitions (line 264) | def test_new_column_definitions(self): method test_file_column_text_getter_with_name (line 282) | def test_file_column_text_getter_with_name(self, widget): method test_notes_column_text_getter (line 300) | def test_notes_column_text_getter(self, widget): method test_column_visibility_management (line 314) | def test_column_visibility_management(self, widget): method test_column_width_management (line 324) | def test_column_width_management(self, widget): method test_column_order_management (line 335) | def test_column_order_management(self, widget): method test_context_menu_rename_action (line 350) | def test_context_menu_rename_action(self, widget, monkeypatch): method test_context_menu_notes_action (line 379) | def test_context_menu_notes_action(self, widget, monkeypatch): method test_context_menu_restart_action_success (line 406) | def test_context_menu_restart_action_success(self, widget, monkeypatch): method test_context_menu_restart_action_wrong_status (line 437) | def test_context_menu_restart_action_wrong_status(self, widget, monkey... method test_restart_action_no_selection_does_nothing (line 459) | def test_restart_action_no_selection_does_nothing(self, widget, monkey... method test_restart_action_canceled_status_succeeds (line 466) | def test_restart_action_canceled_status_succeeds(self, widget, monkeyp... method test_restart_action_service_exception_shows_warning (line 482) | def test_restart_action_service_exception_shows_warning(self, widget, ... method _make_transcription (line 501) | def _make_transcription(self, **kwargs): method test_restart_task_happy_path_adds_task (line 525) | def test_restart_task_happy_path_adds_task(self, widget, monkeypatch): method test_restart_task_invalid_whisper_model_size_defaults_to_tiny (line 552) | def test_restart_task_invalid_whisper_model_size_defaults_to_tiny(self... method test_restart_task_model_not_available_downloads_it (line 584) | def test_restart_task_model_not_available_downloads_it(self, widget, m... method test_restart_task_model_unavailable_after_download_shows_warning (line 616) | def test_restart_task_model_unavailable_after_download_shows_warning(s... method test_restart_task_no_worker_found_shows_warning (line 637) | def test_restart_task_no_worker_found_shows_warning(self, widget, monk... method test_restart_task_export_formats_parsed_correctly (line 663) | def test_restart_task_export_formats_parsed_correctly(self, widget, mo... method test_restart_task_invalid_export_format_skipped (line 698) | def test_restart_task_invalid_export_format_skipped(self, widget, monk... method test_column_resize_event (line 732) | def test_column_resize_event(self, widget): method test_column_move_event (line 740) | def test_column_move_event(self, widget): method test_reload_column_order_from_settings (line 750) | def test_reload_column_order_from_settings(self, widget): method test_sort_indicator_change_event (line 765) | def test_sort_indicator_change_event(self, widget): method test_save_sort_state (line 772) | def test_save_sort_state(self, widget): method test_load_sort_state (line 782) | def test_load_sort_state(self, widget): method test_reset_column_order_resets_sort (line 796) | def test_reset_column_order_resets_sort(self, widget): class TestTranscriptionTasksTableHeaderView (line 810) | class TestTranscriptionTasksTableHeaderView: method header (line 812) | def header(self, qtbot, widget): method _setup_settings_key (line 815) | def _setup_settings_key(self, widget): method test_hiding_column_saves_visibility_and_widths (line 831) | def test_hiding_column_saves_visibility_and_widths(self, header, widget): method test_showing_column_makes_it_visible (line 847) | def test_showing_column_makes_it_visible(self, header, widget): method test_hiding_already_hidden_column_does_not_save_zero_width (line 859) | def test_hiding_already_hidden_column_does_not_save_zero_width(self, h... method test_column_order_saved_on_visibility_change (line 881) | def test_column_order_saved_on_visibility_change(self, header, widget): method test_reload_called_after_visibility_change (line 893) | def test_reload_called_after_visibility_change(self, header, widget): FILE: tests/widgets/transcription_viewer/transcription_segments_editor_widget_test.py class TestParseTimestamp (line 27) | class TestParseTimestamp: method test_parse_timestamp_full_format (line 30) | def test_parse_timestamp_full_format(self): method test_parse_timestamp_minute_format (line 36) | def test_parse_timestamp_minute_format(self): method test_parse_timestamp_second_format (line 42) | def test_parse_timestamp_second_format(self): method test_parse_timestamp_no_milliseconds (line 48) | def test_parse_timestamp_no_milliseconds(self): method test_parse_timestamp_with_whitespace (line 54) | def test_parse_timestamp_with_whitespace(self): method test_parse_timestamp_invalid_format (line 60) | def test_parse_timestamp_invalid_format(self): method test_parse_timestamp_empty_string (line 66) | def test_parse_timestamp_empty_string(self): class TestTimeStampLineEdit (line 71) | class TestTimeStampLineEdit: method test_timestamp_line_edit_initialization (line 74) | def test_timestamp_line_edit_initialization(self, qtbot: QtBot): method test_set_milliseconds (line 82) | def test_set_milliseconds(self, qtbot: QtBot): method test_get_milliseconds (line 92) | def test_get_milliseconds(self, qtbot: QtBot): method test_plus_key_increases_time (line 100) | def test_plus_key_increases_time(self, qtbot: QtBot): method test_minus_key_decreases_time (line 110) | def test_minus_key_decreases_time(self, qtbot: QtBot): method test_minus_key_does_not_go_negative (line 120) | def test_minus_key_does_not_go_negative(self, qtbot: QtBot): method test_focus_out_reformats_timestamp (line 130) | def test_focus_out_reformats_timestamp(self, qtbot: QtBot): method test_validator_rejects_invalid_characters (line 144) | def test_validator_rejects_invalid_characters(self, qtbot: QtBot): class TestTimeStampDelegate (line 156) | class TestTimeStampDelegate: method test_display_text_formatting (line 159) | def test_display_text_formatting(self): class TestTimeStampEditorDelegate (line 172) | class TestTimeStampEditorDelegate: method test_delegate_initialization (line 175) | def test_delegate_initialization(self): method test_create_editor (line 180) | def test_create_editor(self, qtbot: QtBot): class TestWordWrapDelegate (line 196) | class TestWordWrapDelegate: method test_create_editor (line 199) | def test_create_editor(self, qtbot: QtBot): class TestCustomTextEdit (line 215) | class TestCustomTextEdit: method test_initialization (line 218) | def test_initialization(self, qtbot: QtBot): method test_tab_key_closes_editor (line 224) | def test_tab_key_closes_editor(self, qtbot: QtBot): method test_enter_key_closes_editor (line 237) | def test_enter_key_closes_editor(self, qtbot: QtBot): method test_escape_key_closes_editor (line 248) | def test_escape_key_closes_editor(self, qtbot: QtBot): class TestTranscriptionSegmentModel (line 260) | class TestTranscriptionSegmentModel: method transcription_id (line 264) | def transcription_id(self) -> UUID: method test_model_initialization (line 268) | def test_model_initialization(self, transcription_id): class TestTranscriptionSegmentsEditorWidget (line 276) | class TestTranscriptionSegmentsEditorWidget: method transcription (line 280) | def transcription( method translator (line 308) | def translator(self, qtbot: QtBot): method test_widget_initialization (line 314) | def test_widget_initialization(self, qtbot: QtBot, transcription, tran... method test_column_definitions (line 327) | def test_column_definitions(self, qtbot: QtBot, transcription, transla... method test_segments_method (line 345) | def test_segments_method(self, qtbot: QtBot, transcription, translator): method test_segment_method (line 358) | def test_segment_method(self, qtbot: QtBot, transcription, translator): method test_highlight_and_scroll_to_row (line 371) | def test_highlight_and_scroll_to_row(self, qtbot: QtBot, transcription... method test_has_non_empty_translation (line 387) | def test_has_non_empty_translation(self, qtbot: QtBot, transcription, ... method test_init_row_height (line 404) | def test_init_row_height(self, qtbot: QtBot, transcription, translator): method test_update_translation (line 420) | def test_update_translation(self, qtbot: QtBot, transcription, transla... method test_segment_selected_signal (line 448) | def test_segment_selected_signal(self, qtbot: QtBot, transcription, tr... method test_timestamp_being_edited_signal (line 468) | def test_timestamp_being_edited_signal(self, qtbot: QtBot, transcripti... method test_enter_key_triggers_editing (line 479) | def test_enter_key_triggers_editing(self, qtbot: QtBot, transcription,... method test_column_widths (line 496) | def test_column_widths(self, qtbot: QtBot, transcription, translator): method test_alternating_row_colors (line 509) | def test_alternating_row_colors(self, qtbot: QtBot, transcription, tra... method test_vertical_header_hidden (line 520) | def test_vertical_header_hidden(self, qtbot: QtBot, transcription, tra... method test_selection_behavior (line 531) | def test_selection_behavior(self, qtbot: QtBot, transcription, transla... method test_selection_mode (line 543) | def test_selection_mode(self, qtbot: QtBot, transcription, translator): FILE: tests/widgets/transcription_viewer/transcription_viewer_widget_additional_test.py class TestTranscriptionViewerWidgetAdditional (line 21) | class TestTranscriptionViewerWidgetAdditional: method transcription (line 25) | def transcription(self, transcription_dao, transcription_segment_dao) ... method test_toggle_audio_playback (line 50) | def test_toggle_audio_playback(self, qtbot: QtBot, transcription, tran... method test_replay_current_segment (line 66) | def test_replay_current_segment(self, qtbot: QtBot, transcription, tra... method test_decrease_segment_start (line 85) | def test_decrease_segment_start(self, qtbot: QtBot, transcription, tra... method test_increase_segment_start (line 106) | def test_increase_segment_start(self, qtbot: QtBot, transcription, tra... method test_decrease_segment_end (line 125) | def test_decrease_segment_end(self, qtbot: QtBot, transcription, trans... method test_increase_segment_end (line 144) | def test_increase_segment_end(self, qtbot: QtBot, transcription, trans... method test_adjust_segment_timestamp_start (line 163) | def test_adjust_segment_timestamp_start(self, qtbot: QtBot, transcript... method test_adjust_segment_timestamp_end (line 181) | def test_adjust_segment_timestamp_end(self, qtbot: QtBot, transcriptio... method test_adjust_segment_timestamp_overlap_prevention (line 199) | def test_adjust_segment_timestamp_overlap_prevention(self, qtbot: QtBo... method test_on_audio_playback_state_changed (line 217) | def test_on_audio_playback_state_changed(self, qtbot: QtBot, transcrip... method test_initialize_speed_control (line 235) | def test_initialize_speed_control(self, qtbot: QtBot, transcription, t... method test_on_speed_changed_valid (line 250) | def test_on_speed_changed_valid(self, qtbot: QtBot, transcription, tra... method test_on_speed_changed_invalid (line 264) | def test_on_speed_changed_invalid(self, qtbot: QtBot, transcription, t... method test_on_speed_changed_clamping (line 276) | def test_on_speed_changed_clamping(self, qtbot: QtBot, transcription, ... method test_increase_speed (line 293) | def test_increase_speed(self, qtbot: QtBot, transcription, transcripti... method test_decrease_speed (line 310) | def test_decrease_speed(self, qtbot: QtBot, transcription, transcripti... method test_get_current_speed (line 327) | def test_get_current_speed(self, qtbot: QtBot, transcription, transcri... method test_set_speed (line 340) | def test_set_speed(self, qtbot: QtBot, transcription, transcription_se... method test_perform_search (line 352) | def test_perform_search(self, qtbot: QtBot, transcription, transcripti... method test_search_in_table (line 367) | def test_search_in_table(self, qtbot: QtBot, transcription, transcript... method test_search_in_text (line 382) | def test_search_in_text(self, qtbot: QtBot, transcription, transcripti... method test_update_search_ui_with_results (line 400) | def test_update_search_ui_with_results(self, qtbot: QtBot, transcripti... method test_update_search_ui_no_results (line 417) | def test_update_search_ui_no_results(self, qtbot: QtBot, transcription... method test_highlight_current_match_table (line 434) | def test_highlight_current_match_table(self, qtbot: QtBot, transcripti... method test_highlight_table_match (line 450) | def test_highlight_table_match(self, qtbot: QtBot, transcription, tran... method test_highlight_text_match (line 464) | def test_highlight_text_match(self, qtbot: QtBot, transcription, trans... method test_update_search_results_label (line 482) | def test_update_search_results_label(self, qtbot: QtBot, transcription... method test_show_search_bar (line 500) | def test_show_search_bar(self, qtbot: QtBot, transcription, transcript... method test_toggle_search_bar_visibility (line 514) | def test_toggle_search_bar_visibility(self, qtbot: QtBot, transcriptio... method test_event_filter (line 529) | def test_event_filter(self, qtbot: QtBot, transcription, transcription... method test_reset_view_timestamps (line 552) | def test_reset_view_timestamps(self, qtbot: QtBot, transcription, tran... method test_reset_view_text (line 569) | def test_reset_view_text(self, qtbot: QtBot, transcription, transcript... method test_reset_view_translation (line 586) | def test_reset_view_translation(self, qtbot: QtBot, transcription, tra... method test_on_timestamp_being_edited (line 603) | def test_on_timestamp_being_edited(self, qtbot: QtBot, transcription, ... method test_on_scroll_to_current_button_clicked_with_segments (line 624) | def test_on_scroll_to_current_button_clicked_with_segments(self, qtbot... method test_auto_scroll_to_current_position (line 640) | def test_auto_scroll_to_current_position(self, qtbot: QtBot, transcrip... method test_resize_event (line 656) | def test_resize_event(self, qtbot: QtBot, transcription, transcription... method test_close_event (line 674) | def test_close_event(self, qtbot: QtBot, transcription, transcription_... method test_save_geometry (line 689) | def test_save_geometry(self, qtbot: QtBot, transcription, transcriptio... method test_load_geometry (line 703) | def test_load_geometry(self, qtbot: QtBot, transcription, transcriptio... method test_load_preferences (line 717) | def test_load_preferences(self, qtbot: QtBot, transcription, transcrip... method test_open_advanced_settings (line 731) | def test_open_advanced_settings(self, qtbot: QtBot, transcription, tra... method test_on_transcription_options_changed (line 745) | def test_on_transcription_options_changed(self, qtbot: QtBot, transcri... method test_on_translate_button_clicked_no_api_key (line 760) | def test_on_translate_button_clicked_no_api_key(self, qtbot: QtBot, tr... method test_run_translation (line 782) | def test_run_translation(self, mock_openai, qtbot: QtBot, transcriptio... method test_restore_ui_state (line 804) | def test_restore_ui_state(self, qtbot: QtBot, transcription, transcrip... method test_create_search_bar (line 818) | def test_create_search_bar(self, qtbot: QtBot, transcription, transcri... method test_create_loop_controls (line 834) | def test_create_loop_controls(self, qtbot: QtBot, transcription, trans... method test_on_follow_audio_toggle_changed_enabled (line 854) | def test_on_follow_audio_toggle_changed_enabled(self, qtbot: QtBot, tr... method test_on_follow_audio_toggle_changed_disabled (line 870) | def test_on_follow_audio_toggle_changed_disabled(self, qtbot: QtBot, t... method test_on_transcript_segment_clicked (line 884) | def test_on_transcript_segment_clicked(self, qtbot: QtBot, transcripti... method test_hide_loop_controls (line 906) | def test_hide_loop_controls(self, qtbot: QtBot, transcription, transcr... method test_toggle_playback_controls_visibility_hide (line 923) | def test_toggle_playback_controls_visibility_hide(self, qtbot: QtBot, ... method test_toggle_audio_playback_when_playing (line 939) | def test_toggle_audio_playback_when_playing(self, qtbot: QtBot, transc... method test_video_player_initialization (line 959) | def test_video_player_initialization(self, qtbot: QtBot, transcription... FILE: tests/widgets/transcription_viewer_test.py class TestTranscriptionViewerWidget (line 32) | class TestTranscriptionViewerWidget: method transcription (line 34) | def transcription( method test_should_display_segments (line 55) | def test_should_display_segments( method test_should_update_segment_text (line 73) | def test_should_update_segment_text( method test_should_resize_segment_text (line 87) | def test_should_resize_segment_text(self, qtbot, transcription, transc... method test_should_extend_segment_endings (line 101) | def test_should_extend_segment_endings(self, qtbot, transcription, tra... method test_extend_with_invalid_input_uses_default (line 143) | def test_extend_with_invalid_input_uses_default(self, qtbot, transcrip... method test_on_merge_button_clicked (line 166) | def test_on_merge_button_clicked(self, qtbot: QtBot, transcription, tr... method test_text_button_changes_view_mode (line 225) | def test_text_button_changes_view_mode( method test_transcription_worker_calls_stable_whisper (line 246) | def test_transcription_worker_calls_stable_whisper(self, qtbot: QtBot,... method test_loop_toggle_functionality (line 296) | def test_loop_toggle_functionality( method test_follow_audio_toggle_functionality (line 329) | def test_follow_audio_toggle_functionality( method test_scroll_to_current_button_functionality (line 360) | def test_scroll_to_current_button_functionality( method test_search_bar_creation_and_visibility (line 379) | def test_search_bar_creation_and_visibility( method test_search_functionality_basic (line 409) | def test_search_functionality_basic( method test_search_navigation_buttons (line 437) | def test_search_navigation_buttons( method test_search_keyboard_shortcuts (line 457) | def test_search_keyboard_shortcuts( method test_search_in_different_view_modes (line 480) | def test_search_in_different_view_modes( method test_search_performance_limits (line 504) | def test_search_performance_limits( method test_search_clear_functionality (line 525) | def test_search_clear_functionality( method test_search_hide_functionality (line 549) | def test_search_hide_functionality( method test_speed_controls_functionality (line 573) | def test_speed_controls_functionality( method test_ui_state_persistence (line 604) | def test_ui_state_persistence( method test_button_sizing_consistency (line 619) | def test_button_sizing_consistency( method test_search_input_width (line 654) | def test_search_input_width( method test_current_segment_display_improvements (line 668) | def test_current_segment_display_improvements( method test_resize_current_segment_frame (line 697) | def test_resize_current_segment_frame( method test_playback_controls_visibility_methods (line 737) | def test_playback_controls_visibility_methods( method test_layout_optimizations (line 775) | def test_layout_optimizations( method test_settings_integration_for_new_features (line 813) | def test_settings_integration_for_new_features( method test_search_results_label_format (line 849) | def test_search_results_label_format( method test_current_segment_text_scrolling (line 876) | def test_current_segment_text_scrolling( method test_search_bar_visibility_toggle (line 903) | def test_search_bar_visibility_toggle( method test_audio_player_playback_state_disconnection (line 933) | def test_audio_player_playback_state_disconnection( method test_current_segment_display_styling (line 956) | def test_current_segment_display_styling( method test_search_clear_functionality_comprehensive (line 991) | def test_search_clear_functionality_comprehensive( method test_export_functionality_exists (line 1028) | def test_export_functionality_exists( method test_translation_functionality_exists (line 1043) | def test_translation_functionality_exists( method test_search_properties_exist (line 1062) | def test_search_properties_exist( method test_loop_properties_exist (line 1079) | def test_loop_properties_exist( method test_playback_controls_properties_exist (line 1096) | def test_playback_controls_properties_exist( method test_find_button_properties_exist (line 1115) | def test_find_button_properties_exist( method test_scroll_to_current_button_exists (line 1134) | def test_scroll_to_current_button_exists( method test_current_segment_display_exists (line 1152) | def test_current_segment_display_exists( method test_segment_selection_functionality_exists (line 1172) | def test_segment_selection_functionality_exists( method test_transcription_options_exist (line 1189) | def test_transcription_options_exist( method test_preferences_loading_exists (line 1205) | def test_preferences_loading_exists( method test_audio_position_tracking_exists (line 1219) | def test_audio_position_tracking_exists( method test_resize_current_segment_frame_exists (line 1233) | def test_resize_current_segment_frame_exists( method test_merge_button_functionality_exists (line 1249) | def test_merge_button_functionality_exists( method test_text_button_functionality_exists (line 1271) | def test_text_button_functionality_exists( method test_settings_integration_exists (line 1291) | def test_settings_integration_exists( method test_database_integration_exists (line 1306) | def test_database_integration_exists( method test_shortcuts_integration_exists (line 1321) | def test_shortcuts_integration_exists( method test_transcription_entity_access_exists (line 1336) | def test_transcription_entity_access_exists( method test_ui_layout_properties_exist (line 1351) | def test_ui_layout_properties_exist( method test_window_title_setting_exists (line 1370) | def test_window_title_setting_exists( method test_translations_detection_exists (line 1387) | def test_translations_detection_exists( method test_openai_token_access_exists (line 1402) | def test_openai_token_access_exists( method test_text_display_box_creation_exists (line 1416) | def test_text_display_box_creation_exists( method test_toolbar_creation_exists (line 1431) | def test_toolbar_creation_exists( FILE: tests/widgets/update_dialog_test.py class TestUpdateDialogUI (line 31) | class TestUpdateDialogUI: method test_shows_version_info (line 32) | def test_shows_version_info(self, qtbot: QtBot): method test_download_button_is_present (line 42) | def test_download_button_is_present(self, qtbot: QtBot): method test_progress_bar_hidden_initially (line 47) | def test_progress_bar_hidden_initially(self, qtbot: QtBot): method test_status_label_empty_initially (line 52) | def test_status_label_empty_initially(self, qtbot: QtBot): class TestUpdateDialogDownload (line 58) | class TestUpdateDialogDownload: method test_shows_warning_when_no_download_urls (line 59) | def test_shows_warning_when_no_download_urls(self, qtbot: QtBot): method test_download_button_disabled_after_click (line 71) | def test_download_button_disabled_after_click(self, qtbot: QtBot): method test_progress_bar_shown_after_download_starts (line 85) | def test_progress_bar_shown_after_download_starts(self, qtbot: QtBot): method test_progress_bar_updates_on_progress (line 94) | def test_progress_bar_updates_on_progress(self, qtbot: QtBot): method test_single_file_download_runs_installer_on_windows (line 106) | def test_single_file_download_runs_installer_on_windows(self, qtbot: Q... method test_single_file_download_opens_dmg_on_macos (line 125) | def test_single_file_download_opens_dmg_on_macos(self, qtbot: QtBot): method test_multi_file_download_downloads_sequentially (line 148) | def test_multi_file_download_downloads_sequentially(self, qtbot: QtBot): method test_status_shows_file_count_during_multi_file_download (line 170) | def test_status_shows_file_count_during_multi_file_download(self, qtbo... method test_progress_bar_reaches_100_after_all_downloads (line 181) | def test_progress_bar_reaches_100_after_all_downloads(self, qtbot: QtB... method test_download_error_shows_message_and_resets_ui (line 196) | def test_download_error_shows_message_and_resets_ui(self, qtbot: QtBot): method test_save_error_shows_message_and_resets_ui (line 216) | def test_save_error_shows_message_and_resets_ui(self, qtbot: QtBot): method test_download_reply_stored_while_in_progress (line 231) | def test_download_reply_stored_while_in_progress(self, qtbot: QtBot): FILE: tests/widgets/video_player_test.py function assert_approximately_equal (line 13) | def assert_approximately_equal(actual, expected, tolerance=0.001): class TestVideoPlayer (line 18) | class TestVideoPlayer: method test_should_load_media (line 19) | def test_should_load_media(self, qtbot: QtBot): method test_should_update_time_label (line 27) | def test_should_update_time_label(self, qtbot: QtBot): method test_should_toggle_play_button_icon (line 39) | def test_should_toggle_play_button_icon(self, qtbot: QtBot): method test_should_have_basic_video_controls (line 52) | def test_should_have_basic_video_controls(self, qtbot: QtBot): method test_should_change_playback_rate_directly (line 65) | def test_should_change_playback_rate_directly(self, qtbot: QtBot): method test_should_handle_various_playback_rates (line 72) | def test_should_handle_various_playback_rates(self, qtbot: QtBot): method test_should_use_vertical_layout (line 82) | def test_should_use_vertical_layout(self, qtbot: QtBot): method test_should_handle_range_looping (line 92) | def test_should_handle_range_looping(self, qtbot: QtBot): method test_should_stop_playback (line 104) | def test_should_stop_playback(self, qtbot: QtBot): method test_should_set_position (line 112) | def test_should_set_position(self, qtbot: QtBot): method test_should_track_slider_dragging (line 121) | def test_should_track_slider_dragging(self, qtbot: QtBot): method test_should_emit_position_changed_signal (line 136) | def test_should_emit_position_changed_signal(self, qtbot: QtBot): method test_should_update_scrubber_range_on_duration_change (line 146) | def test_should_update_scrubber_range_on_duration_change(self, qtbot: ... method test_should_toggle_playback (line 154) | def test_should_toggle_playback(self, qtbot: QtBot): method test_should_have_video_widget_constraints (line 161) | def test_should_have_video_widget_constraints(self, qtbot: QtBot): method test_should_have_audio_output (line 169) | def test_should_have_audio_output(self, qtbot: QtBot): method test_should_handle_range_with_position_outside (line 176) | def test_should_handle_range_with_position_outside(self, qtbot: QtBot): method test_should_handle_range_with_position_inside (line 187) | def test_should_handle_range_with_position_inside(self, qtbot: QtBot): method test_should_loop_at_range_end (line 198) | def test_should_loop_at_range_end(self, qtbot: QtBot): method test_should_not_update_scrubber_while_dragging (line 213) | def test_should_not_update_scrubber_while_dragging(self, qtbot: QtBot): method test_should_update_scrubber_when_not_dragging (line 235) | def test_should_update_scrubber_when_not_dragging(self, qtbot: QtBot): method test_initial_frame_loading (line 250) | def test_initial_frame_loading(self, qtbot: QtBot): method test_play_button_sizing (line 269) | def test_play_button_sizing(self, qtbot: QtBot):