1# 2# Copyright BitBake Contributors 3# 4# SPDX-License-Identifier: GPL-2.0-only 5# 6 7import bb.compress._pipecompress 8import shutil 9 10 11def open(*args, **kwargs): 12 return bb.compress._pipecompress.open_wrap(ZstdFile, *args, **kwargs) 13 14 15class ZstdFile(bb.compress._pipecompress.PipeFile): 16 def __init__(self, *args, num_threads=1, compresslevel=3, **kwargs): 17 self.num_threads = num_threads 18 self.compresslevel = compresslevel 19 super().__init__(*args, **kwargs) 20 21 def _get_zstd(self): 22 if self.num_threads == 1 or not shutil.which("pzstd"): 23 return ["zstd"] 24 return ["pzstd", "-p", "%d" % self.num_threads] 25 26 def get_compress(self): 27 return self._get_zstd() + ["-c", "-%d" % self.compresslevel] 28 29 def get_decompress(self): 30 return self._get_zstd() + ["-d", "-c"] 31