Barely working. (Somehow TinyTag removes all "b"s at the beginning of the string tag.)
This commit is contained in:
parent
94e350428b
commit
03ea689bff
6 changed files with 196 additions and 3 deletions
|
@ -1,7 +1,70 @@
|
|||
#!/usr/bin/python3
|
||||
|
||||
from tinytag import TinyTag
|
||||
from __future__ import annotations
|
||||
from tinytag import TinyTag, UnsupportedFormatError
|
||||
|
||||
|
||||
if False: # just stole this lazy import type hinting trick from tinytag
|
||||
from collections.abc import Callable, Iterator # noqa
|
||||
from typing import Any, BinaryIO, Dict, List
|
||||
|
||||
|
||||
class SmallTag(TinyTag):
|
||||
pass
|
||||
@classmethod
|
||||
def _get_parser_class(
|
||||
cls,
|
||||
filename: str | None = None,
|
||||
filehandle: BinaryIO | None = None
|
||||
) -> type[SmallTag]:
|
||||
if cls != SmallTag:
|
||||
return cls
|
||||
if filename:
|
||||
parser_class = cls._get_parser_for_filename(filename)
|
||||
if parser_class is not None:
|
||||
return parser_class
|
||||
# try determining the file type by magic byte header
|
||||
if filehandle:
|
||||
parser_class = cls._get_parser_for_file_handle(filehandle)
|
||||
if parser_class is not None:
|
||||
return parser_class
|
||||
raise UnsupportedFormatError(
|
||||
'No tag reader found to support file type')
|
||||
|
||||
def write(self, file_obj: BinaryIO = None):
|
||||
raise NotImplementedError
|
||||
|
||||
def _set_filehandler_for_writing(self, file_obj: BinaryIO) -> bool:
|
||||
should_close_file = file_obj is None and not self._filehandler.writable()
|
||||
|
||||
if self.filename is None and should_close_file:
|
||||
raise ValueError(
|
||||
"You must specify a new file object that is in write mode. "
|
||||
"(Has to be from the same file as specified while creating this TinyTag instance.)"
|
||||
)
|
||||
|
||||
if file_obj is not None and not self._filehandler.closed():
|
||||
self._filehandler.close()
|
||||
|
||||
if file_obj is not None:
|
||||
self._filehandler = file_obj
|
||||
|
||||
else:
|
||||
self._filehandler = open(self.filename, "rb+")
|
||||
|
||||
return should_close_file
|
||||
|
||||
|
||||
# import formats after SmallTag definition to avoid circular imports
|
||||
# (this solution is stupid, but I don't know anything better.)
|
||||
from ._formats import _ID3 # noqa
|
||||
|
||||
SmallTag._file_extension_mapping = {
|
||||
('.mp1', '.mp2', '.mp3'): _ID3,
|
||||
# ('.oga', '.ogg', '.opus', '.spx'): _Ogg, (Not yet implemented.)
|
||||
# ('.wav',): _Wave,
|
||||
# ('.flac',): _Flac,
|
||||
# ('.wma',): _Wma,
|
||||
# ('.m4b', '.m4a', '.m4r', '.m4v', '.mp4',
|
||||
# '.aax', '.aaxc'): _MP4,
|
||||
# ('.aiff', '.aifc', '.aif', '.afc'): _Aiff,
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue