46 lines
967 B
Python
46 lines
967 B
Python
|
# coding: utf-8
|
||
|
|
||
|
"""
|
||
|
Helper for formatting exception messages. Exports the following items:
|
||
|
|
||
|
- unwrap()
|
||
|
"""
|
||
|
|
||
|
from __future__ import unicode_literals, division, absolute_import, print_function
|
||
|
|
||
|
import re
|
||
|
import textwrap
|
||
|
|
||
|
|
||
|
def unwrap(string, *params):
|
||
|
"""
|
||
|
Takes a multi-line string and does the following:
|
||
|
|
||
|
- dedents
|
||
|
- converts newlines with text before and after into a single line
|
||
|
- strips leading and trailing whitespace
|
||
|
|
||
|
:param string:
|
||
|
The string to format
|
||
|
|
||
|
:param *params:
|
||
|
Params to interpolate into the string
|
||
|
|
||
|
:return:
|
||
|
The formatted string
|
||
|
"""
|
||
|
|
||
|
output = textwrap.dedent(string)
|
||
|
|
||
|
# Unwrap lines, taking into account bulleted lists, ordered lists and
|
||
|
# underlines consisting of = signs
|
||
|
if output.find('\n') != -1:
|
||
|
output = re.sub('(?<=\\S)\n(?=[^ \n\t\\d\\*\\-=])', ' ', output)
|
||
|
|
||
|
if params:
|
||
|
output = output % params
|
||
|
|
||
|
output = output.strip()
|
||
|
|
||
|
return output
|