diff options
author | Jason Madden <jamadden@gmail.com> | 2017-11-12 08:29:58 -0600 |
---|---|---|
committer | Jason Madden <jamadden@gmail.com> | 2017-11-12 08:29:58 -0600 |
commit | 92dcb15c79514cff8035b82df3a863b869088bea (patch) | |
tree | b3611ee0999f23c053a84c9bfa402a992c5087a1 /src/zope/i18n/compile.py | |
parent | 085c85bd5831f5479353784d991b0082b74b9988 (diff) | |
download | zope-i18n-resourcewarnings.tar.gz |
Fix ResourceWarnings for unclosed files when compiling .mo files.resourcewarnings
Diffstat (limited to 'src/zope/i18n/compile.py')
-rw-r--r-- | src/zope/i18n/compile.py | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/zope/i18n/compile.py b/src/zope/i18n/compile.py index 2cc8d75..88de796 100644 --- a/src/zope/i18n/compile.py +++ b/src/zope/i18n/compile.py @@ -1,3 +1,4 @@ +from contextlib import closing import logging import os from os.path import join @@ -39,11 +40,15 @@ def compile_mo_file(domain, lc_messages_path): if po_mtime > mo_mtime: try: - mo = Msgfmt(pofile, domain).getAsFile() - fd = open(mofile, 'wb') - fd.write(mo.read()) - fd.close() + # Msgfmt.getAsFile returns io.BytesIO on Python 3, and cStringIO.StringIO + # on Python 2; sadly StringIO isn't a proper context manager, so we have to + # wrap it with `closing`. Also, Msgfmt doesn't properly close a file + # it opens for reading if you pass the path, but it does if you pass + # the file. + with closing(Msgfmt(open(pofile, 'rb'), domain).getAsFile()) as mo: + with open(mofile, 'wb') as fd: + fd.write(mo.read()) except PoSyntaxError as err: - logger.warn('Syntax error while compiling %s (%s).' % (pofile, err.msg)) + logger.warning('Syntax error while compiling %s (%s).', pofile, err.msg) except (IOError, OSError) as err: - logger.warn('Error while compiling %s (%s).' % (pofile, err)) + logger.warning('Error while compiling %s (%s).', pofile, err) |