def dump(self, fn, compression_type=deltarepo.XZ, stat=None): """Dump data to a file. :param fn: path to a file :type fn: str :param compression_type: Type of compression :type compression_type: int :param stat: Stat object :type stat: cr.ContentStat or None :returns: Final path (the used basename with compression suffix) :rtype: str """ if (compression_type is None or compression_type == cr.UNKNOWN_COMPRESSION or compression_type == cr.AUTO_DETECT_COMPRESSION): raise DeltaRepoError("Bad compression type: " "{0}".format(compression_type)) suffix = cr.compression_suffix(compression_type) if suffix and not fn.endswith(suffix): fn += suffix content = self.dumps() f = cr.CrFile(fn, cr.MODE_WRITE, compression_type) f.write(content) f.close() return fn
def test_crfile_no_compression(self): path = os.path.join(self.tmpdir, "foo") f = cr.CrFile(path, cr.MODE_WRITE, cr.NO_COMPRESSION) self.assertTrue(f) self.assertTrue(os.path.isfile(path)) f.write("foobar") f.close() with open(path) as foo: self.assertEqual(foo.read(), "foobar")
def test_crfile_gz_compression(self): path = os.path.join(self.tmpdir, "foo.gz") f = cr.CrFile(path, cr.MODE_WRITE, cr.GZ_COMPRESSION) self.assertTrue(f) self.assertTrue(os.path.isfile(path)) f.write("foobar") f.close() import gzip with gzip.open(path) as foo_gz: self.assertEqual(foo_gz.read().decode('utf-8'), "foobar")
def test_crfile_bz2_compression(self): path = os.path.join(self.tmpdir, "foo.bz2") f = cr.CrFile(path, cr.MODE_WRITE, cr.BZ2_COMPRESSION) self.assertTrue(f) self.assertTrue(os.path.isfile(path)) f.write("foobar") f.close() import bz2 content = bz2.decompress(open(path, 'rb').read()).decode('utf-8') self.assertEqual(content, "foobar")
def test_crfile_operations_on_closed_file(self): # Already closed file path = os.path.join(self.tmpdir, "primary.xml.gz") f = cr.CrFile(path, cr.MODE_WRITE, cr.GZ_COMPRESSION) self.assertTrue(f) self.assertTrue(os.path.isfile(path)) f.close() self.assertRaises(cr.CreaterepoCError, f.write, "foobar") f.close() # No error should be raised del (f) # No error should be raised
def test_crfile_gz_compression(self): path = os.path.join(self.tmpdir, "foo.gz") f = cr.CrFile(path, cr.MODE_WRITE, cr.GZ_COMPRESSION) self.assertTrue(f) self.assertTrue(os.path.isfile(path)) f.write("foobar") f.close() import gzip content = gzip.open(path).read() self.assertEqual(content, "foobar")
def test_crfile_xz_compression(self): path = os.path.join(self.tmpdir, "foo.xz") f = cr.CrFile(path, cr.MODE_WRITE, cr.XZ_COMPRESSION) self.assertTrue(f) self.assertTrue(os.path.isfile(path)) f.write("foobar") f.close() import subprocess p = subprocess.Popen(["unxz", "--stdout", path], stdout=subprocess.PIPE) content = p.stdout.read().decode('utf-8') self.assertEqual(content, "foobar")
def test_crfile_zck_compression(self): if cr.HAS_ZCK == 0: return path = os.path.join(self.tmpdir, "foo.zck") f = cr.CrFile(path, cr.MODE_WRITE, cr.ZCK_COMPRESSION) self.assertTrue(f) self.assertTrue(os.path.isfile(path)) f.write("foobar") f.close() import subprocess with subprocess.Popen(["unzck", "--stdout", path], stdout=subprocess.PIPE, close_fds=False) as p: content = p.stdout.read().decode('utf-8') self.assertEqual(content, "foobar")
def test_contentstat_ref_in_crfile(self): """Test if reference is saved properly""" cs = cr.ContentStat(cr.SHA256) self.assertEqual(cs.size, 0) self.assertEqual(cs.checksum_type, cr.SHA256) self.assertEqual(cs.checksum, None) path = os.path.join(self.tmpdir, "foofile.gz") f = cr.CrFile(path, cr.MODE_WRITE, cr.GZ_COMPRESSION, cs) self.assertTrue(f) self.assertTrue(os.path.isfile(path)) del cs f.write("foobar") f.close() self.assertTrue(os.path.isfile(path))
def test_crfile_basic_operations(self): f = cr.CrFile(self.tmpdir + "/foo.gz", cr.MODE_WRITE, cr.GZ_COMPRESSION, None) self.assertTrue(f) self.assertTrue(os.path.isfile(self.tmpdir + "/foo.gz"))