]>
jfr.im git - yt-dlp.git/blob - yt_dlp/compat/__init__.py
4 import xml
.etree
.ElementTree
as etree
7 from ._deprecated
import * # noqa: F401, F403
8 from .compat_utils
import passthrough_module
10 # XXX: Implement this the same way as other DeprecationWarnings without circular import
12 passthrough_module(__name__
, '._legacy', callback
=lambda attr
: warnings
.warn(
13 DeprecationWarning(f
'{__name__}.{attr} is deprecated'), stacklevel
=2))
15 except ModuleNotFoundError
:
16 # Keep working even without _legacy module
18 del passthrough_module
21 # HTMLParseError has been deprecated in Python 3.3 and removed in
22 # Python 3.5. Introducing dummy exception for Python >3.5 for compatible
23 # and uniform cross-version exception handling
24 class compat_HTMLParseError(Exception):
28 class _TreeBuilder(etree
.TreeBuilder
):
29 def doctype(self
, name
, pubid
, system
):
33 def compat_etree_fromstring(text
):
34 return etree
.XML(text
, parser
=etree
.XMLParser(target
=_TreeBuilder()))
37 compat_os_name
= os
._name
if os
.name
== 'java' else os
.name
40 if compat_os_name
== 'nt':
41 def compat_shlex_quote(s
):
42 return s
if re
.match(r
'^[-_\w./]+$', s
) else '"%s"' % s
.replace('"', '\\"')
44 from shlex
import quote
as compat_shlex_quote
# noqa: F401
48 return c
if isinstance(c
, int) else ord(c
)
51 if compat_os_name
== 'nt' and sys
.version_info
< (3, 8):
52 # os.path.realpath on Windows does not follow symbolic links
53 # prior to Python 3.8 (see https://bugs.python.org/issue9949)
54 def compat_realpath(path
):
55 while os
.path
.islink(path
):
56 path
= os
.path
.abspath(os
.readlink(path
))
57 return os
.path
.realpath(path
)
59 compat_realpath
= os
.path
.realpath
62 # Python 3.8+ does not honor %HOME% on windows, but this breaks compatibility with youtube-dl
63 # See https://github.com/yt-dlp/yt-dlp/issues/792
64 # https://docs.python.org/3/library/os.path.html#os.path.expanduser
65 if compat_os_name
in ('nt', 'ce'):
66 def compat_expanduser(path
):
67 HOME
= os
.environ
.get('HOME')
69 return os
.path
.expanduser(path
)
70 elif not path
.startswith('~'):
72 i
= path
.replace('\\', '/', 1).find('/') # ~user
75 userhome
= os
.path
.join(os
.path
.dirname(HOME
), path
[1:i
]) if i
> 1 else HOME
76 return userhome
+ path
[i
:]
78 compat_expanduser
= os
.path
.expanduser