diff options
Diffstat (limited to 'youtube_dl/utils.py')
| -rw-r--r-- | youtube_dl/utils.py | 29 | 
1 files changed, 29 insertions, 0 deletions
| diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index e924b1688..b644f4e92 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -280,6 +280,11 @@ if sys.version_info >= (2, 7):          return node.find(expr)  else:      def find_xpath_attr(node, xpath, key, val): +        # Here comes the crazy part: In 2.6, if the xpath is a unicode, +        # .//node does not match if a node is a direct child of . ! +        if isinstance(xpath, unicode): +            xpath = xpath.encode('ascii') +          for f in node.findall(xpath):              if f.attrib.get(key) == val:                  return f @@ -299,6 +304,20 @@ def xpath_with_ns(path, ns_map):      return '/'.join(replaced) +def xpath_text(node, xpath, name=None, fatal=False): +    if sys.version_info < (2, 7):  # Crazy 2.6 +        xpath = xpath.encode('ascii') + +    n = node.find(xpath) +    if n is None: +        if fatal: +            name = xpath if name is None else name +            raise ExtractorError('Could not find XML element %s' % name) +        else: +            return None +    return n.text + +  compat_html_parser.locatestarttagend = re.compile(r"""<[a-zA-Z][-.a-zA-Z0-9:_]*(?:\s+(?:(?<=['"\s])[^\s/>][^\s/=>]*(?:\s*=+\s*(?:'[^']*'|"[^"]*"|(?!['"])[^>\s]*))?\s*)*)?\s*""", re.VERBOSE) # backport bugfix  class BaseHTMLParser(compat_html_parser.HTMLParser):      def __init(self): @@ -1570,3 +1589,13 @@ except AttributeError:          if ret:              raise subprocess.CalledProcessError(ret, p.args, output=output)          return output + + +def limit_length(s, length): +    """ Add ellipses to overly long strings """ +    if s is None: +        return None +    ELLIPSES = '...' +    if len(s) > length: +        return s[:length - len(ELLIPSES)] + ELLIPSES +    return s | 
