usenetbinary-newsreaderquickboxtraktkodistabletvshowsqnaptautullifanartsickbeardtvseriesplexswizzinembyseedboxtvdbnzbgetsubtitlewebui
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.4 KiB
40 lines
1.4 KiB
6 years ago
|
from hachoir_py3.core.i18n import guessBytesCharset
|
||
|
from hachoir_py3.stream import InputIOStream, InputSubStream, InputStreamError
|
||
7 years ago
|
|
||
11 years ago
|
|
||
|
def FileInputStream(filename, real_filename=None, **args):
|
||
|
"""
|
||
|
Create an input stream of a file. filename must be unicode.
|
||
|
|
||
|
real_filename is an optional argument used to specify the real filename,
|
||
|
its type can be 'str' or 'unicode'. Use real_filename when you are
|
||
|
not able to convert filename to real unicode string (ie. you have to
|
||
|
use unicode(name, 'replace') or unicode(name, 'ignore')).
|
||
|
"""
|
||
6 years ago
|
assert isinstance(filename, str)
|
||
11 years ago
|
if not real_filename:
|
||
|
real_filename = filename
|
||
|
try:
|
||
|
inputio = open(real_filename, 'rb')
|
||
6 years ago
|
except IOError as err:
|
||
|
errmsg = str(err)
|
||
|
raise InputStreamError(
|
||
|
"Unable to open file %s: %s" % (filename, errmsg))
|
||
11 years ago
|
source = "file:" + filename
|
||
|
offset = args.pop("offset", 0)
|
||
|
size = args.pop("size", None)
|
||
|
if offset or size:
|
||
|
if size:
|
||
|
size = 8 * size
|
||
|
stream = InputIOStream(inputio, source=source, **args)
|
||
|
return InputSubStream(stream, 8 * offset, size, **args)
|
||
|
else:
|
||
7 years ago
|
args.setdefault("tags", []).append(("filename", filename))
|
||
11 years ago
|
return InputIOStream(inputio, source=source, **args)
|
||
|
|
||
7 years ago
|
|
||
11 years ago
|
def guessStreamCharset(stream, address, size, default=None):
|
||
7 years ago
|
size = min(size, 1024 * 8)
|
||
|
bytes = stream.readBytes(address, size // 8)
|
||
11 years ago
|
return guessBytesCharset(bytes, default)
|