Skip to content

Commit 2b5ea46

Browse files
author
Gauvain Pocentek
committed
Merge pull request #27 from cdleonard/master
Fix encoding errors on display and update with redirected output
2 parents 2281283 + ec185cf commit 2b5ea46

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

gitlab.py

+8-4
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ def __init__(self, url, private_token=None,
8888
self.email = email
8989
self.password = password
9090
self.ssl_verify = ssl_verify
91+
# Gitlab should handle UTF-8
92+
self.gitlab_encoding = 'UTF-8'
9193

9294
def auth(self):
9395
"""Performs an authentication using either the private token, or the
@@ -301,7 +303,7 @@ def update(self, obj):
301303
if type(v) in (int, str, bool):
302304
d[k] = str(v)
303305
elif type(v) == unicode:
304-
d[k] = str(v.encode(sys.stdout.encoding, "replace"))
306+
d[k] = str(v.encode(self.gitlab_encoding, "replace"))
305307

306308
try:
307309
r = requests.put(url, d,
@@ -444,6 +446,8 @@ def Team(self, id=None, **kwargs):
444446
"""
445447
return self._getListOrObject(Team, id, **kwargs)
446448

449+
def _get_display_encoding():
450+
return sys.stdout.encoding or sys.getdefaultencoding()
447451

448452
class GitlabObject(object):
449453
_url = None
@@ -573,7 +577,7 @@ def _obj_to_str(obj):
573577
s = ", ".join([GitlabObject._obj_to_str(x) for x in obj])
574578
return "[ %s ]" % s
575579
elif isinstance(obj, unicode):
576-
return obj.encode(sys.stdout.encoding, "replace")
580+
return obj.encode(_get_display_encoding(), "replace")
577581
else:
578582
return str(obj)
579583

@@ -584,8 +588,8 @@ def pretty_print(self, depth=0):
584588
if k == self.idAttr:
585589
continue
586590
v = self.__dict__[k]
587-
pretty_k = k.replace('_', '-').encode(sys.stdout.encoding,
588-
"replace")
591+
pretty_k = k.replace('_', '-')
592+
pretty_k = pretty_k.encode(_get_display_encoding(), "replace")
589593
if isinstance(v, GitlabObject):
590594
if depth == 0:
591595
print("%s:" % pretty_k)

0 commit comments

Comments
 (0)