Blob Blame History Raw
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