from . formatbase import FormatBase
from . microdvd import MicroDVDFormat
from . subrip import SubripFormat
from . jsonformat import JSONFormat
from . substation import SubstationFormat
from . mpl2 import MPL2Format
from . tmp import TmpFormat
from . exceptions import *
#: Dict mapping file extensions to format identifiers.
FILE_EXTENSION_TO_FORMAT_IDENTIFIER = {
" .srt " : " srt " ,
" .ass " : " ass " ,
" .ssa " : " ssa " ,
" .sub " : " microdvd " ,
" .json " : " json " ,
" .txt " : " tmp " ,
}
#: Dict mapping format identifiers to implementations (FormatBase subclasses).
FORMAT_IDENTIFIER_TO_FORMAT_CLASS = {
" srt " : SubripFormat ,
" ass " : SubstationFormat ,
" ssa " : SubstationFormat ,
" microdvd " : MicroDVDFormat ,
" json " : JSONFormat ,
" mpl2 " : MPL2Format ,
" tmp " : TmpFormat ,
}
def get_format_class ( format_ ) :
""" Format identifier -> format class (ie. subclass of FormatBase) """
try :
return FORMAT_IDENTIFIER_TO_FORMAT_CLASS [ format_ ]
except KeyError :
raise UnknownFormatIdentifierError ( format_ )
def get_format_identifier ( ext ) :
""" File extension -> format identifier """
try :
return FILE_EXTENSION_TO_FORMAT_IDENTIFIER [ ext ]
except KeyError :
raise UnknownFileExtensionError ( ext )
def get_file_extension ( format_ ) :
""" Format identifier -> file extension """
if format_ not in FORMAT_IDENTIFIER_TO_FORMAT_CLASS :
raise UnknownFormatIdentifierError ( format_ )
for ext , f in FILE_EXTENSION_TO_FORMAT_IDENTIFIER . items ( ) :
if f == format_ :
return ext
raise RuntimeError ( " No file extension for format %r " % format_ )
def autodetect_format ( content ) :
""" Return format identifier for given fragment or raise FormatAutodetectionError. """
formats = set ( )
for impl in FORMAT_IDENTIFIER_TO_FORMAT_CLASS . values ( ) :
guess = impl . guess_format ( content )
if guess is not None :
formats . add ( guess )
if len ( formats ) == 1 :
return formats . pop ( )
elif not formats :
raise FormatAutodetectionError ( " No suitable formats " )
else :
raise FormatAutodetectionError ( " Multiple suitable formats ( %r ) " % formats )