|
|
@ -21,7 +21,7 @@ |
|
|
|
# SOFTWARE. |
|
|
|
|
|
|
|
""" |
|
|
|
pyUnRAR2 is a ctypes based wrapper around the free UnRAR.dll. |
|
|
|
pyUnRAR2 is a ctypes based wrapper around the free UnRAR.dll. |
|
|
|
|
|
|
|
It is an modified version of Jimmy Retzlaff's pyUnRAR - more simple, |
|
|
|
stable and foolproof. |
|
|
@ -45,8 +45,8 @@ if in_windows: |
|
|
|
from windows import RarFileImplementation |
|
|
|
else: |
|
|
|
from unix import RarFileImplementation |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import fnmatch, time, weakref |
|
|
|
|
|
|
|
class RarInfo(object): |
|
|
@ -62,7 +62,7 @@ class RarInfo(object): |
|
|
|
isdir - True if the file is a directory |
|
|
|
size - size in bytes of the uncompressed file |
|
|
|
comment - comment associated with the file |
|
|
|
|
|
|
|
|
|
|
|
Note - this is not currently intended to be a Python file-like object. |
|
|
|
""" |
|
|
|
|
|
|
@ -74,7 +74,7 @@ class RarInfo(object): |
|
|
|
self.size = data['size'] |
|
|
|
self.datetime = data['datetime'] |
|
|
|
self.comment = data['comment'] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __str__(self): |
|
|
@ -86,7 +86,7 @@ class RarInfo(object): |
|
|
|
|
|
|
|
class RarFile(RarFileImplementation): |
|
|
|
|
|
|
|
def __init__(self, archiveName, password=None): |
|
|
|
def __init__(self, archiveName, password=None, custom_path = None): |
|
|
|
"""Instantiate the archive. |
|
|
|
|
|
|
|
archiveName is the name of the RAR file. |
|
|
@ -99,7 +99,7 @@ class RarFile(RarFileImplementation): |
|
|
|
This is a test. |
|
|
|
""" |
|
|
|
self.archiveName = archiveName |
|
|
|
RarFileImplementation.init(self, password) |
|
|
|
RarFileImplementation.init(self, password, custom_path) |
|
|
|
|
|
|
|
def __del__(self): |
|
|
|
self.destruct() |
|
|
@ -130,31 +130,31 @@ class RarFile(RarFileImplementation): |
|
|
|
"""Read specific files from archive into memory. |
|
|
|
If "condition" is a list of numbers, then return files which have those positions in infolist. |
|
|
|
If "condition" is a string, then it is treated as a wildcard for names of files to extract. |
|
|
|
If "condition" is a function, it is treated as a callback function, which accepts a RarInfo object |
|
|
|
If "condition" is a function, it is treated as a callback function, which accepts a RarInfo object |
|
|
|
and returns boolean True (extract) or False (skip). |
|
|
|
If "condition" is omitted, all files are returned. |
|
|
|
|
|
|
|
|
|
|
|
Returns list of tuples (RarInfo info, str contents) |
|
|
|
""" |
|
|
|
checker = condition2checker(condition) |
|
|
|
return RarFileImplementation.read_files(self, checker) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def extract(self, condition='*', path='.', withSubpath=True, overwrite=True): |
|
|
|
"""Extract specific files from archive to disk. |
|
|
|
|
|
|
|
|
|
|
|
If "condition" is a list of numbers, then extract files which have those positions in infolist. |
|
|
|
If "condition" is a string, then it is treated as a wildcard for names of files to extract. |
|
|
|
If "condition" is a function, it is treated as a callback function, which accepts a RarInfo object |
|
|
|
and returns either boolean True (extract) or boolean False (skip). |
|
|
|
DEPRECATED: If "condition" callback returns string (only supported for Windows) - |
|
|
|
DEPRECATED: If "condition" callback returns string (only supported for Windows) - |
|
|
|
that string will be used as a new name to save the file under. |
|
|
|
If "condition" is omitted, all files are extracted. |
|
|
|
|
|
|
|
|
|
|
|
"path" is a directory to extract to |
|
|
|
"withSubpath" flag denotes whether files are extracted with their full path in the archive. |
|
|
|
"overwrite" flag denotes whether extracted files will overwrite old ones. Defaults to true. |
|
|
|
|
|
|
|
|
|
|
|
Returns list of RarInfos for extracted files.""" |
|
|
|
checker = condition2checker(condition) |
|
|
|
return RarFileImplementation.extract(self, checker, path, withSubpath, overwrite) |
|
|
|