|
29 | 29 | __version__ = '3.0.1.dev0' |
30 | 30 | __homepage__ = 'https://github.com/cfv-project/cfv' |
31 | 31 |
|
| 32 | +import contextlib |
32 | 33 | import copy |
33 | 34 | import errno |
34 | 35 | import getopt |
@@ -466,8 +467,6 @@ def test_chksumfile(self, file, filename): |
466 | 467 | cache.set_verified(filename) |
467 | 468 | try: |
468 | 469 | cf_stats = stats.make_sub_stats() |
469 | | - if not file: |
470 | | - file = fileutil.open_read(filename, config) |
471 | 470 | self.do_test_chksumfile(file) |
472 | 471 | cf_stats.sub_stats_end(stats) |
473 | 472 | view.ev_test_cf_done(filename, cf_stats) |
@@ -1532,8 +1531,8 @@ def getimagedimensions(filename): |
1532 | 1531 | return '0', '0' |
1533 | 1532 | try: |
1534 | 1533 | from PIL import Image |
1535 | | - im1 = Image.open(filename) |
1536 | | - return list(map(str, im1.size)) |
| 1534 | + with Image.open(filename) as im1: |
| 1535 | + return list(map(str, im1.size)) |
1537 | 1536 | except (ImportError, IOError): |
1538 | 1537 | return '0', '0' |
1539 | 1538 |
|
@@ -1694,26 +1693,33 @@ def visit_dir(name, st=None, noisy=1): |
1694 | 1693 |
|
1695 | 1694 |
|
1696 | 1695 | def test(filename, typename, restrict_typename='auto'): |
1697 | | - if typename != 'auto': |
1698 | | - cf = cftypes.get_handler(typename)() |
1699 | | - cf.test_chksumfile(None, filename) |
1700 | | - return |
| 1696 | + class UnexpectedHandlerException(Exception): |
| 1697 | + pass |
1701 | 1698 |
|
1702 | | - try: |
1703 | | - file = fileutil.open_read(filename, config) |
| 1699 | + def get_cf_handler(file, typename, restrict_typename): |
| 1700 | + if typename != 'auto': |
| 1701 | + return cftypes.get_handler(typename)() |
1704 | 1702 | cftype = cftypes.auto_chksumfile_match(file) |
1705 | 1703 | if restrict_typename != 'auto' and cftypes.get_handler(restrict_typename) != cftype: |
1706 | | - return |
| 1704 | + raise UnexpectedHandlerException() |
1707 | 1705 | if cftype: |
1708 | | - cf = cftype() |
| 1706 | + return cftype() |
| 1707 | + |
| 1708 | + try: |
| 1709 | + with contextlib.closing(fileutil.open_read(filename, config)) as file: |
| 1710 | + cf = get_cf_handler(file, typename, restrict_typename) |
| 1711 | + if not cf: |
| 1712 | + view.ev_test_cf_unrecognized(filename, file._decode_errs) |
| 1713 | + stats.cferror += 1 |
| 1714 | + return |
| 1715 | + |
1709 | 1716 | cf.test_chksumfile(file, filename) |
1710 | | - return |
| 1717 | + except UnexpectedHandlerException: |
| 1718 | + return |
1711 | 1719 | except EnvironmentError as a: |
1712 | 1720 | stats.cferror += 1 |
1713 | 1721 | view.ev_cf_enverror(filename, a) |
1714 | 1722 | return -1 |
1715 | | - view.ev_test_cf_unrecognized(filename, file._decode_errs) |
1716 | | - stats.cferror += 1 |
1717 | 1723 |
|
1718 | 1724 |
|
1719 | 1725 | def make(cftype, ifilename, testfiles): |
|
0 commit comments