From 10d30de8738fff400d083f014f3f2c849cb0e430 Mon Sep 17 00:00:00 2001
From: Javier Gonel <bolibic@gmail.com>
Date: Wed, 28 Aug 2013 15:20:37 +0300
Subject: [PATCH] Support for utf-8 input files
---
src/webassets/filter/__init__.py | 5 +++--
tests/test_filters.py | 11 ++++++-----
2 files changed, 9 insertions(+), 7 deletions(-)
diff --git a/src/webassets/filter/__init__.py b/src/webassets/filter/__init__.py
index 5558299..b6445bf 100644
--- a/src/webassets/filter/__init__.py
+++ b/src/webassets/filter/__init__.py
@@ -480,7 +480,8 @@ def created(self):
raise ValueError(
'{input} placeholder given, but no data passed')
with os.fdopen(input_file.fd, 'w') as f:
- f.write(data.read() if hasattr(data, 'read') else data)
+ write_data = data.read() if hasattr(data, 'read') else data
+ f.write(write_data.encode('utf-8'))
# No longer pass to stdin
data = None
@@ -504,7 +505,7 @@ def created(self):
else:
if output_file.created:
with os.fdopen(output_file.fd, 'r') as f:
- out.write(f.read())
+ out.write(f.read().decode('utf-8'))
else:
out.write(stdout.decode('utf-8'))
finally:
diff --git a/tests/test_filters.py b/tests/test_filters.py
index 62f4e7c..ea29e7d 100644
--- a/tests/test_filters.py
+++ b/tests/test_filters.py
@@ -1,3 +1,4 @@
+# -*- coding: utf-8 -*-
from __future__ import print_function
from __future__ import with_statement
@@ -321,10 +322,10 @@ def check_input_file(argv, **kw):
intercepted['filename'] = argv[0]
with open(argv[0], 'r') as f:
# File has been generated with input data
- assert f.read() == 'foo'
+ assert f.read().decode('utf-8') == u'fooñ'
return DEFAULT
self.popen.side_effect = check_input_file
- Filter.subprocess(['{input}'], StringIO(), data='foo')
+ Filter.subprocess(['{input}'], StringIO(), data=u'fooñ')
# No stdin was passed
self.popen.return_value.communicate.assert_called_with(None)
# File has been deleted
@@ -343,13 +344,13 @@ class Filter(ExternalTool): pass
def fake_output_file(argv, **kw):
intercepted['filename'] = argv[0]
with open(argv[0], 'w') as f:
- f.write('bat')
+ f.write(u'batñ'.encode('utf-8'))
return DEFAULT
self.popen.side_effect = fake_output_file
# We get the result we generated in the hook above
- out = StringIO()
+ out = StringIO(u'')
Filter.subprocess(['{output}'], out)
- assert out.getvalue() == 'bat'
+ assert out.getvalue() == u'batñ'
# File has been deleted
assert not os.path.exists(intercepted['filename'])
--
1.8.5.1