コード例 #1
0
ファイル: marfile.py プロジェクト: Acidburn0zzz/build-mar
    def extract(self, member, path=".", fileobj=None):
        """Extract and decompress `member` into `path` which defaults to the
        current directory."""
        self.fileobj.seek(member._offset)
        decomp = bz2.BZ2Decompressor()
        if fileobj:
            data = self.fileobj.read(member.size)
            fileobj.write(decomp.decompress(data))
            return

        dstpath = safe_join(path, member.name)
        dirname = os.path.dirname(dstpath)
        if not os.path.exists(dirname):
            os.makedirs(dirname)

        output = open(dstpath, "wb")
        toread = member.size
        while True:
            thisblock = min(128 * 1024, toread)
            block = self.fileobj.read(thisblock)
            if not block:
                break
            toread -= len(block)
            output.write(decomp.decompress(block))
        output.close()
        os.chmod(dstpath, member.flags)

        return dstpath
コード例 #2
0
ファイル: marfile.py プロジェクト: rail/build-mar
    def extract(self, member, path="."):
        """Extract `member` into `path` which defaults to the current
        directory. Absolute paths are converted to be relative to `path`

        Returns the path the member was extracted to."""
        dstpath = safe_join(path, member.name)
        dirname = os.path.dirname(dstpath)
        if not os.path.exists(dirname):
            os.makedirs(dirname)

        self.fileobj.seek(member._offset)
        # TODO: Should this be done all in memory?
        open(dstpath, "wb").write(self.fileobj.read(member.size))
        os.chmod(dstpath, member.flags)

        return dstpath
コード例 #3
0
ファイル: marfile.py プロジェクト: Acidburn0zzz/build-mar
    def extract(self, member, path=".", fileobj=None):
        """Extract `member` into `path` which defaults to the current
        directory. Absolute paths are converted to be relative to `path`

        Returns the path the member was extracted to."""
        self.fileobj.seek(member._offset)
        if fileobj:
            fileobj.write(self.fileobj.read(member.size))
            return

        dstpath = safe_join(path, member.name)
        dirname = os.path.dirname(dstpath)
        if not os.path.exists(dirname):
            os.makedirs(dirname)

        # TODO: Should this be done all in memory?
        open(dstpath, "wb").write(self.fileobj.read(member.size))
        os.chmod(dstpath, member.flags)

        return dstpath
コード例 #4
0
ファイル: test_utils.py プロジェクト: rail/build-mar
 def test_absolute(self):
     self.assertEquals(safe_join("/a/b/c", "/foo/bar"), "/a/b/c/foo/bar")
コード例 #5
0
ファイル: test_utils.py プロジェクト: rail/build-mar
 def test_normal(self):
     self.assertEquals(safe_join("/a/b/c", "foo/bar"), "/a/b/c/foo/bar")
コード例 #6
0
ファイル: test_utils.py プロジェクト: Acidburn0zzz/build-mar
def test_safe_join(a, b):
    result = safe_join(a, b)
    assert result.startswith(a)
コード例 #7
0
ファイル: test_utils.py プロジェクト: Acidburn0zzz/build-mar
 def test_absolute(self):
     self.assertEquals(safe_join("/a/b/c", "/foo/bar"), "/a/b/c/foo/bar")
コード例 #8
0
ファイル: test_utils.py プロジェクト: Acidburn0zzz/build-mar
 def test_normal(self):
     self.assertEquals(safe_join("/a/b/c", "foo/bar"), "/a/b/c/foo/bar")