X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Futils.py;h=8f856ee8c073dd9095f2b62b1567eabdb321c117;hb=5e9d042d8f5dd3296c8a4fd7f538a22874c38324;hp=7d6041929538ff0e77c08d7e73e191b076ee4eb4;hpb=cb6ff87fbb05e421f77b57a79699c647866ceb09;p=youtube-dl diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 7d6041929..8f856ee8c 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -8,6 +8,7 @@ import locale import os import re import sys +import traceback import zlib import email.utils import json @@ -154,6 +155,7 @@ std_headers = { 'Accept-Encoding': 'gzip, deflate', 'Accept-Language': 'en-us,en;q=0.5', } + def preferredencoding(): """Get preferred encoding. @@ -187,7 +189,6 @@ else: with open(fn, 'w', encoding='utf-8') as f: json.dump(obj, f) - def htmlentity_transform(matchobj): """Transforms an HTML entity to a character. @@ -410,33 +411,19 @@ def encodeFilename(s): else: return s.encode(sys.getfilesystemencoding(), 'ignore') -def rsa_verify(message, signature, key): - from struct import pack - from hashlib import sha256 - from sys import version_info - def b(x): - if version_info[0] == 2: return x - else: return x.encode('latin1') - assert(type(message) == type(b(''))) - block_size = 0 - n = key[0] - while n: - block_size += 1 - n >>= 8 - signature = pow(int(signature, 16), key[1], key[0]) - raw_bytes = [] - while signature: - raw_bytes.insert(0, pack("B", signature & 0xFF)) - signature >>= 8 - signature = (block_size - len(raw_bytes)) * b('\x00') + b('').join(raw_bytes) - if signature[0:2] != b('\x00\x01'): return False - signature = signature[2:] - if not b('\x00') in signature: return False - signature = signature[signature.index(b('\x00'))+1:] - if not signature.startswith(b('\x30\x31\x30\x0D\x06\x09\x60\x86\x48\x01\x65\x03\x04\x02\x01\x05\x00\x04\x20')): return False - signature = signature[19:] - if signature != sha256(message).digest(): return False - return True + +class ExtractorError(Exception): + """Error during info extraction.""" + def __init__(self, msg, tb=None): + """ tb, if given, is the original traceback (so that it can be printed out). """ + super(ExtractorError, self).__init__(msg) + self.traceback = tb + + def format_traceback(self): + if self.traceback is None: + return None + return u''.join(traceback.format_tb(self.traceback)) + class DownloadError(Exception): """Download Error exception.