示例#1
0
def extract_first_alphabetically(stream):
    from calibre.libunzip import sort_key
    names_ = sorted([
        x for x in names(stream)
        if os.path.splitext(x)[1][1:].lower() in {
            'png', 'jpg', 'jpeg', 'gif', 'webp'}],
                    key=sort_key)
    return extract_member(stream, name=names_[0], match=None)
示例#2
0
文件: unrar.py 项目: j-howell/calibre
def extract_first_alphabetically(stream):
    from calibre.libunzip import sort_key
    names_ = sorted([
        x for x in names(stream)
        if os.path.splitext(x)[1][1:].lower() in {
            'png', 'jpg', 'jpeg', 'gif', 'webp'}],
                    key=sort_key)
    return extract_member(stream, name=names_[0], match=None)
示例#3
0
def extract_member(
    path_or_stream, match=re.compile(r'\.(jpg|jpeg|gif|png)\s*$', re.I), name=None):
    from unrardll import extract_member
    if iswindows and name is not None:
        name = name.replace(os.sep, '/')

    def is_match(header):
        fname = header['filename']
        if iswindows:
            fname = fname.replace(os.sep, '/')
        return (name is not None and fname == name) or \
               (match is not None and match.search(fname) is not None)

    with StreamAsPath(path_or_stream) as path:
        name, data = extract_member(path, is_match)
        if name is not None:
            return name, data
示例#4
0
文件: unrar.py 项目: j-howell/calibre
def extract_member(
    path_or_stream, match=re.compile(r'\.(jpg|jpeg|gif|png)\s*$', re.I), name=None):
    from unrardll import extract_member
    if iswindows and name is not None:
        name = name.replace(os.sep, '/')

    def is_match(header):
        fname = header['filename']
        if iswindows:
            fname = fname.replace(os.sep, '/')
        return (name is not None and fname == name) or \
               (match is not None and match.search(fname) is not None)

    with StreamAsPath(path_or_stream) as path:
        name, data = extract_member(path, is_match)
        if name is not None:
            return name, data
示例#5
0
 def do_test(stream):
     c = comment(stream)
     if c != b'some comment\n':
         raise ValueError('Comment not read: %r != %r' % (c, b'some comment\n'))
     if set(names(stream)) != {
         '1/sub-one', 'one.txt', '2/sub-two.txt', '诶比屁.txt', 'Füße.txt',
         'uncompressed', 'max-compressed'}:
         raise ValueError('Name list does not match')
     with TemporaryDirectory('test-unrar') as tdir:
         extract(stream, tdir)
         for name in tdata:
             if name not in '1 2 symlink'.split():
                 with open(os.path.join(tdir, name), 'rb') as s:
                     if s.read() != tdata[name]:
                         raise ValueError('Did not extract %s properly' % name)
     for name in tdata:
         if name not in '1 2 symlink'.split():
             d = extract_member(stream, name=name)
             if d is None or d[1] != tdata[name]:
                 raise ValueError(
                     'Failed to extract %s %r != %r' % (name, d, tdata[name]))
示例#6
0
文件: unrar.py 项目: MarioJC/calibre
 def do_test(stream):
     c = comment(stream)
     if c != b'some comment\n':
         raise ValueError('Comment not read: %r != %r' % (c, b'some comment\n'))
     if set(names(stream)) != {
         '1/sub-one', 'one.txt', '2/sub-two.txt', '诶比屁.txt', 'Füße.txt',
         'uncompressed', 'max-compressed'}:
         raise ValueError('Name list does not match')
     with TemporaryDirectory('test-unrar') as tdir:
         extract(stream, tdir)
         for name in tdata:
             if name not in '1 2 symlink'.split():
                 with open(os.path.join(tdir, name), 'rb') as s:
                     if s.read() != tdata[name]:
                         raise ValueError('Did not extract %s properly' % name)
     for name in tdata:
         if name not in '1 2 symlink'.split():
             d = extract_member(stream, name=name)
             if d is None or d[1] != tdata[name]:
                 raise ValueError(
                     'Failed to extract %s %r != %r' % (name, d, tdata[name]))
示例#7
0
def extract_cover_image(stream):
    from calibre.libunzip import sort_key, name_ok
    for name in sorted(names(stream), key=sort_key):
        if name_ok(name):
            return extract_member(stream, name=name, match=None)
示例#8
0
 def test_extract_member(self):
     self.ae(
         extract_member(simple_rar,
                        lambda h: h['filename'] == 'one.txt',
                        verify_data=True), ('one.txt', sr_data['one.txt']))
     self.ae(extract_member(simple_rar, lambda h: False), (None, None))
示例#9
0
文件: unrar.py 项目: j-howell/calibre
def extract_cover_image(stream):
    from calibre.libunzip import sort_key, name_ok
    for name in sorted(names(stream), key=sort_key):
        if name_ok(name):
            return extract_member(stream, name=name, match=None)