Changeset - 4e565c5d7b7d
[Not reviewed]
default
0 2 0
Mads Kiilerich - 6 years ago 2019-12-15 20:00:38
mads@kiilerich.com
Grafted from: 78a342d95b59
lib: establish py3 compatible strategy for string handling: introducing safe_bytes and deprecating safe_str

The meaning of safe_str will change when moving to py3. All use of safe_str is
thus tech debt that we have to chop off, mostly by moving to either
safe_unicode or safe_bytes ... or dropping because we know what we are doing
and rely on the improved type safety in py3.
2 files changed with 9 insertions and 6 deletions:
0 comments (0 inline, 0 general)
kallithea/lib/utils2.py
Show inline comments
 
@@ -43,7 +43,7 @@ from tg.i18n import ungettext
 
from webhelpers2.text import collapse, remove_formatting, strip_tags
 

	
 
from kallithea.lib.compat import json
 
from kallithea.lib.vcs.utils import safe_str, safe_unicode  # re-export
 
from kallithea.lib.vcs.utils import safe_bytes, safe_str, safe_unicode  # re-export
 
from kallithea.lib.vcs.utils.lazy import LazyProperty
 

	
 

	
kallithea/lib/vcs/utils/__init__.py
Show inline comments
 
@@ -76,7 +76,7 @@ def safe_unicode(s):
 
    if isinstance(s, unicode):
 
        return s
 

	
 
    if not isinstance(s, str):  # use __str__ / __unicode__ and don't expect UnicodeDecodeError
 
    if not isinstance(s, bytes):  # use __str__ / __unicode__ and don't expect UnicodeDecodeError
 
        return unicode(s)
 

	
 
    from kallithea.lib.vcs.conf import settings
 
@@ -97,16 +97,16 @@ def safe_unicode(s):
 
    return unicode(s, settings.DEFAULT_ENCODINGS[0], 'replace')
 

	
 

	
 
def safe_str(s):
 
def safe_bytes(s):
 
    """
 
    Safe str function. Use a few tricks to turn s into bytes string:
 
    Safe bytes function. Use a few tricks to turn s into bytes string:
 
    In case of UnicodeEncodeError with configured default encodings, fall back
 
    to first configured encoding with errors replaced.
 
    """
 
    if isinstance(s, str):
 
    if isinstance(s, bytes):
 
        return s
 

	
 
    assert isinstance(s, unicode), s  # don't use safe_str to coerce non-strings
 
    assert isinstance(s, unicode), repr(s)  # bytes cannot coerse with __str__ or handle None or int
 

	
 
    from kallithea.lib.vcs.conf import settings
 
    for enc in settings.DEFAULT_ENCODINGS:
 
@@ -118,6 +118,9 @@ def safe_str(s):
 
    return s.encode(settings.DEFAULT_ENCODINGS[0], 'replace')
 

	
 

	
 
safe_str = safe_bytes  # safe_str is deprecated - it will be redefined when changing to py3
 

	
 

	
 
# Regex taken from http://www.regular-expressions.info/email.html
 
email_re = re.compile(
 
    r"""[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@"""
0 comments (0 inline, 0 general)