Revision c2332605 kamaki/cli/commands/__init__.py
b/kamaki/cli/commands/__init__.py | ||
---|---|---|
39 | 39 |
from kamaki.cli.errors import CLIInvalidArgument |
40 | 40 |
from sys import stdin, stdout, stderr |
41 | 41 |
import codecs |
42 |
import locale |
|
42 | 43 |
|
43 | 44 |
|
44 | 45 |
log = get_logger(__name__) |
46 |
pref_enc = locale.getpreferredencoding() |
|
47 |
|
|
48 |
|
|
49 |
def _encode_nicely(somestr, encoding=pref_enc, replacement='?'): |
|
50 |
"""Encode somestr as 'encoding', but don't raise errors (replace with ?) |
|
51 |
:param encoding: (str) encode every character in this encoding |
|
52 |
:param replacement: (char) replace each char raising encode-decode errs |
|
53 |
""" |
|
54 |
newstr = '' |
|
55 |
for c in somestr: |
|
56 |
try: |
|
57 |
newc = c.encode(encoding) |
|
58 |
newstr = '%s%s' % (newstr, newc) |
|
59 |
except (UnicodeDecodeError, UnicodeEncodeError) as e: |
|
60 |
log.debug('Encoding(%s): %s' % (encoding, e)) |
|
61 |
newstr = '%s%s' % (newstr, replacement) |
|
62 |
return newstr |
|
45 | 63 |
|
46 | 64 |
|
47 | 65 |
def DontRaiseKeyError(func): |
... | ... | |
89 | 107 |
self._in, self._out, self._err = ( |
90 | 108 |
_in or stdin, _out or stdout, _err or stderr) |
91 | 109 |
self._in = codecs.getreader('utf-8')(_in or stdin) |
92 |
self._out = codecs.getreader('utf-8')(_out or stdout)
|
|
93 |
self._err = codecs.getreader('utf-8')(_err or stderr)
|
|
110 |
self._out = codecs.getwriter(pref_enc)(_out or stdout)
|
|
111 |
self._err = codecs.getwriter(pref_enc)(_err or stderr)
|
|
94 | 112 |
self.required = getattr(self, 'required', None) |
95 | 113 |
if hasattr(self, 'arguments'): |
96 | 114 |
arguments.update(self.arguments) |
Also available in: Unified diff