- Timestamp:
- 07/23/17 13:06:08 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
titan/mediathek/localhoster/lib/python2.7/test/test_tarfile.py
r40094 r40658 1 # -*- coding: iso-8859-15 -*-2 3 1 import sys 4 2 import os … … 63 61 tarinfo = self.tar.getmember("ustar/regtype") 64 62 fobj1 = open(os.path.join(TEMPDIR, "ustar/regtype"), "rU") 63 with open(os.path.join(TEMPDIR, "ustar/regtype"), "rU") as fobj1: 64 lines1 = fobj1.readlines() 65 65 fobj2 = self.tar.extractfile(tarinfo) 66 66 67 lines1 = fobj1.readlines()68 67 lines2 = fobj2.readlines() 69 68 self.assertTrue(lines1 == lines2, … … 78 77 self.tar.extract("ustar/regtype", TEMPDIR) 79 78 tarinfo = self.tar.getmember("ustar/regtype") 80 fobj1 = open(os.path.join(TEMPDIR, "ustar/regtype"), "rU") 79 with open(os.path.join(TEMPDIR, "ustar/regtype"), "rU") as fobj1: 80 lines1 = fobj1.readlines() 81 81 fobj2 = self.tar.extractfile(tarinfo) 82 lines1 = fobj1.readlines()83 82 lines2 = [line for line in fobj2] 84 83 self.assertTrue(lines1 == lines2, … … 87 86 def test_fileobj_seek(self): 88 87 self.tar.extract("ustar/regtype", TEMPDIR) 89 fobj = open(os.path.join(TEMPDIR, "ustar/regtype"), "rb") 90 data = fobj.read() 91 fobj.close() 88 with open(os.path.join(TEMPDIR, "ustar/regtype"), "rb") as fobj: 89 data = fobj.read() 92 90 93 91 tarinfo = self.tar.getmember("ustar/regtype") … … 241 239 # archive successfully. Note that an empty tar archive is not the 242 240 # same as an empty file! 243 tarfile.open(tmpname, self.mode.replace("r", "w")).close() 241 with tarfile.open(tmpname, self.mode.replace("r", "w")): 242 pass 244 243 try: 245 244 tar = tarfile.open(tmpname, self.mode) … … 247 246 except tarfile.ReadError: 248 247 self.fail("tarfile.open() failed on empty archive") 249 self.assertListEqual(tar.getmembers(), []) 248 else: 249 self.assertListEqual(tar.getmembers(), []) 250 finally: 251 tar.close() 250 252 251 253 def test_null_tarfile(self): … … 253 255 # This test guarantees that tarfile.open() does not treat an empty 254 256 # file as an empty tar archive. 255 open(tmpname, "wb").close() 257 with open(tmpname, "wb"): 258 pass 256 259 self.assertRaises(tarfile.ReadError, tarfile.open, tmpname, self.mode) 257 260 self.assertRaises(tarfile.ReadError, tarfile.open, tmpname) … … 277 280 # Test if EOFHeaderError ('\0') and InvalidHeaderError ('a') 278 281 # are ignored correctly. 279 fobj = _open(tmpname, "wb") 280 fobj.write(char * 1024) 281 fobj.write(tarfile.TarInfo("foo").tobuf()) 282 fobj.close() 282 with _open(tmpname, "wb") as fobj: 283 fobj.write(char * 1024) 284 fobj.write(tarfile.TarInfo("foo").tobuf()) 283 285 284 286 tar = tarfile.open(tmpname, mode="r", ignore_zeros=True) 285 self.assertListEqual(tar.getnames(), ["foo"], 287 try: 288 self.assertListEqual(tar.getnames(), ["foo"], 286 289 "ignore_zeros=True should have skipped the %r-blocks" % char) 287 tar.close() 290 finally: 291 tar.close() 288 292 289 293 def test_premature_end_of_archive(self): … … 316 320 317 321 def test_no_name_argument(self): 318 fobj = open(self.tarname, "rb")319 tar = tarfile.open(fileobj=fobj, mode=self.mode)320 self.assertEqual(tar.name, os.path.abspath(fobj.name))322 with open(self.tarname, "rb") as fobj: 323 tar = tarfile.open(fileobj=fobj, mode=self.mode) 324 self.assertEqual(tar.name, os.path.abspath(fobj.name)) 321 325 322 326 def test_no_name_attribute(self): 323 data = open(self.tarname, "rb").read() 327 with open(self.tarname, "rb") as fobj: 328 data = fobj.read() 324 329 fobj = StringIO.StringIO(data) 325 330 self.assertRaises(AttributeError, getattr, fobj, "name") … … 328 333 329 334 def test_empty_name_attribute(self): 330 data = open(self.tarname, "rb").read() 335 with open(self.tarname, "rb") as fobj: 336 data = fobj.read() 331 337 fobj = StringIO.StringIO(data) 332 338 fobj.name = "" … … 349 355 # of the testtar. 350 356 tar = tarfile.open(self.tarname, mode=self.mode) 351 tar.next() 352 t = tar.next() 353 name = t.name 354 offset = t.offset 355 data = tar.extractfile(t).read() 356 tar.close() 357 try: 358 tar.next() 359 t = tar.next() 360 name = t.name 361 offset = t.offset 362 data = tar.extractfile(t).read() 363 finally: 364 tar.close() 357 365 358 366 # Open the testtar and seek to the offset of the second member. … … 364 372 _open = open 365 373 fobj = _open(self.tarname, "rb") 366 fobj.seek(offset) 367 368 # Test if the tarfile starts with the second member. 369 tar = tar.open(self.tarname, mode="r:", fileobj=fobj) 370 t = tar.next() 371 self.assertEqual(t.name, name) 372 # Read to the end of fileobj and test if seeking back to the 373 # beginning works. 374 tar.getmembers() 375 self.assertEqual(tar.extractfile(t).read(), data, 376 "seek back did not work") 377 tar.close() 374 try: 375 fobj.seek(offset) 376 377 # Test if the tarfile starts with the second member. 378 tar = tar.open(self.tarname, mode="r:", fileobj=fobj) 379 t = tar.next() 380 self.assertEqual(t.name, name) 381 # Read to the end of fileobj and test if seeking back to the 382 # beginning works. 383 tar.getmembers() 384 self.assertEqual(tar.extractfile(t).read(), data, 385 "seek back did not work") 386 tar.close() 387 finally: 388 fobj.close() 378 389 379 390 def test_fail_comp(self): … … 382 393 self.skipTest('needs a gz or bz2 mode') 383 394 self.assertRaises(tarfile.ReadError, tarfile.open, tarname, self.mode) 384 fobj = open(tarname, "rb") 385 self.assertRaises(tarfile.ReadError, tarfile.open, fileobj=fobj, mode=self.mode) 395 with open(tarname, "rb") as fobj: 396 self.assertRaises(tarfile.ReadError, tarfile.open, 397 fileobj=fobj, mode=self.mode) 386 398 387 399 def test_v7_dirtype(self): … … 437 449 # and times (see issue1735). 438 450 tar = tarfile.open(tarname, encoding="iso8859-1") 439 directories = [t for t in tar if t.isdir()] 440 tar.extractall(TEMPDIR, directories) 441 for tarinfo in directories: 442 path = os.path.join(TEMPDIR, tarinfo.name) 443 if sys.platform != "win32": 444 # Win32 has no support for fine grained permissions. 445 self.assertEqual(tarinfo.mode & 0777, os.stat(path).st_mode & 0777) 446 self.assertEqual(tarinfo.mtime, os.path.getmtime(path)) 447 tar.close() 451 try: 452 directories = [t for t in tar if t.isdir()] 453 tar.extractall(TEMPDIR, directories) 454 for tarinfo in directories: 455 path = os.path.join(TEMPDIR, tarinfo.name) 456 if sys.platform != "win32": 457 # Win32 has no support for fine grained permissions. 458 self.assertEqual(tarinfo.mode & 0777, os.stat(path).st_mode & 0777) 459 self.assertEqual(tarinfo.mtime, os.path.getmtime(path)) 460 finally: 461 tar.close() 448 462 449 463 def test_init_close_fobj(self): … … 452 466 # the fact that opening an empty file raises a ReadError. 453 467 empty = os.path.join(TEMPDIR, "empty") 454 open(empty, "wb").write("") 468 with open(empty, "wb") as fobj: 469 fobj.write("") 455 470 456 471 try: … … 463 478 self.fail("ReadError not raised") 464 479 finally: 465 os.remove(empty)480 support.unlink(empty) 466 481 467 482 def test_parallel_iteration(self): … … 492 507 def test_compare_members(self): 493 508 tar1 = tarfile.open(tarname, encoding="iso8859-1") 494 tar2 = self.tar 495 496 while True: 497 t1 = tar1.next() 498 t2 = tar2.next() 499 if t1 is None: 500 break 501 self.assertTrue(t2 is not None, "stream.next() failed.") 502 503 if t2.islnk() or t2.issym(): 504 self.assertRaises(tarfile.StreamError, tar2.extractfile, t2) 505 continue 506 507 v1 = tar1.extractfile(t1) 508 v2 = tar2.extractfile(t2) 509 if v1 is None: 510 continue 511 self.assertTrue(v2 is not None, "stream.extractfile() failed") 512 self.assertTrue(v1.read() == v2.read(), "stream extraction failed") 513 514 tar1.close() 509 try: 510 tar2 = self.tar 511 512 while True: 513 t1 = tar1.next() 514 t2 = tar2.next() 515 if t1 is None: 516 break 517 self.assertTrue(t2 is not None, "stream.next() failed.") 518 519 if t2.islnk() or t2.issym(): 520 self.assertRaises(tarfile.StreamError, tar2.extractfile, t2) 521 continue 522 523 v1 = tar1.extractfile(t1) 524 v2 = tar2.extractfile(t2) 525 if v1 is None: 526 continue 527 self.assertTrue(v2 is not None, "stream.extractfile() failed") 528 self.assertTrue(v1.read() == v2.read(), "stream extraction failed") 529 finally: 530 tar1.close() 515 531 516 532 … … 519 535 def _testfunc_file(self, name, mode): 520 536 try: 521 tar file.open(name, mode)537 tar = tarfile.open(name, mode) 522 538 except tarfile.ReadError: 523 539 self.fail() 540 else: 541 tar.close() 524 542 525 543 def _testfunc_fileobj(self, name, mode): 526 544 try: 527 tar file.open(name, mode, fileobj=open(name, "rb"))545 tar = tarfile.open(name, mode, fileobj=open(name, "rb")) 528 546 except tarfile.ReadError: 529 547 self.fail() 548 else: 549 tar.close() 530 550 531 551 def _test_modes(self, testfunc): … … 641 661 642 662 def test_find_umlauts(self): 643 tarinfo = self.tar.getmember("ustar/umlauts- ÄÖÜäöüß")663 tarinfo = self.tar.getmember("ustar/umlauts-\xc4\xd6\xdc\xe4\xf6\xfc\xdf") 644 664 self._test_member(tarinfo, size=7011, chksum=md5_regtype) 645 665 … … 654 674 def test_find_pax_umlauts(self): 655 675 self.tar = tarfile.open(self.tarname, mode=self.mode, encoding="iso8859-1") 656 tarinfo = self.tar.getmember("pax/umlauts- ÄÖÜäöüß")676 tarinfo = self.tar.getmember("pax/umlauts-\xc4\xd6\xdc\xe4\xf6\xfc\xdf") 657 677 self._test_member(tarinfo, size=7011, chksum=md5_regtype) 658 678 … … 718 738 def test_pax_global_headers(self): 719 739 tar = tarfile.open(tarname, encoding="iso8859-1") 720 721 tarinfo = tar.getmember("pax/regtype1") 722 self.assertEqual(tarinfo.uname, "foo") 723 self.assertEqual(tarinfo.gname, "bar") 724 self.assertEqual(tarinfo.pax_headers.get("VENDOR.umlauts"), u"ÄÖÜäöüß") 725 726 tarinfo = tar.getmember("pax/regtype2") 727 self.assertEqual(tarinfo.uname, "") 728 self.assertEqual(tarinfo.gname, "bar") 729 self.assertEqual(tarinfo.pax_headers.get("VENDOR.umlauts"), u"ÄÖÜäöüß") 730 731 tarinfo = tar.getmember("pax/regtype3") 732 self.assertEqual(tarinfo.uname, "tarfile") 733 self.assertEqual(tarinfo.gname, "tarfile") 734 self.assertEqual(tarinfo.pax_headers.get("VENDOR.umlauts"), u"ÄÖÜäöüß") 740 try: 741 742 tarinfo = tar.getmember("pax/regtype1") 743 self.assertEqual(tarinfo.uname, "foo") 744 self.assertEqual(tarinfo.gname, "bar") 745 self.assertEqual(tarinfo.pax_headers.get("VENDOR.umlauts"), u"\xc4\xd6\xdc\xe4\xf6\xfc\xdf") 746 747 tarinfo = tar.getmember("pax/regtype2") 748 self.assertEqual(tarinfo.uname, "") 749 self.assertEqual(tarinfo.gname, "bar") 750 self.assertEqual(tarinfo.pax_headers.get("VENDOR.umlauts"), u"\xc4\xd6\xdc\xe4\xf6\xfc\xdf") 751 752 tarinfo = tar.getmember("pax/regtype3") 753 self.assertEqual(tarinfo.uname, "tarfile") 754 self.assertEqual(tarinfo.gname, "tarfile") 755 self.assertEqual(tarinfo.pax_headers.get("VENDOR.umlauts"), u"\xc4\xd6\xdc\xe4\xf6\xfc\xdf") 756 finally: 757 tar.close() 735 758 736 759 def test_pax_number_fields(self): 737 760 # All following number fields are read from the pax header. 738 761 tar = tarfile.open(tarname, encoding="iso8859-1") 739 tarinfo = tar.getmember("pax/regtype4") 740 self.assertEqual(tarinfo.size, 7011) 741 self.assertEqual(tarinfo.uid, 123) 742 self.assertEqual(tarinfo.gid, 123) 743 self.assertEqual(tarinfo.mtime, 1041808783.0) 744 self.assertEqual(type(tarinfo.mtime), float) 745 self.assertEqual(float(tarinfo.pax_headers["atime"]), 1041808783.0) 746 self.assertEqual(float(tarinfo.pax_headers["ctime"]), 1041808783.0) 762 try: 763 tarinfo = tar.getmember("pax/regtype4") 764 self.assertEqual(tarinfo.size, 7011) 765 self.assertEqual(tarinfo.uid, 123) 766 self.assertEqual(tarinfo.gid, 123) 767 self.assertEqual(tarinfo.mtime, 1041808783.0) 768 self.assertEqual(type(tarinfo.mtime), float) 769 self.assertEqual(float(tarinfo.pax_headers["atime"]), 1041808783.0) 770 self.assertEqual(float(tarinfo.pax_headers["ctime"]), 1041808783.0) 771 finally: 772 tar.close() 747 773 748 774 … … 776 802 name = "0123456789" * 10 777 803 tar = tarfile.open(tmpname, self.mode) 778 t = tarfile.TarInfo(name) 779 tar.addfile(t) 780 tar.close() 804 try: 805 t = tarfile.TarInfo(name) 806 tar.addfile(t) 807 finally: 808 tar.close() 781 809 782 810 tar = tarfile.open(tmpname) 783 self.assertTrue(tar.getnames()[0] == name, 784 "failed to store 100 char filename") 785 tar.close() 811 try: 812 self.assertTrue(tar.getnames()[0] == name, 813 "failed to store 100 char filename") 814 finally: 815 tar.close() 786 816 787 817 def test_tar_size(self): 788 818 # Test for bug #1013882. 789 819 tar = tarfile.open(tmpname, self.mode) 790 path = os.path.join(TEMPDIR, "file") 791 fobj = open(path, "wb") 792 fobj.write("aaa") 793 fobj.close() 794 tar.add(path) 795 tar.close() 820 try: 821 path = os.path.join(TEMPDIR, "file") 822 with open(path, "wb") as fobj: 823 fobj.write("aaa") 824 tar.add(path) 825 finally: 826 tar.close() 796 827 self.assertTrue(os.path.getsize(tmpname) > 0, 797 828 "tarfile is empty") … … 800 831 def test_file_size(self): 801 832 tar = tarfile.open(tmpname, self.mode) 802 803 path = os.path.join(TEMPDIR, "file") 804 fobj = open(path, "wb")805 fobj.close()806 tarinfo = tar.gettarinfo(path)807 self.assertEqual(tarinfo.size, 0)808 809 fobj = open(path, "wb") 810 fobj.write("aaa")811 fobj.close()812 tarinfo = tar.gettarinfo(path)813 self.assertEqual(tarinfo.size, 3)814 815 tar.close()833 try: 834 835 path = os.path.join(TEMPDIR, "file") 836 with open(path, "wb"): 837 pass 838 tarinfo = tar.gettarinfo(path) 839 self.assertEqual(tarinfo.size, 0) 840 841 with open(path, "wb") as fobj: 842 fobj.write("aaa") 843 tarinfo = tar.gettarinfo(path) 844 self.assertEqual(tarinfo.size, 3) 845 finally: 846 tar.close() 816 847 817 848 def test_directory_size(self): … … 820 851 try: 821 852 tar = tarfile.open(tmpname, self.mode) 822 tarinfo = tar.gettarinfo(path) 823 self.assertEqual(tarinfo.size, 0) 853 try: 854 tarinfo = tar.gettarinfo(path) 855 self.assertEqual(tarinfo.size, 0) 856 finally: 857 tar.close() 824 858 finally: 825 859 os.rmdir(path) … … 829 863 link = os.path.join(TEMPDIR, "link") 830 864 target = os.path.join(TEMPDIR, "link_target") 831 fobj = open(target, "wb") 832 fobj.write("aaa") 833 fobj.close() 865 with open(target, "wb") as fobj: 866 fobj.write("aaa") 834 867 os.link(target, link) 835 868 try: 836 869 tar = tarfile.open(tmpname, self.mode) 837 # Record the link target in the inodes list. 838 tar.gettarinfo(target) 839 tarinfo = tar.gettarinfo(link) 840 self.assertEqual(tarinfo.size, 0) 870 try: 871 # Record the link target in the inodes list. 872 tar.gettarinfo(target) 873 tarinfo = tar.gettarinfo(link) 874 self.assertEqual(tarinfo.size, 0) 875 finally: 876 tar.close() 841 877 finally: 842 878 os.remove(target) … … 849 885 try: 850 886 tar = tarfile.open(tmpname, self.mode) 851 tarinfo = tar.gettarinfo(path) 852 self.assertEqual(tarinfo.size, 0) 887 try: 888 tarinfo = tar.gettarinfo(path) 889 self.assertEqual(tarinfo.size, 0) 890 finally: 891 tar.close() 853 892 finally: 854 893 os.remove(path) … … 857 896 # Test for #1257255. 858 897 dstname = os.path.abspath(tmpname) 859 860 898 tar = tarfile.open(tmpname, self.mode) 861 self.assertTrue(tar.name == dstname, "archive name must be absolute") 862 863 tar.add(dstname) 864 self.assertTrue(tar.getnames() == [], "added the archive to itself") 865 866 cwd = os.getcwd() 867 os.chdir(TEMPDIR) 868 tar.add(dstname) 869 os.chdir(cwd) 870 self.assertTrue(tar.getnames() == [], "added the archive to itself") 899 try: 900 self.assertTrue(tar.name == dstname, "archive name must be absolute") 901 tar.add(dstname) 902 self.assertTrue(tar.getnames() == [], "added the archive to itself") 903 904 cwd = os.getcwd() 905 os.chdir(TEMPDIR) 906 tar.add(dstname) 907 os.chdir(cwd) 908 self.assertTrue(tar.getnames() == [], "added the archive to itself") 909 finally: 910 tar.close() 871 911 872 912 def test_exclude(self): … … 881 921 882 922 tar = tarfile.open(tmpname, self.mode, encoding="iso8859-1") 883 with test_support.check_warnings(("use the filter argument", 884 DeprecationWarning)): 885 tar.add(tempdir, arcname="empty_dir", exclude=exclude) 886 tar.close() 923 try: 924 with test_support.check_warnings(("use the filter argument", 925 DeprecationWarning)): 926 tar.add(tempdir, arcname="empty_dir", exclude=exclude) 927 finally: 928 tar.close() 887 929 888 930 tar = tarfile.open(tmpname, "r") 889 self.assertEqual(len(tar.getmembers()), 1) 890 self.assertEqual(tar.getnames()[0], "empty_dir") 931 try: 932 self.assertEqual(len(tar.getmembers()), 1) 933 self.assertEqual(tar.getnames()[0], "empty_dir") 934 finally: 935 tar.close() 891 936 finally: 892 937 shutil.rmtree(tempdir) … … 908 953 909 954 tar = tarfile.open(tmpname, self.mode, encoding="iso8859-1") 910 tar.add(tempdir, arcname="empty_dir", filter=filter) 911 tar.close() 955 try: 956 tar.add(tempdir, arcname="empty_dir", filter=filter) 957 finally: 958 tar.close() 912 959 913 960 tar = tarfile.open(tmpname, "r") 914 for tarinfo in tar: 915 self.assertEqual(tarinfo.uid, 123) 916 self.assertEqual(tarinfo.uname, "foo") 917 self.assertEqual(len(tar.getmembers()), 3) 918 tar.close() 961 try: 962 for tarinfo in tar: 963 self.assertEqual(tarinfo.uid, 123) 964 self.assertEqual(tarinfo.uname, "foo") 965 self.assertEqual(len(tar.getmembers()), 3) 966 finally: 967 tar.close() 919 968 finally: 920 969 shutil.rmtree(tempdir) … … 934 983 935 984 tar = tarfile.open(tmpname, self.mode) 936 tar.add(foo, arcname=path) 937 tar.close() 985 try: 986 tar.add(foo, arcname=path) 987 finally: 988 tar.close() 938 989 939 990 tar = tarfile.open(tmpname, "r") 940 t = tar.next() 941 tar.close() 991 try: 992 t = tar.next() 993 finally: 994 tar.close() 942 995 943 996 if not dir: … … 975 1028 # Test adding the current working directory. 976 1029 with support.change_cwd(TEMPDIR): 977 open("foo", "w").close()978 979 1030 tar = tarfile.open(tmpname, self.mode) 980 tar.add(".") 981 tar.close() 1031 try: 1032 tar.add(".") 1033 finally: 1034 tar.close() 982 1035 983 1036 tar = tarfile.open(tmpname, "r") 984 for t in tar: 985 self.assertTrue(t.name == "." or t.name.startswith("./")) 986 tar.close() 1037 try: 1038 for t in tar: 1039 self.assertTrue(t.name == "." or t.name.startswith("./")) 1040 finally: 1041 tar.close() 987 1042 988 1043 @unittest.skipUnless(hasattr(os, 'symlink'), "needs os.symlink") … … 1101 1156 1102 1157 if self.mode.endswith("gz"): 1103 fobj = gzip.GzipFile(tmpname) 1104 data = fobj.read() 1105 fobj.close() 1158 with gzip.GzipFile(tmpname) as fobj: 1159 data = fobj.read() 1106 1160 elif self.mode.endswith("bz2"): 1107 1161 dec = bz2.BZ2Decompressor() 1108 data = open(tmpname, "rb").read() 1162 with open(tmpname, "rb") as fobj: 1163 data = fobj.read() 1109 1164 data = dec.decompress(data) 1110 1165 self.assertTrue(len(dec.unused_data) == 0, 1111 1166 "found trailing data") 1112 1167 else: 1113 fobj = open(tmpname, "rb") 1114 data = fobj.read() 1115 fobj.close() 1168 with open(tmpname, "rb") as fobj: 1169 data = fobj.read() 1116 1170 1117 1171 self.assertTrue(data.count("\0") == tarfile.RECORDSIZE, … … 1174 1228 1175 1229 tar = tarfile.open(tmpname, "w") 1176 tar.format = tarfile.GNU_FORMAT 1177 tar.addfile(tarinfo) 1178 1179 v1 = self._calc_size(name, link) 1180 v2 = tar.offset 1181 self.assertTrue(v1 == v2, "GNU longname/longlink creation failed") 1182 1183 tar.close() 1230 try: 1231 tar.format = tarfile.GNU_FORMAT 1232 tar.addfile(tarinfo) 1233 1234 v1 = self._calc_size(name, link) 1235 v2 = tar.offset 1236 self.assertTrue(v1 == v2, "GNU longname/longlink creation failed") 1237 finally: 1238 tar.close() 1184 1239 1185 1240 tar = tarfile.open(tmpname) 1186 member = tar.next() 1187 self.assertIsNotNone(member, 1188 "unable to read longname member") 1189 self.assertEqual(tarinfo.name, member.name, 1190 "unable to read longname member") 1191 self.assertEqual(tarinfo.linkname, member.linkname, 1192 "unable to read longname member") 1241 try: 1242 member = tar.next() 1243 self.assertIsNotNone(member, 1244 "unable to read longname member") 1245 self.assertEqual(tarinfo.name, member.name, 1246 "unable to read longname member") 1247 self.assertEqual(tarinfo.linkname, member.linkname, 1248 "unable to read longname member") 1249 finally: 1250 tar.close() 1193 1251 1194 1252 def test_longname_1023(self): … … 1230 1288 self.bar = os.path.join(TEMPDIR, "bar") 1231 1289 1232 fobj = open(self.foo, "wb") 1233 fobj.write("foo") 1234 fobj.close() 1290 with open(self.foo, "wb") as fobj: 1291 fobj.write("foo") 1235 1292 1236 1293 os.link(self.foo, self.bar) … … 1241 1298 def tearDown(self): 1242 1299 self.tar.close() 1243 os.remove(self.foo)1244 os.remove(self.bar)1300 support.unlink(self.foo) 1301 support.unlink(self.bar) 1245 1302 1246 1303 def test_add_twice(self): … … 1273 1330 1274 1331 tar = tarfile.open(tmpname, "w", format=tarfile.PAX_FORMAT) 1275 tar.addfile(tarinfo) 1276 tar.close() 1332 try: 1333 tar.addfile(tarinfo) 1334 finally: 1335 tar.close() 1277 1336 1278 1337 tar = tarfile.open(tmpname) 1279 if link: 1280 l = tar.getmembers()[0].linkname 1281 self.assertTrue(link == l, "PAX longlink creation failed") 1282 else: 1283 n = tar.getmembers()[0].name 1284 self.assertTrue(name == n, "PAX longname creation failed") 1338 try: 1339 if link: 1340 l = tar.getmembers()[0].linkname 1341 self.assertTrue(link == l, "PAX longlink creation failed") 1342 else: 1343 n = tar.getmembers()[0].name 1344 self.assertTrue(name == n, "PAX longname creation failed") 1345 finally: 1346 tar.close() 1285 1347 1286 1348 def test_pax_global_header(self): … … 1289 1351 u"uid": u"0", 1290 1352 u"mtime": u"1.23", 1291 u"test": u" äöü",1292 u" äöü": u"test"}1353 u"test": u"\xe4\xf6\xfc", 1354 u"\xe4\xf6\xfc": u"test"} 1293 1355 1294 1356 tar = tarfile.open(tmpname, "w", format=tarfile.PAX_FORMAT, 1295 1357 pax_headers=pax_headers) 1296 tar.addfile(tarfile.TarInfo("test")) 1297 tar.close() 1358 try: 1359 tar.addfile(tarfile.TarInfo("test")) 1360 finally: 1361 tar.close() 1298 1362 1299 1363 # Test if the global header was written correctly. 1300 1364 tar = tarfile.open(tmpname, encoding="iso8859-1") 1301 self.assertEqual(tar.pax_headers, pax_headers) 1302 self.assertEqual(tar.getmembers()[0].pax_headers, pax_headers) 1303 1304 # Test if all the fields are unicode. 1305 for key, val in tar.pax_headers.iteritems(): 1306 self.assertTrue(type(key) is unicode) 1307 self.assertTrue(type(val) is unicode) 1308 if key in tarfile.PAX_NUMBER_FIELDS: 1309 try: 1310 tarfile.PAX_NUMBER_FIELDS[key](val) 1311 except (TypeError, ValueError): 1312 self.fail("unable to convert pax header field") 1365 try: 1366 self.assertEqual(tar.pax_headers, pax_headers) 1367 self.assertEqual(tar.getmembers()[0].pax_headers, pax_headers) 1368 1369 # Test if all the fields are unicode. 1370 for key, val in tar.pax_headers.iteritems(): 1371 self.assertTrue(type(key) is unicode) 1372 self.assertTrue(type(val) is unicode) 1373 if key in tarfile.PAX_NUMBER_FIELDS: 1374 try: 1375 tarfile.PAX_NUMBER_FIELDS[key](val) 1376 except (TypeError, ValueError): 1377 self.fail("unable to convert pax header field") 1378 finally: 1379 tar.close() 1313 1380 1314 1381 def test_pax_extended_header(self): … … 1318 1385 1319 1386 tar = tarfile.open(tmpname, "w", format=tarfile.PAX_FORMAT, encoding="iso8859-1") 1320 t = tarfile.TarInfo() 1321 t.name = u"äöü" # non-ASCII 1322 t.uid = 8**8 # too large 1323 t.pax_headers = pax_headers 1324 tar.addfile(t) 1325 tar.close() 1387 try: 1388 t = tarfile.TarInfo() 1389 t.name = u"\xe4\xf6\xfc" # non-ASCII 1390 t.uid = 8**8 # too large 1391 t.pax_headers = pax_headers 1392 tar.addfile(t) 1393 finally: 1394 tar.close() 1326 1395 1327 1396 tar = tarfile.open(tmpname, encoding="iso8859-1") 1328 t = tar.getmembers()[0] 1329 self.assertEqual(t.pax_headers, pax_headers) 1330 self.assertEqual(t.name, "foo") 1331 self.assertEqual(t.uid, 123) 1397 try: 1398 t = tar.getmembers()[0] 1399 self.assertEqual(t.pax_headers, pax_headers) 1400 self.assertEqual(t.name, "foo") 1401 self.assertEqual(t.uid, 123) 1402 finally: 1403 tar.close() 1332 1404 1333 1405 … … 1348 1420 def _test_unicode_filename(self, encoding): 1349 1421 tar = tarfile.open(tmpname, "w", format=self.format, encoding=encoding, errors="strict") 1350 name = u"äöü" 1351 tar.addfile(tarfile.TarInfo(name)) 1352 tar.close() 1422 try: 1423 name = u"\xe4\xf6\xfc" 1424 tar.addfile(tarfile.TarInfo(name)) 1425 finally: 1426 tar.close() 1353 1427 1354 1428 tar = tarfile.open(tmpname, encoding=encoding) 1355 self.assertTrue(type(tar.getnames()[0]) is not unicode) 1356 self.assertEqual(tar.getmembers()[0].name, name.encode(encoding)) 1357 tar.close() 1429 try: 1430 self.assertTrue(type(tar.getnames()[0]) is not unicode) 1431 self.assertEqual(tar.getmembers()[0].name, name.encode(encoding)) 1432 finally: 1433 tar.close() 1358 1434 1359 1435 def test_unicode_filename_error(self): 1360 1436 tar = tarfile.open(tmpname, "w", format=self.format, encoding="ascii", errors="strict") 1361 tarinfo = tarfile.TarInfo() 1362 1363 tarinfo.name = "äöü" 1364 if self.format == tarfile.PAX_FORMAT: 1437 try: 1438 tarinfo = tarfile.TarInfo() 1439 1440 tarinfo.name = "\xe4\xf6\xfc" 1441 if self.format == tarfile.PAX_FORMAT: 1442 self.assertRaises(UnicodeError, tar.addfile, tarinfo) 1443 else: 1444 tar.addfile(tarinfo) 1445 1446 tarinfo.name = u"\xe4\xf6\xfc" 1365 1447 self.assertRaises(UnicodeError, tar.addfile, tarinfo) 1366 else: 1367 tar.addfile(tarinfo) 1368 1369 tarinfo.name = u"äöü" 1370 self.assertRaises(UnicodeError, tar.addfile, tarinfo) 1371 1372 tarinfo.name = "foo" 1373 tarinfo.uname = u"äöü" 1374 self.assertRaises(UnicodeError, tar.addfile, tarinfo) 1448 1449 tarinfo.name = "foo" 1450 tarinfo.uname = u"\xe4\xf6\xfc" 1451 self.assertRaises(UnicodeError, tar.addfile, tarinfo) 1452 finally: 1453 tar.close() 1375 1454 1376 1455 def test_unicode_argument(self): 1377 1456 tar = tarfile.open(tarname, "r", encoding="iso8859-1", errors="strict") 1378 for t in tar: 1379 self.assertTrue(type(t.name) is str) 1380 self.assertTrue(type(t.linkname) is str) 1381 self.assertTrue(type(t.uname) is str) 1382 self.assertTrue(type(t.gname) is str) 1383 tar.close() 1457 try: 1458 for t in tar: 1459 self.assertTrue(type(t.name) is str) 1460 self.assertTrue(type(t.linkname) is str) 1461 self.assertTrue(type(t.uname) is str) 1462 self.assertTrue(type(t.gname) is str) 1463 finally: 1464 tar.close() 1384 1465 1385 1466 def test_uname_unicode(self): 1386 for name in (u" äöü", "äöü"):1467 for name in (u"\xe4\xf6\xfc", "\xe4\xf6\xfc"): 1387 1468 t = tarfile.TarInfo("foo") 1388 1469 t.uname = name … … 1391 1472 fobj = StringIO.StringIO() 1392 1473 tar = tarfile.open("foo.tar", mode="w", fileobj=fobj, format=self.format, encoding="iso8859-1") 1393 tar.addfile(t) 1394 tar.close() 1474 try: 1475 tar.addfile(t) 1476 finally: 1477 tar.close() 1395 1478 fobj.seek(0) 1396 1479 1397 1480 tar = tarfile.open("foo.tar", fileobj=fobj, encoding="iso8859-1") 1398 1481 t = tar.getmember("foo") 1399 self.assertEqual(t.uname, " äöü")1400 self.assertEqual(t.gname, " äöü")1482 self.assertEqual(t.uname, "\xe4\xf6\xfc") 1483 self.assertEqual(t.gname, "\xe4\xf6\xfc") 1401 1484 1402 1485 … … 1420 1503 # Test if the unicode error handlers work correctly for characters 1421 1504 # that cannot be expressed in a given encoding. 1422 self._create_unicode_name(u" äöü")1423 1424 for handler, name in (("utf-8", u" äöü".encode("utf8")),1505 self._create_unicode_name(u"\xe4\xf6\xfc") 1506 1507 for handler, name in (("utf-8", u"\xe4\xf6\xfc".encode("utf8")), 1425 1508 ("replace", "???"), ("ignore", "")): 1426 1509 tar = tarfile.open(tmpname, format=self.format, encoding="ascii", … … 1434 1517 # Create a pathname that has one component representable using 1435 1518 # iso8859-1 and the other only in iso8859-15. 1436 self._create_unicode_name(u" äöü/¤")1519 self._create_unicode_name(u"\xe4\xf6\xfc/\u20ac") 1437 1520 1438 1521 tar = tarfile.open(tmpname, format=self.format, encoding="iso8859-1", 1439 1522 errors="utf-8") 1440 self.assertEqual(tar.getnames()[0], " äöü/" + u"¤".encode("utf8"))1523 self.assertEqual(tar.getnames()[0], "\xe4\xf6\xfc/" + u"\u20ac".encode("utf8")) 1441 1524 1442 1525 … … 1450 1533 1451 1534 def _add_testfile(self, fileobj=None): 1452 tar = tarfile.open(self.tarname, "a", fileobj=fileobj) 1453 tar.addfile(tarfile.TarInfo("bar")) 1454 tar.close() 1535 with tarfile.open(self.tarname, "a", fileobj=fileobj) as tar: 1536 tar.addfile(tarfile.TarInfo("bar")) 1455 1537 1456 1538 def _create_testtar(self, mode="w:"): 1457 src = tarfile.open(tarname, encoding="iso8859-1") 1458 t = src.getmember("ustar/regtype") 1459 t.name = "foo" 1460 f = src.extractfile(t) 1461 tar = tarfile.open(self.tarname, mode) 1462 tar.addfile(t, f) 1463 tar.close() 1539 with tarfile.open(tarname, encoding="iso8859-1") as src: 1540 t = src.getmember("ustar/regtype") 1541 t.name = "foo" 1542 f = src.extractfile(t) 1543 with tarfile.open(self.tarname, mode) as tar: 1544 tar.addfile(t, f) 1464 1545 1465 1546 def _test(self, names=["bar"], fileobj=None): 1466 tar = tarfile.open(self.tarname, fileobj=fileobj)1467 self.assertEqual(tar.getnames(), names)1547 with tarfile.open(self.tarname, fileobj=fileobj) as tar: 1548 self.assertEqual(tar.getnames(), names) 1468 1549 1469 1550 def test_non_existing(self): … … 1484 1565 def test_fileobj(self): 1485 1566 self._create_testtar() 1486 data = open(self.tarname).read() 1567 with open(self.tarname) as fobj: 1568 data = fobj.read() 1487 1569 fobj = StringIO.StringIO(data) 1488 1570 self._add_testfile(fobj) … … 1508 1590 # does not end with a zero block. 1509 1591 def _test_error(self, data): 1510 open(self.tarname, "wb").write(data) 1592 with open(self.tarname, "wb") as fobj: 1593 fobj.write(data) 1511 1594 self.assertRaises(tarfile.ReadError, self._add_testfile) 1512 1595 … … 1644 1727 # Test that __exit__() did not close the external file 1645 1728 # object. 1646 fobj = open(tmpname, "wb") 1647 try: 1648 with tarfile.open(fileobj=fobj, mode="w") as tar: 1649 raise Exception 1650 except: 1651 pass 1652 self.assertFalse(fobj.closed, "external file object was closed") 1653 self.assertTrue(tar.closed, "context manager failed") 1654 fobj.close() 1729 with open(tmpname, "wb") as fobj: 1730 try: 1731 with tarfile.open(fileobj=fobj, mode="w") as tar: 1732 raise Exception 1733 except: 1734 pass 1735 self.assertFalse(fobj.closed, "external file object was closed") 1736 self.assertTrue(tar.closed, "context manager failed") 1655 1737 1656 1738 … … 1740 1822 1741 1823 def test_main(): 1824 support.unlink(TEMPDIR) 1742 1825 os.makedirs(TEMPDIR) 1743 1826 … … 1769 1852 tests.append(LinkEmulationTest) 1770 1853 1771 fobj = open(tarname, "rb") 1772 data = fobj.read() 1773 fobj.close() 1854 with open(tarname, "rb") as fobj: 1855 data = fobj.read() 1774 1856 1775 1857 if gzip: 1776 1858 # Create testtar.tar.gz and add gzip-specific tests. 1777 tar = gzip.open(gzipname, "wb")1778 tar.write(data)1779 tar.close()1859 support.unlink(gzipname) 1860 with gzip.open(gzipname, "wb") as tar: 1861 tar.write(data) 1780 1862 1781 1863 tests += [ … … 1790 1872 if bz2: 1791 1873 # Create testtar.tar.bz2 and add bz2-specific tests. 1874 support.unlink(bz2name) 1792 1875 tar = bz2.BZ2File(bz2name, "wb") 1793 tar.write(data) 1794 tar.close() 1876 try: 1877 tar.write(data) 1878 finally: 1879 tar.close() 1795 1880 1796 1881 tests += [
Note: See TracChangeset
for help on using the changeset viewer.