diff options
author | Alberto Bertogli <albertito@blitiri.com.ar> | 2020-05-24 16:52:11 +0200 |
---|---|---|
committer | Alberto Bertogli <albertito@blitiri.com.ar> | 2020-05-24 17:05:18 +0200 |
commit | aee18d0edd88b9db07c3cfb5c13d9889ffac94c1 (patch) | |
tree | bd17d5b50e5de951b8b2df67e56a6ce3de57bfcb /git.py | |
parent | 20b99ee568fd15ca2897f995e9775861ef293544 (diff) | |
download | git-arr-fork-aee18d0edd88b9db07c3cfb5c13d9889ffac94c1.zip |
Simplify smstr
With the Python 2 to 3 migration and the type checking, we can be
fairly confident that smstr are always constructed from strings, not
bytes.
This allows the code to be simplified, as we no longer need to carry
the dual raw/unicode representation.
Diffstat (limited to 'git.py')
-rw-r--r-- | git.py | 31 |
1 files changed, 9 insertions, 22 deletions
@@ -125,28 +125,15 @@ class SimpleNamespace(object): class smstr: - """A "smart" string, containing many representations for ease of use. - - This is a string class that contains: - .raw -> raw string, authoritative source. - .unicode -> unicode representation, may not be perfect if .raw is not - proper utf8 but should be good enough to show. - .url -> escaped for safe embedding in URLs, can be not quite - readable. - .html -> an HTML-embeddable representation. - """ + """A "smart" string, containing many representations for ease of use.""" - def __init__(self, raw: str): - if not isinstance(raw, (str, bytes)): - raise TypeError( - "The raw string must be instance of 'str', not %s" % type(raw) - ) - self.raw = raw - if isinstance(raw, bytes): - self.unicode: str = raw.decode("utf8", errors="backslashreplace") - else: - self.unicode = raw - self.url = urllib.request.pathname2url(raw) + raw: str # string, probably utf8-encoded, good enough to show. + url: str # escaped for safe embedding in URLs (not human-readable). + html: str # HTML-embeddable representation. + + def __init__(self, s: str): + self.raw = s + self.url = urllib.request.pathname2url(s) self.html = self._to_html() def __cmp__(self, other): @@ -173,7 +160,7 @@ class smstr: def _to_html(self): """Returns an html representation of the unicode string.""" html = "" - for c in escape(self.unicode): + for c in escape(self.raw): if c in "\t\r\n\r\f\a\b\v\0": esc_c = c.encode("unicode-escape").decode("utf8") html += '<span class="ctrlchr">%s</span>' % esc_c |