mirror of https://github.com/yt-dlp/yt-dlp
[dependencies] Standardize `Cryptodome` imports
parent
754c84e2e4
commit
f6a765ceb5
@ -0,0 +1,38 @@
|
||||
import importlib
|
||||
|
||||
from ..compat import functools
|
||||
from ..compat.compat_utils import EnhancedModule, passthrough_module
|
||||
|
||||
EnhancedModule(__name__)
|
||||
|
||||
try:
|
||||
import Cryptodome as _parent
|
||||
except ImportError:
|
||||
try:
|
||||
import Crypto as _parent
|
||||
except (ImportError, SyntaxError): # Old Crypto gives SyntaxError in newer Python
|
||||
_parent = EnhancedModule('Cryptodome')
|
||||
__bool__ = lambda: False
|
||||
|
||||
|
||||
@functools.cache
|
||||
def __getattr__(name):
|
||||
try:
|
||||
submodule = importlib.import_module(f'.{name}', _parent.__name__)
|
||||
except ImportError:
|
||||
return getattr(_parent, name)
|
||||
return passthrough_module(f'{__name__}.{name}', submodule)
|
||||
|
||||
|
||||
@property
|
||||
@functools.cache
|
||||
def _yt_dlp__identifier():
|
||||
if _parent.__name__ == 'Crypto':
|
||||
from Crypto.Cipher import AES
|
||||
try:
|
||||
# In pycrypto, mode defaults to ECB. See:
|
||||
# https://www.pycryptodome.org/en/latest/src/vs_pycrypto.html#:~:text=not%20have%20ECB%20as%20default%20mode
|
||||
AES.new(b'abcdefghijklmnop')
|
||||
except TypeError:
|
||||
return 'pycrypto'
|
||||
return _parent.__name__
|
Loading…
Reference in New Issue