From 66e20e126a4bc7775ee8e3510aa5709d781b2df3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20Tronel?= Date: Fri, 28 Aug 2026 16:53:38 +0200 Subject: [PATCH] Fix ruff warning about imports and IOError instead of OSError. --- src/tscut/cli.py | 71 ++++++++++++++++++++++++++++++---------------- src/tscut/tscut.py | 60 +++++++++++++++++++++++---------------- 2 files changed, 82 insertions(+), 49 deletions(-) diff --git a/src/tscut/cli.py b/src/tscut/cli.py index fb7e715..374352f 100644 --- a/src/tscut/cli.py +++ b/src/tscut/cli.py @@ -6,23 +6,46 @@ import argparse import logging -from os import unlink import os.path -from sys import exit -from datetime import datetime,timedelta +from datetime import datetime, timedelta +from os import unlink from shutil import copyfile, move +from sys import exit import coloredlogs import hexdump -from .tscut import check_required_tools, parse_time_interval, cmp_to_key, get_format,\ - SupportedFormat, compare_time_interval, ffmpeg_convert, parse_codec_private,\ - dump_codec_private_data, get_nearest_iframe, get_movie_duration, extract_all_streams,\ - extract_mkv_part, extract_srt, concatenate_h264_parts, concatenate_h264_ts_parts,\ - do_ocr, get_frame_rate, get_streams, get_ts_frame, remove_video_tracks_from_mkv,\ - merge_mkvs, extract_track_from_mkv, get_avc_config_from_h264,\ - get_codec_private_data_from_mkv, find_subtitles_tracks, change_codec_private_data,\ - get_tesseract_supported_lang, remux_srt_subtitles +from .tscut import ( + SupportedFormat, + change_codec_private_data, + check_required_tools, + cmp_to_key, + compare_time_interval, + concatenate_h264_parts, + concatenate_h264_ts_parts, + do_ocr, + dump_codec_private_data, + extract_all_streams, + extract_mkv_part, + extract_srt, + extract_track_from_mkv, + ffmpeg_convert, + find_subtitles_tracks, + get_avc_config_from_h264, + get_codec_private_data_from_mkv, + get_format, + get_frame_rate, + get_movie_duration, + get_nearest_iframe, + get_streams, + get_tesseract_supported_lang, + get_ts_frame, + merge_mkvs, + parse_codec_private, + parse_time_interval, + remove_video_tracks_from_mkv, + remux_srt_subtitles, +) logger = logging.getLogger(__name__) @@ -110,7 +133,7 @@ def main() -> int: try: input_file = open(args.input_file, mode='rb') logger.debug("Type of input file: %s", type(input_file)) - except IOError: + except OSError: logger.error("Impossible to open %s", args.input_file) exit(-1) @@ -153,21 +176,21 @@ def main() -> int: logger.info("Converting MP4 to MKV.") try: mkv = open(mkvfilename, 'wb+') - except IOError: + except OSError: logger.error('') ffmpeg_convert(paths['ffmpeg'], paths['ffprobe'], mp4, 'mp4', mkv, 'matroska', duration) if nb_parts > 0: temporaries.append(mkv) - except IOError: + except OSError: logger.error('') elif format_of_file == SupportedFormat.MP4: logger.info("Converting MP4 to MKV") try: mkv = open(mkvfilename, 'wb+') - except IOError: + except OSError: logger.error('') ffmpeg_convert(paths['ffmpeg'], paths['ffprobe'], input_file, 'mp4', mkv, 'matroska', duration) @@ -340,25 +363,25 @@ def main() -> int: try: internal_mkv = open(internal_mkv_name, 'wb+') - except IOError: + except OSError: logger.error('Impossible to create file: %s', internal_mkv_name) exit(-1) try: internal_novideo_mkv = open(internal_novideo_mkv_name, 'wb+') - except IOError: + except OSError: logger.error('Impossible to create file: %s', internal_novideo_mkv_name) exit(-1) try: internal_h264 = open(internal_h264_name, 'wb+') - except IOError: + except OSError: logger.error('Impossible to create file: %s', internal_h264_name) exit(-1) try: internal_h264_ts = open(internal_h264_ts_name, 'w+', encoding='utf8') - except IOError: + except OSError: logger.error('Impossible to create file: %s', internal_h264_ts_name) exit(-1) @@ -429,7 +452,7 @@ def main() -> int: if nb_mkv_parts > 0: try: full_h264 = open(f'{basename}-full.h264', 'wb+') - except IOError: + except OSError: logger.error('Impossible to create file full H264 stream.') exit(-1) @@ -439,7 +462,7 @@ def main() -> int: try: full_h264_ts = open(f'{basename}-ts.txt', 'w+', encoding='utf8') - except IOError: + except OSError: logger.error('Impossible to create file containing all video timestamps.') exit(-1) @@ -463,7 +486,7 @@ def main() -> int: if nb_mkv_parts >=1 : try: final_novideo = open(final_novideo_name, 'rb') - except IOError: + except OSError: logger.error('Impossible to open file: %s.', final_novideo_name) exit(-1) @@ -521,12 +544,12 @@ def main() -> int: for idx_name, sub_name, _, _ in list_of_subtitles: try: idx = open(idx_name,'rb') - except IOError: + except OSError: logger.error("Impossible to open %s.", idx_name) exit(-1) try: sub = open(sub_name,'rb') - except IOError: + except OSError: logger.error("Impossible to open %s.", sub_name) exit(-1) diff --git a/src/tscut/tscut.py b/src/tscut/tscut.py index dcdd451..b90c79a 100755 --- a/src/tscut/tscut.py +++ b/src/tscut/tscut.py @@ -3,30 +3,40 @@ # Standard modules import argparse -import re -from sys import exit -from datetime import datetime,timedelta -import logging -from functools import cmp_to_key -from subprocess import Popen, PIPE -from os import read, write, lseek, set_inheritable, memfd_create, SEEK_SET, close, unlink,\ - fstat, ftruncate -import os.path -from enum import IntEnum, unique -from shutil import copyfile, which, move -from dataclasses import dataclass, field -from math import floor, ceil, log -from io import BytesIO, TextIOWrapper import json +import logging +import os.path +import re +from dataclasses import dataclass, field +from datetime import datetime, timedelta +from enum import IntEnum, unique +from functools import cmp_to_key +from io import BytesIO, TextIOWrapper +from math import ceil, floor, log +from os import ( + SEEK_SET, + close, + fstat, + ftruncate, + lseek, + memfd_create, + read, + set_inheritable, + unlink, + write, +) +from shutil import copyfile, move, which +from subprocess import PIPE, Popen +from sys import exit from typing import IO -from typeguard import typechecked # Third party libraries import coloredlogs -from tqdm import tqdm import hexdump from iso639 import Lang from iso639.exceptions import InvalidLanguageValue +from tqdm import tqdm +from typeguard import typechecked # Local modules # TODO: create local modules for MP4, MKV @@ -361,7 +371,7 @@ def do_ocr(vobsubocr:str, idxs: list[tuple[str,str,str,str]], duration:timedelta while pos < srt_length: pos+=write(outfd, buf[pos:]) temporaries.append(dump_srt) - except IOError: + except OSError: logger.error('Impossible to create file: %s', srtname) return None @@ -2734,7 +2744,7 @@ def dump_ppm(pictures: bytes, prefix: str, temporaries: list[IO[bytes]]) -> None nb_bytes+=write(outfd, pictures[pos+nb_bytes:pos+length]) pos+=length picture+=1 - except IOError: + except OSError: logger.error('Impossible to create file: %s', filename) @typechecked @@ -2871,7 +2881,7 @@ def extract_all_streams(ffmpeg_path:str, ffprobe_path:str, input_file:IO[bytes], pos = 0 while pos < len(sound_bytes): pos+=write(outfd, sound_bytes[pos:]) - except IOError: + except OSError: logger.error('Impossible to create file: %s', tmpname) return None @@ -2907,7 +2917,7 @@ def extract_all_streams(ffmpeg_path:str, ffprobe_path:str, input_file:IO[bytes], mkv_filename = f'{files_prefix}.mkv' try: mkv_output = open(mkv_filename,'wb+') - except IOError: + except OSError: logger.error('Impossible to create file: %s', mkv_filename) return None @@ -2928,7 +2938,7 @@ def extract_all_streams(ffmpeg_path:str, ffprobe_path:str, input_file:IO[bytes], h264_filename = f'{files_prefix}.h264' try: h264_output = open(h264_filename,'wb+') - except IOError: + except OSError: logger.error('Impossible to create file: %s', h264_filename) return None @@ -2957,7 +2967,7 @@ def extract_all_streams(ffmpeg_path:str, ffprobe_path:str, input_file:IO[bytes], h264_ts_filename = f'{files_prefix}-ts.txt' try: h264_ts_output = open(h264_ts_filename,'w+', encoding='utf8') - except IOError: + except OSError: logger.error('Impossible to create file: %s', h264_ts_filename) return None @@ -2992,7 +3002,7 @@ def merge_mkvs(mkvmerge_path:str, inputs: list[IO[bytes]], output_name:str, fds = [] try: out = open(output_name, 'wb+') - except IOError: + except OSError: logger.error('Impossible to create file: %s', output_name) return None @@ -3175,7 +3185,7 @@ def remux_srt_subtitles(mkvmerge_path:str, input_file: IO[bytes], output_filenam try: out = open(output_filename, 'w', encoding='utf8') - except IOError: + except OSError: logger.error('Impossible to create file: %s', output_filename) return None @@ -3289,7 +3299,7 @@ def do_coarse_processing(ffmpeg_path:str, ffprobe_path:str, mkvmerge_path:str, try: internal_mkv = open(internal_mkv_name, 'wb+') - except IOError: + except OSError: logger.error('Impossible to create file: %s', internal_mkv_name) exit(-1)