Skip to content

Commit

Permalink
[1.5.x] Fixed #20354 -- makemessages no longer crashes with `Unicod…
Browse files Browse the repository at this point in the history
…eDecodeError`

Handle the `UnicodeDecodeError` exception, send a warning to `stdout` with the
file name and location, and continue processing other files.
Backport of 99a6f0e from master.
  • Loading branch information
Tai Lee authored and claudep committed May 7, 2013
1 parent acd9dc3 commit 23b234a
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 3 deletions.
7 changes: 5 additions & 2 deletions django/core/management/commands/makemessages.py
Expand Up @@ -324,8 +324,11 @@ def make_messages(locale=None, domain='django', verbosity=1, all=False,

for dirpath, file in find_files(".", ignore_patterns, verbosity,
stdout, symlinks=symlinks):
process_file(file, dirpath, potfile, domain, verbosity, extensions,
wrap, location, stdout)
try:
process_file(file, dirpath, potfile, domain, verbosity, extensions,
wrap, location, stdout)
except UnicodeDecodeError:
stdout.write("UnicodeDecodeError: skipped file %s in %s" % (file, dirpath))

if os.path.exists(potfile):
write_po_file(pofile, potfile, domain, locale, verbosity, stdout,
Expand Down
15 changes: 14 additions & 1 deletion tests/regressiontests/i18n/commands/extraction.py
Expand Up @@ -27,6 +27,10 @@ def _rmrf(self, dname):
return
shutil.rmtree(dname)

def rmfile(self, filepath):
if os.path.exists(filepath):
os.remove(filepath)

def tearDown(self):
os.chdir(self.test_dir)
try:
Expand Down Expand Up @@ -120,12 +124,21 @@ def test_extraction_error(self):
# Check that the temporary file was cleaned up
self.assertFalse(os.path.exists('./templates/template_with_error.html.py'))

def test_unicode_decode_error(self):
os.chdir(self.test_dir)
shutil.copyfile('./not_utf8.sample', './not_utf8.txt')
self.addCleanup(self.rmfile, os.path.join(self.test_dir, 'not_utf8.txt'))
stdout = StringIO()
management.call_command('makemessages', locale=LOCALE, stdout=stdout)
self.assertIn("UnicodeDecodeError: skipped file not_utf8.txt in .",
force_text(stdout.getvalue()))

def test_extraction_warning(self):
os.chdir(self.test_dir)
shutil.copyfile('./code.sample', './code_sample.py')
self.addCleanup(self.rmfile, os.path.join(self.test_dir, 'code_sample.py'))
stdout = StringIO()
management.call_command('makemessages', locale=LOCALE, stdout=stdout)
os.remove('./code_sample.py')
self.assertIn("code_sample.py:4", force_text(stdout.getvalue()))

def test_template_message_context_extractor(self):
Expand Down
1 change: 1 addition & 0 deletions tests/regressiontests/i18n/commands/not_utf8.sample
@@ -0,0 +1 @@
Copyright (c) 2009 �yvind Sean Kinsey, oyvind@kinsey.no

0 comments on commit 23b234a

Please sign in to comment.