summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Cholasta <jcholast@redhat.com>2015-08-31 09:26:27 +0200
committerJan Cholasta <jcholast@redhat.com>2015-09-07 08:00:11 +0200
commitcf9bf9dcafa6c6d434440e7b106f1886614eec05 (patch)
tree3b1cc510c5ef9dce7c806a1c811d064542062467
parentebdfa4380bdcdd99970c7d677df7e0d5e3ede6bc (diff)
downloadfreeipa-cf9bf9dcafa6c6d434440e7b106f1886614eec05.tar.gz
freeipa-cf9bf9dcafa6c6d434440e7b106f1886614eec05.tar.xz
freeipa-cf9bf9dcafa6c6d434440e7b106f1886614eec05.zip
Use six.python_2_unicode_compatible
Rename __unicode__ to __str__ in classes which define it and use the six.python_2_unicode_compatible decorator on them to make them compatible with both Python 2 and 3. Additional changes were required for the ipapython.dnsutil.DNSName class, because it defined both __str__ and __unicode__. Reviewed-By: Petr Viktorin <pviktori@redhat.com>
-rw-r--r--ipalib/text.py15
-rw-r--r--ipapython/dnsutil.py19
-rw-r--r--ipapython/ipaldap.py4
3 files changed, 23 insertions, 15 deletions
diff --git a/ipalib/text.py b/ipalib/text.py
index 6b465a55b..160213eb8 100644
--- a/ipalib/text.py
+++ b/ipalib/text.py
@@ -116,6 +116,8 @@ import threading
import locale
import gettext
+import six
+
from ipalib.request import context
@@ -187,6 +189,7 @@ class LazyText(object):
return other + ConcatenatedLazyText(self)
+@six.python_2_unicode_compatible
class Gettext(LazyText):
"""
Deferred translation using ``gettext.ugettext()``.
@@ -241,7 +244,7 @@ class Gettext(LazyText):
return '%s(%r, domain=%r, localedir=%r)' % (self.__class__.__name__,
self.msg, self.domain, self.localedir)
- def __unicode__(self):
+ def __str__(self):
"""
Translate this message and return as a ``unicode`` instance.
"""
@@ -252,12 +255,13 @@ class Gettext(LazyText):
return g(self.msg)
def __json__(self):
- return self.__unicode__()
+ return self.__unicode__() #pylint: disable=no-member
def __mod__(self, kw):
- return self.__unicode__() % kw
+ return self.__unicode__() % kw #pylint: disable=no-member
+@six.python_2_unicode_compatible
class FixMe(Gettext):
"""
Non-translated place-holder for UI labels.
@@ -303,7 +307,7 @@ class FixMe(Gettext):
def __repr__(self):
return '%s(%r)' % (self.__class__.__name__, self.msg)
- def __unicode__(self):
+ def __str__(self):
return u'<%s>' % self.msg
@@ -400,6 +404,7 @@ class NGettext(LazyText):
return ng(self.singular, self.plural, count)
+@six.python_2_unicode_compatible
class ConcatenatedLazyText(object):
"""Concatenation of multiple strings, or any objects convertible to unicode
@@ -415,7 +420,7 @@ class ConcatenatedLazyText(object):
def __repr__(self):
return '%s(%r)' % (self.__class__.__name__, self.components)
- def __unicode__(self):
+ def __str__(self):
return u''.join(unicode(c) for c in self.components)
def __json__(self):
diff --git a/ipapython/dnsutil.py b/ipapython/dnsutil.py
index 228cb6629..d190f23c7 100644
--- a/ipapython/dnsutil.py
+++ b/ipapython/dnsutil.py
@@ -21,18 +21,22 @@ import dns.name
import dns.exception
import copy
+import six
+
+@six.python_2_unicode_compatible
class DNSName(dns.name.Name):
labels = None # make pylint happy
+ @classmethod
+ def from_text(cls, labels, origin=None):
+ return cls(dns.name.from_text(labels, origin))
+
def __init__(self, labels, origin=None):
try:
- if isinstance(labels, str):
+ if isinstance(labels, six.string_types):
#pylint: disable=E1101
- labels = dns.name.from_text(labels, origin).labels
- elif isinstance(labels, unicode):
- #pylint: disable=E1101
- labels = dns.name.from_unicode(labels, origin).labels
+ labels = dns.name.from_unicode(unicode(labels), origin).labels
elif isinstance(labels, dns.name.Name):
labels = labels.labels
@@ -54,14 +58,11 @@ class DNSName(dns.name.Name):
return DNSName(copy.deepcopy(self.labels, memo))
def __str__(self):
- return self.to_text()
-
- def __unicode__(self):
return self.to_unicode()
def ToASCII(self):
#method named by RFC 3490 and python standard library
- return str(self).decode('ascii') # must be unicode string
+ return self.to_text().decode('ascii') # must be unicode string
def canonicalize(self):
return DNSName(super(DNSName, self).canonicalize())
diff --git a/ipapython/ipaldap.py b/ipapython/ipaldap.py
index 1279a18a8..837d57c3b 100644
--- a/ipapython/ipaldap.py
+++ b/ipapython/ipaldap.py
@@ -833,7 +833,7 @@ class LDAPClient(object):
elif isinstance(val, (unicode, six.integer_types, long, Decimal, DN)):
return value_to_utf8(val)
elif isinstance(val, DNSName):
- return str(val)
+ return val.to_text()
elif isinstance(val, str):
return val
elif isinstance(val, list):
@@ -863,6 +863,8 @@ class LDAPClient(object):
return val.decode('utf-8')
elif target_type is datetime.datetime:
return datetime.datetime.strptime(val, LDAP_GENERALIZED_TIME_FORMAT)
+ elif target_type is DNSName:
+ return DNSName.from_text(val)
else:
return target_type(val)
except Exception as e: