Revision 2f302751 kamaki/cli/commands/__init__.py
b/kamaki/cli/commands/__init__.py | ||
---|---|---|
34 | 34 |
from kamaki.cli.logger import get_logger |
35 | 35 |
from kamaki.cli.utils import ( |
36 | 36 |
print_list, print_dict, print_json, print_items, ask_user, |
37 |
filter_dicts_by_dict) |
|
37 |
filter_dicts_by_dict, DontRaiseUnicodeError, pref_enc)
|
|
38 | 38 |
from kamaki.cli.argument import FlagArgument, ValueArgument |
39 | 39 |
from kamaki.cli.errors import CLIInvalidArgument |
40 | 40 |
from sys import stdin, stdout, stderr |
41 | 41 |
import codecs |
42 |
import locale |
|
43 | 42 |
|
44 | 43 |
|
45 | 44 |
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 |
|
63 | 45 |
|
64 | 46 |
|
65 | 47 |
def DontRaiseKeyError(func): |
... | ... | |
132 | 114 |
self.auth_base = auth_base or getattr(self, 'auth_base', None) |
133 | 115 |
self.cloud = cloud or getattr(self, 'cloud', None) |
134 | 116 |
|
117 |
@DontRaiseUnicodeError |
|
135 | 118 |
def write(self, s): |
136 | 119 |
self._out.write('%s' % s) |
137 | 120 |
self._out.flush() |
138 | 121 |
|
122 |
@DontRaiseUnicodeError |
|
139 | 123 |
def writeln(self, s=''): |
140 | 124 |
self.write('%s\n' % s) |
141 | 125 |
|
126 |
@DontRaiseUnicodeError |
|
142 | 127 |
def error(self, s=''): |
143 | 128 |
self._err.write('%s\n' % s) |
144 | 129 |
self._err.flush() |
Also available in: Unified diff