aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/PULL_REQUEST_TEMPLATE.md1
-rw-r--r--.github/workflows/core.yml2
-rw-r--r--.github/workflows/quick-test.yml16
-rw-r--r--.gitignore2
-rw-r--r--.pre-commit-config.yaml14
-rw-r--r--.pre-commit-hatch.yaml9
-rw-r--r--CONTRIBUTING.md77
-rw-r--r--Makefile7
-rwxr-xr-xdevscripts/install_deps.py12
-rwxr-xr-xdevscripts/run_tests.py14
-rw-r--r--pyproject.toml156
-rw-r--r--setup.cfg6
-rw-r--r--test/test_http_proxy.py1
-rw-r--r--yt_dlp/extractor/_extractors.py1021
-rw-r--r--yt_dlp/extractor/abc.py4
-rw-r--r--yt_dlp/extractor/abematv.py5
-rw-r--r--yt_dlp/extractor/acfun.py4
-rw-r--r--yt_dlp/extractor/adn.py4
-rw-r--r--yt_dlp/extractor/adobetv.py4
-rw-r--r--yt_dlp/extractor/airtv.py2
-rw-r--r--yt_dlp/extractor/allstar.py1
-rw-r--r--yt_dlp/extractor/alphaporno.py4
-rw-r--r--yt_dlp/extractor/alura.py12
-rw-r--r--yt_dlp/extractor/amara.py2
-rw-r--r--yt_dlp/extractor/amp.py2
-rw-r--r--yt_dlp/extractor/anchorfm.py2
-rw-r--r--yt_dlp/extractor/angel.py2
-rw-r--r--yt_dlp/extractor/appleconnect.py5
-rw-r--r--yt_dlp/extractor/appletrailers.py2
-rw-r--r--yt_dlp/extractor/arnes.py2
-rw-r--r--yt_dlp/extractor/atvat.py2
-rw-r--r--yt_dlp/extractor/awaan.py2
-rw-r--r--yt_dlp/extractor/banbye.py4
-rw-r--r--yt_dlp/extractor/bannedvideo.py6
-rw-r--r--yt_dlp/extractor/beeg.py1
-rw-r--r--yt_dlp/extractor/bleacherreport.py2
-rw-r--r--yt_dlp/extractor/blogger.py2
-rw-r--r--yt_dlp/extractor/bostonglobe.py1
-rw-r--r--yt_dlp/extractor/boxcast.py6
-rw-r--r--yt_dlp/extractor/brainpop.py2
-rw-r--r--yt_dlp/extractor/brightcove.py4
-rw-r--r--yt_dlp/extractor/cbs.py6
-rw-r--r--yt_dlp/extractor/cinetecamilano.py1
-rw-r--r--yt_dlp/extractor/clippit.py4
-rw-r--r--yt_dlp/extractor/common.py2
-rw-r--r--yt_dlp/extractor/corus.py2
-rw-r--r--yt_dlp/extractor/crackle.py2
-rw-r--r--yt_dlp/extractor/cspan.py6
-rw-r--r--yt_dlp/extractor/ctsnews.py2
-rw-r--r--yt_dlp/extractor/dailymail.py2
-rw-r--r--yt_dlp/extractor/damtomo.py2
-rw-r--r--yt_dlp/extractor/democracynow.py4
-rw-r--r--yt_dlp/extractor/digitalconcerthall.py1
-rw-r--r--yt_dlp/extractor/discoverygo.py2
-rw-r--r--yt_dlp/extractor/disney.py4
-rw-r--r--yt_dlp/extractor/douyutv.py2
-rw-r--r--yt_dlp/extractor/dplay.py2
-rw-r--r--yt_dlp/extractor/drtuber.py2
-rw-r--r--yt_dlp/extractor/duboku.py2
-rw-r--r--yt_dlp/extractor/dvtv.py4
-rw-r--r--yt_dlp/extractor/dw.py2
-rw-r--r--yt_dlp/extractor/ertgr.py4
-rw-r--r--yt_dlp/extractor/europa.py2
-rw-r--r--yt_dlp/extractor/euscreen.py3
-rw-r--r--yt_dlp/extractor/eyedotv.py4
-rw-r--r--yt_dlp/extractor/fancode.py8
-rw-r--r--yt_dlp/extractor/faz.py2
-rw-r--r--yt_dlp/extractor/fczenit.py2
-rw-r--r--yt_dlp/extractor/fifa.py1
-rw-r--r--yt_dlp/extractor/filmon.py4
-rw-r--r--yt_dlp/extractor/gab.py2
-rw-r--r--yt_dlp/extractor/gamejolt.py2
-rw-r--r--yt_dlp/extractor/gaskrank.py1
-rw-r--r--yt_dlp/extractor/generic.py2
-rw-r--r--yt_dlp/extractor/gettr.py2
-rw-r--r--yt_dlp/extractor/gigya.py1
-rw-r--r--yt_dlp/extractor/glomex.py2
-rw-r--r--yt_dlp/extractor/go.py10
-rw-r--r--yt_dlp/extractor/godresource.py2
-rw-r--r--yt_dlp/extractor/gofile.py5
-rw-r--r--yt_dlp/extractor/gotostage.py9
-rw-r--r--yt_dlp/extractor/hbo.py4
-rw-r--r--yt_dlp/extractor/hearthisat.py2
-rw-r--r--yt_dlp/extractor/hketv.py2
-rw-r--r--yt_dlp/extractor/hrti.py2
-rw-r--r--yt_dlp/extractor/huya.py6
-rw-r--r--yt_dlp/extractor/ichinanalive.py2
-rw-r--r--yt_dlp/extractor/infoq.py4
-rw-r--r--yt_dlp/extractor/iprima.py6
-rw-r--r--yt_dlp/extractor/iqiyi.py10
-rw-r--r--yt_dlp/extractor/itprotv.py3
-rw-r--r--yt_dlp/extractor/itv.py9
-rw-r--r--yt_dlp/extractor/iwara.py4
-rw-r--r--yt_dlp/extractor/jamendo.py2
-rw-r--r--yt_dlp/extractor/japandiet.py4
-rw-r--r--yt_dlp/extractor/jove.py5
-rw-r--r--yt_dlp/extractor/jstream.py2
-rw-r--r--yt_dlp/extractor/kakao.py2
-rw-r--r--yt_dlp/extractor/kaltura.py8
-rw-r--r--yt_dlp/extractor/kankanews.py4
-rw-r--r--yt_dlp/extractor/kuwo.py4
-rw-r--r--yt_dlp/extractor/lcp.py2
-rw-r--r--yt_dlp/extractor/lecture2go.py2
-rw-r--r--yt_dlp/extractor/lecturio.py2
-rw-r--r--yt_dlp/extractor/leeco.py2
-rw-r--r--yt_dlp/extractor/libraryofcongress.py1
-rw-r--r--yt_dlp/extractor/lifenews.py2
-rw-r--r--yt_dlp/extractor/limelight.py2
-rw-r--r--yt_dlp/extractor/linkedin.py2
-rw-r--r--yt_dlp/extractor/mainstreaming.py3
-rw-r--r--yt_dlp/extractor/manoto.py7
-rw-r--r--yt_dlp/extractor/medaltv.py2
-rw-r--r--yt_dlp/extractor/mediaklikk.py7
-rw-r--r--yt_dlp/extractor/mediaset.py4
-rw-r--r--yt_dlp/extractor/mediasite.py5
-rw-r--r--yt_dlp/extractor/microsoftstream.py2
-rw-r--r--yt_dlp/extractor/mildom.py4
-rw-r--r--yt_dlp/extractor/mit.py4
-rw-r--r--yt_dlp/extractor/monstercat.py2
-rw-r--r--yt_dlp/extractor/moviepilot.py2
-rw-r--r--yt_dlp/extractor/movingimage.py2
-rw-r--r--yt_dlp/extractor/msn.py2
-rw-r--r--yt_dlp/extractor/n1.py2
-rw-r--r--yt_dlp/extractor/naver.py2
-rw-r--r--yt_dlp/extractor/nba.py2
-rw-r--r--yt_dlp/extractor/nbc.py2
-rw-r--r--yt_dlp/extractor/ndr.py2
-rw-r--r--yt_dlp/extractor/nfhsnetwork.py8
-rw-r--r--yt_dlp/extractor/nhl.py2
-rw-r--r--yt_dlp/extractor/ninenews.py2
-rw-r--r--yt_dlp/extractor/ninenow.py2
-rw-r--r--yt_dlp/extractor/nitter.py9
-rw-r--r--yt_dlp/extractor/nobelprize.py6
-rw-r--r--yt_dlp/extractor/noz.py6
-rw-r--r--yt_dlp/extractor/nuevo.py6
-rw-r--r--yt_dlp/extractor/nuvid.py2
-rw-r--r--yt_dlp/extractor/nzherald.py5
-rw-r--r--yt_dlp/extractor/odkmedia.py2
-rw-r--r--yt_dlp/extractor/olympics.py5
-rw-r--r--yt_dlp/extractor/onenewsnz.py6
-rw-r--r--yt_dlp/extractor/onet.py4
-rw-r--r--yt_dlp/extractor/opencast.py2
-rw-r--r--yt_dlp/extractor/openrec.py2
-rw-r--r--yt_dlp/extractor/ora.py1
-rw-r--r--yt_dlp/extractor/packtpub.py3
-rw-r--r--yt_dlp/extractor/panopto.py10
-rw-r--r--yt_dlp/extractor/paramountplus.py2
-rw-r--r--yt_dlp/extractor/pbs.py4
-rw-r--r--yt_dlp/extractor/pearvideo.py2
-rw-r--r--yt_dlp/extractor/peertube.py2
-rw-r--r--yt_dlp/extractor/piksel.py2
-rw-r--r--yt_dlp/extractor/pladform.py4
-rw-r--r--yt_dlp/extractor/platzi.py2
-rw-r--r--yt_dlp/extractor/playtvak.py2
-rw-r--r--yt_dlp/extractor/pluralsight.py2
-rw-r--r--yt_dlp/extractor/polsatgo.py2
-rw-r--r--yt_dlp/extractor/pornflip.py6
-rw-r--r--yt_dlp/extractor/pornovoisines.py2
-rw-r--r--yt_dlp/extractor/prx.py11
-rw-r--r--yt_dlp/extractor/puhutv.py2
-rw-r--r--yt_dlp/extractor/qingting.py1
-rw-r--r--yt_dlp/extractor/qqmusic.py2
-rw-r--r--yt_dlp/extractor/radiocanada.py2
-rw-r--r--yt_dlp/extractor/radiocomercial.py2
-rw-r--r--yt_dlp/extractor/radiozet.py2
-rw-r--r--yt_dlp/extractor/radlive.py4
-rw-r--r--yt_dlp/extractor/rai.py4
-rw-r--r--yt_dlp/extractor/rbgtum.py2
-rw-r--r--yt_dlp/extractor/rcti.py4
-rw-r--r--yt_dlp/extractor/rds.py4
-rw-r--r--yt_dlp/extractor/redbulltv.py2
-rw-r--r--yt_dlp/extractor/reddit.py2
-rw-r--r--yt_dlp/extractor/redgifs.py2
-rw-r--r--yt_dlp/extractor/redtube.py2
-rw-r--r--yt_dlp/extractor/reuters.py2
-rw-r--r--yt_dlp/extractor/rmcdecouverte.py2
-rw-r--r--yt_dlp/extractor/rte.py2
-rw-r--r--yt_dlp/extractor/rtp.py9
-rw-r--r--yt_dlp/extractor/rtvcplay.py7
-rw-r--r--yt_dlp/extractor/rtvs.py1
-rw-r--r--yt_dlp/extractor/rutube.py2
-rw-r--r--yt_dlp/extractor/rutv.py6
-rw-r--r--yt_dlp/extractor/ruutu.py2
-rw-r--r--yt_dlp/extractor/safari.py1
-rw-r--r--yt_dlp/extractor/scrippsnetworks.py4
-rw-r--r--yt_dlp/extractor/scte.py2
-rw-r--r--yt_dlp/extractor/sendtonews.py6
-rw-r--r--yt_dlp/extractor/seznamzpravy.py2
-rw-r--r--yt_dlp/extractor/shahid.py2
-rw-r--r--yt_dlp/extractor/shemaroome.py2
-rw-r--r--yt_dlp/extractor/sixplay.py2
-rw-r--r--yt_dlp/extractor/skynewsarabia.py2
-rw-r--r--yt_dlp/extractor/sohu.py8
-rw-r--r--yt_dlp/extractor/sovietscloset.py5
-rw-r--r--yt_dlp/extractor/spankbang.py2
-rw-r--r--yt_dlp/extractor/springboardplatform.py6
-rw-r--r--yt_dlp/extractor/startv.py4
-rw-r--r--yt_dlp/extractor/stitcher.py2
-rw-r--r--yt_dlp/extractor/storyfire.py2
-rw-r--r--yt_dlp/extractor/streamable.py2
-rw-r--r--yt_dlp/extractor/stripchat.py2
-rw-r--r--yt_dlp/extractor/sunporno.py4
-rw-r--r--yt_dlp/extractor/syfy.py2
-rw-r--r--yt_dlp/extractor/tbs.py2
-rw-r--r--yt_dlp/extractor/teachable.py4
-rw-r--r--yt_dlp/extractor/teachertube.py2
-rw-r--r--yt_dlp/extractor/teamcoco.py2
-rw-r--r--yt_dlp/extractor/teamtreehouse.py2
-rw-r--r--yt_dlp/extractor/ted.py5
-rw-r--r--yt_dlp/extractor/tele13.py2
-rw-r--r--yt_dlp/extractor/telewebion.py1
-rw-r--r--yt_dlp/extractor/tempo.py2
-rw-r--r--yt_dlp/extractor/tencent.py2
-rw-r--r--yt_dlp/extractor/theguardian.py2
-rw-r--r--yt_dlp/extractor/theintercept.py4
-rw-r--r--yt_dlp/extractor/theplatform.py24
-rw-r--r--yt_dlp/extractor/threeqsdn.py2
-rw-r--r--yt_dlp/extractor/toypics.py3
-rw-r--r--yt_dlp/extractor/triller.py2
-rw-r--r--yt_dlp/extractor/trueid.py4
-rw-r--r--yt_dlp/extractor/tumblr.py2
-rw-r--r--yt_dlp/extractor/turner.py12
-rw-r--r--yt_dlp/extractor/tv2.py4
-rw-r--r--yt_dlp/extractor/tv2hu.py2
-rw-r--r--yt_dlp/extractor/tvanouvelles.py2
-rw-r--r--yt_dlp/extractor/tvn24.py2
-rw-r--r--yt_dlp/extractor/tvp.py2
-rw-r--r--yt_dlp/extractor/tvplay.py2
-rw-r--r--yt_dlp/extractor/tvplayer.py2
-rw-r--r--yt_dlp/extractor/tweakers.py2
-rw-r--r--yt_dlp/extractor/twitter.py2
-rw-r--r--yt_dlp/extractor/udn.py2
-rw-r--r--yt_dlp/extractor/ukcolumn.py8
-rw-r--r--yt_dlp/extractor/urplay.py4
-rw-r--r--yt_dlp/extractor/usatoday.py2
-rw-r--r--yt_dlp/extractor/ustream.py4
-rw-r--r--yt_dlp/extractor/ustudio.py2
-rw-r--r--yt_dlp/extractor/veo.py1
-rw-r--r--yt_dlp/extractor/vesti.py2
-rw-r--r--yt_dlp/extractor/vevo.py2
-rw-r--r--yt_dlp/extractor/vice.py4
-rw-r--r--yt_dlp/extractor/vidio.py2
-rw-r--r--yt_dlp/extractor/vidlii.py2
-rw-r--r--yt_dlp/extractor/vimeo.py10
-rw-r--r--yt_dlp/extractor/viu.py6
-rw-r--r--yt_dlp/extractor/vk.py2
-rw-r--r--yt_dlp/extractor/walla.py2
-rw-r--r--yt_dlp/extractor/washingtonpost.py1
-rw-r--r--yt_dlp/extractor/wdr.py4
-rw-r--r--yt_dlp/extractor/weibo.py2
-rw-r--r--yt_dlp/extractor/whowatch.py4
-rw-r--r--yt_dlp/extractor/wimtv.py2
-rw-r--r--yt_dlp/extractor/wppilot.py10
-rw-r--r--yt_dlp/extractor/wsj.py2
-rw-r--r--yt_dlp/extractor/xhamster.py2
-rw-r--r--yt_dlp/extractor/xnxx.py2
-rw-r--r--yt_dlp/extractor/xstream.py4
-rw-r--r--yt_dlp/extractor/xvideos.py2
-rw-r--r--yt_dlp/extractor/xxxymovies.py2
-rw-r--r--yt_dlp/extractor/yandexmusic.py2
-rw-r--r--yt_dlp/extractor/zapiks.py4
-rw-r--r--yt_dlp/extractor/zhihu.py2
-rw-r--r--yt_dlp/extractor/zingmp3.py2
-rw-r--r--yt_dlp/extractor/zype.py2
264 files changed, 1188 insertions, 978 deletions
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index c4d3e812e..4deee572f 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -28,7 +28,6 @@ Fixes #
### Before submitting a *pull request* make sure you have:
- [ ] At least skimmed through [contributing guidelines](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#developer-instructions) including [yt-dlp coding conventions](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#yt-dlp-coding-conventions)
- [ ] [Searched](https://github.com/yt-dlp/yt-dlp/search?q=is%3Apr&type=Issues) the bugtracker for similar pull requests
-- [ ] Checked the code with [flake8](https://pypi.python.org/pypi/flake8) and [ran relevant tests](https://github.com/yt-dlp/yt-dlp/blob/master/CONTRIBUTING.md#developer-instructions)
### In order to be accepted and merged into yt-dlp each piece of code must be in public domain or released under [Unlicense](http://unlicense.org/). Check all of the following options that apply:
- [ ] I am the original author of this code and I am willing to release it under [Unlicense](http://unlicense.org/)
diff --git a/.github/workflows/core.yml b/.github/workflows/core.yml
index 70769f967..fdfdebc65 100644
--- a/.github/workflows/core.yml
+++ b/.github/workflows/core.yml
@@ -53,7 +53,7 @@ jobs:
with:
python-version: ${{ matrix.python-version }}
- name: Install test requirements
- run: python3 ./devscripts/install_deps.py --include dev --include curl-cffi
+ run: python3 ./devscripts/install_deps.py --include test --include curl-cffi
- name: Run tests
continue-on-error: False
run: |
diff --git a/.github/workflows/quick-test.yml b/.github/workflows/quick-test.yml
index 24b34911f..3afb51a30 100644
--- a/.github/workflows/quick-test.yml
+++ b/.github/workflows/quick-test.yml
@@ -15,13 +15,13 @@ jobs:
with:
python-version: '3.8'
- name: Install test requirements
- run: python3 ./devscripts/install_deps.py --include dev
+ run: python3 ./devscripts/install_deps.py --include test
- name: Run tests
run: |
python3 -m yt_dlp -v || true
python3 ./devscripts/run_tests.py core
- flake8:
- name: Linter
+ check:
+ name: Code check
if: "!contains(github.event.head_commit.message, 'ci skip all')"
runs-on: ubuntu-latest
steps:
@@ -29,9 +29,11 @@ jobs:
- uses: actions/setup-python@v5
with:
python-version: '3.8'
- - name: Install flake8
- run: python3 ./devscripts/install_deps.py -o --include dev
+ - name: Install dev dependencies
+ run: python3 ./devscripts/install_deps.py -o --include static-analysis
- name: Make lazy extractors
run: python3 ./devscripts/make_lazy_extractors.py
- - name: Run flake8
- run: flake8 .
+ - name: Run ruff
+ run: ruff check --output-format github .
+ - name: Run autopep8
+ run: autopep8 --diff .
diff --git a/.gitignore b/.gitignore
index 630c2e01f..db322c4f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -67,7 +67,7 @@ cookies
# Python
*.pyc
*.pyo
-.pytest_cache
+.*_cache
wine-py2exe/
py2exe.log
build/
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 000000000..a821eeefb
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,14 @@
+repos:
+- repo: local
+ hooks:
+ - id: linter
+ name: Apply linter fixes
+ entry: ruff check --fix .
+ language: system
+ types: [python]
+ require_serial: true
+ - id: format
+ name: Apply formatting fixes
+ entry: autopep8 --in-place .
+ language: system
+ types: [python]
diff --git a/.pre-commit-hatch.yaml b/.pre-commit-hatch.yaml
new file mode 100644
index 000000000..fb7d25e1d
--- /dev/null
+++ b/.pre-commit-hatch.yaml
@@ -0,0 +1,9 @@
+repos:
+- repo: local
+ hooks:
+ - id: fix
+ name: Apply code fixes
+ entry: hatch fmt
+ language: system
+ types: [python]
+ require_serial: true
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index c94ec55a6..837b600e3 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -134,18 +134,53 @@ We follow [youtube-dl's policy](https://github.com/ytdl-org/youtube-dl#can-you-a
# DEVELOPER INSTRUCTIONS
-Most users do not need to build yt-dlp and can [download the builds](https://github.com/yt-dlp/yt-dlp/releases) or get them via [the other installation methods](README.md#installation).
+Most users do not need to build yt-dlp and can [download the builds](https://github.com/yt-dlp/yt-dlp/releases), get them via [the other installation methods](README.md#installation) or directly run it using `python -m yt_dlp`.
-To run yt-dlp as a developer, you don't need to build anything either. Simply execute
+`yt-dlp` uses [`hatch`](<https://hatch.pypa.io>) as a project management tool.
+You can easily install it using [`pipx`](<https://pipx.pypa.io>) via `pipx install hatch`, or else via `pip` or your package manager of choice. Make sure you are using at least version `1.10.0`, otherwise some functionality might not work as expected.
- python3 -m yt_dlp
+If you plan on contributing to `yt-dlp`, best practice is to start by running the following command:
-To run all the available core tests, use:
+```shell
+$ hatch run setup
+```
+
+The above command will install a `pre-commit` hook so that required checks/fixes (linting, formatting) will run automatically before each commit. If any code needs to be linted or formatted, then the commit will be blocked and the necessary changes will be made; you should review all edits and re-commit the fixed version.
- python3 devscripts/run_tests.py
+After this you can use `hatch shell` to enable a virtual environment that has `yt-dlp` and its development dependencies installed.
+
+In addition, the following script commands can be used to run simple tasks such as linting or testing (without having to run `hatch shell` first):
+* `hatch fmt`: Automatically fix linter violations and apply required code formatting changes
+ * See `hatch fmt --help` for more info
+* `hatch test`: Run extractor or core tests
+ * See `hatch test --help` for more info
See item 6 of [new extractor tutorial](#adding-support-for-a-new-site) for how to run extractor specific test cases.
+While it is strongly recommended to use `hatch` for yt-dlp development, if you are unable to do so, alternatively you can manually create a virtual environment and use the following commands:
+
+```shell
+# To only install development dependencies:
+$ python -m devscripts.install_deps --include dev
+
+# Or, for an editable install plus dev dependencies:
+$ python -m pip install -e ".[default,dev]"
+
+# To setup the pre-commit hook:
+$ pre-commit install
+
+# To be used in place of `hatch test`:
+$ python -m devscripts.run_tests
+
+# To be used in place of `hatch fmt`:
+$ ruff check --fix .
+$ autopep8 --in-place .
+
+# To only check code instead of applying fixes:
+$ ruff check .
+$ autopep8 --diff .
+```
+
If you want to create a build of yt-dlp yourself, you can follow the instructions [here](README.md#compile).
@@ -165,12 +200,16 @@ After you have ensured this site is distributing its content legally, you can fo
1. [Fork this repository](https://github.com/yt-dlp/yt-dlp/fork)
1. Check out the source code with:
- git clone git@github.com:YOUR_GITHUB_USERNAME/yt-dlp.git
+ ```shell
+ $ git clone git@github.com:YOUR_GITHUB_USERNAME/yt-dlp.git
+ ```
1. Start a new git branch with
- cd yt-dlp
- git checkout -b yourextractor
+ ```shell
+ $ cd yt-dlp
+ $ git checkout -b yourextractor
+ ```
1. Start with this simple template and save it to `yt_dlp/extractor/yourextractor.py`:
@@ -217,21 +256,27 @@ After you have ensured this site is distributing its content legally, you can fo
# TODO more properties (see yt_dlp/extractor/common.py)
}
```
-1. Add an import in [`yt_dlp/extractor/_extractors.py`](yt_dlp/extractor/_extractors.py). Note that the class name must end with `IE`.
-1. Run `python3 devscripts/run_tests.py YourExtractor`. This *may fail* at first, but you can continually re-run it until you're done. Upon failure, it will output the missing fields and/or correct values which you can copy. If you decide to add more than one test, the tests will then be named `YourExtractor`, `YourExtractor_1`, `YourExtractor_2`, etc. Note that tests with an `only_matching` key in the test's dict are not included in the count. You can also run all the tests in one go with `YourExtractor_all`
+1. Add an import in [`yt_dlp/extractor/_extractors.py`](yt_dlp/extractor/_extractors.py). Note that the class name must end with `IE`. Also note that when adding a parenthesized import group, the last import in the group must have a trailing comma in order for this formatting to be respected by our code formatter.
+1. Run `hatch test YourExtractor`. This *may fail* at first, but you can continually re-run it until you're done. Upon failure, it will output the missing fields and/or correct values which you can copy. If you decide to add more than one test, the tests will then be named `YourExtractor`, `YourExtractor_1`, `YourExtractor_2`, etc. Note that tests with an `only_matching` key in the test's dict are not included in the count. You can also run all the tests in one go with `YourExtractor_all`
1. Make sure you have at least one test for your extractor. Even if all videos covered by the extractor are expected to be inaccessible for automated testing, tests should still be added with a `skip` parameter indicating why the particular test is disabled from running.
1. Have a look at [`yt_dlp/extractor/common.py`](yt_dlp/extractor/common.py) for possible helper methods and a [detailed description of what your extractor should and may return](yt_dlp/extractor/common.py#L119-L440). Add tests and code for as many as you want.
-1. Make sure your code follows [yt-dlp coding conventions](#yt-dlp-coding-conventions) and check the code with [flake8](https://flake8.pycqa.org/en/latest/index.html#quickstart):
+1. Make sure your code follows [yt-dlp coding conventions](#yt-dlp-coding-conventions), passes [ruff](https://docs.astral.sh/ruff/tutorial/#getting-started) code checks and is properly formatted:
+
+ ```shell
+ $ hatch fmt --check
+ ```
- $ flake8 yt_dlp/extractor/yourextractor.py
+ You can use `hatch fmt` to automatically fix problems.
1. Make sure your code works under all [Python](https://www.python.org/) versions supported by yt-dlp, namely CPython and PyPy for Python 3.8 and above. Backward compatibility is not required for even older versions of Python.
1. When the tests pass, [add](https://git-scm.com/docs/git-add) the new files, [commit](https://git-scm.com/docs/git-commit) them and [push](https://git-scm.com/docs/git-push) the result, like this:
- $ git add yt_dlp/extractor/_extractors.py
- $ git add yt_dlp/extractor/yourextractor.py
- $ git commit -m '[yourextractor] Add extractor'
- $ git push origin yourextractor
+ ```shell
+ $ git add yt_dlp/extractor/_extractors.py
+ $ git add yt_dlp/extractor/yourextractor.py
+ $ git commit -m '[yourextractor] Add extractor'
+ $ git push origin yourextractor
+ ```
1. Finally, [create a pull request](https://help.github.com/articles/creating-a-pull-request). We'll then review and merge it.
diff --git a/Makefile b/Makefile
index cef4bc6cb..b8f010086 100644
--- a/Makefile
+++ b/Makefile
@@ -27,7 +27,7 @@ clean-dist:
yt_dlp/extractor/lazy_extractors.py *.spec CONTRIBUTING.md.tmp yt-dlp yt-dlp.exe yt_dlp.egg-info/ AUTHORS
clean-cache:
find . \( \
- -type d -name .pytest_cache -o -type d -name __pycache__ -o -name "*.pyc" -o -name "*.class" \
+ -type d -name ".*_cache" -o -type d -name __pycache__ -o -name "*.pyc" -o -name "*.class" \
\) -prune -exec rm -rf {} \;
completion-bash: completions/bash/yt-dlp
@@ -70,7 +70,8 @@ uninstall:
rm -f $(DESTDIR)$(SHAREDIR)/fish/vendor_completions.d/yt-dlp.fish
codetest:
- flake8 .
+ ruff check .
+ autopep8 --diff .
test:
$(PYTHON) -m pytest
@@ -151,7 +152,7 @@ yt-dlp.tar.gz: all
--exclude '*.pyo' \
--exclude '*~' \
--exclude '__pycache__' \
- --exclude '.pytest_cache' \
+ --exclude '.*_cache' \
--exclude '.git' \
-- \
README.md supportedsites.md Changelog.md LICENSE \
diff --git a/devscripts/install_deps.py b/devscripts/install_deps.py
index d33fc637c..d29250545 100755
--- a/devscripts/install_deps.py
+++ b/devscripts/install_deps.py
@@ -42,17 +42,25 @@ def parse_args():
def main():
args = parse_args()
project_table = parse_toml(read_file(args.input))['project']
+ recursive_pattern = re.compile(rf'{project_table["name"]}\[(?P<group_name>[\w-]+)\]')
optional_groups = project_table['optional-dependencies']
excludes = args.exclude or []
+ def yield_deps(group):
+ for dep in group:
+ if mobj := recursive_pattern.fullmatch(dep):
+ yield from optional_groups.get(mobj.group('group_name'), [])
+ else:
+ yield dep
+
targets = []
if not args.only_optional: # `-o` should exclude 'dependencies' and the 'default' group
targets.extend(project_table['dependencies'])
if 'default' not in excludes: # `--exclude default` should exclude entire 'default' group
- targets.extend(optional_groups['default'])
+ targets.extend(yield_deps(optional_groups['default']))
for include in filter(None, map(optional_groups.get, args.include or [])):
- targets.extend(include)
+ targets.extend(yield_deps(include))
targets = [t for t in targets if re.match(r'[\w-]+', t).group(0).lower() not in excludes]
diff --git a/devscripts/run_tests.py b/devscripts/run_tests.py
index 6d638a974..c605aa62c 100755
--- a/devscripts/run_tests.py
+++ b/devscripts/run_tests.py
@@ -4,6 +4,7 @@ import argparse
import functools
import os
import re
+import shlex
import subprocess
import sys
from pathlib import Path
@@ -18,6 +19,8 @@ def parse_args():
'test', help='a extractor tests, or one of "core" or "download"', nargs='*')
parser.add_argument(
'-k', help='run a test matching EXPRESSION. Same as "pytest -k"', metavar='EXPRESSION')
+ parser.add_argument(
+ '--pytest-args', help='arguments to passthrough to pytest')
return parser.parse_args()
@@ -26,15 +29,16 @@ def run_tests(*tests, pattern=None, ci=False):
run_download = 'download' in tests
tests = list(map(fix_test_name, tests))
- arguments = ['pytest', '-Werror', '--tb=short']
+ pytest_args = args.pytest_args or os.getenv('HATCH_TEST_ARGS', '')
+ arguments = ['pytest', '-Werror', '--tb=short', *shlex.split(pytest_args)]
if ci:
arguments.append('--color=yes')
+ if pattern:
+ arguments.extend(['-k', pattern])
if run_core:
arguments.extend(['-m', 'not download'])
elif run_download:
arguments.extend(['-m', 'download'])
- elif pattern:
- arguments.extend(['-k', pattern])
else:
arguments.extend(
f'test/test_download.py::TestDownload::test_{test}' for test in tests)
@@ -46,13 +50,13 @@ def run_tests(*tests, pattern=None, ci=False):
pass
arguments = [sys.executable, '-Werror', '-m', 'unittest']
+ if pattern:
+ arguments.extend(['-k', pattern])
if run_core:
print('"pytest" needs to be installed to run core tests', file=sys.stderr, flush=True)
return 1
elif run_download:
arguments.append('test.test_download')
- elif pattern:
- arguments.extend(['-k', pattern])
else:
arguments.extend(
f'test.test_download.TestDownload.test_{test}' for test in tests)
diff --git a/pyproject.toml b/pyproject.toml
index 8e3bce4bf..96cb368b6 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -66,9 +66,16 @@ build = [
"wheel",
]
dev = [
- "flake8",
- "isort",
- "pytest",
+ "pre-commit",
+ "yt-dlp[static-analysis]",
+ "yt-dlp[test]",
+]
+static-analysis = [
+ "autopep8~=2.0",
+ "ruff~=0.4.4",
+]
+test = [
+ "pytest~=8.1",
]
pyinstaller = [
"pyinstaller>=6.3; sys_platform!='darwin'",
@@ -126,3 +133,146 @@ artifacts = ["/yt_dlp/extractor/lazy_extractors.py"]
[tool.hatch.version]
path = "yt_dlp/version.py"
pattern = "_pkg_version = '(?P<version>[^']+)'"
+
+[tool.hatch.envs.default]
+features = ["curl-cffi", "default"]
+dependencies = ["pre-commit"]
+path = ".venv"
+installer = "uv"
+
+[tool.hatch.envs.default.scripts]
+setup = "pre-commit install --config .pre-commit-hatch.yaml"
+yt-dlp = "python -Werror -Xdev -m yt_dlp {args}"
+
+[tool.hatch.envs.hatch-static-analysis]
+detached = true
+features = ["static-analysis"]
+dependencies = [] # override hatch ruff version
+config-path = "pyproject.toml"
+
+[tool.hatch.envs.hatch-static-analysis.scripts]
+format-check = "autopep8 --diff {args:.}"
+format-fix = "autopep8 --in-place {args:.}"
+lint-check = "ruff check {args:.}"
+lint-fix = "ruff check --fix {args:.}"
+
+[tool.hatch.envs.hatch-test]
+features = ["test"]
+dependencies = [
+ "pytest-randomly~=3.15",
+ "pytest-rerunfailures~=14.0",
+ "pytest-xdist[psutil]~=3.5",
+]
+
+[tool.hatch.envs.hatch-test.scripts]
+run = "python -m devscripts.run_tests {args}"
+run-cov = "echo Code coverage not implemented && exit 1"
+
+[[tool.hatch.envs.hatch-test.matrix]]
+python = [
+ "3.8",
+ "3.9",
+ "3.10",
+ "3.11",
+ "3.12",
+ "pypy3.8",
+ "pypy3.9",
+ "pypy3.10",
+]
+
+[tool.ruff]
+line-length = 120
+
+[tool.ruff.lint]
+ignore = [
+ "E402", # module level import not at top of file
+ "E501", # line too long
+ "E731", # do not assign a lambda expression, use a def
+ "E741", # ambiguous variable name
+]
+select = [
+ "E", # pycodestyle errors
+ "W", # pycodestyle warnings
+ "F", # pyflakes
+ "I", # import order
+]
+
+[tool.ruff.lint.per-file-ignores]
+"devscripts/lazy_load_template.py" = ["F401"]
+"!yt_dlp/extractor/**.py" = ["I"]
+
+[tool.ruff.lint.isort]
+known-first-party = [
+ "bundle",
+ "devscripts",
+ "test",
+]
+relative-imports-order = "closest-to-furthest"
+
+[tool.autopep8]
+max_line_length = 120
+recursive = true
+exit-code = true
+jobs = 0
+select = [
+ "E101",
+ "E112",
+ "E113",
+ "E115",
+ "E116",
+ "E117",
+ "E121",
+ "E122",
+ "E123",
+ "E124",
+ "E125",
+ "E126",
+ "E127",
+ "E128",
+ "E129",
+ "E131",
+ "E201",
+ "E202",
+ "E203",
+ "E211",
+ "E221",
+ "E222",
+ "E223",
+ "E224",
+ "E225",
+ "E226",
+ "E227",
+ "E228",
+ "E231",
+ "E241",
+ "E242",
+ "E251",
+ "E252",
+ "E261",
+ "E262",
+ "E265",
+ "E266",
+ "E271",
+ "E272",
+ "E273",
+ "E274",
+ "E275",
+ "E301",
+ "E302",
+ "E303",
+ "E304",
+ "E305",
+ "E306",
+ "E502",
+ "E701",
+ "E702",
+ "E704",
+ "W391",
+ "W504",
+]
+
+[tool.pytest.ini_options]
+addopts = "-ra -v --strict-markers"
+markers = [
+ "download",
+]
diff --git a/setup.cfg b/setup.cfg
index aeb4cee58..340cc3b4d 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -14,12 +14,6 @@ remove-duplicate-keys = true
remove-unused-variables = true
-[tool:pytest]
-addopts = -ra -v --strict-markers
-markers =
- download
-
-
[tox:tox]
skipsdist = true
envlist = py{38,39,310,311,312},pypy{38,39,310}
diff --git a/test/test_http_proxy.py b/test/test_http_proxy.py
index c1d7c53f5..1b21fe78e 100644
--- a/test/test_http_proxy.py
+++ b/test/test_http_proxy.py
@@ -93,6 +93,7 @@ if urllib3:
This allows us to chain multiple TLS connections.
"""
+
def __init__(self, socket, ssl_context, server_hostname=None, suppress_ragged_eofs=True, server_side=False):
self.incoming = ssl.MemoryBIO()
self.outgoing = ssl.MemoryBIO()
diff --git a/yt_dlp/extractor/_extractors.py b/yt_dlp/extractor/_extractors.py
index fc18ead3a..e287e04bc 100644
--- a/yt_dlp/extractor/_extractors.py
+++ b/yt_dlp/extractor/_extractors.py
@@ -1,4 +1,5 @@
# flake8: noqa: F401
+# isort: off
from .youtube import ( # Youtube is moved to the top to improve performance
YoutubeIE,
@@ -24,6 +25,8 @@ from .youtube import ( # Youtube is moved to the top to improve performance
YoutubeConsentRedirectIE,
)
+# isort: on
+
from .abc import (
ABCIE,
ABCIViewIE,
@@ -43,27 +46,33 @@ from .abematv import (
)
from .academicearth import AcademicEarthCourseIE
from .acast import (
- ACastIE,
ACastChannelIE,
+ ACastIE,
+)
+from .acfun import (
+ AcFunBangumiIE,
+ AcFunVideoIE,
+)
+from .adn import (
+ ADNIE,
+ ADNSeasonIE,
)
-from .acfun import AcFunVideoIE, AcFunBangumiIE
-from .adn import ADNIE, ADNSeasonIE
from .adobeconnect import AdobeConnectIE
from .adobetv import (
+ AdobeTVChannelIE,
AdobeTVEmbedIE,
AdobeTVIE,
AdobeTVShowIE,
- AdobeTVChannelIE,
AdobeTVVideoIE,
)
from .adultswim import AdultSwimIE
from .aenetworks import (
- AENetworksIE,
AENetworksCollectionIE,
+ AENetworksIE,
AENetworksShowIE,
- HistoryTopicIE,
- HistoryPlayerIE,
BiographyIE,
+ HistoryPlayerIE,
+ HistoryTopicIE,
)
from .aeonco import AeonCoIE
from .afreecatv import (
@@ -79,77 +88,85 @@ from .agora import (
)
from .airtv import AirTVIE
from .aitube import AitubeKZVideoIE
+from .aliexpress import AliExpressLiveIE
from .aljazeera import AlJazeeraIE
+from .allocine import AllocineIE
from .allstar import (
AllstarIE,
AllstarProfileIE,
)
from .alphaporno import AlphaPornoIE
+from .alsace20tv import (
+ Alsace20TVEmbedIE,
+ Alsace20TVIE,
+)
from .altcensored import (
- AltCensoredIE,
AltCensoredChannelIE,
+ AltCensoredIE,
)
from .alura import (
+ AluraCourseIE,
AluraIE,
- AluraCourseIE
)
from .amadeustv import AmadeusTVIE
from .amara import AmaraIE
-from .amcnetworks import AMCNetworksIE
from .amazon import (
- AmazonStoreIE,
AmazonReviewsIE,
+ AmazonStoreIE,
)
from .amazonminitv import (
AmazonMiniTVIE,
AmazonMiniTVSeasonIE,
AmazonMiniTVSeriesIE,
)
+from .amcnetworks import AMCNetworksIE
from .americastestkitchen import (
AmericasTestKitchenIE,
AmericasTestKitchenSeasonIE,
)
from .anchorfm import AnchorFMEpisodeIE
from .angel import AngelIE
+from .antenna import (
+ Ant1NewsGrArticleIE,
+ Ant1NewsGrEmbedIE,
+ AntennaGrWatchIE,
+)
from .anvato import AnvatoIE
from .aol import AolIE
-from .allocine import AllocineIE
-from .aliexpress import AliExpressLiveIE
-from .alsace20tv import (
- Alsace20TVIE,
- Alsace20TVEmbedIE,
-)
from .apa import APAIE
from .aparat import AparatIE
from .appleconnect import AppleConnectIE
+from .applepodcasts import ApplePodcastsIE
from .appletrailers import (
AppleTrailersIE,
AppleTrailersSectionIE,
)
-from .applepodcasts import ApplePodcastsIE
from .archiveorg import (
ArchiveOrgIE,
YoutubeWebArchiveIE,
)
from .arcpublishing import ArcPublishingIE
-from .arkena import ArkenaIE
from .ard import (
+ ARDIE,
ARDBetaMediathekIE,
ARDMediathekCollectionIE,
- ARDIE,
)
+from .arkena import ArkenaIE
+from .arnes import ArnesIE
from .art19 import (
Art19IE,
Art19ShowIE,
)
from .arte import (
- ArteTVIE,
+ ArteTVCategoryIE,
ArteTVEmbedIE,
+ ArteTVIE,
ArteTVPlaylistIE,
- ArteTVCategoryIE,
)
-from .arnes import ArnesIE
-from .asobichannel import AsobiChannelIE, AsobiChannelTagURLIE
+from .asobichannel import (
+ AsobiChannelIE,
+ AsobiChannelTagURLIE,
+)
from .asobistage import AsobiStageIE
from .atresplayer import AtresPlayerIE
from .atscaleconf import AtScaleConfEventIE
@@ -160,57 +177,60 @@ from .audiodraft import (
AudiodraftCustomIE,
AudiodraftGenericIE,
)
-from .audiomack import AudiomackIE, AudiomackAlbumIE
+from .audiomack import (
+ AudiomackAlbumIE,
+ AudiomackIE,
+)
from .audius import (
AudiusIE,
- AudiusTrackIE,
AudiusPlaylistIE,
AudiusProfileIE,
+ AudiusTrackIE,
)
from .awaan import (
AWAANIE,
- AWAANVideoIE,
AWAANLiveIE,
AWAANSeasonIE,
+ AWAANVideoIE,
)
from .axs import AxsIE
from .azmedien import AZMedienIE
from .baidu import BaiduVideoIE
from .banbye import (
- BanByeIE,
BanByeChannelIE,
+ BanByeIE,
)
from .bandaichannel import BandaiChannelIE
from .bandcamp import (
- BandcampIE,
BandcampAlbumIE,
- BandcampWeeklyIE,
+ BandcampIE,
BandcampUserIE,
+ BandcampWeeklyIE,
)
from .bannedvideo import BannedVideoIE
from .bbc import (
- BBCCoUkIE,
+ BBCIE,
BBCCoUkArticleIE,
+ BBCCoUkIE,
BBCCoUkIPlayerEpisodesIE,
BBCCoUkIPlayerGroupIE,
BBCCoUkPlaylistIE,
- BBCIE,
)
-from .beeg import BeegIE
-from .behindkink import BehindKinkIE
-from .bellmedia import BellMediaIE
from .beatbump import (
- BeatBumpVideoIE,
BeatBumpPlaylistIE,
+ BeatBumpVideoIE,
)
from .beatport import BeatportIE
+from .beeg import BeegIE
+from .behindkink import BehindKinkIE
+from .bellmedia import BellMediaIE
from .berufetv import BerufeTVIE
from .bet import BetIE
from .bfi import BFIPlayerIE
from .bfmtv import (
BFMTVIE,
- BFMTVLiveIE,
BFMTVArticleIE,
+ BFMTVLiveIE,
)
from .bibeltv import (
BibelTVLiveIE,
@@ -221,37 +241,37 @@ from .bigflix import BigflixIE
from .bigo import BigoIE
from .bild import BildIE
from .bilibili import (
- BiliBiliIE,
+ BilibiliAudioAlbumIE,
+ BilibiliAudioIE,
BiliBiliBangumiIE,
- BiliBiliBangumiSeasonIE,
BiliBiliBangumiMediaIE,
+ BiliBiliBangumiSeasonIE,
+ BilibiliCategoryIE,
BilibiliCheeseIE,
BilibiliCheeseSeasonIE,
- BiliBiliSearchIE,
- BilibiliCategoryIE,
- BilibiliAudioIE,
- BilibiliAudioAlbumIE,
- BiliBiliPlayerIE,
- BilibiliSpaceVideoIE,
- BilibiliSpaceAudioIE,
BilibiliCollectionListIE,
- BilibiliSeriesListIE,
BilibiliFavoritesListIE,
- BilibiliWatchlaterIE,
+ BiliBiliIE,
+ BiliBiliPlayerIE,
BilibiliPlaylistIE,
+ BiliBiliSearchIE,
+ BilibiliSeriesListIE,
+ BilibiliSpaceAudioIE,
+ BilibiliSpaceVideoIE,
+ BilibiliWatchlaterIE,
BiliIntlIE,
BiliIntlSeriesIE,
BiliLiveIE,
)
from .biobiochiletv import BioBioChileTVIE
from .bitchute import (
- BitChuteIE,
BitChuteChannelIE,
+ BitChuteIE,
)
from .blackboardcollaborate import BlackboardCollaborateIE
from .bleacherreport import (
- BleacherReportIE,
BleacherReportCMSIE,
+ BleacherReportIE,
)
from .blerp import BlerpIE
from .blogger import BloggerIE
@@ -264,27 +284,27 @@ from .box import BoxIE
from .boxcast import BoxCastVideoIE
from .bpb import BpbIE
from .br import BRIE
-from .bravotv import BravoTVIE
from .brainpop import (
- BrainPOPIE,
- BrainPOPJrIE,
BrainPOPELLIE,
BrainPOPEspIE,
BrainPOPFrIE,
+ BrainPOPIE,
BrainPOPIlIE,
+ BrainPOPJrIE,
)
+from .bravotv import BravoTVIE
from .breitbart import BreitBartIE
from .brightcove import (
BrightcoveLegacyIE,
BrightcoveNewIE,
)
from .brilliantpala import (
- BrilliantpalaElearnIE,
BrilliantpalaClassesIE,
+ BrilliantpalaElearnIE,
)
-from .businessinsider import BusinessInsiderIE
from .bundesliga import BundesligaIE
from .bundestag import BundestagIE
+from .businessinsider import BusinessInsiderIE
from .buzzfeed import BuzzFeedIE
from .byutv import BYUtvIE
from .c56 import C56IE
@@ -292,40 +312,40 @@ from .callin import CallinIE
from .caltrans import CaltransIE
from .cam4 import CAM4IE
from .camdemy import (
+ CamdemyFolderIE,
CamdemyIE,
- CamdemyFolderIE
)
from .camfm import (
CamFMEpisodeIE,
- CamFMShowIE
+ CamFMShowIE,
)
from .cammodels import CamModelsIE
from .camsoda import CamsodaIE
from .camtasia import CamtasiaEmbedIE
from .canal1 import Canal1IE
from .canalalpha import CanalAlphaIE
-from .canalplus import CanalplusIE
from .canalc2 import Canalc2IE
+from .canalplus import CanalplusIE
from .caracoltv import CaracolTvPlayIE
from .cartoonnetwork import CartoonNetworkIE
from .cbc import (
CBCIE,
- CBCPlayerIE,
- CBCPlayerPlaylistIE,
CBCGemIE,
- CBCGemPlaylistIE,
CBCGemLiveIE,
+ CBCGemPlaylistIE,
+ CBCPlayerIE,
+ CBCPlayerPlaylistIE,
)
from .cbs import (
CBSIE,
ParamountPressExpressIE,
)
from .cbsnews import (
- CBSNewsEmbedIE,
- CBSNewsIE,
- CBSLocalIE,
CBSLocalArticleIE,
+ CBSLocalIE,
CBSLocalLiveIE,
+ CBSNewsEmbedIE,
+ CBSNewsIE,
CBSNewsLiveIE,
CBSNewsLiveVideoIE,
)
@@ -354,12 +374,12 @@ from .chzzk import (
from .cinemax import CinemaxIE
from .cinetecamilano import CinetecaMilanoIE
from .cineverse import (
- CineverseIE,
CineverseDetailsIE,
+ CineverseIE,
)
from .ciscolive import (
- CiscoLiveSessionIE,
CiscoLiveSearchIE,
+ CiscoLiveSessionIE,
)
from .ciscowebex import CiscoWebexIE
from .cjsw import CJSWIE
@@ -372,16 +392,13 @@ from .cloudycdn import CloudyCDNIE
from .clubic import ClubicIE
from .clyp import ClypIE
from .cmt import CMTIE
-from .cnbc import (
- CNBCVideoIE,
-)
+from .cnbc import CNBCVideoIE
from .cnn import (
CNNIE,
- CNNBlogsIE,
CNNArticleIE,
+ CNNBlogsIE,
CNNIndonesiaIE,
)
-from .coub import CoubIE
from .comedycentral import (
ComedyCentralIE,
ComedyCentralTVIE,
@@ -399,44 +416,48 @@ from .commonprotocols import (
from .condenast import CondeNastIE
from .contv import CONtvIE
from .corus import CorusIE
+from .coub import CoubIE
+from .cozytv import CozyTVIE
from .cpac import (
CPACIE,
CPACPlaylistIE,
)
-from .cozytv import CozyTVIE
from .cracked import CrackedIE
from .crackle import CrackleIE
from .craftsy import CraftsyIE
from .crooksandliars import CrooksAndLiarsIE
from .crowdbunker import (
- CrowdBunkerIE,
CrowdBunkerChannelIE,
+ CrowdBunkerIE,
)
from .crtvg import CrtvgIE
from .crunchyroll import (
+ CrunchyrollArtistIE,
CrunchyrollBetaIE,
CrunchyrollBetaShowIE,
CrunchyrollMusicIE,
- CrunchyrollArtistIE,
)
-from .cspan import CSpanIE, CSpanCongressIE
+from .cspan import (
+ CSpanCongressIE,
+ CSpanIE,
+)
from .ctsnews import CtsNewsIE
from .ctv import CTVIE
from .ctvnews import CTVNewsIE
from .cultureunplugged import CultureUnpluggedIE
from .curiositystream import (
- CuriosityStreamIE,
CuriosityStreamCollectionsIE,
+ CuriosityStreamIE,
CuriosityStreamSeriesIE,
)
from .cwtv import CWTVIE
from .cybrary import (
+ CybraryCourseIE,
CybraryIE,
- CybraryCourseIE
)
from .dacast import (
- DacastVODIE,
DacastPlaylistIE,
+ DacastVODIE,
)
from .dailymail import DailyMailIE
from .dailymotion import (
@@ -458,8 +479,8 @@ from .dangalplay import (
DangalPlaySeasonIE,
)
from .daum import (
- DaumIE,
DaumClipIE,
+ DaumIE,
DaumPlaylistIE,
DaumUserIE,
)
@@ -467,49 +488,69 @@ from .daystar import DaystarClipIE
from .dbtv import DBTVIE
from .dctp import DctpTvIE
from .deezer import (
- DeezerPlaylistIE,
DeezerAlbumIE,
+ DeezerPlaylistIE,
)
from .democracynow import DemocracynowIE
from .detik import DetikEmbedIE
+from .deuxm import (
+ DeuxMIE,
+ DeuxMNewsIE,
+)
+from .dfb import DFBIE
+from .dhm import DHMIE
+from .digitalconcerthall import DigitalConcertHallIE
+from .digiteka import DigitekaIE
+from .discogs import DiscogsReleasePlaylistIE
+from .discovery import DiscoveryIE
+from .disney import DisneyIE
+from .dispeak import DigitallySpeakingIE
from .dlf import (
DLFIE,
DLFCorpusIE,
)
-from .dfb import DFBIE
-from .dhm import DHMIE
+from .dlive import (
+ DLiveStreamIE,
+ DLiveVODIE,
+)
from .douyutv import (
DouyuShowIE,
DouyuTVIE,
)
from .dplay import (
- DPlayIE,
- DiscoveryPlusIE,
- HGTVDeIE,
- GoDiscoveryIE,
- TravelChannelIE,
+ TLCIE,
+ AmHistoryChannelIE,
+ AnimalPlanetIE,
CookingChannelIE,
- HGTVUsaIE,
- FoodNetworkIE,
- InvestigationDiscoveryIE,
DestinationAmericaIE,
- AmHistoryChannelIE,
- ScienceChannelIE,
- DIYNetworkIE,
DiscoveryLifeIE,
- AnimalPlanetIE,
- TLCIE,
- MotorTrendIE,
- MotorTrendOnDemandIE,
- DiscoveryPlusIndiaIE,
DiscoveryNetworksDeIE,
+ DiscoveryPlusIE,
+ DiscoveryPlusIndiaIE,
+ DiscoveryPlusIndiaShowIE,
DiscoveryPlusItalyIE,
DiscoveryPlusItalyShowIE,
- DiscoveryPlusIndiaShowIE,
+ DIYNetworkIE,
+ DPlayIE,
+ FoodNetworkIE,
GlobalCyclingNetworkPlusIE,
+ GoDiscoveryIE,
+ HGTVDeIE,
+ HGTVUsaIE,
+ InvestigationDiscoveryIE,
+ MotorTrendIE,
+ MotorTrendOnDemandIE,
+ ScienceChannelIE,
+ TravelChannelIE,
)
-from .dreisat import DreiSatIE
from .drbonanza import DRBonanzaIE
+from .dreisat import DreiSatIE
+from .drooble import DroobleIE
+from .dropbox import DropboxIE
+from .dropout import (
+ DropoutIE,
+ DropoutSeasonIE,
+)
from .drtuber import DrTuberIE
from .drtv import (
DRTVIE,
@@ -518,32 +559,21 @@ from .drtv import (
DRTVSeriesIE,
)
from .dtube import DTubeIE
-from .dvtv import DVTVIE
from .duboku import (
DubokuIE,
- DubokuPlaylistIE
+ DubokuPlaylistIE,
)
from .dumpert import DumpertIE
-from .deuxm import (
- DeuxMIE,
- DeuxMNewsIE
-)
-from .digitalconcerthall import DigitalConcertHallIE
-from .discogs import DiscogsReleasePlaylistIE
-from .discovery import DiscoveryIE
-from .disney import DisneyIE
-from .dispeak import DigitallySpeakingIE
-from .dropbox import DropboxIE
-from .dropout import (
- DropoutSeasonIE,
- DropoutIE
-)
from .duoplay import DuoplayIE
+from .dvtv import DVTVIE
from .dw import (
DWIE,
DWArticleIE,
)
-from .eagleplatform import EaglePlatformIE, ClipYouEmbedIE
+from .eagleplatform import (
+ ClipYouEmbedIE,
+ EaglePlatformIE,
+)
from .ebaumsworld import EbaumsWorldIE
from .ebay import EbayIE
from .egghead import (
@@ -567,8 +597,8 @@ from .epoch import EpochIE
from .eporner import EpornerIE
from .erocast import ErocastIE
from .eroprofile import (
- EroProfileIE,
EroProfileAlbumIE,
+ EroProfileIE,
)
from .err import ERRJupiterIE
from .ertgr import (
@@ -578,31 +608,33 @@ from .ertgr import (
)
from .espn import (
ESPNIE,
- WatchESPNIE,
ESPNArticleIE,
- FiveThirtyEightIE,
ESPNCricInfoIE,
+ FiveThirtyEightIE,
+ WatchESPNIE,
)
from .ettutv import EttuTvIE
-from .europa import EuropaIE, EuroParlWebstreamIE
+from .europa import (
+ EuropaIE,
+ EuroParlWebstreamIE,
+)
from .europeantour import EuropeanTourIE
from .eurosport import EurosportIE
from .euscreen import EUScreenIE
from .expressen import ExpressenIE
from .eyedotv import EyedoTVIE
from .facebook import (
+ FacebookAdsIE,
FacebookIE,
FacebookPluginsVideoIE,
FacebookRedirectURLIE,
FacebookReelIE,
- FacebookAdsIE,
)
-from .fathom import FathomIE
from .fancode import (
+ FancodeLiveIE,
FancodeVodIE,
- FancodeLiveIE
)
-
+from .fathom import FathomIE
from .faz import FazIE
from .fc2 import (
FC2IE,
@@ -612,8 +644,8 @@ from .fc2 import (
from .fczenit import FczenitIE
from .fifa import FifaIE
from .filmon import (
- FilmOnIE,
FilmOnChannelIE,
+ FilmOnIE,
)
from .filmweb import FilmwebIE
from .firsttv import FirstTVIE
@@ -621,17 +653,17 @@ from .fivetv import FiveTVIE
from .flextv import FlexTVIE
from .flickr import FlickrIE
from .floatplane import (
- FloatplaneIE,
FloatplaneChannelIE,
+ FloatplaneIE,
)
from .folketinget import FolketingetIE
from .footyroom import FootyRoomIE
from .formula1 import Formula1IE
from .fourtube import (
FourTubeIE,
- PornTubeIE,
- PornerBrosIE,
FuxIE,
+ PornerBrosIE,
+ PornTubeIE,
)
from .fox import FOXIE
from .fox9 import (
@@ -639,8 +671,8 @@ from .fox9 import (
FOX9NewsIE,
)
from .foxnews import (
- FoxNewsIE,
FoxNewsArticleIE,
+ FoxNewsIE,
FoxNewsVideoIE,
)
from .foxsports import FoxSportsIE
@@ -648,20 +680,20 @@ from .fptplay import FptplayIE
from .franceinter import FranceInterIE
from .francetv import (
FranceTVIE,
- FranceTVSiteIE,
FranceTVInfoIE,
+ FranceTVSiteIE,
)
from .freesound import FreesoundIE
from .freespeech import FreespeechIE
-from .frontendmasters import (
- FrontendMastersIE,
- FrontendMastersLessonIE,
- FrontendMastersCourseIE
-)
from .freetv import (
FreeTvIE,
FreeTvMoviesIE,
)
+from .frontendmasters import (
+ FrontendMastersCourseIE,
+ FrontendMastersIE,
+ FrontendMastersLessonIE,
+)
from .fujitv import FujiTVFODPlus7IE
from .funimation import (
FunimationIE,
@@ -672,17 +704,17 @@ from .funk import FunkIE
from .funker530 import Funker530IE
from .fuyintv import FuyinTVIE
from .gab import (
- GabTVIE,
GabIE,
+ GabTVIE,
)
from .gaia import GaiaIE
from .gamejolt import (
- GameJoltIE,
- GameJoltUserIE,
+ GameJoltCommunityIE,
GameJoltGameIE,
GameJoltGameSoundtrackIE,
- GameJoltCommunityIE,
+ GameJoltIE,
GameJoltSearchIE,
+ GameJoltUserIE,
)
from .gamespot import GameSpotIE
from .gamestar import GameStarIE
@@ -691,13 +723,17 @@ from .gazeta import GazetaIE
from .gdcvault import GDCVaultIE
from .gedidigital import GediDigitalIE
from .generic import GenericIE
+from .genericembeds import (
+ HTML5MediaEmbedIE,
+ QuotedHTMLIE,
+)
from .genius import (
GeniusIE,
GeniusLyricsIE,
)
from .getcourseru import (
+ GetCourseRuIE,
GetCourseRuPlayerIE,
- GetCourseRuIE
)
from .gettr import (
GettrIE,
@@ -706,41 +742,45 @@ from .gettr import (
from .giantbomb import GiantBombIE
from .glide import GlideIE
from .globalplayer import (
+ GlobalPlayerAudioEpisodeIE,
+ GlobalPlayerAudioIE,
GlobalPlayerLiveIE,
GlobalPlayerLivePlaylistIE,
- GlobalPlayerAudioIE,
- GlobalPlayerAudioEpisodeIE,
- GlobalPlayerVideoIE
+ GlobalPlayerVideoIE,
)
from .globo import (
- GloboIE,
GloboArticleIE,
+ GloboIE,
+)
+from .glomex import (
+ GlomexEmbedIE,
+ GlomexIE,
)
from .gmanetwork import GMANetworkVideoIE
from .go import GoIE
-from .godtube import GodTubeIE
from .godresource import GodResourceIE
+from .godtube import GodTubeIE
from .gofile import GofileIE
from .golem import GolemIE
from .goodgame import GoodGameIE
from .googledrive import (
- GoogleDriveIE,
GoogleDriveFolderIE,
+ GoogleDriveIE,
)
from .googlepodcasts import (
- GooglePodcastsIE,
GooglePodcastsFeedIE,
+ GooglePodcastsIE,
)
from .googlesearch import GoogleSearchIE
-from .gopro import GoProIE
from .goplay import GoPlayIE
+from .gopro import GoProIE
from .goshgay import GoshgayIE
from .gotostage import GoToStageIE
from .gputechconf import GPUTechConfIE
from .gronkh import (
- GronkhIE,
GronkhFeedIE,
- GronkhVodsIE
+ GronkhIE,
+ GronkhVodsIE,
)
from .groupon import GrouponIE
from .harpodeon import HarpodeonIE
@@ -749,10 +789,10 @@ from .hearthisat import HearThisAtIE
from .heise import HeiseIE
from .hellporno import HellPornoIE
from .hgtv import HGTVComShowIE
-from .hketv import HKETVIE
from .hidive import HiDiveIE
from .historicfilms import HistoricFilmsIE
from .hitrecord import HitRecordIE
+from .hketv import HKETVIE
from .hollywoodreporter import (
HollywoodReporterIE,
HollywoodReporterPlaylistIE,
@@ -761,8 +801,8 @@ from .holodex import HolodexIE
from .hotnewhiphop import HotNewHipHopIE
from .hotstar import (
HotStarIE,
- HotStarPrefixIE,
HotStarPlaylistIE,
+ HotStarPrefixIE,
HotStarSeasonIE,
HotStarSeriesIE,
)
@@ -773,34 +813,30 @@ from .hrti import (
HRTiPlaylistIE,
)
from .hse import (
- HSEShowIE,
HSEProductIE,
-)
-from .genericembeds import (
- HTML5MediaEmbedIE,
- QuotedHTMLIE,
+ HSEShowIE,
)
from .huajiao import HuajiaoIE
-from .huya import HuyaLiveIE
from .huffpost import HuffPostIE
from .hungama import (
+ HungamaAlbumPlaylistIE,
HungamaIE,
HungamaSongIE,
- HungamaAlbumPlaylistIE,
)
+from .huya import HuyaLiveIE
from .hypem import HypemIE
from .hypergryph import MonsterSirenHypergryphMusicIE
from .hytale import HytaleIE
from .icareus import IcareusIE
from .ichinanalive import (
- IchinanaLiveIE,
IchinanaLiveClipIE,
+ IchinanaLiveIE,
)
from .idolplus import IdolPlusIE
from .ign import (
IGNIE,
- IGNVideoIE,
IGNArticleIE,
+ IGNVideoIE,
)
from .iheart import (
IHeartRadioIE,
@@ -810,12 +846,12 @@ from .ilpost import IlPostIE
from .iltalehti import IltalehtiIE
from .imdb import (
ImdbIE,
- ImdbListIE
+ ImdbListIE,
)
from .imgur import (
- ImgurIE,
ImgurAlbumIE,
ImgurGalleryIE,
+ ImgurIE,
)
from .ina import InaIE
from .inc import IncIE
@@ -824,20 +860,20 @@ from .infoq import InfoQIE
from .instagram import (
InstagramIE,
InstagramIOSIE,
- InstagramUserIE,
- InstagramTagIE,
InstagramStoryIE,
+ InstagramTagIE,
+ InstagramUserIE,
)
from .internazionale import InternazionaleIE
from .internetvideoarchive import InternetVideoArchiveIE
from .iprima import (
+ IPrimaCNNIE,
IPrimaIE,
- IPrimaCNNIE
)
from .iqiyi import (
- IqiyiIE,
+ IqAlbumIE,
IqIE,
- IqAlbumIE
+ IqiyiIE,
)
from .islamchannel import (
IslamChannelIE,
@@ -845,16 +881,16 @@ from .islamchannel import (
)
from .israelnationalnews import IsraelNationalNewsIE
from .itprotv import (
+ ITProTVCourseIE,
ITProTVIE,
- ITProTVCourseIE
)
from .itv import (
- ITVIE,
ITVBTCCIE,
+ ITVIE,
)
from .ivi import (
+ IviCompilationIE,
IviIE,
- IviCompilationIE
)
from .ivideon import IvideonIE
from .iwara import (
@@ -865,15 +901,15 @@ from .iwara import (
from .ixigua import IxiguaIE
from .izlesene import IzleseneIE
from .jamendo import (
- JamendoIE,
JamendoAlbumIE,
+ JamendoIE,
)
from .japandiet import (
+ SangiinIE,
+ SangiinInstructionIE,
ShugiinItvLiveIE,
ShugiinItvLiveRoomIE,
ShugiinItvVodIE,
- SangiinInstructionIE,
- SangiinIE,
)
from .jeuxvideo import JeuxVideoIE
from .jiocinema import (
@@ -881,13 +917,13 @@ from .jiocinema import (
JioCinemaSeriesIE,
)
from .jiosaavn import (
- JioSaavnSongIE,
JioSaavnAlbumIE,
JioSaavnPlaylistIE,
+ JioSaavnSongIE,
)
-from .jove import JoveIE
from .joj import JojIE
from .joqrag import JoqrAgIE
+from .jove import JoveIE
from .jstream import JStreamIE
from .jtbc import (
JTBCIE,
@@ -914,17 +950,17 @@ from .kinopoisk import KinoPoiskIE
from .kommunetv import KommunetvIE
from .kompas import KompasVideoIE
from .koo import KooIE
-from .kth import KTHIE
from .krasview import KrasViewIE
+from .kth import KTHIE
from .ku6 import Ku6IE
from .kukululive import KukuluLiveIE
from .kuwo import (
- KuwoIE,
KuwoAlbumIE,
- KuwoChartIE,
- KuwoSingerIE,
KuwoCategoryIE,
+ KuwoChartIE,
+ KuwoIE,
KuwoMvIE,
+ KuwoSingerIE,
)
from .la7 import (
LA7IE,
@@ -944,14 +980,14 @@ from .lbry import (
)
from .lci import LCIIE
from .lcp import (
- LcpPlayIE,
LcpIE,
+ LcpPlayIE,
)
from .lecture2go import Lecture2GoIE
from .lecturio import (
- LecturioIE,
LecturioCourseIE,
LecturioDeCourseIE,
+ LecturioIE,
)
from .leeco import (
LeIE,
@@ -968,22 +1004,22 @@ from .lenta import LentaIE
from .libraryofcongress import LibraryOfCongressIE
from .libsyn import LibsynIE
from .lifenews import (
- LifeNewsIE,
LifeEmbedIE,
+ LifeNewsIE,
)
from .likee import (
LikeeIE,
- LikeeUserIE
+ LikeeUserIE,
)
from .limelight import (
- LimelightMediaIE,
LimelightChannelIE,
LimelightChannelListIE,
+ LimelightMediaIE,
)
from .linkedin import (
LinkedInIE,
- LinkedInLearningIE,
LinkedInLearningCourseIE,
+ LinkedInLearningIE,
)
from .liputan6 import Liputan6IE
from .listennotes import ListenNotesIE
@@ -1000,25 +1036,23 @@ from .lnkgo import (
LnkIE,
)
from .loom import (
- LoomIE,
LoomFolderIE,
+ LoomIE,
)
from .lovehomeporn import LoveHomePornIE
from .lrt import (
LRTVODIE,
- LRTStreamIE
+ LRTStreamIE,
)
from .lsm import (
LSMLREmbedIE,
LSMLTVEmbedIE,
- LSMReplayIE
-)
-from .lumni import (
- LumniIE
+ LSMReplayIE,
)
+from .lumni import LumniIE
from .lynda import (
+ LyndaCourseIE,
LyndaIE,
- LyndaCourseIE
)
from .maariv import MaarivIE
from .magellantv import MagellanTVIE
@@ -1030,13 +1064,13 @@ from .mailru import (
)
from .mainstreaming import MainStreamingIE
from .mangomolo import (
- MangomoloVideoIE,
MangomoloLiveIE,
+ MangomoloVideoIE,
)
from .manoto import (
ManotoTVIE,
- ManotoTVShowIE,
ManotoTVLiveIE,
+ ManotoTVShowIE,
)
from .manyvids import ManyVidsIE
from .maoritv import MaoriTVIE
@@ -1052,13 +1086,14 @@ from .mdr import MDRIE
from .medaltv import MedalTVIE
from .mediaite import MediaiteIE
from .mediaklikk import MediaKlikkIE
+from .medialaan import MedialaanIE
from .mediaset import (
MediasetIE,
MediasetShowIE,
)
from .mediasite import (
- MediasiteIE,
MediasiteCatalogIE,
+ MediasiteIE,
MediasiteNamedCatalogIE,
)
from .mediastream import (
@@ -1068,26 +1103,30 @@ from .mediastream import (
from .mediaworksnz import MediaWorksNZVODIE
from .medici import MediciIE
from .megaphone import MegaphoneIE
+from .megatvcom import (
+ MegaTVComEmbedIE,
+ MegaTVComIE,
+)
from .meipai import MeipaiIE
from .melonvod import MelonVODIE
from .metacritic import MetacriticIE
from .mgtv import MGTVIE
+from .microsoftembed import MicrosoftEmbedIE
from .microsoftstream import MicrosoftStreamIE
from .microsoftvirtualacademy import (
- MicrosoftVirtualAcademyIE,
MicrosoftVirtualAcademyCourseIE,
+ MicrosoftVirtualAcademyIE,
)
-from .microsoftembed import MicrosoftEmbedIE
from .mildom import (
- MildomIE,
- MildomVodIE,
MildomClipIE,
+ MildomIE,
MildomUserVodIE,
+ MildomVodIE,
)
from .minds import (
- MindsIE,
MindsChannelIE,
MindsGroupIE,
+ MindsIE,
)
from .minoto import MinotoIE
from .mirrativ import (
@@ -1095,31 +1134,34 @@ from .mirrativ import (
MirrativUserIE,
)
from .mirrorcouk import MirrorCoUKIE
-from .mit import TechTVMITIE, OCWMITIE
+from .mit import (
+ OCWMITIE,
+ TechTVMITIE,
+)
from .mitele import MiTeleIE
from .mixch import (
- MixchIE,
MixchArchiveIE,
+ MixchIE,
)
from .mixcloud import (
MixcloudIE,
- MixcloudUserIE,
MixcloudPlaylistIE,
+ MixcloudUserIE,
)
from .mlb import (
MLBIE,
- MLBVideoIE,
MLBTVIE,
MLBArticleIE,
+ MLBVideoIE,
)
from .mlssoccer import MLSSoccerIE
from .mocha import MochaVideoIE
from .mojvideo import MojvideoIE
from .monstercat import MonstercatIE
from .motherless import (
- MotherlessIE,
- MotherlessGroupIE,
MotherlessGalleryIE,
+ MotherlessGroupIE,
+ MotherlessIE,
MotherlessUploaderIE,
)
from .motorsport import MotorsportIE
@@ -1129,23 +1171,26 @@ from .moviezine import MoviezineIE
from .movingimage import MovingImageIE
from .msn import MSNIE
from .mtv import (
- MTVIE,
- MTVVideoIE,
- MTVServicesEmbeddedIE,
MTVDEIE,
- MTVJapanIE,
+ MTVIE,
MTVItaliaIE,
MTVItaliaProgrammaIE,
+ MTVJapanIE,
+ MTVServicesEmbeddedIE,
+ MTVVideoIE,
)
from .muenchentv import MuenchenTVIE
-from .murrtube import MurrtubeIE, MurrtubeUserIE
+from .murrtube import (
+ MurrtubeIE,
+ MurrtubeUserIE,
+)
from .museai import MuseAIIE
from .musescore import MuseScoreIE
from .musicdex import (
- MusicdexSongIE,
MusicdexAlbumIE,
MusicdexArtistIE,
MusicdexPlaylistIE,
+ MusicdexSongIE,
)
from .mx3 import (
Mx3IE,
@@ -1156,7 +1201,10 @@ from .mxplayer import (
MxplayerIE,
MxplayerShowIE,
)
-from .myspace import MySpaceIE, MySpaceAlbumIE
+from .myspace import (
+ MySpaceAlbumIE,
+ MySpaceIE,
+)
from .myspass import MySpassIE
from .myvideoge import MyVideoGeIE
from .myvidster import MyVidsterIE
@@ -1170,8 +1218,8 @@ from .nate import (
NateProgramIE,
)
from .nationalgeographic import (
- NationalGeographicVideoIE,
NationalGeographicTVIE,
+ NationalGeographicVideoIE,
)
from .naver import (
NaverIE,
@@ -1179,12 +1227,12 @@ from .naver import (
NaverNowIE,
)
from .nba import (
- NBAWatchEmbedIE,
- NBAWatchIE,
- NBAWatchCollectionIE,
- NBAEmbedIE,
NBAIE,
NBAChannelIE,
+ NBAEmbedIE,
+ NBAWatchCollectionIE,
+ NBAWatchEmbedIE,
+ NBAWatchIE,
)
from .nbc import (
NBCIE,
@@ -1198,35 +1246,35 @@ from .nbc import (
)
from .ndr import (
NDRIE,
- NJoyIE,
NDREmbedBaseIE,
NDREmbedIE,
NJoyEmbedIE,
+ NJoyIE,
)
from .ndtv import NDTVIE
from .nebula import (
- NebulaIE,
+ NebulaChannelIE,
NebulaClassIE,
+ NebulaIE,
NebulaSubscriptionsIE,
- NebulaChannelIE,
)
from .nekohacker import NekoHackerIE
from .nerdcubed import NerdCubedFeedIE
-from .netzkino import NetzkinoIE
from .neteasemusic import (
- NetEaseMusicIE,
NetEaseMusicAlbumIE,
- NetEaseMusicSingerIE,
+ NetEaseMusicDjRadioIE,
+ NetEaseMusicIE,
NetEaseMusicListIE,
NetEaseMusicMvIE,
NetEaseMusicProgramIE,
- NetEaseMusicDjRadioIE,
+ NetEaseMusicSingerIE,
)
from .netverse import (
NetverseIE,
NetversePlaylistIE,
NetverseSearchIE,
)
+from .netzkino import NetzkinoIE
from .newgrounds import (
NewgroundsIE,
NewgroundsPlaylistIE,
@@ -1235,14 +1283,14 @@ from .newgrounds import (
from .newspicks import NewsPicksIE
from .newsy import NewsyIE
from .nextmedia import (
- NextMediaIE,
- NextMediaActionNewsIE,
AppleDailyIE,
+ NextMediaActionNewsIE,
+ NextMediaIE,
NextTVIE,
)
from .nexx import (
- NexxIE,
NexxEmbedIE,
+ NexxIE,
)
from .nfb import (
NFBIE,
@@ -1256,43 +1304,43 @@ from .nfl import (
NFLPlusReplayIE,
)
from .nhk import (
- NhkVodIE,
- NhkVodProgramIE,
NhkForSchoolBangumiIE,
- NhkForSchoolSubjectIE,
NhkForSchoolProgramListIE,
+ NhkForSchoolSubjectIE,
NhkRadioNewsPageIE,
NhkRadiruIE,
NhkRadiruLiveIE,
+ NhkVodIE,
+ NhkVodProgramIE,
)
from .nhl import NHLIE
from .nick import (
- NickIE,
NickBrIE,
NickDeIE,
+ NickIE,
NickRuIE,
)
from .niconico import (
+ NiconicoHistoryIE,
NiconicoIE,
+ NiconicoLiveIE,
NiconicoPlaylistIE,
- NiconicoUserIE,
NiconicoSeriesIE,
- NiconicoHistoryIE,
+ NiconicoUserIE,
NicovideoSearchDateIE,
NicovideoSearchIE,
NicovideoSearchURLIE,
NicovideoTagURLIE,
- NiconicoLiveIE,
+)
+from .niconicochannelplus import (
+ NiconicoChannelPlusChannelLivesIE,
+ NiconicoChannelPlusChannelVideosIE,
+ NiconicoChannelPlusIE,
)
from .ninaprotocol import NinaProtocolIE
from .ninecninemedia import (
- NineCNineMediaIE,
CPTwentyFourIE,
-)
-from .niconicochannelplus import (
- NiconicoChannelPlusIE,
- NiconicoChannelPlusChannelVideosIE,
- NiconicoChannelPlusChannelLivesIE,
+ NineCNineMediaIE,
)
from .ninegag import NineGagIE
from .ninenews import NineNewsIE
@@ -1317,24 +1365,24 @@ from .nowness import (
)
from .noz import NozIE
from .npo import (
- AndereTijdenIE,
NPOIE,
+ VPROIE,
+ WNLIE,
+ AndereTijdenIE,
+ HetKlokhuisIE,
NPOLiveIE,
- NPORadioIE,
NPORadioFragmentIE,
+ NPORadioIE,
SchoolTVIE,
- HetKlokhuisIE,
- VPROIE,
- WNLIE,
)
from .npr import NprIE
from .nrk import (
NRKIE,
+ NRKTVIE,
NRKPlaylistIE,
+ NRKRadioPodkastIE,
NRKSkoleIE,
- NRKTVIE,
NRKTVDirekteIE,
- NRKRadioPodkastIE,
NRKTVEpisodeIE,
NRKTVEpisodesIE,
NRKTVSeasonIE,
@@ -1346,18 +1394,18 @@ from .ntvcojp import NTVCoJpCUIE
from .ntvde import NTVDeIE
from .ntvru import NTVRuIE
from .nubilesporn import NubilesPornIE
-from .nytimes import (
- NYTimesIE,
- NYTimesArticleIE,
- NYTimesCookingIE,
- NYTimesCookingRecipeIE,
-)
from .nuum import (
NuumLiveIE,
- NuumTabIE,
NuumMediaIE,
+ NuumTabIE,
)
from .nuvid import NuvidIE
+from .nytimes import (
+ NYTimesArticleIE,
+ NYTimesCookingIE,
+ NYTimesCookingRecipeIE,
+ NYTimesIE,
+)
from .nzherald import NZHeraldIE
from .nzonscreen import NZOnScreenIE
from .nzz import NZZIE
@@ -1365,7 +1413,7 @@ from .odkmedia import OnDemandChinaEpisodeIE
from .odnoklassniki import OdnoklassnikiIE
from .oftv import (
OfTVIE,
- OfTVPlaylistIE
+ OfTVPlaylistIE,
)
from .oktoberfesttv import OktoberfestTVIE
from .olympics import OlympicsReplayIE
@@ -1378,8 +1426,8 @@ from .onefootball import OneFootballIE
from .onenewsnz import OneNewsNZIE
from .oneplace import OnePlacePodcastIE
from .onet import (
- OnetIE,
OnetChannelIE,
+ OnetIE,
OnetMVPIE,
OnetPlIE,
)
@@ -1389,33 +1437,33 @@ from .opencast import (
OpencastPlaylistIE,
)
from .openrec import (
- OpenRecIE,
OpenRecCaptureIE,
+ OpenRecIE,
OpenRecMovieIE,
)
from .ora import OraTVIE
from .orf import (
- ORFFM4StoryIE,
+ ORFIPTVIE,
ORFONIE,
- ORFRadioIE,
+ ORFFM4StoryIE,
ORFPodcastIE,
- ORFIPTVIE,
+ ORFRadioIE,
)
from .outsidetv import OutsideTVIE
from .owncloud import OwnCloudIE
from .packtpub import (
- PacktPubIE,
PacktPubCourseIE,
+ PacktPubIE,
)
from .palcomp3 import (
- PalcoMP3IE,
PalcoMP3ArtistIE,
+ PalcoMP3IE,
PalcoMP3VideoIE,
)
from .panopto import (
PanoptoIE,
PanoptoListIE,
- PanoptoPlaylistIE
+ PanoptoPlaylistIE,
)
from .paramountplus import (
ParamountPlusIE,
@@ -1424,12 +1472,18 @@ from .paramountplus import (
from .parler import ParlerIE
from .parlview import ParlviewIE
from .patreon import (
+ PatreonCampaignIE,
PatreonIE,
- PatreonCampaignIE
)
-from .pbs import PBSIE, PBSKidsIE
+from .pbs import (
+ PBSIE,
+ PBSKidsIE,
+)
from .pearvideo import PearVideoIE
-from .peekvids import PeekVidsIE, PlayVidsIE
+from .peekvids import (
+ PeekVidsIE,
+ PlayVidsIE,
+)
from .peertube import (
PeerTubeIE,
PeerTubePlaylistIE,
@@ -1437,7 +1491,7 @@ from .peertube import (
from .peertv import PeerTVIE
from .peloton import (
PelotonIE,
- PelotonLiveIE
+ PelotonLiveIE,
)
from .performgroup import PerformGroupIE
from .periscope import (
@@ -1457,8 +1511,8 @@ from .picarto import (
from .piksel import PikselIE
from .pinkbike import PinkbikeIE
from .pinterest import (
- PinterestIE,
PinterestCollectionIE,
+ PinterestIE,
)
from .pixivsketch import (
PixivSketchIE,
@@ -1467,19 +1521,22 @@ from .pixivsketch import (
from .pladform import PladformIE
from .planetmarathi import PlanetMarathiIE
from .platzi import (
- PlatziIE,
PlatziCourseIE,
+ PlatziIE,
)
from .playplustv import PlayPlusTVIE
from .playsuisse import PlaySuisseIE
from .playtvak import PlaytvakIE
from .playwire import PlaywireIE
-from .plutotv import PlutoTVIE
from .pluralsight import (
- PluralsightIE,
PluralsightCourseIE,
+ PluralsightIE,
+)
+from .plutotv import PlutoTVIE
+from .podbayfm import (
+ PodbayFMChannelIE,
+ PodbayFMIE,
)
-from .podbayfm import PodbayFMIE, PodbayFMChannelIE
from .podchaser import PodchaserIE
from .podomatic import PodomaticIE
from .pokemon import (
@@ -1487,15 +1544,15 @@ from .pokemon import (
PokemonWatchIE,
)
from .pokergo import (
- PokerGoIE,
PokerGoCollectionIE,
+ PokerGoIE,
)
from .polsatgo import PolsatGoIE
from .polskieradio import (
- PolskieRadioIE,
- PolskieRadioLegacyIE,
PolskieRadioAuditionIE,
PolskieRadioCategoryIE,
+ PolskieRadioIE,
+ PolskieRadioLegacyIE,
PolskieRadioPlayerIE,
PolskieRadioPodcastIE,
PolskieRadioPodcastListIE,
@@ -1506,57 +1563,62 @@ from .pornbox import PornboxIE
from .pornflip import PornFlipIE
from .pornhub import (
PornHubIE,
- PornHubUserIE,
- PornHubPlaylistIE,
PornHubPagedVideoListIE,
+ PornHubPlaylistIE,
+ PornHubUserIE,
PornHubUserVideosUploadIE,
)
from .pornotube import PornotubeIE
from .pornovoisines import PornoVoisinesIE
from .pornoxo import PornoXOIE
-from .puhutv import (
- PuhuTVIE,
- PuhuTVSerieIE,
-)
from .pr0gramm import Pr0grammIE
-from .prankcast import PrankCastIE, PrankCastPostIE
+from .prankcast import (
+ PrankCastIE,
+ PrankCastPostIE,
+)
from .premiershiprugby import PremiershipRugbyIE
from .presstv import PressTVIE
from .projectveritas import ProjectVeritasIE
from .prosiebensat1 import ProSiebenSat1IE
from .prx import (
- PRXStoryIE,
- PRXSeriesIE,
PRXAccountIE,
+ PRXSeriesIE,
+ PRXSeriesSearchIE,
PRXStoriesSearchIE,
- PRXSeriesSearchIE
+ PRXStoryIE,
+)
+from .puhutv import (
+ PuhuTVIE,
+ PuhuTVSerieIE,
)
from .puls4 import Puls4IE
from .pyvideo import PyvideoIE
from .qdance import QDanceIE
from .qingting import QingTingIE
from .qqmusic import (
+ QQMusicAlbumIE,
QQMusicIE,
+ QQMusicPlaylistIE,
QQMusicSingerIE,
- QQMusicAlbumIE,
QQMusicToplistIE,
- QQMusicPlaylistIE,
)
from .r7 import (
R7IE,
R7ArticleIE,
)
-from .radiko import RadikoIE, RadikoRadioIE
+from .radiko import (
+ RadikoIE,
+ RadikoRadioIE,
+)
from .radiocanada import (
- RadioCanadaIE,
RadioCanadaAudioVideoIE,
+ RadioCanadaIE,
)
from .radiocomercial import (
RadioComercialIE,
RadioComercialPlaylistIE,
)
from .radiode import RadioDeIE
-from .radiojavan import RadioJavanIE
from .radiofrance import (
FranceCultureIE,
RadioFranceIE,
@@ -1565,35 +1627,36 @@ from .radiofrance import (
RadioFranceProfileIE,
RadioFranceProgramScheduleIE,
)
-from .radiozet import RadioZetPodcastIE
+from .radiojavan import RadioJavanIE
from .radiokapital import (
RadioKapitalIE,
RadioKapitalShowIE,
)
+from .radiozet import RadioZetPodcastIE
from .radlive import (
- RadLiveIE,
RadLiveChannelIE,
+ RadLiveIE,
RadLiveSeasonIE,
)
from .rai import (
- RaiIE,
RaiCulturaIE,
+ RaiIE,
+ RaiNewsIE,
RaiPlayIE,
RaiPlayLiveIE,
RaiPlayPlaylistIE,
RaiPlaySoundIE,
RaiPlaySoundLiveIE,
RaiPlaySoundPlaylistIE,
- RaiNewsIE,
RaiSudtirolIE,
)
from .raywenderlich import (
- RayWenderlichIE,
RayWenderlichCourseIE,
+ RayWenderlichIE,
)
from .rbgtum import (
- RbgTumIE,
RbgTumCourseIE,
+ RbgTumIE,
RbgTumNewCourseIE,
)
from .rcs import (
@@ -1607,12 +1670,15 @@ from .rcti import (
RCTIPlusTVIE,
)
from .rds import RDSIE
-from .redbee import ParliamentLiveUKIE, RTBFIE
+from .redbee import (
+ RTBFIE,
+ ParliamentLiveUKIE,
+)
from .redbulltv import (
- RedBullTVIE,
RedBullEmbedIE,
- RedBullTVRrnContentIE,
RedBullIE,
+ RedBullTVIE,
+ RedBullTVRrnContentIE,
)
from .reddit import RedditIE
from .redge import RedCDNLivxIE
@@ -1632,107 +1698,100 @@ from .reverbnation import ReverbNationIE
from .rheinmaintv import RheinMainTVIE
from .ridehome import RideHomeIE
from .rinsefm import (
- RinseFMIE,
RinseFMArtistPlaylistIE,
+ RinseFMIE,
)
from .rmcdecouverte import RMCDecouverteIE
from .rockstargames import RockstarGamesIE
from .rokfin import (
- RokfinIE,
- RokfinStackIE,
RokfinChannelIE,
+ RokfinIE,
RokfinSearchIE,
+ RokfinStackIE,
+)
+from .roosterteeth import (
+ RoosterTeethIE,
+ RoosterTeethSeriesIE,
)
-from .roosterteeth import RoosterTeethIE, RoosterTeethSeriesIE
from .rottentomatoes import RottenTomatoesIE
from .rozhlas import (
+ MujRozhlasIE,
RozhlasIE,
RozhlasVltavaIE,
- MujRozhlasIE,
)
-from .rte import RteIE, RteRadioIE
+from .rte import (
+ RteIE,
+ RteRadioIE,
+)
+from .rtl2 import RTL2IE
from .rtlnl import (
- RtlNlIE,
- RTLLuTeleVODIE,
RTLLuArticleIE,
RTLLuLiveIE,
RTLLuRadioIE,
+ RTLLuTeleVODIE,
+ RtlNlIE,
)
-from .rtl2 import RTL2IE
from .rtnews import (
- RTNewsIE,
RTDocumentryIE,
RTDocumentryPlaylistIE,
+ RTNewsIE,
RuptlyIE,
)
from .rtp import RTPIE
from .rtrfm import RTRFMIE
from .rts import RTSIE
from .rtvcplay import (
- RTVCPlayIE,
- RTVCPlayEmbedIE,
RTVCKalturaIE,
+ RTVCPlayEmbedIE,
+ RTVCPlayIE,
)
from .rtve import (
RTVEALaCartaIE,
RTVEAudioIE,
- RTVELiveIE,
RTVEInfantilIE,
+ RTVELiveIE,
RTVETelevisionIE,
)
from .rtvs import RTVSIE
from .rtvslo import RTVSLOIE
+from .rudovideo import RudoVideoIE
from .rule34video import Rule34VideoIE
from .rumble import (
+ RumbleChannelIE,
RumbleEmbedIE,
RumbleIE,
- RumbleChannelIE,
)
-from .rudovideo import RudoVideoIE
from .rutube import (
- RutubeIE,
RutubeChannelIE,
RutubeEmbedIE,
+ RutubeIE,
RutubeMovieIE,
RutubePersonIE,
RutubePlaylistIE,
RutubeTagsIE,
)
-from .glomex import (
- GlomexIE,
- GlomexEmbedIE,
-)
-from .megatvcom import (
- MegaTVComIE,
- MegaTVComEmbedIE,
-)
-from .antenna import (
- AntennaGrWatchIE,
- Ant1NewsGrArticleIE,
- Ant1NewsGrEmbedIE,
-)
from .rutv import RUTVIE
from .ruutu import RuutuIE
from .ruv import (
RuvIE,
- RuvSpilaIE
+ RuvSpilaIE,
)
from .s4c import (
S4CIE,
- S4CSeriesIE
+ S4CSeriesIE,
)
from .safari import (
- SafariIE,
SafariApiIE,
SafariCourseIE,
+ SafariIE,
)
from .saitosan import SaitosanIE
from .samplefocus import SampleFocusIE
from .sapo import SapoIE
from .sbs import SBSIE
from .sbscokr import (
- SBSCoKrIE,
SBSCoKrAllvodProgramIE,
+ SBSCoKrIE,
SBSCoKrProgramsVodIE,
)
from .screen9 import Screen9IE
@@ -1740,24 +1799,27 @@ from .screencast import ScreencastIE
from .screencastify import ScreencastifyIE
from .screencastomatic import ScreencastOMaticIE
from .scrippsnetworks import (
- ScrippsNetworksWatchIE,
ScrippsNetworksIE,
+ ScrippsNetworksWatchIE,
)
+from .scrolller import ScrolllerIE
from .scte import (
SCTEIE,
SCTECourseIE,
)
-from .scrolller import ScrolllerIE
from .sejmpl import SejmIE
from .senalcolombia import SenalColombiaLiveIE
-from .senategov import SenateISVPIE, SenateGovIE
+from .senategov import (
+ SenateGovIE,
+ SenateISVPIE,
+)
from .sendtonews import SendtoNewsIE
from .servus import ServusIE
from .sevenplus import SevenPlusIE
from .sexu import SexuIE
from .seznamzpravy import (
- SeznamZpravyIE,
SeznamZpravyArticleIE,
+ SeznamZpravyIE,
)
from .shahid import (
ShahidIE,
@@ -1765,38 +1827,38 @@ from .shahid import (
)
from .sharepoint import SharePointIE
from .sharevideos import ShareVideosEmbedIE
-from .sibnet import SibnetEmbedIE
from .shemaroome import ShemarooMeIE
from .showroomlive import ShowRoomLiveIE
+from .sibnet import SibnetEmbedIE
from .simplecast import (
- SimplecastIE,
SimplecastEpisodeIE,
+ SimplecastIE,
SimplecastPodcastIE,
)
from .sina import SinaIE
from .sixplay import SixPlayIE
from .skeb import SkebIE
+from .sky import (
+ SkyNewsIE,
+ SkyNewsStoryIE,
+ SkySportsIE,
+ SkySportsNewsIE,
+)
from .skyit import (
+ CieloTVItIE,
+ SkyItArteIE,
+ SkyItIE,
SkyItPlayerIE,
SkyItVideoIE,
SkyItVideoLiveIE,
- SkyItIE,
- SkyItArteIE,
- CieloTVItIE,
TV8ItIE,
)
from .skylinewebcams import SkylineWebcamsIE
from .skynewsarabia import (
- SkyNewsArabiaIE,
SkyNewsArabiaArticleIE,
+ SkyNewsArabiaIE,
)
from .skynewsau import SkyNewsAUIE
-from .sky import (
- SkyNewsIE,
- SkyNewsStoryIE,
- SkySportsIE,
- SkySportsNewsIE,
-)
from .slideshare import SlideshareIE
from .slideslive import SlidesLiveIE
from .slutload import SlutloadIE
@@ -1813,29 +1875,29 @@ from .sonyliv import (
from .soundcloud import (
SoundcloudEmbedIE,
SoundcloudIE,
- SoundcloudSetIE,
+ SoundcloudPlaylistIE,
SoundcloudRelatedIE,
+ SoundcloudSearchIE,
+ SoundcloudSetIE,
+ SoundcloudTrackStationIE,
SoundcloudUserIE,
SoundcloudUserPermalinkIE,
- SoundcloudTrackStationIE,
- SoundcloudPlaylistIE,
- SoundcloudSearchIE,
)
from .soundgasm import (
SoundgasmIE,
- SoundgasmProfileIE
+ SoundgasmProfileIE,
)
from .southpark import (
- SouthParkIE,
SouthParkDeIE,
SouthParkDkIE,
SouthParkEsIE,
+ SouthParkIE,
SouthParkLatIE,
- SouthParkNlIE
+ SouthParkNlIE,
)
from .sovietscloset import (
SovietsClosetIE,
- SovietsClosetPlaylistIE
+ SovietsClosetPlaylistIE,
)
from .spankbang import (
SpankBangIE,
@@ -1846,12 +1908,6 @@ from .spike import (
BellatorIE,
ParamountNetworkIE,
)
-from .stageplus import StagePlusVODConcertIE
-from .startrek import StarTrekIE
-from .stitcher import (
- StitcherIE,
- StitcherShowIE,
-)
from .sport5 import Sport5IE
from .sportbox import SportBoxIE
from .sportdeutschland import SportDeutschlandIE
@@ -1875,19 +1931,25 @@ from .srmediathek import SRMediathekIE
from .stacommu import (
StacommuLiveIE,
StacommuVODIE,
- TheaterComplexTownVODIE,
TheaterComplexTownPPVIE,
+ TheaterComplexTownVODIE,
)
+from .stageplus import StagePlusVODConcertIE
from .stanfordoc import StanfordOpenClassroomIE
+from .startrek import StarTrekIE
from .startv import StarTVIE
from .steam import (
- SteamIE,
SteamCommunityBroadcastIE,
+ SteamIE,
+)
+from .stitcher import (
+ StitcherIE,
+ StitcherShowIE,
)
from .storyfire import (
StoryFireIE,
- StoryFireUserIE,
StoryFireSeriesIE,
+ StoryFireUserIE,
)
from .streamable import StreamableIE
from .streamcz import StreamCZIE
@@ -1908,26 +1970,26 @@ from .svt import (
SVTSeriesIE,
)
from .swearnet import SwearnetEpisodeIE
-from .syvdk import SYVDKIE
from .syfy import SyfyIE
+from .syvdk import SYVDKIE
from .sztvhu import SztvHuIE
from .tagesschau import TagesschauIE
from .taptap import (
- TapTapMomentIE,
TapTapAppIE,
TapTapAppIntlIE,
+ TapTapMomentIE,
TapTapPostIntlIE,
)
from .tass import TassIE
from .tbs import TBSIE
from .tbsjp import (
TBSJPEpisodeIE,
- TBSJPProgramIE,
TBSJPPlaylistIE,
+ TBSJPProgramIE,
)
from .teachable import (
- TeachableIE,
TeachableCourseIE,
+ TeachableIE,
)
from .teachertube import (
TeacherTubeIE,
@@ -1935,8 +1997,8 @@ from .teachertube import (
)
from .teachingchannel import TeachingChannelIE
from .teamcoco import (
- TeamcocoIE,
ConanClassicIE,
+ TeamcocoIE,
)
from .teamtreehouse import TeamTreeHouseIE
from .ted import (
@@ -1955,15 +2017,18 @@ from .telegram import TelegramEmbedIE
from .telemb import TeleMBIE
from .telemundo import TelemundoIE
from .telequebec import (
- TeleQuebecIE,
- TeleQuebecSquatIE,
TeleQuebecEmissionIE,
+ TeleQuebecIE,
TeleQuebecLiveIE,
+ TeleQuebecSquatIE,
TeleQuebecVideoIE,
)
from .teletask import TeleTaskIE
from .telewebion import TelewebionIE
-from .tempo import TempoIE, IVXPlayerIE
+from .tempo import (
+ IVXPlayerIE,
+ TempoIE,
+)
from .tencent import (
IflixEpisodeIE,
IflixSeriesIE,
@@ -1987,8 +2052,8 @@ from .theguardian import (
from .theholetv import TheHoleTvIE
from .theintercept import TheInterceptIE
from .theplatform import (
- ThePlatformIE,
ThePlatformFeedIE,
+ ThePlatformIE,
)
from .thestar import TheStarIE
from .thesun import TheSunIE
@@ -2000,50 +2065,51 @@ from .thisvid import (
ThisVidMemberIE,
ThisVidPlaylistIE,
)
+from .threeqsdn import ThreeQSDNIE
from .threespeak import (
ThreeSpeakIE,
ThreeSpeakUserIE,
)
-from .threeqsdn import ThreeQSDNIE
from .tiktok import (
+ DouyinIE,
+ TikTokEffectIE,
TikTokIE,
- TikTokUserIE,
+ TikTokLiveIE,
TikTokSoundIE,
- TikTokEffectIE,
TikTokTagIE,
+ TikTokUserIE,
TikTokVMIE,
- TikTokLiveIE,
- DouyinIE,
)
from .tmz import TMZIE
from .tnaflix import (
- TNAFlixNetworkEmbedIE,
- TNAFlixIE,
EMPFlixIE,
MovieFapIE,
+ TNAFlixIE,
+ TNAFlixNetworkEmbedIE,
)
from .toggle import (
- ToggleIE,
MeWatchIE,
+ ToggleIE,
)
-from .toggo import (
- ToggoIE,
-)
+from .toggo import ToggoIE
from .tonline import TOnlineIE
from .toongoggles import ToonGogglesIE
from .toutv import TouTvIE
-from .toypics import ToypicsUserIE, ToypicsIE
+from .toypics import (
+ ToypicsIE,
+ ToypicsUserIE,
+)
from .traileraddict import TrailerAddictIE
from .triller import (
TrillerIE,
- TrillerUserIE,
TrillerShortIE,
+ TrillerUserIE,
)
from .trovo import (
+ TrovoChannelClipIE,
+ TrovoChannelVodIE,
TrovoIE,
TrovoVodIE,
- TrovoChannelVodIE,
- TrovoChannelClipIE,
)
from .trtcocuk import TrtCocukVideoIE
from .trtworld import TrtWorldIE
@@ -2052,26 +2118,26 @@ from .trunews import TruNewsIE
from .truth import TruthIE
from .trutv import TruTVIE
from .tube8 import Tube8IE
-from .tubetugraz import TubeTuGrazIE, TubeTuGrazSeriesIE
+from .tubetugraz import (
+ TubeTuGrazIE,
+ TubeTuGrazSeriesIE,
+)
from .tubitv import (
TubiTvIE,
TubiTvShowIE,
)
from .tumblr import TumblrIE
from .tunein import (
- TuneInStationIE,
- TuneInPodcastIE,
TuneInPodcastEpisodeIE,
+ TuneInPodcastIE,
TuneInShortenerIE,
+ TuneInStationIE,
)
from .tv2 import (
TV2IE,
- TV2ArticleIE,
KatsomoIE,
MTVUutisetArticleIE,
-)
-from .tv24ua import (
- TV24UAVideoIE,
+ TV2ArticleIE,
)
from .tv2dk import (
TV2DKIE,
@@ -2084,16 +2150,17 @@ from .tv2hu import (
from .tv4 import TV4IE
from .tv5mondeplus import TV5MondePlusIE
from .tv5unis import (
- TV5UnisVideoIE,
TV5UnisIE,
+ TV5UnisVideoIE,
)
+from .tv24ua import TV24UAVideoIE
from .tva import (
TVAIE,
QubIE,
)
from .tvanouvelles import (
- TVANouvellesIE,
TVANouvellesArticleIE,
+ TVANouvellesIE,
)
from .tvc import (
TVCIE,
@@ -2106,19 +2173,19 @@ from .tvland import TVLandIE
from .tvn24 import TVN24IE
from .tvnoe import TVNoeIE
from .tvopengr import (
- TVOpenGrWatchIE,
TVOpenGrEmbedIE,
+ TVOpenGrWatchIE,
)
from .tvp import (
- TVPEmbedIE,
TVPIE,
+ TVPEmbedIE,
TVPStreamIE,
TVPVODSeriesIE,
TVPVODVideoIE,
)
from .tvplay import (
- TVPlayIE,
TVPlayHomeIE,
+ TVPlayIE,
)
from .tvplayer import TVPlayerIE
from .tweakers import TweakersIE
@@ -2130,29 +2197,29 @@ from .twitcasting import (
TwitCastingUserIE,
)
from .twitch import (
- TwitchVodIE,
+ TwitchClipsIE,
TwitchCollectionIE,
- TwitchVideosIE,
+ TwitchStreamIE,
TwitchVideosClipsIE,
TwitchVideosCollectionsIE,
- TwitchStreamIE,
- TwitchClipsIE,
+ TwitchVideosIE,
+ TwitchVodIE,
)
from .twitter import (
- TwitterCardIE,
- TwitterIE,
TwitterAmplifyIE,
TwitterBroadcastIE,
- TwitterSpacesIE,
+ TwitterCardIE,
+ TwitterIE,
TwitterShortenerIE,
+ TwitterSpacesIE,
)
from .txxx import (
- TxxxIE,
PornTopIE,
+ TxxxIE,
)
from .udemy import (
+ UdemyCourseIE,
UdemyIE,
- UdemyCourseIE
)
from .udn import UDNEmbedIE
from .ufctv import (
@@ -2161,16 +2228,13 @@ from .ufctv import (
)
from .ukcolumn import UkColumnIE
from .uktvplay import UKTVPlayIE
-from .digiteka import DigitekaIE
-from .dlive import (
- DLiveVODIE,
- DLiveStreamIE,
-)
-from .drooble import DroobleIE
from .umg import UMGDeIE
from .unistra import UnistraIE
from .unity import UnityIE
-from .unsupported import KnownDRMIE, KnownPiracyIE
+from .unsupported import (
+ KnownDRMIE,
+ KnownPiracyIE,
+)
from .uol import UOLIE
from .uplynk import (
UplynkIE,
@@ -2180,10 +2244,13 @@ from .urort import UrortIE
from .urplay import URPlayIE
from .usanetwork import USANetworkIE
from .usatoday import USATodayIE
-from .ustream import UstreamIE, UstreamChannelIE
+from .ustream import (
+ UstreamChannelIE,
+ UstreamIE,
+)
from .ustudio import (
- UstudioIE,
UstudioEmbedIE,
+ UstudioIE,
)
from .utreon import UtreonIE
from .varzesh3 import Varzesh3IE
@@ -2191,7 +2258,7 @@ from .vbox7 import Vbox7IE
from .veo import VeoIE
from .veoh import (
VeohIE,
- VeohUserIE
+ VeohUserIE,
)
from .vesti import VestiIE
from .vevo import (
@@ -2199,14 +2266,14 @@ from .vevo import (
VevoPlaylistIE,
)
from .vgtv import (
+ VGTVIE,
BTArticleIE,
BTVestlendingenIE,
- VGTVIE,
)
from .vh1 import VH1IE
from .vice import (
- ViceIE,
ViceArticleIE,
+ ViceIE,
ViceShowIE,
)
from .viddler import ViddlerIE
@@ -2218,42 +2285,46 @@ from .videocampus_sachsen import (
from .videodetective import VideoDetectiveIE
from .videofyme import VideofyMeIE
from .videoken import (
+ VideoKenCategoryIE,
VideoKenIE,
VideoKenPlayerIE,
VideoKenPlaylistIE,
- VideoKenCategoryIE,
VideoKenTopicIE,
)
from .videomore import (
VideomoreIE,
- VideomoreVideoIE,
VideomoreSeasonIE,
+ VideomoreVideoIE,
)
from .videopress import VideoPressIE
from .vidio import (
VidioIE,
+ VidioLiveIE,
VidioPremierIE,
- VidioLiveIE
)
from .vidlii import VidLiiIE
from .vidly import VidlyIE
from .viewlift import (
- ViewLiftIE,
ViewLiftEmbedIE,
+ ViewLiftIE,
)
from .viidea import ViideaIE
+from .viki import (
+ VikiChannelIE,
+ VikiIE,
+)
from .vimeo import (
- VimeoIE,
+ VHXEmbedIE,
VimeoAlbumIE,
VimeoChannelIE,
VimeoGroupsIE,
+ VimeoIE,
VimeoLikesIE,
VimeoOndemandIE,
VimeoProIE,
VimeoReviewIE,
VimeoUserIE,
VimeoWatchLaterIE,
- VHXEmbedIE,
)
from .vimm import (
VimmIE,
@@ -2263,46 +2334,41 @@ from .vine import (
VineIE,
VineUserIE,
)
-from .viki import (
- VikiIE,
- VikiChannelIE,
-)
from .viously import ViouslyIE
from .viqeo import ViqeoIE
from .viu import (
ViuIE,
- ViuPlaylistIE,
ViuOTTIE,
ViuOTTIndonesiaIE,
+ ViuPlaylistIE,
)
from .vk import (
VKIE,
- VKUserVideosIE,
- VKWallPostIE,
VKPlayIE,
VKPlayLiveIE,
+ VKUserVideosIE,
+ VKWallPostIE,
)
from .vocaroo import VocarooIE
from .vodpl import VODPlIE
from .vodplatform import VODPlatformIE
from .voicy import (
- VoicyIE,
VoicyChannelIE,
+ VoicyIE,
)
from .volejtv import VolejTVIE
from .voxmedia import (
- VoxMediaVolumeIE,
VoxMediaIE,
+ VoxMediaVolumeIE,
)
from .vrt import (
VRTIE,
- VrtNUIE,
- KetnetIE,
DagelijkseKostIE,
+ KetnetIE,
Radio1BeIE,
+ VrtNUIE,
)
from .vtm import VTMIE
-from .medialaan import MedialaanIE
from .vuclip import VuClipIE
from .vvvvid import (
VVVVIDIE,
@@ -2310,20 +2376,20 @@ from .vvvvid import (
)
from .walla import WallaIE
from .washingtonpost import (
- WashingtonPostIE,
WashingtonPostArticleIE,
+ WashingtonPostIE,
)
from .wat import WatIE
from .wdr import (
WDRIE,
- WDRPageIE,
WDRElefantIE,
WDRMobileIE,
+ WDRPageIE,
)
from .webcamerapl import WebcameraplIE
from .webcaster import (
- WebcasterIE,
WebcasterFeedIE,
+ WebcasterIE,
)
from .webofstories import (
WebOfStoriesIE,
@@ -2331,42 +2397,42 @@ from .webofstories import (
)
from .weibo import (
WeiboIE,
- WeiboVideoIE,
WeiboUserIE,
+ WeiboVideoIE,
)
from .weiqitv import WeiqiTVIE
from .weverse import (
WeverseIE,
- WeverseMediaIE,
- WeverseMomentIE,
+ WeverseLiveIE,
WeverseLiveTabIE,
+ WeverseMediaIE,
WeverseMediaTabIE,
- WeverseLiveIE,
+ WeverseMomentIE,
)
from .wevidi import WeVidiIE
from .weyyak import WeyyakIE
+from .whowatch import WhoWatchIE
from .whyp import WhypIE
from .wikimedia import WikimediaIE
from .wimbledon import WimbledonIE
from .wimtv import WimTVIE
-from .whowatch import WhoWatchIE
from .wistia import (
+ WistiaChannelIE,
WistiaIE,
WistiaPlaylistIE,
- WistiaChannelIE,
)
from .wordpress import (
- WordpressPlaylistEmbedIE,
WordpressMiniAudioPlayerEmbedIE,
+ WordpressPlaylistEmbedIE,
)
from .worldstarhiphop import WorldStarHipHopIE
from .wppilot import (
- WPPilotIE,
WPPilotChannelsIE,
+ WPPilotIE,
)
from .wrestleuniverse import (
- WrestleUniverseVODIE,
WrestleUniversePPVIE,
+ WrestleUniverseVODIE,
)
from .wsj import (
WSJIE,
@@ -2374,22 +2440,22 @@ from .wsj import (
)
from .wwe import WWEIE
from .wykop import (
- WykopDigIE,
WykopDigCommentIE,
- WykopPostIE,
+ WykopDigIE,
WykopPostCommentIE,
+ WykopPostIE,
)
from .xanimu import XanimuIE
from .xboxclips import XboxClipsIE
from .xhamster import (
- XHamsterIE,
XHamsterEmbedIE,
+ XHamsterIE,
XHamsterUserIE,
)
from .xiaohongshu import XiaoHongShuIE
from .ximalaya import (
+ XimalayaAlbumIE,
XimalayaIE,
- XimalayaAlbumIE
)
from .xinpianchang import XinpianchangIE
from .xminus import XMinusIE
@@ -2397,27 +2463,27 @@ from .xnxx import XNXXIE
from .xstream import XstreamIE
from .xvideos import (
XVideosIE,
- XVideosQuickiesIE
+ XVideosQuickiesIE,
)
from .xxxymovies import XXXYMoviesIE
from .yahoo import (
YahooIE,
- YahooSearchIE,
YahooJapanNewsIE,
+ YahooSearchIE,
)
from .yandexdisk import YandexDiskIE
from .yandexmusic import (
- YandexMusicTrackIE,
YandexMusicAlbumIE,
- YandexMusicPlaylistIE,
- YandexMusicArtistTracksIE,
YandexMusicArtistAlbumsIE,
+ YandexMusicArtistTracksIE,
+ YandexMusicPlaylistIE,
+ YandexMusicTrackIE,
)
from .yandexvideo import (
YandexVideoIE,
YandexVideoPreviewIE,
- ZenYandexIE,
ZenYandexChannelIE,
+ ZenYandexIE,
)
from .yapfiles import YapFilesIE
from .yappy import (
@@ -2431,24 +2497,26 @@ from .youku import (
YoukuShowIE,
)
from .younow import (
- YouNowLiveIE,
YouNowChannelIE,
+ YouNowLiveIE,
YouNowMomentIE,
)
from .youporn import YouPornIE
from .zaiko import (
- ZaikoIE,
ZaikoETicketIE,
+ ZaikoIE,
)
from .zapiks import ZapiksIE
from .zattoo import (
BBVTVIE,
+ EWETVIE,
+ SAKTVIE,
+ VTXTVIE,
BBVTVLiveIE,
BBVTVRecordingsIE,
EinsUndEinsTVIE,
EinsUndEinsTVLiveIE,
EinsUndEinsTVRecordingsIE,
- EWETVIE,
EWETVLiveIE,
EWETVRecordingsIE,
GlattvisionTVIE,
@@ -2466,13 +2534,11 @@ from .zattoo import (
QuantumTVIE,
QuantumTVLiveIE,
QuantumTVRecordingsIE,
+ SAKTVLiveIE,
+ SAKTVRecordingsIE,
SaltTVIE,
SaltTVLiveIE,
SaltTVRecordingsIE,
- SAKTVIE,
- SAKTVLiveIE,
- SAKTVRecordingsIE,
- VTXTVIE,
VTXTVLiveIE,
VTXTVRecordingsIE,
WalyTVIE,
@@ -2483,7 +2549,10 @@ from .zattoo import (
ZattooMoviesIE,
ZattooRecordingsIE,
)
-from .zdf import ZDFIE, ZDFChannelIE
+from .zdf import (
+ ZDFIE,
+ ZDFChannelIE,
+)
from .zee5 import (
Zee5IE,
Zee5SeriesIE,
@@ -2493,16 +2562,16 @@ from .zenporn import ZenPornIE
from .zetland import ZetlandDKArticleIE
from .zhihu import ZhihuIE
from .zingmp3 import (
- ZingMp3IE,
ZingMp3AlbumIE,
ZingMp3ChartHomeIE,
- ZingMp3WeekChartIE,
ZingMp3ChartMusicVideoIE,
- ZingMp3UserIE,
ZingMp3HubIE,
+ ZingMp3IE,
ZingMp3LiveRadioIE,
ZingMp3PodcastEpisodeIE,
ZingMp3PodcastIE,
+ ZingMp3UserIE,
+ ZingMp3WeekChartIE,
)
from .zoom import ZoomIE
from .zype import ZypeIE
diff --git a/yt_dlp/extractor/abc.py b/yt_dlp/extractor/abc.py
index b21742281..2c0d296fd 100644
--- a/yt_dlp/extractor/abc.py
+++ b/yt_dlp/extractor/abc.py
@@ -6,10 +6,10 @@ import time
from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
- dict_get,
ExtractorError,
- js_to_json,
+ dict_get,
int_or_none,
+ js_to_json,
parse_iso8601,
str_or_none,
traverse_obj,
diff --git a/yt_dlp/extractor/abematv.py b/yt_dlp/extractor/abematv.py
index fee7375ea..b8c79b912 100644
--- a/yt_dlp/extractor/abematv.py
+++ b/yt_dlp/extractor/abematv.py
@@ -12,20 +12,21 @@ import urllib.parse
import urllib.request
import urllib.response
import uuid
-from ..utils.networking import clean_proxies
+
from .common import InfoExtractor
from ..aes import aes_ecb_decrypt
from ..utils import (
ExtractorError,
+ OnDemandPagedList,
bytes_to_intlist,
decode_base_n,
int_or_none,
intlist_to_bytes,
- OnDemandPagedList,
time_seconds,
traverse_obj,
update_url_query,
)
+from ..utils.networking import clean_proxies
def add_opener(ydl, handler): # FIXME: Create proper API in .networking
diff --git a/yt_dlp/extractor/acfun.py b/yt_dlp/extractor/acfun.py
index c3b4f432e..07933192f 100644
--- a/yt_dlp/extractor/acfun.py
+++ b/yt_dlp/extractor/acfun.py
@@ -3,10 +3,10 @@ from ..utils import (
float_or_none,
format_field,
int_or_none,
- str_or_none,
- traverse_obj,
parse_codecs,
parse_qs,
+ str_or_none,
+ traverse_obj,
)
diff --git a/yt_dlp/extractor/adn.py b/yt_dlp/extractor/adn.py
index 898d37298..2f3b67dad 100644
--- a/yt_dlp/extractor/adn.py
+++ b/yt_dlp/extractor/adn.py
@@ -10,18 +10,18 @@ from ..aes import aes_cbc_decrypt_bytes, unpad_pkcs7
from ..compat import compat_b64decode
from ..networking.exceptions import HTTPError
from ..utils import (
+ ExtractorError,
ass_subtitles_timecode,
bytes_to_intlist,
bytes_to_long,
- ExtractorError,
float_or_none,
int_or_none,
intlist_to_bytes,
long_to_bytes,
parse_iso8601,
pkcs1pad,
- strip_or_none,
str_or_none,
+ strip_or_none,
try_get,
unified_strdate,
urlencode_postdata,
diff --git a/yt_dlp/extractor/adobetv.py b/yt_dlp/extractor/adobetv.py
index d1525a1af..08e9e5182 100644
--- a/yt_dlp/extractor/adobetv.py
+++ b/yt_dlp/extractor/adobetv.py
@@ -4,11 +4,11 @@ import re
from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
+ ISO639Utils,
+ OnDemandPagedList,
float_or_none,
int_or_none,
- ISO639Utils,
join_nonempty,
- OnDemandPagedList,
parse_duration,
str_or_none,
str_to_int,
diff --git a/yt_dlp/extractor/airtv.py b/yt_dlp/extractor/airtv.py
index 0b73a966e..6cc63cd7f 100644
--- a/yt_dlp/extractor/airtv.py
+++ b/yt_dlp/extractor/airtv.py
@@ -5,7 +5,7 @@ from ..utils import (
int_or_none,
mimetype2ext,
parse_iso8601,
- traverse_obj
+ traverse_obj,
)
diff --git a/yt_dlp/extractor/allstar.py b/yt_dlp/extractor/allstar.py
index 87219f2f8..49df4bf3a 100644
--- a/yt_dlp/extractor/allstar.py
+++ b/yt_dlp/extractor/allstar.py
@@ -12,7 +12,6 @@ from ..utils import (
)
from ..utils.traversal import traverse_obj
-
_FIELDS = '''
_id
clipImageSource
diff --git a/yt_dlp/extractor/alphaporno.py b/yt_dlp/extractor/alphaporno.py
index 8d5b472d3..f927965de 100644
--- a/yt_dlp/extractor/alphaporno.py
+++ b/yt_dlp/extractor/alphaporno.py
@@ -1,9 +1,9 @@
from .common import InfoExtractor
from ..utils import (
- parse_iso8601,
+ int_or_none,
parse_duration,
parse_filesize,
- int_or_none,
+ parse_iso8601,
)
diff --git a/yt_dlp/extractor/alura.py b/yt_dlp/extractor/alura.py
index b785c62c3..cb2b9891e 100644
--- a/yt_dlp/extractor/alura.py
+++ b/yt_dlp/extractor/alura.py
@@ -1,17 +1,13 @@
import re
from .common import InfoExtractor
-
-from ..compat import (
- compat_urlparse,
-)
-
+from ..compat import compat_urlparse
from ..utils import (
+ ExtractorError,
+ clean_html,
+ int_or_none,
urlencode_postdata,
urljoin,
- int_or_none,
- clean_html,
- ExtractorError
)
diff --git a/yt_dlp/extractor/amara.py b/yt_dlp/extractor/amara.py
index 5018710e0..509b21a53 100644
--- a/yt_dlp/extractor/amara.py
+++ b/yt_dlp/extractor/amara.py
@@ -1,6 +1,6 @@
from .common import InfoExtractor
-from .youtube import YoutubeIE
from .vimeo import VimeoIE
+from .youtube import YoutubeIE
from ..utils import (
int_or_none,
parse_iso8601,
diff --git a/yt_dlp/extractor/amp.py b/yt_dlp/extractor/amp.py
index 0d259c549..6b2bf2db2 100644
--- a/yt_dlp/extractor/amp.py
+++ b/yt_dlp/extractor/amp.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
int_or_none,
mimetype2ext,
parse_iso8601,
diff --git a/yt_dlp/extractor/anchorfm.py b/yt_dlp/extractor/anchorfm.py
index 52f2ad057..5e78f372e 100644
--- a/yt_dlp/extractor/anchorfm.py
+++ b/yt_dlp/extractor/anchorfm.py
@@ -5,7 +5,7 @@ from ..utils import (
int_or_none,
str_or_none,
traverse_obj,
- unified_timestamp
+ unified_timestamp,
)
diff --git a/yt_dlp/extractor/angel.py b/yt_dlp/extractor/angel.py
index 306b3651e..9f5b9b523 100644
--- a/yt_dlp/extractor/angel.py
+++ b/yt_dlp/extractor/angel.py
@@ -1,7 +1,7 @@
import re
from .common import InfoExtractor
-from ..utils import url_or_none, merge_dicts
+from ..utils import merge_dicts, url_or_none
class AngelIE(InfoExtractor):
diff --git a/yt_dlp/extractor/appleconnect.py b/yt_dlp/extractor/appleconnect.py
index d00b0f906..433eb4ed8 100644
--- a/yt_dlp/extractor/appleconnect.py
+++ b/yt_dlp/extractor/appleconnect.py
@@ -1,8 +1,5 @@
from .common import InfoExtractor
-from ..utils import (
- str_to_int,
- ExtractorError
-)
+from ..utils import ExtractorError, str_to_int
class AppleConnectIE(InfoExtractor):
diff --git a/yt_dlp/extractor/appletrailers.py b/yt_dlp/extractor/appletrailers.py
index 2e0b0a8c9..21103aee5 100644
--- a/yt_dlp/extractor/appletrailers.py
+++ b/yt_dlp/extractor/appletrailers.py
@@ -1,5 +1,5 @@
-import re
import json
+import re
from .common import InfoExtractor
from ..compat import compat_urlparse
diff --git a/yt_dlp/extractor/arnes.py b/yt_dlp/extractor/arnes.py
index a493714d1..9a5524aab 100644
--- a/yt_dlp/extractor/arnes.py
+++ b/yt_dlp/extractor/arnes.py
@@ -4,8 +4,8 @@ from ..compat import (
compat_urllib_parse_urlparse,
)
from ..utils import (
- format_field,
float_or_none,
+ format_field,
int_or_none,
parse_iso8601,
remove_start,
diff --git a/yt_dlp/extractor/atvat.py b/yt_dlp/extractor/atvat.py
index d60feba31..20ee34cca 100644
--- a/yt_dlp/extractor/atvat.py
+++ b/yt_dlp/extractor/atvat.py
@@ -2,10 +2,10 @@ import datetime as dt
from .common import InfoExtractor
from ..utils import (
+ ExtractorError,
float_or_none,
jwt_encode_hs256,
try_get,
- ExtractorError,
)
diff --git a/yt_dlp/extractor/awaan.py b/yt_dlp/extractor/awaan.py
index 6fc938de9..a8dfb3efc 100644
--- a/yt_dlp/extractor/awaan.py
+++ b/yt_dlp/extractor/awaan.py
@@ -2,8 +2,8 @@ import base64
from .common import InfoExtractor
from ..compat import (
- compat_urllib_parse_urlencode,
compat_str,
+ compat_urllib_parse_urlencode,
)
from ..utils import (
format_field,
diff --git a/yt_dlp/extractor/banbye.py b/yt_dlp/extractor/banbye.py
index 67af29a96..c4e07a79a 100644
--- a/yt_dlp/extractor/banbye.py
+++ b/yt_dlp/extractor/banbye.py
@@ -2,12 +2,12 @@ import math
from .common import InfoExtractor
from ..compat import (
- compat_urllib_parse_urlparse,
compat_parse_qs,
+ compat_urllib_parse_urlparse,
)
from ..utils import (
- format_field,
InAdvancePagedList,
+ format_field,
traverse_obj,
unified_timestamp,
)
diff --git a/yt_dlp/extractor/bannedvideo.py b/yt_dlp/extractor/bannedvideo.py
index 51e722057..82dc9ab02 100644
--- a/yt_dlp/extractor/bannedvideo.py
+++ b/yt_dlp/extractor/bannedvideo.py
@@ -2,11 +2,11 @@ import json
from .common import InfoExtractor
from ..utils import (
- try_get,
- int_or_none,
- url_or_none,
float_or_none,
+ int_or_none,
+ try_get,
unified_timestamp,
+ url_or_none,
)
diff --git a/yt_dlp/extractor/beeg.py b/yt_dlp/extractor/beeg.py
index 042b3220b..da98ac314 100644
--- a/yt_dlp/extractor/beeg.py
+++ b/yt_dlp/extractor/beeg.py
@@ -1,5 +1,4 @@
from .common import InfoExtractor
-
from ..utils import (
int_or_none,
str_or_none,
diff --git a/yt_dlp/extractor/bleacherreport.py b/yt_dlp/extractor/bleacherreport.py
index e875957cf..aa3d63ee7 100644
--- a/yt_dlp/extractor/bleacherreport.py
+++ b/yt_dlp/extractor/bleacherreport.py
@@ -1,5 +1,5 @@
-from .common import InfoExtractor
from .amp import AMPIE
+from .common import InfoExtractor
from ..utils import (
ExtractorError,
int_or_none,
diff --git a/yt_dlp/extractor/blogger.py b/yt_dlp/extractor/blogger.py
index 3d6e03304..ef0151de6 100644
--- a/yt_dlp/extractor/blogger.py
+++ b/yt_dlp/extractor/blogger.py
@@ -1,3 +1,4 @@
+from .common import InfoExtractor
from ..utils import (
mimetype2ext,
parse_duration,
@@ -5,7 +6,6 @@ from ..utils import (
str_or_none,
traverse_obj,
)
-from .common import InfoExtractor
class BloggerIE(InfoExtractor):
diff --git a/yt_dlp/extractor/bostonglobe.py b/yt_dlp/extractor/bostonglobe.py
index 92f8ea2cb..267586687 100644
--- a/yt_dlp/extractor/bostonglobe.py
+++ b/yt_dlp/extractor/bostonglobe.py
@@ -1,7 +1,6 @@
import re
from .common import InfoExtractor
-
from ..utils import (
extract_attributes,
)
diff --git a/yt_dlp/extractor/boxcast.py b/yt_dlp/extractor/boxcast.py
index 51f9eb787..da06cc3f8 100644
--- a/yt_dlp/extractor/boxcast.py
+++ b/yt_dlp/extractor/boxcast.py
@@ -1,9 +1,5 @@
from .common import InfoExtractor
-from ..utils import (
- js_to_json,
- traverse_obj,
- unified_timestamp
-)
+from ..utils import js_to_json, traverse_obj, unified_timestamp
class BoxCastVideoIE(InfoExtractor):
diff --git a/yt_dlp/extractor/brainpop.py b/yt_dlp/extractor/brainpop.py
index 1200437e6..04b1dd80c 100644
--- a/yt_dlp/extractor/brainpop.py
+++ b/yt_dlp/extractor/brainpop.py
@@ -6,7 +6,7 @@ from ..utils import (
classproperty,
int_or_none,
traverse_obj,
- urljoin
+ urljoin,
)
diff --git a/yt_dlp/extractor/brightcove.py b/yt_dlp/extractor/brightcove.py
index 61b18412d..4190e1a09 100644
--- a/yt_dlp/extractor/brightcove.py
+++ b/yt_dlp/extractor/brightcove.py
@@ -12,10 +12,11 @@ from ..compat import (
)
from ..networking.exceptions import HTTPError
from ..utils import (
+ ExtractorError,
+ UnsupportedError,
clean_html,
dict_get,
extract_attributes,
- ExtractorError,
find_xpath_attr,
fix_xml_ampersands,
float_or_none,
@@ -29,7 +30,6 @@ from ..utils import (
try_get,
unescapeHTML,
unsmuggle_url,
- UnsupportedError,
update_url_query,
url_or_none,
)
diff --git a/yt_dlp/extractor/cbs.py b/yt_dlp/extractor/cbs.py
index cf830210f..aca9782c7 100644
--- a/yt_dlp/extractor/cbs.py
+++ b/yt_dlp/extractor/cbs.py
@@ -5,14 +5,14 @@ from .youtube import YoutubeIE
from ..utils import (
ExtractorError,
extract_attributes,
+ find_xpath_attr,
get_element_html_by_id,
int_or_none,
- find_xpath_attr,
smuggle_url,
- xpath_element,
- xpath_text,
update_url_query,
url_or_none,
+ xpath_element,
+ xpath_text,
)
diff --git a/yt_dlp/extractor/cinetecamilano.py b/yt_dlp/extractor/cinetecamilano.py
index 9cffa11e8..745b71f24 100644
--- a/yt_dlp/extractor/cinetecamilano.py
+++ b/yt_dlp/extractor/cinetecamilano.py
@@ -1,4 +1,5 @@
import json
+
from .common import InfoExtractor
from ..networking.exceptions import HTTPError
from ..utils import (
diff --git a/yt_dlp/extractor/clippit.py b/yt_dlp/extractor/clippit.py
index 006a713b2..67b56e00d 100644
--- a/yt_dlp/extractor/clippit.py
+++ b/yt_dlp/extractor/clippit.py
@@ -1,11 +1,11 @@
+import re
+
from .common import InfoExtractor
from ..utils import (
parse_iso8601,
qualities,
)
-import re
-
class ClippitIE(InfoExtractor):
diff --git a/yt_dlp/extractor/common.py b/yt_dlp/extractor/common.py
index a952828fb..a33cef354 100644
--- a/yt_dlp/extractor/common.py
+++ b/yt_dlp/extractor/common.py
@@ -1,5 +1,6 @@
import base64
import collections
+import functools
import getpass
import hashlib
import http.client
@@ -21,7 +22,6 @@ import urllib.parse
import urllib.request
import xml.etree.ElementTree
-from ..compat import functools # isort: split
from ..compat import (
compat_etree_fromstring,
compat_expanduser,
diff --git a/yt_dlp/extractor/corus.py b/yt_dlp/extractor/corus.py
index bcc34ddd8..0a98c980f 100644
--- a/yt_dlp/extractor/corus.py
+++ b/yt_dlp/extractor/corus.py
@@ -1,7 +1,7 @@
from .theplatform import ThePlatformFeedIE
from ..utils import (
- dict_get,
ExtractorError,
+ dict_get,
float_or_none,
int_or_none,
)
diff --git a/yt_dlp/extractor/crackle.py b/yt_dlp/extractor/crackle.py
index 1ef90b5a0..0cb7d940c 100644
--- a/yt_dlp/extractor/crackle.py
+++ b/yt_dlp/extractor/crackle.py
@@ -6,6 +6,7 @@ import time
from .common import InfoExtractor
from ..networking.exceptions import HTTPError
from ..utils import (
+ ExtractorError,
determine_ext,
float_or_none,
int_or_none,
@@ -13,7 +14,6 @@ from ..utils import (
parse_age_limit,
parse_duration,
url_or_none,
- ExtractorError
)
diff --git a/yt_dlp/extractor/cspan.py b/yt_dlp/extractor/cspan.py
index 0075680e8..e56584e4e 100644
--- a/yt_dlp/extractor/cspan.py
+++ b/yt_dlp/extractor/cspan.py
@@ -1,10 +1,12 @@
import re
from .common import InfoExtractor
+from .senategov import SenateISVPIE
+from .ustream import UstreamIE
from ..compat import compat_HTMLParseError
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
extract_attributes,
find_xpath_attr,
get_element_by_attribute,
@@ -19,8 +21,6 @@ from ..utils import (
str_to_int,
unescapeHTML,
)
-from .senategov import SenateISVPIE
-from .ustream import UstreamIE
class CSpanIE(InfoExtractor):
diff --git a/yt_dlp/extractor/ctsnews.py b/yt_dlp/extractor/ctsnews.py
index cec178f03..1817bd2ff 100644
--- a/yt_dlp/extractor/ctsnews.py
+++ b/yt_dlp/extractor/ctsnews.py
@@ -1,6 +1,6 @@
from .common import InfoExtractor
-from ..utils import unified_timestamp
from .youtube import YoutubeIE
+from ..utils import unified_timestamp
class CtsNewsIE(InfoExtractor):
diff --git a/yt_dlp/extractor/dailymail.py b/yt_dlp/extractor/dailymail.py
index 43401e111..4c25bea11 100644
--- a/yt_dlp/extractor/dailymail.py
+++ b/yt_dlp/extractor/dailymail.py
@@ -1,8 +1,8 @@
from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
- int_or_none,
determine_protocol,
+ int_or_none,
try_get,
unescapeHTML,
)
diff --git a/yt_dlp/extractor/damtomo.py b/yt_dlp/extractor/damtomo.py
index 5e14d6aff..2e0f6f0d3 100644
--- a/yt_dlp/extractor/damtomo.py
+++ b/yt_dlp/extractor/damtomo.py
@@ -1,8 +1,8 @@
import re
from .common import InfoExtractor
-from ..utils import ExtractorError, clean_html, int_or_none, try_get, unified_strdate
from ..compat import compat_str
+from ..utils import ExtractorError, clean_html, int_or_none, try_get, unified_strdate
class DamtomoBaseIE(InfoExtractor):
diff --git a/yt_dlp/extractor/democracynow.py b/yt_dlp/extractor/democracynow.py
index 1624d085c..177424937 100644
--- a/yt_dlp/extractor/democracynow.py
+++ b/yt_dlp/extractor/democracynow.py
@@ -1,11 +1,11 @@
-import re
import os.path
+import re
from .common import InfoExtractor
from ..compat import compat_urlparse
from ..utils import (
- url_basename,
remove_start,
+ url_basename,
)
diff --git a/yt_dlp/extractor/digitalconcerthall.py b/yt_dlp/extractor/digitalconcerthall.py
index c11cd790b..4380c414e 100644
--- a/yt_dlp/extractor/digitalconcerthall.py
+++ b/yt_dlp/extractor/digitalconcerthall.py
@@ -1,5 +1,4 @@
from .common import InfoExtractor
-
from ..utils import (
ExtractorError,
parse_resolution,
diff --git a/yt_dlp/extractor/discoverygo.py b/yt_dlp/extractor/discoverygo.py
index 1f3d8e31c..b2663a63d 100644
--- a/yt_dlp/extractor/discoverygo.py
+++ b/yt_dlp/extractor/discoverygo.py
@@ -2,9 +2,9 @@ import re
from .common import InfoExtractor
from ..utils import (
+ ExtractorError,
determine_ext,
extract_attributes,
- ExtractorError,
int_or_none,
parse_age_limit,
remove_end,
diff --git a/yt_dlp/extractor/disney.py b/yt_dlp/extractor/disney.py
index 430de326f..d8dde0ca7 100644
--- a/yt_dlp/extractor/disney.py
+++ b/yt_dlp/extractor/disney.py
@@ -2,10 +2,10 @@ import re
from .common import InfoExtractor
from ..utils import (
- int_or_none,
- unified_strdate,
determine_ext,
+ int_or_none,
join_nonempty,
+ unified_strdate,
update_url_query,
)
diff --git a/yt_dlp/extractor/douyutv.py b/yt_dlp/extractor/douyutv.py
index ee8893d5a..244ffdf1c 100644
--- a/yt_dlp/extractor/douyutv.py
+++ b/yt_dlp/extractor/douyutv.py
@@ -1,5 +1,5 @@
-import time
import hashlib
+import time
import urllib
import uuid
diff --git a/yt_dlp/extractor/dplay.py b/yt_dlp/extractor/dplay.py
index 1ecc4baf6..ddf2128b0 100644
--- a/yt_dlp/extractor/dplay.py
+++ b/yt_dlp/extractor/dplay.py
@@ -4,8 +4,8 @@ import uuid
from .common import InfoExtractor
from ..networking.exceptions import HTTPError
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
float_or_none,
int_or_none,
remove_start,
diff --git a/yt_dlp/extractor/drtuber.py b/yt_dlp/extractor/drtuber.py
index e5dab6ac0..a9247edc0 100644
--- a/yt_dlp/extractor/drtuber.py
+++ b/yt_dlp/extractor/drtuber.py
@@ -2,8 +2,8 @@ import re
from .common import InfoExtractor
from ..utils import (
- int_or_none,
NO_DEFAULT,
+ int_or_none,
parse_duration,
str_to_int,
)
diff --git a/yt_dlp/extractor/duboku.py b/yt_dlp/extractor/duboku.py
index 626e577e7..adc7705bc 100644
--- a/yt_dlp/extractor/duboku.py
+++ b/yt_dlp/extractor/duboku.py
@@ -5,9 +5,9 @@ import urllib.parse
from .common import InfoExtractor
from ..compat import compat_urlparse
from ..utils import (
+ ExtractorError,
clean_html,
extract_attributes,
- ExtractorError,
get_elements_by_class,
int_or_none,
js_to_json,
diff --git a/yt_dlp/extractor/dvtv.py b/yt_dlp/extractor/dvtv.py
index e67143370..e6660dcd9 100644
--- a/yt_dlp/extractor/dvtv.py
+++ b/yt_dlp/extractor/dvtv.py
@@ -2,15 +2,15 @@ import re
from .common import InfoExtractor
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
int_or_none,
join_nonempty,
js_to_json,
mimetype2ext,
+ parse_iso8601,
try_get,
unescapeHTML,
- parse_iso8601,
)
diff --git a/yt_dlp/extractor/dw.py b/yt_dlp/extractor/dw.py
index f7b852076..feab804af 100644
--- a/yt_dlp/extractor/dw.py
+++ b/yt_dlp/extractor/dw.py
@@ -1,10 +1,10 @@
from .common import InfoExtractor
+from ..compat import compat_urlparse
from ..utils import (
int_or_none,
unified_strdate,
url_or_none,
)
-from ..compat import compat_urlparse
class DWIE(InfoExtractor):
diff --git a/yt_dlp/extractor/ertgr.py b/yt_dlp/extractor/ertgr.py
index 9ecdf5d3b..19c6933e7 100644
--- a/yt_dlp/extractor/ertgr.py
+++ b/yt_dlp/extractor/ertgr.py
@@ -4,15 +4,15 @@ import re
from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
+ ExtractorError,
clean_html,
determine_ext,
- ExtractorError,
dict_get,
int_or_none,
merge_dicts,
- parse_qs,
parse_age_limit,
parse_iso8601,
+ parse_qs,
str_or_none,
try_get,
url_or_none,
diff --git a/yt_dlp/extractor/europa.py b/yt_dlp/extractor/europa.py
index 29dfc8ae9..0cf889a1e 100644
--- a/yt_dlp/extractor/europa.py
+++ b/yt_dlp/extractor/europa.py
@@ -8,7 +8,7 @@ from ..utils import (
qualities,
traverse_obj,
unified_strdate,
- xpath_text
+ xpath_text,
)
diff --git a/yt_dlp/extractor/euscreen.py b/yt_dlp/extractor/euscreen.py
index 65a1dc7c5..66fa42fa1 100644
--- a/yt_dlp/extractor/euscreen.py
+++ b/yt_dlp/extractor/euscreen.py
@@ -1,8 +1,7 @@
from .common import InfoExtractor
-
from ..utils import (
- parse_duration,
js_to_json,
+ parse_duration,
)
diff --git a/yt_dlp/extractor/eyedotv.py b/yt_dlp/extractor/eyedotv.py
index d8b068e9c..4a13ab08d 100644
--- a/yt_dlp/extractor/eyedotv.py
+++ b/yt_dlp/extractor/eyedotv.py
@@ -1,8 +1,8 @@
from .common import InfoExtractor
from ..utils import (
- xpath_text,
- parse_duration,
ExtractorError,
+ parse_duration,
+ xpath_text,
)
diff --git a/yt_dlp/extractor/fancode.py b/yt_dlp/extractor/fancode.py
index cddf25497..1e80f9a37 100644
--- a/yt_dlp/extractor/fancode.py
+++ b/yt_dlp/extractor/fancode.py
@@ -1,12 +1,6 @@
from .common import InfoExtractor
-
from ..compat import compat_str
-from ..utils import (
- parse_iso8601,
- ExtractorError,
- try_get,
- mimetype2ext
-)
+from ..utils import ExtractorError, mimetype2ext, parse_iso8601, try_get
class FancodeVodIE(InfoExtractor):
diff --git a/yt_dlp/extractor/faz.py b/yt_dlp/extractor/faz.py
index bca62add9..796bac3c3 100644
--- a/yt_dlp/extractor/faz.py
+++ b/yt_dlp/extractor/faz.py
@@ -3,9 +3,9 @@ import re
from .common import InfoExtractor
from ..compat import compat_etree_fromstring
from ..utils import (
+ int_or_none,
xpath_element,
xpath_text,
- int_or_none,
)
diff --git a/yt_dlp/extractor/fczenit.py b/yt_dlp/extractor/fczenit.py
index 8175b6b0f..b2dbb92d5 100644
--- a/yt_dlp/extractor/fczenit.py
+++ b/yt_dlp/extractor/fczenit.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..utils import (
- int_or_none,
float_or_none,
+ int_or_none,
)
diff --git a/yt_dlp/extractor/fifa.py b/yt_dlp/extractor/fifa.py
index f604cbd40..ae837f6a0 100644
--- a/yt_dlp/extractor/fifa.py
+++ b/yt_dlp/extractor/fifa.py
@@ -1,5 +1,4 @@
from .common import InfoExtractor
-
from ..utils import (
int_or_none,
traverse_obj,
diff --git a/yt_dlp/extractor/filmon.py b/yt_dlp/extractor/filmon.py
index 0cd18f494..69ca87c84 100644
--- a/yt_dlp/extractor/filmon.py
+++ b/yt_dlp/extractor/filmon.py
@@ -2,10 +2,10 @@ from .common import InfoExtractor
from ..compat import compat_str
from ..networking.exceptions import HTTPError
from ..utils import (
+ ExtractorError,
+ int_or_none,
qualities,
strip_or_none,
- int_or_none,
- ExtractorError,
)
diff --git a/yt_dlp/extractor/gab.py b/yt_dlp/extractor/gab.py
index f9d22fd33..c10d290dc 100644
--- a/yt_dlp/extractor/gab.py
+++ b/yt_dlp/extractor/gab.py
@@ -7,7 +7,7 @@ from ..utils import (
parse_codecs,
parse_duration,
str_to_int,
- unified_timestamp
+ unified_timestamp,
)
diff --git a/yt_dlp/extractor/gamejolt.py b/yt_dlp/extractor/gamejolt.py
index 1d3c0b110..b284e1e28 100644
--- a/yt_dlp/extractor/gamejolt.py
+++ b/yt_dlp/extractor/gamejolt.py
@@ -10,7 +10,7 @@ from ..utils import (
int_or_none,
str_or_none,
traverse_obj,
- try_get
+ try_get,
)
diff --git a/yt_dlp/extractor/gaskrank.py b/yt_dlp/extractor/gaskrank.py
index bc56b03e3..6403be8cf 100644
--- a/yt_dlp/extractor/gaskrank.py
+++ b/yt_dlp/extractor/gaskrank.py
@@ -1,4 +1,5 @@
import re
+
from .common import InfoExtractor
from ..utils import (
float_or_none,
diff --git a/yt_dlp/extractor/generic.py b/yt_dlp/extractor/generic.py
index 2cfed0fd0..2818c718d 100644
--- a/yt_dlp/extractor/generic.py
+++ b/yt_dlp/extractor/generic.py
@@ -4,7 +4,7 @@ import types
import urllib.parse
import xml.etree.ElementTree
-from .common import InfoExtractor # isort: split
+from .common import InfoExtractor
from .commonprotocols import RtmpIE
from .youtube import YoutubeIE
from ..compat import compat_etree_fromstring
diff --git a/yt_dlp/extractor/gettr.py b/yt_dlp/extractor/gettr.py
index 7795dc56f..b9dc7c63c 100644
--- a/yt_dlp/extractor/gettr.py
+++ b/yt_dlp/extractor/gettr.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..utils import (
- bool_or_none,
ExtractorError,
+ bool_or_none,
dict_get,
float_or_none,
int_or_none,
diff --git a/yt_dlp/extractor/gigya.py b/yt_dlp/extractor/gigya.py
index c5bc86bb4..7baf8de8d 100644
--- a/yt_dlp/extractor/gigya.py
+++ b/yt_dlp/extractor/gigya.py
@@ -1,5 +1,4 @@
from .common import InfoExtractor
-
from ..utils import (
ExtractorError,
urlencode_postdata,
diff --git a/yt_dlp/extractor/glomex.py b/yt_dlp/extractor/glomex.py
index 22aac0db9..515f3c567 100644
--- a/yt_dlp/extractor/glomex.py
+++ b/yt_dlp/extractor/glomex.py
@@ -3,9 +3,9 @@ import urllib.parse
from .common import InfoExtractor
from ..utils import (
+ ExtractorError,
determine_ext,
extract_attributes,
- ExtractorError,
int_or_none,
parse_qs,
smuggle_url,
diff --git a/yt_dlp/extractor/go.py b/yt_dlp/extractor/go.py
index b075a02e0..fba98d79f 100644
--- a/yt_dlp/extractor/go.py
+++ b/yt_dlp/extractor/go.py
@@ -3,16 +3,16 @@ import re
from .adobepass import AdobePassIE
from ..compat import compat_str
from ..utils import (
- int_or_none,
+ ExtractorError,
determine_ext,
+ int_or_none,
parse_age_limit,
- remove_start,
remove_end,
+ remove_start,
+ traverse_obj,
try_get,
- urlencode_postdata,
- ExtractorError,
unified_timestamp,
- traverse_obj,
+ urlencode_postdata,
)
diff --git a/yt_dlp/extractor/godresource.py b/yt_dlp/extractor/godresource.py
index f010fff36..276a6c7fe 100644
--- a/yt_dlp/extractor/godresource.py
+++ b/yt_dlp/extractor/godresource.py
@@ -4,7 +4,7 @@ from ..utils import (
determine_ext,
str_or_none,
unified_timestamp,
- url_or_none
+ url_or_none,
)
from ..utils.traversal import traverse_obj
diff --git a/yt_dlp/extractor/gofile.py b/yt_dlp/extractor/gofile.py
index c6eca0c4d..fac088462 100644
--- a/yt_dlp/extractor/gofile.py
+++ b/yt_dlp/extractor/gofile.py
@@ -1,10 +1,7 @@
import hashlib
from .common import InfoExtractor
-from ..utils import (
- ExtractorError,
- try_get
-)
+from ..utils import ExtractorError, try_get
class GofileIE(InfoExtractor):
diff --git a/yt_dlp/extractor/gotostage.py b/yt_dlp/extractor/gotostage.py
index 112293bef..9c1a6cb91 100644
--- a/yt_dlp/extractor/gotostage.py
+++ b/yt_dlp/extractor/gotostage.py
@@ -1,11 +1,8 @@
+import json
+
from .common import InfoExtractor
from ..compat import compat_str
-from ..utils import (
- try_get,
- url_or_none
-)
-
-import json
+from ..utils import try_get, url_or_none
class GoToStageIE(InfoExtractor):
diff --git a/yt_dlp/extractor/hbo.py b/yt_dlp/extractor/hbo.py
index 530bdb727..2551cfffd 100644
--- a/yt_dlp/extractor/hbo.py
+++ b/yt_dlp/extractor/hbo.py
@@ -2,11 +2,11 @@ import re
from .common import InfoExtractor
from ..utils import (
- xpath_text,
- xpath_element,
int_or_none,
parse_duration,
urljoin,
+ xpath_element,
+ xpath_text,
)
diff --git a/yt_dlp/extractor/hearthisat.py b/yt_dlp/extractor/hearthisat.py
index c7da8f97d..eb0a77952 100644
--- a/yt_dlp/extractor/hearthisat.py
+++ b/yt_dlp/extractor/hearthisat.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..utils import (
- determine_ext,
KNOWN_EXTENSIONS,
+ determine_ext,
str_to_int,
)
diff --git a/yt_dlp/extractor/hketv.py b/yt_dlp/extractor/hketv.py
index e026996da..099c2a175 100644
--- a/yt_dlp/extractor/hketv.py
+++ b/yt_dlp/extractor/hketv.py
@@ -1,8 +1,8 @@
from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
- clean_html,
ExtractorError,
+ clean_html,
int_or_none,
merge_dicts,
parse_count,
diff --git a/yt_dlp/extractor/hrti.py b/yt_dlp/extractor/hrti.py
index 57b76e46b..41d50d000 100644
--- a/yt_dlp/extractor/hrti.py
+++ b/yt_dlp/extractor/hrti.py
@@ -4,8 +4,8 @@ from .common import InfoExtractor
from ..networking import Request
from ..networking.exceptions import HTTPError
from ..utils import (
- clean_html,
ExtractorError,
+ clean_html,
int_or_none,
parse_age_limit,
try_get,
diff --git a/yt_dlp/extractor/huya.py b/yt_dlp/extractor/huya.py
index c4965f9bc..5379b5410 100644
--- a/yt_dlp/extractor/huya.py
+++ b/yt_dlp/extractor/huya.py
@@ -2,8 +2,8 @@ import hashlib
import random
import re
-from ..compat import compat_urlparse, compat_b64decode
-
+from .common import InfoExtractor
+from ..compat import compat_b64decode, compat_urlparse
from ..utils import (
ExtractorError,
int_or_none,
@@ -13,8 +13,6 @@ from ..utils import (
update_url_query,
)
-from .common import InfoExtractor
-
class HuyaLiveIE(InfoExtractor):
_VALID_URL = r'https?://(?:www\.|m\.)?huya\.com/(?P<id>[^/#?&]+)(?:\D|$)'
diff --git a/yt_dlp/extractor/ichinanalive.py b/yt_dlp/extractor/ichinanalive.py
index 9d55ddc02..c28d09f34 100644
--- a/yt_dlp/extractor/ichinanalive.py
+++ b/yt_dlp/extractor/ichinanalive.py
@@ -1,6 +1,6 @@
from .common import InfoExtractor
-from ..utils import ExtractorError, str_or_none, traverse_obj, unified_strdate
from ..compat import compat_str
+from ..utils import ExtractorError, str_or_none, traverse_obj, unified_strdate
class IchinanaLiveIE(InfoExtractor):
diff --git a/yt_dlp/extractor/infoq.py b/yt_dlp/extractor/infoq.py
index 192bcfe35..2bb48508c 100644
--- a/yt_dlp/extractor/infoq.py
+++ b/yt_dlp/extractor/infoq.py
@@ -1,3 +1,4 @@
+from .bokecc import BokeCCBaseIE
from ..compat import (
compat_b64decode,
compat_urllib_parse_unquote,
@@ -6,10 +7,9 @@ from ..compat import (
from ..utils import (
ExtractorError,
determine_ext,
- update_url_query,
traverse_obj,
+ update_url_query,
)
-from .bokecc import BokeCCBaseIE
class InfoQIE(BokeCCBaseIE):
diff --git a/yt_dlp/extractor/iprima.py b/yt_dlp/extractor/iprima.py
index f7aa579b3..d5a3d8095 100644
--- a/yt_dlp/extractor/iprima.py
+++ b/yt_dlp/extractor/iprima.py
@@ -3,12 +3,12 @@ import time
from .common import InfoExtractor
from ..utils import (
+ ExtractorError,
determine_ext,
js_to_json,
- urlencode_postdata,
- ExtractorError,
parse_qs,
- traverse_obj
+ traverse_obj,
+ urlencode_postdata,
)
diff --git a/yt_dlp/extractor/iqiyi.py b/yt_dlp/extractor/iqiyi.py
index 3368ab1d9..85ed549de 100644
--- a/yt_dlp/extractor/iqiyi.py
+++ b/yt_dlp/extractor/iqiyi.py
@@ -4,20 +4,16 @@ import re
import time
from .common import InfoExtractor
-from ..compat import (
- compat_str,
- compat_urllib_parse_urlencode,
- compat_urllib_parse_unquote
-)
from .openload import PhantomJSwrapper
+from ..compat import compat_str, compat_urllib_parse_unquote, compat_urllib_parse_urlencode
from ..utils import (
+ ExtractorError,
clean_html,
decode_packed_codes,
- ExtractorError,
float_or_none,
format_field,
- get_element_by_id,
get_element_by_attribute,
+ get_element_by_id,
int_or_none,
js_to_json,
ohdave_rsa_encrypt,
diff --git a/yt_dlp/extractor/itprotv.py b/yt_dlp/extractor/itprotv.py
index 713fd4ec5..5d6fbaa01 100644
--- a/yt_dlp/extractor/itprotv.py
+++ b/yt_dlp/extractor/itprotv.py
@@ -1,12 +1,11 @@
import re
from .common import InfoExtractor
-
from ..utils import (
int_or_none,
str_or_none,
traverse_obj,
- urljoin
+ urljoin,
)
diff --git a/yt_dlp/extractor/itv.py b/yt_dlp/extractor/itv.py
index 9ac7be307..55c416521 100644
--- a/yt_dlp/extractor/itv.py
+++ b/yt_dlp/extractor/itv.py
@@ -1,23 +1,22 @@
import json
-from .common import InfoExtractor
from .brightcove import BrightcoveNewIE
-
+from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
+ JSON_LD_RE,
+ ExtractorError,
base_url,
clean_html,
determine_ext,
extract_attributes,
- ExtractorError,
get_element_by_class,
- JSON_LD_RE,
merge_dicts,
parse_duration,
smuggle_url,
try_get,
- url_or_none,
url_basename,
+ url_or_none,
urljoin,
)
diff --git a/yt_dlp/extractor/iwara.py b/yt_dlp/extractor/iwara.py
index e23fdfd6a..a11f3f11d 100644
--- a/yt_dlp/extractor/iwara.py
+++ b/yt_dlp/extractor/iwara.py
@@ -1,9 +1,9 @@
import functools
-import urllib.parse
-import urllib.error
import hashlib
import json
import time
+import urllib.error
+import urllib.parse
from .common import InfoExtractor
from ..utils import (
diff --git a/yt_dlp/extractor/jamendo.py b/yt_dlp/extractor/jamendo.py
index a2bbba397..8557a81ad 100644
--- a/yt_dlp/extractor/jamendo.py
+++ b/yt_dlp/extractor/jamendo.py
@@ -1,8 +1,8 @@
import hashlib
import random
-from ..compat import compat_str
from .common import InfoExtractor
+from ..compat import compat_str
from ..utils import (
clean_html,
int_or_none,
diff --git a/yt_dlp/extractor/japandiet.py b/yt_dlp/extractor/japandiet.py
index 6c650568a..19d2b923b 100644
--- a/yt_dlp/extractor/japandiet.py
+++ b/yt_dlp/extractor/japandiet.py
@@ -1,5 +1,6 @@
import re
+from .common import InfoExtractor
from ..utils import (
ExtractorError,
clean_html,
@@ -9,9 +10,8 @@ from ..utils import (
smuggle_url,
traverse_obj,
try_call,
- unsmuggle_url
+ unsmuggle_url,
)
-from .common import InfoExtractor
def _parse_japanese_date(text):
diff --git a/yt_dlp/extractor/jove.py b/yt_dlp/extractor/jove.py
index 245fe73d4..8069fea4c 100644
--- a/yt_dlp/extractor/jove.py
+++ b/yt_dlp/extractor/jove.py
@@ -1,8 +1,5 @@
from .common import InfoExtractor
-from ..utils import (
- ExtractorError,
- unified_strdate
-)
+from ..utils import ExtractorError, unified_strdate
class JoveIE(InfoExtractor):
diff --git a/yt_dlp/extractor/jstream.py b/yt_dlp/extractor/jstream.py
index 3e2e62712..00ac7ccca 100644
--- a/yt_dlp/extractor/jstream.py
+++ b/yt_dlp/extractor/jstream.py
@@ -1,6 +1,6 @@
import base64
-import re
import json
+import re
from .common import InfoExtractor
from ..utils import (
diff --git a/yt_dlp/extractor/kakao.py b/yt_dlp/extractor/kakao.py
index 43055e89d..563aa2d72 100644
--- a/yt_dlp/extractor/kakao.py
+++ b/yt_dlp/extractor/kakao.py
@@ -3,8 +3,8 @@ from ..networking.exceptions import HTTPError
from ..utils import (
ExtractorError,
int_or_none,
- strip_or_none,
str_or_none,
+ strip_or_none,
traverse_obj,
unified_timestamp,
)
diff --git a/yt_dlp/extractor/kaltura.py b/yt_dlp/extractor/kaltura.py
index 95e2deea5..4752d5a55 100644
--- a/yt_dlp/extractor/kaltura.py
+++ b/yt_dlp/extractor/kaltura.py
@@ -4,18 +4,18 @@ import re
from .common import InfoExtractor
from ..compat import (
- compat_urlparse,
compat_parse_qs,
+ compat_urlparse,
)
from ..utils import (
- clean_html,
ExtractorError,
+ clean_html,
format_field,
int_or_none,
- unsmuggle_url,
+ remove_start,
smuggle_url,
traverse_obj,
- remove_start
+ unsmuggle_url,
)
diff --git a/yt_dlp/extractor/kankanews.py b/yt_dlp/extractor/kankanews.py
index 8f247b305..3d74c745c 100644
--- a/yt_dlp/extractor/kankanews.py
+++ b/yt_dlp/extractor/kankanews.py
@@ -1,7 +1,7 @@
-import time
+import hashlib
import random
import string
-import hashlib
+import time
import urllib.parse
from .common import InfoExtractor
diff --git a/yt_dlp/extractor/kuwo.py b/yt_dlp/extractor/kuwo.py
index 3c93dedac..b77667160 100644
--- a/yt_dlp/extractor/kuwo.py
+++ b/yt_dlp/extractor/kuwo.py
@@ -3,10 +3,10 @@ import re
from .common import InfoExtractor
from ..compat import compat_urlparse
from ..utils import (
- get_element_by_id,
- clean_html,
ExtractorError,
InAdvancePagedList,
+ clean_html,
+ get_element_by_id,
remove_start,
)
diff --git a/yt_dlp/extractor/lcp.py b/yt_dlp/extractor/lcp.py
index 9846319e0..62874195f 100644
--- a/yt_dlp/extractor/lcp.py
+++ b/yt_dlp/extractor/lcp.py
@@ -1,5 +1,5 @@
-from .common import InfoExtractor
from .arkena import ArkenaIE
+from .common import InfoExtractor
class LcpPlayIE(ArkenaIE): # XXX: Do not subclass from concrete IE
diff --git a/yt_dlp/extractor/lecture2go.py b/yt_dlp/extractor/lecture2go.py
index 10fb5d479..1a3ada1e5 100644
--- a/yt_dlp/extractor/lecture2go.py
+++ b/yt_dlp/extractor/lecture2go.py
@@ -4,8 +4,8 @@ from .common import InfoExtractor
from ..utils import (
determine_ext,
determine_protocol,
- parse_duration,
int_or_none,
+ parse_duration,
)
diff --git a/yt_dlp/extractor/lecturio.py b/yt_dlp/extractor/lecturio.py
index 629d208fc..90f0268d7 100644
--- a/yt_dlp/extractor/lecturio.py
+++ b/yt_dlp/extractor/lecturio.py
@@ -2,9 +2,9 @@ import re
from .common import InfoExtractor
from ..utils import (
+ ExtractorError,
clean_html,
determine_ext,
- ExtractorError,
float_or_none,
int_or_none,
str_or_none,
diff --git a/yt_dlp/extractor/leeco.py b/yt_dlp/extractor/leeco.py
index 5d61a607f..a113b3d0d 100644
--- a/yt_dlp/extractor/leeco.py
+++ b/yt_dlp/extractor/leeco.py
@@ -11,9 +11,9 @@ from ..compat import (
compat_urllib_parse_urlencode,
)
from ..utils import (
+ ExtractorError,
determine_ext,
encode_data_uri,
- ExtractorError,
int_or_none,
orderedSet,
parse_iso8601,
diff --git a/yt_dlp/extractor/libraryofcongress.py b/yt_dlp/extractor/libraryofcongress.py
index b76ca0908..297993939 100644
--- a/yt_dlp/extractor/libraryofcongress.py
+++ b/yt_dlp/extractor/libraryofcongress.py
@@ -1,7 +1,6 @@
import re
from .common import InfoExtractor
-
from ..utils import (
determine_ext,
float_or_none,
diff --git a/yt_dlp/extractor/lifenews.py b/yt_dlp/extractor/lifenews.py
index 919cfcb37..ea150a58b 100644
--- a/yt_dlp/extractor/lifenews.py
+++ b/yt_dlp/extractor/lifenews.py
@@ -6,8 +6,8 @@ from ..compat import (
compat_urlparse,
)
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
int_or_none,
parse_iso8601,
remove_end,
diff --git a/yt_dlp/extractor/limelight.py b/yt_dlp/extractor/limelight.py
index 4e50f106f..1ff091ddb 100644
--- a/yt_dlp/extractor/limelight.py
+++ b/yt_dlp/extractor/limelight.py
@@ -3,13 +3,13 @@ import re
from .common import InfoExtractor
from ..networking.exceptions import HTTPError
from ..utils import (
+ ExtractorError,
determine_ext,
float_or_none,
int_or_none,
smuggle_url,
try_get,
unsmuggle_url,
- ExtractorError,
)
diff --git a/yt_dlp/extractor/linkedin.py b/yt_dlp/extractor/linkedin.py
index e12f467ef..2a7c6f0e0 100644
--- a/yt_dlp/extractor/linkedin.py
+++ b/yt_dlp/extractor/linkedin.py
@@ -7,8 +7,8 @@ from ..utils import (
extract_attributes,
float_or_none,
int_or_none,
- srt_subtitles_timecode,
mimetype2ext,
+ srt_subtitles_timecode,
traverse_obj,
try_get,
url_or_none,
diff --git a/yt_dlp/extractor/mainstreaming.py b/yt_dlp/extractor/mainstreaming.py
index fd9bba8bc..fa12a6a8d 100644
--- a/yt_dlp/extractor/mainstreaming.py
+++ b/yt_dlp/extractor/mainstreaming.py
@@ -1,14 +1,13 @@
import re
from .common import InfoExtractor
-
from ..utils import (
int_or_none,
js_to_json,
parse_duration,
traverse_obj,
try_get,
- urljoin
+ urljoin,
)
diff --git a/yt_dlp/extractor/manoto.py b/yt_dlp/extractor/manoto.py
index 2792e6e70..44c321c26 100644
--- a/yt_dlp/extractor/manoto.py
+++ b/yt_dlp/extractor/manoto.py
@@ -1,10 +1,5 @@
from .common import InfoExtractor
-from ..utils import (
- clean_html,
- int_or_none,
- traverse_obj
-)
-
+from ..utils import clean_html, int_or_none, traverse_obj
_API_URL = 'https://dak1vd5vmi7x6.cloudfront.net/api/v1/publicrole/{}/{}?id={}'
diff --git a/yt_dlp/extractor/medaltv.py b/yt_dlp/extractor/medaltv.py
index 675ad8ccc..d040fb48f 100644
--- a/yt_dlp/extractor/medaltv.py
+++ b/yt_dlp/extractor/medaltv.py
@@ -4,8 +4,8 @@ from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
ExtractorError,
- format_field,
float_or_none,
+ format_field,
int_or_none,
str_or_none,
traverse_obj,
diff --git a/yt_dlp/extractor/mediaklikk.py b/yt_dlp/extractor/mediaklikk.py
index fcc4827b5..c01597762 100644
--- a/yt_dlp/extractor/mediaklikk.py
+++ b/yt_dlp/extractor/mediaklikk.py
@@ -1,14 +1,11 @@
+from .common import InfoExtractor
+from ..compat import compat_str, compat_urllib_parse_unquote
from ..utils import (
ExtractorError,
traverse_obj,
unified_strdate,
url_or_none,
)
-from .common import InfoExtractor
-from ..compat import (
- compat_urllib_parse_unquote,
- compat_str
-)
class MediaKlikkIE(InfoExtractor):
diff --git a/yt_dlp/extractor/mediaset.py b/yt_dlp/extractor/mediaset.py
index e04a1ce90..b7df5c75a 100644
--- a/yt_dlp/extractor/mediaset.py
+++ b/yt_dlp/extractor/mediaset.py
@@ -5,11 +5,11 @@ from .theplatform import ThePlatformBaseIE
from ..utils import (
ExtractorError,
GeoRestrictedError,
- int_or_none,
OnDemandPagedList,
+ int_or_none,
try_get,
- urljoin,
update_url_query,
+ urljoin,
)
diff --git a/yt_dlp/extractor/mediasite.py b/yt_dlp/extractor/mediasite.py
index 7ea78ab69..d3fec4ec2 100644
--- a/yt_dlp/extractor/mediasite.py
+++ b/yt_dlp/extractor/mediasite.py
@@ -1,5 +1,5 @@
-import re
import json
+import re
from .common import InfoExtractor
from ..compat import (
@@ -10,16 +10,15 @@ from ..utils import (
ExtractorError,
float_or_none,
mimetype2ext,
+ smuggle_url,
str_or_none,
try_call,
try_get,
- smuggle_url,
unsmuggle_url,
url_or_none,
urljoin,
)
-
_ID_RE = r'(?:[0-9a-f]{32,34}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12,14})'
diff --git a/yt_dlp/extractor/microsoftstream.py b/yt_dlp/extractor/microsoftstream.py
index 5f5f16087..f6a0b416d 100644
--- a/yt_dlp/extractor/microsoftstream.py
+++ b/yt_dlp/extractor/microsoftstream.py
@@ -3,8 +3,8 @@ import base64
from .common import InfoExtractor
from ..utils import (
merge_dicts,
- parse_iso8601,
parse_duration,
+ parse_iso8601,
parse_resolution,
try_get,
url_basename,
diff --git a/yt_dlp/extractor/mildom.py b/yt_dlp/extractor/mildom.py
index f64d575dc..caf60c805 100644
--- a/yt_dlp/extractor/mildom.py
+++ b/yt_dlp/extractor/mildom.py
@@ -4,11 +4,11 @@ import uuid
from .common import InfoExtractor
from ..utils import (
+ ExtractorError,
+ OnDemandPagedList,
determine_ext,
dict_get,
- ExtractorError,
float_or_none,
- OnDemandPagedList,
traverse_obj,
)
diff --git a/yt_dlp/extractor/mit.py b/yt_dlp/extractor/mit.py
index 38cc0c274..979584ed6 100644
--- a/yt_dlp/extractor/mit.py
+++ b/yt_dlp/extractor/mit.py
@@ -1,11 +1,11 @@
-import re
import json
+import re
from .common import InfoExtractor
from .youtube import YoutubeIE
from ..utils import (
- clean_html,
ExtractorError,
+ clean_html,
get_element_by_id,
)
diff --git a/yt_dlp/extractor/monstercat.py b/yt_dlp/extractor/monstercat.py
index a69a12e18..411d41cb0 100644
--- a/yt_dlp/extractor/monstercat.py
+++ b/yt_dlp/extractor/monstercat.py
@@ -8,10 +8,10 @@ from ..utils import (
get_element_html_by_class,
get_element_text_and_html_by_tag,
int_or_none,
- unified_strdate,
strip_or_none,
traverse_obj,
try_call,
+ unified_strdate,
)
diff --git a/yt_dlp/extractor/moviepilot.py b/yt_dlp/extractor/moviepilot.py
index 35c57bc70..ed5be4fa6 100644
--- a/yt_dlp/extractor/moviepilot.py
+++ b/yt_dlp/extractor/moviepilot.py
@@ -1,5 +1,5 @@
-from .dailymotion import DailymotionIE
from .common import InfoExtractor
+from .dailymotion import DailymotionIE
class MoviepilotIE(InfoExtractor):
diff --git a/yt_dlp/extractor/movingimage.py b/yt_dlp/extractor/movingimage.py
index cdd8ba4dc..6e0ea2652 100644
--- a/yt_dlp/extractor/movingimage.py
+++ b/yt_dlp/extractor/movingimage.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..utils import (
- unescapeHTML,
parse_duration,
+ unescapeHTML,
)
diff --git a/yt_dlp/extractor/msn.py b/yt_dlp/extractor/msn.py
index 77d1806a3..79728e106 100644
--- a/yt_dlp/extractor/msn.py
+++ b/yt_dlp/extractor/msn.py
@@ -3,8 +3,8 @@ import re
from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
int_or_none,
unescapeHTML,
)
diff --git a/yt_dlp/extractor/n1.py b/yt_dlp/extractor/n1.py
index edc41443a..8a8a5fec7 100644
--- a/yt_dlp/extractor/n1.py
+++ b/yt_dlp/extractor/n1.py
@@ -2,8 +2,8 @@ import re
from .common import InfoExtractor
from ..utils import (
- unified_timestamp,
extract_attributes,
+ unified_timestamp,
)
diff --git a/yt_dlp/extractor/naver.py b/yt_dlp/extractor/naver.py
index 885557e91..26400e383 100644
--- a/yt_dlp/extractor/naver.py
+++ b/yt_dlp/extractor/naver.py
@@ -4,8 +4,8 @@ import hmac
import itertools
import json
import re
-import urllib.parse
import time
+import urllib.parse
from .common import InfoExtractor
from ..utils import (
diff --git a/yt_dlp/extractor/nba.py b/yt_dlp/extractor/nba.py
index 81d11e3a5..ec4d6368e 100644
--- a/yt_dlp/extractor/nba.py
+++ b/yt_dlp/extractor/nba.py
@@ -7,9 +7,9 @@ from ..compat import (
compat_urllib_parse_unquote,
)
from ..utils import (
+ OnDemandPagedList,
int_or_none,
merge_dicts,
- OnDemandPagedList,
parse_duration,
parse_iso8601,
parse_qs,
diff --git a/yt_dlp/extractor/nbc.py b/yt_dlp/extractor/nbc.py
index 267fa8353..e88f98abf 100644
--- a/yt_dlp/extractor/nbc.py
+++ b/yt_dlp/extractor/nbc.py
@@ -3,9 +3,9 @@ import json
import re
import xml.etree.ElementTree
+from .adobepass import AdobePassIE
from .common import InfoExtractor
from .theplatform import ThePlatformIE, default_ns
-from .adobepass import AdobePassIE
from ..compat import compat_urllib_parse_unquote
from ..networking import HEADRequest
from ..utils import (
diff --git a/yt_dlp/extractor/ndr.py b/yt_dlp/extractor/ndr.py
index 41ea3629a..243221d46 100644
--- a/yt_dlp/extractor/ndr.py
+++ b/yt_dlp/extractor/ndr.py
@@ -3,8 +3,8 @@ import re
from .common import InfoExtractor
from ..compat import compat_urllib_parse_urlparse
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
int_or_none,
merge_dicts,
parse_iso8601,
diff --git a/yt_dlp/extractor/nfhsnetwork.py b/yt_dlp/extractor/nfhsnetwork.py
index febad8fdf..be732a32f 100644
--- a/yt_dlp/extractor/nfhsnetwork.py
+++ b/yt_dlp/extractor/nfhsnetwork.py
@@ -1,11 +1,5 @@
from .common import InfoExtractor
-
-
-from ..utils import (
- try_get,
- unified_strdate,
- unified_timestamp
-)
+from ..utils import try_get, unified_strdate, unified_timestamp
class NFHSNetworkIE(InfoExtractor):
diff --git a/yt_dlp/extractor/nhl.py b/yt_dlp/extractor/nhl.py
index 2521c40e0..64cddb408 100644
--- a/yt_dlp/extractor/nhl.py
+++ b/yt_dlp/extractor/nhl.py
@@ -3,8 +3,8 @@ from ..compat import compat_str
from ..utils import (
determine_ext,
int_or_none,
- parse_iso8601,
parse_duration,
+ parse_iso8601,
)
diff --git a/yt_dlp/extractor/ninenews.py b/yt_dlp/extractor/ninenews.py
index 900d9ba60..0b4f47b48 100644
--- a/yt_dlp/extractor/ninenews.py
+++ b/yt_dlp/extractor/ninenews.py
@@ -1,5 +1,5 @@
-from .common import InfoExtractor
from .brightcove import BrightcoveNewIE
+from .common import InfoExtractor
from ..utils import ExtractorError
from ..utils.traversal import traverse_obj
diff --git a/yt_dlp/extractor/ninenow.py b/yt_dlp/extractor/ninenow.py
index c655b75f4..b7170b0e7 100644
--- a/yt_dlp/extractor/ninenow.py
+++ b/yt_dlp/extractor/ninenow.py
@@ -2,8 +2,8 @@ from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
ExtractorError,
- int_or_none,
float_or_none,
+ int_or_none,
smuggle_url,
str_or_none,
try_get,
diff --git a/yt_dlp/extractor/nitter.py b/yt_dlp/extractor/nitter.py
index 35d1311dc..249e7cd33 100644
--- a/yt_dlp/extractor/nitter.py
+++ b/yt_dlp/extractor/nitter.py
@@ -1,13 +1,14 @@
+import random
+import re
+
from .common import InfoExtractor
from ..compat import compat_urlparse
from ..utils import (
+ determine_ext,
parse_count,
- unified_timestamp,
remove_end,
- determine_ext,
+ unified_timestamp,
)
-import re
-import random
class NitterIE(InfoExtractor):
diff --git a/yt_dlp/extractor/nobelprize.py b/yt_dlp/extractor/nobelprize.py
index cddc72f71..513529bea 100644
--- a/yt_dlp/extractor/nobelprize.py
+++ b/yt_dlp/extractor/nobelprize.py
@@ -1,11 +1,11 @@
from .common import InfoExtractor
from ..utils import (
- js_to_json,
- mimetype2ext,
determine_ext,
- update_url_query,
get_element_by_attribute,
int_or_none,
+ js_to_json,
+ mimetype2ext,
+ update_url_query,
)
diff --git a/yt_dlp/extractor/noz.py b/yt_dlp/extractor/noz.py
index c7b803803..19cb972c0 100644
--- a/yt_dlp/extractor/noz.py
+++ b/yt_dlp/extractor/noz.py
@@ -1,11 +1,11 @@
from .common import InfoExtractor
+from ..compat import compat_urllib_parse_unquote
from ..utils import (
- int_or_none,
find_xpath_attr,
- xpath_text,
+ int_or_none,
update_url_query,
+ xpath_text,
)
-from ..compat import compat_urllib_parse_unquote
class NozIE(InfoExtractor):
diff --git a/yt_dlp/extractor/nuevo.py b/yt_dlp/extractor/nuevo.py
index ec54041f1..5670445aa 100644
--- a/yt_dlp/extractor/nuevo.py
+++ b/yt_dlp/extractor/nuevo.py
@@ -1,9 +1,5 @@
from .common import InfoExtractor
-
-from ..utils import (
- float_or_none,
- xpath_text
-)
+from ..utils import float_or_none, xpath_text
class NuevoBaseIE(InfoExtractor):
diff --git a/yt_dlp/extractor/nuvid.py b/yt_dlp/extractor/nuvid.py
index 6ac351cb0..0ef0ec70b 100644
--- a/yt_dlp/extractor/nuvid.py
+++ b/yt_dlp/extractor/nuvid.py
@@ -2,8 +2,8 @@ import re
from .common import InfoExtractor
from ..utils import (
- parse_duration,
int_or_none,
+ parse_duration,
strip_or_none,
traverse_obj,
url_or_none,
diff --git a/yt_dlp/extractor/nzherald.py b/yt_dlp/extractor/nzherald.py
index 062f9a875..0a12aea71 100644
--- a/yt_dlp/extractor/nzherald.py
+++ b/yt_dlp/extractor/nzherald.py
@@ -3,10 +3,7 @@ import json
from .brightcove import BrightcoveNewIE
from .common import InfoExtractor
from ..compat import compat_str
-from ..utils import (
- ExtractorError,
- traverse_obj
-)
+from ..utils import ExtractorError, traverse_obj
class NZHeraldIE(InfoExtractor):
diff --git a/yt_dlp/extractor/odkmedia.py b/yt_dlp/extractor/odkmedia.py
index b852160b9..8321b0741 100644
--- a/yt_dlp/extractor/odkmedia.py
+++ b/yt_dlp/extractor/odkmedia.py
@@ -7,7 +7,7 @@ from ..utils import (
GeoRestrictedError,
float_or_none,
traverse_obj,
- try_call
+ try_call,
)
diff --git a/yt_dlp/extractor/olympics.py b/yt_dlp/extractor/olympics.py
index 61d1f4048..5507d2fda 100644
--- a/yt_dlp/extractor/olympics.py
+++ b/yt_dlp/extractor/olympics.py
@@ -1,8 +1,5 @@
from .common import InfoExtractor
-from ..utils import (
- int_or_none,
- try_get
-)
+from ..utils import int_or_none, try_get
class OlympicsReplayIE(InfoExtractor):
diff --git a/yt_dlp/extractor/onenewsnz.py b/yt_dlp/extractor/onenewsnz.py
index a46211e77..351b397de 100644
--- a/yt_dlp/extractor/onenewsnz.py
+++ b/yt_dlp/extractor/onenewsnz.py
@@ -1,10 +1,6 @@
from .brightcove import BrightcoveNewIE
from .common import InfoExtractor
-
-from ..utils import (
- ExtractorError,
- traverse_obj
-)
+from ..utils import ExtractorError, traverse_obj
class OneNewsNZIE(InfoExtractor):
diff --git a/yt_dlp/extractor/onet.py b/yt_dlp/extractor/onet.py
index 0d59e8cb4..da10f3779 100644
--- a/yt_dlp/extractor/onet.py
+++ b/yt_dlp/extractor/onet.py
@@ -2,13 +2,13 @@ import re
from .common import InfoExtractor
from ..utils import (
- determine_ext,
+ NO_DEFAULT,
ExtractorError,
+ determine_ext,
float_or_none,
get_element_by_class,
int_or_none,
js_to_json,
- NO_DEFAULT,
parse_iso8601,
remove_start,
strip_or_none,
diff --git a/yt_dlp/extractor/opencast.py b/yt_dlp/extractor/opencast.py
index 1fafd9afb..12bf55704 100644
--- a/yt_dlp/extractor/opencast.py
+++ b/yt_dlp/extractor/opencast.py
@@ -2,8 +2,8 @@ import re
from .common import InfoExtractor
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
int_or_none,
parse_iso8601,
traverse_obj,
diff --git a/yt_dlp/extractor/openrec.py b/yt_dlp/extractor/openrec.py
index 82a81c6c2..c9a96aeb4 100644
--- a/yt_dlp/extractor/openrec.py
+++ b/yt_dlp/extractor/openrec.py
@@ -1,4 +1,5 @@
from .common import InfoExtractor
+from ..compat import compat_str
from ..utils import (
ExtractorError,
get_first,
@@ -8,7 +9,6 @@ from ..utils import (
unified_strdate,
unified_timestamp,
)
-from ..compat import compat_str
class OpenRecBaseIE(InfoExtractor):
diff --git a/yt_dlp/extractor/ora.py b/yt_dlp/extractor/ora.py
index d49909d52..0e7a8484e 100644
--- a/yt_dlp/extractor/ora.py
+++ b/yt_dlp/extractor/ora.py
@@ -1,4 +1,5 @@
import re
+
from .common import InfoExtractor
from ..compat import compat_urlparse
from ..utils import (
diff --git a/yt_dlp/extractor/packtpub.py b/yt_dlp/extractor/packtpub.py
index 56203306f..3e969c846 100644
--- a/yt_dlp/extractor/packtpub.py
+++ b/yt_dlp/extractor/packtpub.py
@@ -3,13 +3,12 @@ import json
from .common import InfoExtractor
from ..networking.exceptions import HTTPError
from ..utils import (
- clean_html,
ExtractorError,
+ clean_html,
# remove_end,
str_or_none,
strip_or_none,
unified_timestamp,
- # urljoin,
)
diff --git a/yt_dlp/extractor/panopto.py b/yt_dlp/extractor/panopto.py
index 63c5fd68f..6b2596236 100644
--- a/yt_dlp/extractor/panopto.py
+++ b/yt_dlp/extractor/panopto.py
@@ -5,17 +5,13 @@ import json
import random
from .common import InfoExtractor
-from ..compat import (
- compat_urllib_parse_urlparse,
- compat_urlparse
-)
-
+from ..compat import compat_urllib_parse_urlparse, compat_urlparse
from ..utils import (
- bug_reports_message,
ExtractorError,
+ OnDemandPagedList,
+ bug_reports_message,
get_first,
int_or_none,
- OnDemandPagedList,
parse_qs,
srt_subtitles_timecode,
traverse_obj,
diff --git a/yt_dlp/extractor/paramountplus.py b/yt_dlp/extractor/paramountplus.py
index 7e472a63e..3f19803c0 100644
--- a/yt_dlp/extractor/paramountplus.py
+++ b/yt_dlp/extractor/paramountplus.py
@@ -1,7 +1,7 @@
import itertools
-from .common import InfoExtractor
from .cbs import CBSBaseIE
+from .common import InfoExtractor
from ..utils import (
ExtractorError,
int_or_none,
diff --git a/yt_dlp/extractor/pbs.py b/yt_dlp/extractor/pbs.py
index 2bb2ea9f1..f6f5a5c3e 100644
--- a/yt_dlp/extractor/pbs.py
+++ b/yt_dlp/extractor/pbs.py
@@ -3,10 +3,11 @@ import re
from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
+ US_RATINGS,
ExtractorError,
determine_ext,
- int_or_none,
float_or_none,
+ int_or_none,
js_to_json,
orderedSet,
strip_jsonp,
@@ -14,7 +15,6 @@ from ..utils import (
traverse_obj,
unified_strdate,
url_or_none,
- US_RATINGS,
)
diff --git a/yt_dlp/extractor/pearvideo.py b/yt_dlp/extractor/pearvideo.py
index e27e5a7ba..086eaaf00 100644
--- a/yt_dlp/extractor/pearvideo.py
+++ b/yt_dlp/extractor/pearvideo.py
@@ -3,8 +3,8 @@ import re
from .common import InfoExtractor
from ..utils import (
qualities,
- unified_timestamp,
traverse_obj,
+ unified_timestamp,
)
diff --git a/yt_dlp/extractor/peertube.py b/yt_dlp/extractor/peertube.py
index 730b2393e..b7919c073 100644
--- a/yt_dlp/extractor/peertube.py
+++ b/yt_dlp/extractor/peertube.py
@@ -4,6 +4,7 @@ import re
from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
+ OnDemandPagedList,
format_field,
int_or_none,
parse_resolution,
@@ -12,7 +13,6 @@ from ..utils import (
unified_timestamp,
url_or_none,
urljoin,
- OnDemandPagedList,
)
diff --git a/yt_dlp/extractor/piksel.py b/yt_dlp/extractor/piksel.py
index 97a9bf574..8870d7b99 100644
--- a/yt_dlp/extractor/piksel.py
+++ b/yt_dlp/extractor/piksel.py
@@ -2,8 +2,8 @@ import re
from .common import InfoExtractor
from ..utils import (
- dict_get,
ExtractorError,
+ dict_get,
int_or_none,
join_nonempty,
parse_iso8601,
diff --git a/yt_dlp/extractor/pladform.py b/yt_dlp/extractor/pladform.py
index d67f6005c..c72a3876c 100644
--- a/yt_dlp/extractor/pladform.py
+++ b/yt_dlp/extractor/pladform.py
@@ -1,11 +1,11 @@
from .common import InfoExtractor
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
int_or_none,
parse_qs,
- xpath_text,
qualities,
+ xpath_text,
)
diff --git a/yt_dlp/extractor/platzi.py b/yt_dlp/extractor/platzi.py
index 166b98c4a..d978c080b 100644
--- a/yt_dlp/extractor/platzi.py
+++ b/yt_dlp/extractor/platzi.py
@@ -4,8 +4,8 @@ from ..compat import (
compat_str,
)
from ..utils import (
- clean_html,
ExtractorError,
+ clean_html,
int_or_none,
str_or_none,
try_get,
diff --git a/yt_dlp/extractor/playtvak.py b/yt_dlp/extractor/playtvak.py
index c418f88cb..a01b42290 100644
--- a/yt_dlp/extractor/playtvak.py
+++ b/yt_dlp/extractor/playtvak.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..compat import (
- compat_urlparse,
compat_urllib_parse_urlencode,
+ compat_urlparse,
)
from ..utils import (
ExtractorError,
diff --git a/yt_dlp/extractor/pluralsight.py b/yt_dlp/extractor/pluralsight.py
index 809b65608..60c9efffe 100644
--- a/yt_dlp/extractor/pluralsight.py
+++ b/yt_dlp/extractor/pluralsight.py
@@ -10,8 +10,8 @@ from ..compat import (
compat_urlparse,
)
from ..utils import (
- dict_get,
ExtractorError,
+ dict_get,
float_or_none,
int_or_none,
parse_duration,
diff --git a/yt_dlp/extractor/polsatgo.py b/yt_dlp/extractor/polsatgo.py
index 1cebb365e..ecf2132b4 100644
--- a/yt_dlp/extractor/polsatgo.py
+++ b/yt_dlp/extractor/polsatgo.py
@@ -3,10 +3,10 @@ import uuid
from .common import InfoExtractor
from ..utils import (
+ ExtractorError,
int_or_none,
try_get,
url_or_none,
- ExtractorError,
)
diff --git a/yt_dlp/extractor/pornflip.py b/yt_dlp/extractor/pornflip.py
index 51a9cf38f..d711d3e67 100644
--- a/yt_dlp/extractor/pornflip.py
+++ b/yt_dlp/extractor/pornflip.py
@@ -1,9 +1,5 @@
from .common import InfoExtractor
-from ..utils import (
- int_or_none,
- parse_duration,
- parse_iso8601
-)
+from ..utils import int_or_none, parse_duration, parse_iso8601
class PornFlipIE(InfoExtractor):
diff --git a/yt_dlp/extractor/pornovoisines.py b/yt_dlp/extractor/pornovoisines.py
index 2e51b4f6b..b8e8701a8 100644
--- a/yt_dlp/extractor/pornovoisines.py
+++ b/yt_dlp/extractor/pornovoisines.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..utils import (
- int_or_none,
float_or_none,
+ int_or_none,
unified_strdate,
)
diff --git a/yt_dlp/extractor/prx.py b/yt_dlp/extractor/prx.py
index 5bb183270..338794ed5 100644
--- a/yt_dlp/extractor/prx.py
+++ b/yt_dlp/extractor/prx.py
@@ -1,14 +1,15 @@
import itertools
+
from .common import InfoExtractor, SearchInfoExtractor
from ..utils import (
- urljoin,
- traverse_obj,
+ clean_html,
int_or_none,
mimetype2ext,
- clean_html,
- url_or_none,
- unified_timestamp,
str_or_none,
+ traverse_obj,
+ unified_timestamp,
+ url_or_none,
+ urljoin,
)
diff --git a/yt_dlp/extractor/puhutv.py b/yt_dlp/extractor/puhutv.py
index 4b8e5e90d..fc4c29e95 100644
--- a/yt_dlp/extractor/puhutv.py
+++ b/yt_dlp/extractor/puhutv.py
@@ -3,8 +3,8 @@ from ..compat import compat_str
from ..networking.exceptions import HTTPError
from ..utils import (
ExtractorError,
- int_or_none,
float_or_none,
+ int_or_none,
parse_resolution,
str_or_none,
try_get,
diff --git a/yt_dlp/extractor/qingting.py b/yt_dlp/extractor/qingting.py
index aa690d492..cb00de2d5 100644
--- a/yt_dlp/extractor/qingting.py
+++ b/yt_dlp/extractor/qingting.py
@@ -1,5 +1,4 @@
from .common import InfoExtractor
-
from ..utils import traverse_obj
diff --git a/yt_dlp/extractor/qqmusic.py b/yt_dlp/extractor/qqmusic.py
index 92858259a..90141e63b 100644
--- a/yt_dlp/extractor/qqmusic.py
+++ b/yt_dlp/extractor/qqmusic.py
@@ -4,8 +4,8 @@ import time
from .common import InfoExtractor
from ..utils import (
- clean_html,
ExtractorError,
+ clean_html,
strip_jsonp,
unescapeHTML,
)
diff --git a/yt_dlp/extractor/radiocanada.py b/yt_dlp/extractor/radiocanada.py
index 1a5a6355a..4a09dcdfc 100644
--- a/yt_dlp/extractor/radiocanada.py
+++ b/yt_dlp/extractor/radiocanada.py
@@ -1,8 +1,8 @@
from .common import InfoExtractor
from ..networking.exceptions import HTTPError
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
int_or_none,
unified_strdate,
)
diff --git a/yt_dlp/extractor/radiocomercial.py b/yt_dlp/extractor/radiocomercial.py
index 38f8cf786..0c219778f 100644
--- a/yt_dlp/extractor/radiocomercial.py
+++ b/yt_dlp/extractor/radiocomercial.py
@@ -14,7 +14,7 @@ from ..utils import (
try_call,
unified_strdate,
update_url,
- urljoin
+ urljoin,
)
from ..utils.traversal import traverse_obj
diff --git a/yt_dlp/extractor/radiozet.py b/yt_dlp/extractor/radiozet.py
index 67520172e..632c8c281 100644
--- a/yt_dlp/extractor/radiozet.py
+++ b/yt_dlp/extractor/radiozet.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..utils import (
- traverse_obj,
strip_or_none,
+ traverse_obj,
)
diff --git a/yt_dlp/extractor/radlive.py b/yt_dlp/extractor/radlive.py
index 3c00183be..325e278fc 100644
--- a/yt_dlp/extractor/radlive.py
+++ b/yt_dlp/extractor/radlive.py
@@ -1,13 +1,13 @@
import json
+from .common import InfoExtractor
from ..utils import (
ExtractorError,
format_field,
traverse_obj,
try_get,
- unified_timestamp
+ unified_timestamp,
)
-from .common import InfoExtractor
class RadLiveIE(InfoExtractor):
diff --git a/yt_dlp/extractor/rai.py b/yt_dlp/extractor/rai.py
index c1fc65c81..c2e7a6fb8 100644
--- a/yt_dlp/extractor/rai.py
+++ b/yt_dlp/extractor/rai.py
@@ -3,11 +3,11 @@ import re
from .common import InfoExtractor
from ..networking import HEADRequest
from ..utils import (
+ ExtractorError,
+ GeoRestrictedError,
clean_html,
determine_ext,
- ExtractorError,
filter_dict,
- GeoRestrictedError,
int_or_none,
join_nonempty,
parse_duration,
diff --git a/yt_dlp/extractor/rbgtum.py b/yt_dlp/extractor/rbgtum.py
index 54f194cbd..5f2d0c103 100644
--- a/yt_dlp/extractor/rbgtum.py
+++ b/yt_dlp/extractor/rbgtum.py
@@ -1,7 +1,7 @@
import re
from .common import InfoExtractor
-from ..utils import parse_qs, remove_start, traverse_obj, ExtractorError
+from ..utils import ExtractorError, parse_qs, remove_start, traverse_obj
class RbgTumIE(InfoExtractor):
diff --git a/yt_dlp/extractor/rcti.py b/yt_dlp/extractor/rcti.py
index 6a7c7f399..9c382e257 100644
--- a/yt_dlp/extractor/rcti.py
+++ b/yt_dlp/extractor/rcti.py
@@ -5,11 +5,11 @@ import time
from .common import InfoExtractor
from ..networking.exceptions import HTTPError
from ..utils import (
- dict_get,
ExtractorError,
+ dict_get,
strip_or_none,
traverse_obj,
- try_get
+ try_get,
)
diff --git a/yt_dlp/extractor/rds.py b/yt_dlp/extractor/rds.py
index 1a1c6634e..cc76b898a 100644
--- a/yt_dlp/extractor/rds.py
+++ b/yt_dlp/extractor/rds.py
@@ -1,10 +1,10 @@
from .common import InfoExtractor
+from ..compat import compat_str
from ..utils import (
+ js_to_json,
parse_duration,
parse_iso8601,
- js_to_json,
)
-from ..compat import compat_str
class RDSIE(InfoExtractor):
diff --git a/yt_dlp/extractor/redbulltv.py b/yt_dlp/extractor/redbulltv.py
index d1de2490f..fac51b9ef 100644
--- a/yt_dlp/extractor/redbulltv.py
+++ b/yt_dlp/extractor/redbulltv.py
@@ -1,8 +1,8 @@
from .common import InfoExtractor
from ..networking.exceptions import HTTPError
from ..utils import (
- float_or_none,
ExtractorError,
+ float_or_none,
)
diff --git a/yt_dlp/extractor/reddit.py b/yt_dlp/extractor/reddit.py
index 44c0353da..bc3e5f7ee 100644
--- a/yt_dlp/extractor/reddit.py
+++ b/yt_dlp/extractor/reddit.py
@@ -10,8 +10,8 @@ from ..utils import (
try_get,
unescapeHTML,
update_url_query,
- urlencode_postdata,
url_or_none,
+ urlencode_postdata,
)
diff --git a/yt_dlp/extractor/redgifs.py b/yt_dlp/extractor/redgifs.py
index f9453202b..d0546bbfa 100644
--- a/yt_dlp/extractor/redgifs.py
+++ b/yt_dlp/extractor/redgifs.py
@@ -5,10 +5,10 @@ from ..compat import compat_parse_qs
from ..networking.exceptions import HTTPError
from ..utils import (
ExtractorError,
+ OnDemandPagedList,
int_or_none,
qualities,
try_get,
- OnDemandPagedList,
)
diff --git a/yt_dlp/extractor/redtube.py b/yt_dlp/extractor/redtube.py
index 965abbee8..14ed0edab 100644
--- a/yt_dlp/extractor/redtube.py
+++ b/yt_dlp/extractor/redtube.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
int_or_none,
merge_dicts,
str_to_int,
diff --git a/yt_dlp/extractor/reuters.py b/yt_dlp/extractor/reuters.py
index 0a8f13b9f..9c9bac6af 100644
--- a/yt_dlp/extractor/reuters.py
+++ b/yt_dlp/extractor/reuters.py
@@ -2,8 +2,8 @@ import re
from .common import InfoExtractor
from ..utils import (
- js_to_json,
int_or_none,
+ js_to_json,
unescapeHTML,
)
diff --git a/yt_dlp/extractor/rmcdecouverte.py b/yt_dlp/extractor/rmcdecouverte.py
index 8d29b302b..bc59ed07e 100644
--- a/yt_dlp/extractor/rmcdecouverte.py
+++ b/yt_dlp/extractor/rmcdecouverte.py
@@ -1,5 +1,5 @@
-from .common import InfoExtractor
from .brightcove import BrightcoveLegacyIE
+from .common import InfoExtractor
from ..compat import (
compat_parse_qs,
compat_urlparse,
diff --git a/yt_dlp/extractor/rte.py b/yt_dlp/extractor/rte.py
index 7ba80d4ba..729804d23 100644
--- a/yt_dlp/extractor/rte.py
+++ b/yt_dlp/extractor/rte.py
@@ -3,13 +3,13 @@ import re
from .common import InfoExtractor
from ..networking.exceptions import HTTPError
from ..utils import (
+ ExtractorError,
float_or_none,
parse_iso8601,
str_or_none,
try_get,
unescapeHTML,
url_or_none,
- ExtractorError,
)
diff --git a/yt_dlp/extractor/rtp.py b/yt_dlp/extractor/rtp.py
index 5928a207a..ec78d0a66 100644
--- a/yt_dlp/extractor/rtp.py
+++ b/yt_dlp/extractor/rtp.py
@@ -1,9 +1,10 @@
-from .common import InfoExtractor
-from ..utils import js_to_json
-import re
+import base64
import json
+import re
import urllib.parse
-import base64
+
+from .common import InfoExtractor
+from ..utils import js_to_json
class RTPIE(InfoExtractor):
diff --git a/yt_dlp/extractor/rtvcplay.py b/yt_dlp/extractor/rtvcplay.py
index 741c47262..e7dcd5fd6 100644
--- a/yt_dlp/extractor/rtvcplay.py
+++ b/yt_dlp/extractor/rtvcplay.py
@@ -1,16 +1,17 @@
import re
-from .common import InfoExtractor, ExtractorError
+from .common import InfoExtractor
from ..utils import (
+ ExtractorError,
clean_html,
determine_ext,
- int_or_none,
float_or_none,
+ int_or_none,
js_to_json,
mimetype2ext,
traverse_obj,
- urljoin,
url_or_none,
+ urljoin,
)
diff --git a/yt_dlp/extractor/rtvs.py b/yt_dlp/extractor/rtvs.py
index a84a78da8..defb8d741 100644
--- a/yt_dlp/extractor/rtvs.py
+++ b/yt_dlp/extractor/rtvs.py
@@ -1,7 +1,6 @@
import re
from .common import InfoExtractor
-
from ..utils import (
parse_duration,
traverse_obj,
diff --git a/yt_dlp/extractor/rutube.py b/yt_dlp/extractor/rutube.py
index 287824d08..eb12f32fa 100644
--- a/yt_dlp/extractor/rutube.py
+++ b/yt_dlp/extractor/rutube.py
@@ -5,8 +5,8 @@ from ..compat import (
compat_str,
)
from ..utils import (
- determine_ext,
bool_or_none,
+ determine_ext,
int_or_none,
parse_qs,
try_get,
diff --git a/yt_dlp/extractor/rutv.py b/yt_dlp/extractor/rutv.py
index d7f9a7337..726d49111 100644
--- a/yt_dlp/extractor/rutv.py
+++ b/yt_dlp/extractor/rutv.py
@@ -1,11 +1,7 @@
import re
from .common import InfoExtractor
-from ..utils import (
- ExtractorError,
- int_or_none,
- str_to_int
-)
+from ..utils import ExtractorError, int_or_none, str_to_int
class RUTVIE(InfoExtractor):
diff --git a/yt_dlp/extractor/ruutu.py b/yt_dlp/extractor/ruutu.py
index 33f6652df..dc61387be 100644
--- a/yt_dlp/extractor/ruutu.py
+++ b/yt_dlp/extractor/ruutu.py
@@ -4,8 +4,8 @@ import re
from .common import InfoExtractor
from ..compat import compat_urllib_parse_urlparse
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
find_xpath_attr,
int_or_none,
traverse_obj,
diff --git a/yt_dlp/extractor/safari.py b/yt_dlp/extractor/safari.py
index 8d322d710..17dff0afa 100644
--- a/yt_dlp/extractor/safari.py
+++ b/yt_dlp/extractor/safari.py
@@ -2,7 +2,6 @@ import json
import re
from .common import InfoExtractor
-
from ..compat import (
compat_parse_qs,
compat_urlparse,
diff --git a/yt_dlp/extractor/scrippsnetworks.py b/yt_dlp/extractor/scrippsnetworks.py
index 3912f7786..85d51cd59 100644
--- a/yt_dlp/extractor/scrippsnetworks.py
+++ b/yt_dlp/extractor/scrippsnetworks.py
@@ -1,8 +1,8 @@
-import json
import hashlib
+import json
-from .aws import AWSIE
from .anvato import AnvatoIE
+from .aws import AWSIE
from .common import InfoExtractor
from ..utils import (
smuggle_url,
diff --git a/yt_dlp/extractor/scte.py b/yt_dlp/extractor/scte.py
index 9c2ca8c51..fc91d60e1 100644
--- a/yt_dlp/extractor/scte.py
+++ b/yt_dlp/extractor/scte.py
@@ -2,8 +2,8 @@ import re
from .common import InfoExtractor
from ..utils import (
- decode_packed_codes,
ExtractorError,
+ decode_packed_codes,
urlencode_postdata,
)
diff --git a/yt_dlp/extractor/sendtonews.py b/yt_dlp/extractor/sendtonews.py
index 1ecea71fc..99fcf51f1 100644
--- a/yt_dlp/extractor/sendtonews.py
+++ b/yt_dlp/extractor/sendtonews.py
@@ -2,12 +2,12 @@ import re
from .common import InfoExtractor
from ..utils import (
+ determine_protocol,
float_or_none,
- parse_iso8601,
- update_url_query,
int_or_none,
- determine_protocol,
+ parse_iso8601,
unescapeHTML,
+ update_url_query,
)
diff --git a/yt_dlp/extractor/seznamzpravy.py b/yt_dlp/extractor/seznamzpravy.py
index 79e888583..b31d566df 100644
--- a/yt_dlp/extractor/seznamzpravy.py
+++ b/yt_dlp/extractor/seznamzpravy.py
@@ -4,11 +4,11 @@ from ..compat import (
compat_urllib_parse_urlparse,
)
from ..utils import (
- urljoin,
int_or_none,
parse_codecs,
parse_qs,
try_get,
+ urljoin,
)
diff --git a/yt_dlp/extractor/shahid.py b/yt_dlp/extractor/shahid.py
index d509e8879..89aee2728 100644
--- a/yt_dlp/extractor/shahid.py
+++ b/yt_dlp/extractor/shahid.py
@@ -5,9 +5,9 @@ import re
from .aws import AWSIE
from ..networking.exceptions import HTTPError
from ..utils import (
- clean_html,
ExtractorError,
InAdvancePagedList,
+ clean_html,
int_or_none,
parse_iso8601,
str_or_none,
diff --git a/yt_dlp/extractor/shemaroome.py b/yt_dlp/extractor/shemaroome.py
index ec9938b8c..cca86ed6c 100644
--- a/yt_dlp/extractor/shemaroome.py
+++ b/yt_dlp/extractor/shemaroome.py
@@ -4,8 +4,8 @@ from ..compat import (
compat_b64decode,
)
from ..utils import (
- bytes_to_intlist,
ExtractorError,
+ bytes_to_intlist,
intlist_to_bytes,
unified_strdate,
)
diff --git a/yt_dlp/extractor/sixplay.py b/yt_dlp/extractor/sixplay.py
index ef93b9276..44619a16c 100644
--- a/yt_dlp/extractor/sixplay.py
+++ b/yt_dlp/extractor/sixplay.py
@@ -6,8 +6,8 @@ from ..utils import (
determine_ext,
int_or_none,
parse_qs,
- try_get,
qualities,
+ try_get,
)
diff --git a/yt_dlp/extractor/skynewsarabia.py b/yt_dlp/extractor/skynewsarabia.py
index 867782778..234703cf7 100644
--- a/yt_dlp/extractor/skynewsarabia.py
+++ b/yt_dlp/extractor/skynewsarabia.py
@@ -1,8 +1,8 @@
from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
- parse_iso8601,
parse_duration,
+ parse_iso8601,
)
diff --git a/yt_dlp/extractor/sohu.py b/yt_dlp/extractor/sohu.py
index c0ff4f9aa..a41ad303a 100644
--- a/yt_dlp/extractor/sohu.py
+++ b/yt_dlp/extractor/sohu.py
@@ -8,13 +8,13 @@ from ..compat import (
)
from ..utils import (
ExtractorError,
- int_or_none,
float_or_none,
- url_or_none,
- unified_timestamp,
+ int_or_none,
+ traverse_obj,
try_get,
+ unified_timestamp,
+ url_or_none,
urljoin,
- traverse_obj,
)
diff --git a/yt_dlp/extractor/sovietscloset.py b/yt_dlp/extractor/sovietscloset.py
index 493eea2a6..773ddd344 100644
--- a/yt_dlp/extractor/sovietscloset.py
+++ b/yt_dlp/extractor/sovietscloset.py
@@ -1,8 +1,5 @@
from .common import InfoExtractor
-from ..utils import (
- try_get,
- unified_timestamp
-)
+from ..utils import try_get, unified_timestamp
class SovietsClosetBaseIE(InfoExtractor):
diff --git a/yt_dlp/extractor/spankbang.py b/yt_dlp/extractor/spankbang.py
index 43da34a32..c73f7971d 100644
--- a/yt_dlp/extractor/spankbang.py
+++ b/yt_dlp/extractor/spankbang.py
@@ -2,8 +2,8 @@ import re
from .common import InfoExtractor
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
merge_dicts,
parse_duration,
parse_resolution,
diff --git a/yt_dlp/extractor/springboardplatform.py b/yt_dlp/extractor/springboardplatform.py
index a98584a27..bdb8ef496 100644
--- a/yt_dlp/extractor/springboardplatform.py
+++ b/yt_dlp/extractor/springboardplatform.py
@@ -4,11 +4,11 @@ from .common import InfoExtractor
from ..utils import (
ExtractorError,
int_or_none,
- xpath_attr,
- xpath_text,
- xpath_element,
unescapeHTML,
unified_timestamp,
+ xpath_attr,
+ xpath_element,
+ xpath_text,
)
diff --git a/yt_dlp/extractor/startv.py b/yt_dlp/extractor/startv.py
index bb6e8f1ea..312a4fde0 100644
--- a/yt_dlp/extractor/startv.py
+++ b/yt_dlp/extractor/startv.py
@@ -3,10 +3,10 @@ from ..compat import (
compat_str,
)
from ..utils import (
- clean_html,
ExtractorError,
- traverse_obj,
+ clean_html,
int_or_none,
+ traverse_obj,
)
diff --git a/yt_dlp/extractor/stitcher.py b/yt_dlp/extractor/stitcher.py
index 2fd200f87..46a15e6a1 100644
--- a/yt_dlp/extractor/stitcher.py
+++ b/yt_dlp/extractor/stitcher.py
@@ -1,9 +1,9 @@
from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
+ ExtractorError,
clean_html,
clean_podcast_url,
- ExtractorError,
int_or_none,
str_or_none,
try_get,
diff --git a/yt_dlp/extractor/storyfire.py b/yt_dlp/extractor/storyfire.py
index 566f77782..20a70a7bc 100644
--- a/yt_dlp/extractor/storyfire.py
+++ b/yt_dlp/extractor/storyfire.py
@@ -2,9 +2,9 @@ import functools
from .common import InfoExtractor
from ..utils import (
+ OnDemandPagedList,
format_field,
int_or_none,
- OnDemandPagedList,
smuggle_url,
)
diff --git a/yt_dlp/extractor/streamable.py b/yt_dlp/extractor/streamable.py
index 462861e0e..c303ac53a 100644
--- a/yt_dlp/extractor/streamable.py
+++ b/yt_dlp/extractor/streamable.py
@@ -3,8 +3,8 @@ from ..utils import (
ExtractorError,
float_or_none,
int_or_none,
- try_get,
parse_codecs,
+ try_get,
)
diff --git a/yt_dlp/extractor/stripchat.py b/yt_dlp/extractor/stripchat.py
index b9523c865..a847925e4 100644
--- a/yt_dlp/extractor/stripchat.py
+++ b/yt_dlp/extractor/stripchat.py
@@ -3,7 +3,7 @@ from ..utils import (
ExtractorError,
UserNotLive,
lowercase_escape,
- traverse_obj
+ traverse_obj,
)
diff --git a/yt_dlp/extractor/sunporno.py b/yt_dlp/extractor/sunporno.py
index 708873a95..501156e51 100644
--- a/yt_dlp/extractor/sunporno.py
+++ b/yt_dlp/extractor/sunporno.py
@@ -2,10 +2,10 @@ import re
from .common import InfoExtractor
from ..utils import (
- parse_duration,
+ determine_ext,
int_or_none,
+ parse_duration,
qualities,
- determine_ext,
)
diff --git a/yt_dlp/extractor/syfy.py b/yt_dlp/extractor/syfy.py
index bd2d73842..29e5e573f 100644
--- a/yt_dlp/extractor/syfy.py
+++ b/yt_dlp/extractor/syfy.py
@@ -1,7 +1,7 @@
from .adobepass import AdobePassIE
from ..utils import (
- update_url_query,
smuggle_url,
+ update_url_query,
)
diff --git a/yt_dlp/extractor/tbs.py b/yt_dlp/extractor/tbs.py
index 808c6c73d..4e178593f 100644
--- a/yt_dlp/extractor/tbs.py
+++ b/yt_dlp/extractor/tbs.py
@@ -2,8 +2,8 @@ import re
from .turner import TurnerBaseIE
from ..compat import (
- compat_urllib_parse_urlparse,
compat_parse_qs,
+ compat_urllib_parse_urlparse,
)
from ..utils import (
float_or_none,
diff --git a/yt_dlp/extractor/teachable.py b/yt_dlp/extractor/teachable.py
index 5eac9aa3f..778fa1263 100644
--- a/yt_dlp/extractor/teachable.py
+++ b/yt_dlp/extractor/teachable.py
@@ -3,10 +3,10 @@ import re
from .common import InfoExtractor
from .wistia import WistiaIE
from ..utils import (
- clean_html,
ExtractorError,
- int_or_none,
+ clean_html,
get_element_by_class,
+ int_or_none,
strip_or_none,
urlencode_postdata,
urljoin,
diff --git a/yt_dlp/extractor/teachertube.py b/yt_dlp/extractor/teachertube.py
index 90a976297..740240993 100644
--- a/yt_dlp/extractor/teachertube.py
+++ b/yt_dlp/extractor/teachertube.py
@@ -2,8 +2,8 @@ import re
from .common import InfoExtractor
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
qualities,
)
diff --git a/yt_dlp/extractor/teamcoco.py b/yt_dlp/extractor/teamcoco.py
index d32f81262..3fb899cac 100644
--- a/yt_dlp/extractor/teamcoco.py
+++ b/yt_dlp/extractor/teamcoco.py
@@ -13,8 +13,8 @@ from ..utils import (
parse_qs,
traverse_obj,
unified_timestamp,
- urljoin,
url_or_none,
+ urljoin,
)
diff --git a/yt_dlp/extractor/teamtreehouse.py b/yt_dlp/extractor/teamtreehouse.py
index dd802db5b..ba25cdcf6 100644
--- a/yt_dlp/extractor/teamtreehouse.py
+++ b/yt_dlp/extractor/teamtreehouse.py
@@ -2,9 +2,9 @@ import re
from .common import InfoExtractor
from ..utils import (
+ ExtractorError,
clean_html,
determine_ext,
- ExtractorError,
float_or_none,
get_element_by_class,
get_element_by_id,
diff --git a/yt_dlp/extractor/ted.py b/yt_dlp/extractor/ted.py
index c28a15498..0969bbb03 100644
--- a/yt_dlp/extractor/ted.py
+++ b/yt_dlp/extractor/ted.py
@@ -2,14 +2,13 @@ import itertools
import re
from .common import InfoExtractor
-
from ..utils import (
int_or_none,
+ parse_duration,
str_to_int,
try_get,
- url_or_none,
unified_strdate,
- parse_duration,
+ url_or_none,
)
diff --git a/yt_dlp/extractor/tele13.py b/yt_dlp/extractor/tele13.py
index 212af3785..1705c2d55 100644
--- a/yt_dlp/extractor/tele13.py
+++ b/yt_dlp/extractor/tele13.py
@@ -1,9 +1,9 @@
from .common import InfoExtractor
from .youtube import YoutubeIE
from ..utils import (
+ determine_ext,
js_to_json,
qualities,
- determine_ext,
)
diff --git a/yt_dlp/extractor/telewebion.py b/yt_dlp/extractor/telewebion.py
index 5fdcddd8b..380c84d98 100644
--- a/yt_dlp/extractor/telewebion.py
+++ b/yt_dlp/extractor/telewebion.py
@@ -1,4 +1,5 @@
from __future__ import annotations
+
import functools
import json
import textwrap
diff --git a/yt_dlp/extractor/tempo.py b/yt_dlp/extractor/tempo.py
index 9318d6f9a..71e54eb0c 100644
--- a/yt_dlp/extractor/tempo.py
+++ b/yt_dlp/extractor/tempo.py
@@ -5,7 +5,7 @@ from ..utils import (
int_or_none,
parse_iso8601,
traverse_obj,
- try_call
+ try_call,
)
diff --git a/yt_dlp/extractor/tencent.py b/yt_dlp/extractor/tencent.py
index 6618ea4e6..ae2cb483f 100644
--- a/yt_dlp/extractor/tencent.py
+++ b/yt_dlp/extractor/tencent.py
@@ -8,8 +8,8 @@ from .common import InfoExtractor
from ..aes import aes_cbc_encrypt_bytes
from ..utils import (
ExtractorError,
- float_or_none,
determine_ext,
+ float_or_none,
int_or_none,
js_to_json,
traverse_obj,
diff --git a/yt_dlp/extractor/theguardian.py b/yt_dlp/extractor/theguardian.py
index a231eccf4..fb6407715 100644
--- a/yt_dlp/extractor/theguardian.py
+++ b/yt_dlp/extractor/theguardian.py
@@ -10,7 +10,7 @@ from ..utils import (
parse_qs,
traverse_obj,
unified_strdate,
- urljoin
+ urljoin,
)
diff --git a/yt_dlp/extractor/theintercept.py b/yt_dlp/extractor/theintercept.py
index a991a4dfd..99f0d42ef 100644
--- a/yt_dlp/extractor/theintercept.py
+++ b/yt_dlp/extractor/theintercept.py
@@ -1,9 +1,9 @@
from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
- parse_iso8601,
- int_or_none,
ExtractorError,
+ int_or_none,
+ parse_iso8601,
)
diff --git a/yt_dlp/extractor/theplatform.py b/yt_dlp/extractor/theplatform.py
index 9160f5ec6..eeb33a660 100644
--- a/yt_dlp/extractor/theplatform.py
+++ b/yt_dlp/extractor/theplatform.py
@@ -1,29 +1,27 @@
-import re
-import time
-import hmac
import binascii
import hashlib
+import hmac
+import re
+import time
-
-from .once import OnceIE
from .adobepass import AdobePassIE
-from ..networking import Request
+from .once import OnceIE
+from ..networking import HEADRequest, Request
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
+ find_xpath_attr,
float_or_none,
int_or_none,
- parse_qs,
- unsmuggle_url,
- update_url_query,
- xpath_with_ns,
mimetype2ext,
- find_xpath_attr,
+ parse_qs,
traverse_obj,
+ unsmuggle_url,
update_url,
+ update_url_query,
urlhandle_detect_ext,
+ xpath_with_ns,
)
-from ..networking import HEADRequest
default_ns = 'http://www.w3.org/2005/SMIL21/Language'
_x = lambda p: xpath_with_ns(p, {'smil': default_ns})
diff --git a/yt_dlp/extractor/threeqsdn.py b/yt_dlp/extractor/threeqsdn.py
index 7841f8da6..f7a13d2c3 100644
--- a/yt_dlp/extractor/threeqsdn.py
+++ b/yt_dlp/extractor/threeqsdn.py
@@ -1,8 +1,8 @@
from .common import InfoExtractor
from ..networking.exceptions import HTTPError
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
float_or_none,
int_or_none,
join_nonempty,
diff --git a/yt_dlp/extractor/toypics.py b/yt_dlp/extractor/toypics.py
index aa7ee6c48..ccb2ef816 100644
--- a/yt_dlp/extractor/toypics.py
+++ b/yt_dlp/extractor/toypics.py
@@ -1,6 +1,7 @@
-from .common import InfoExtractor
import re
+from .common import InfoExtractor
+
class ToypicsIE(InfoExtractor):
_WORKING = False
diff --git a/yt_dlp/extractor/triller.py b/yt_dlp/extractor/triller.py
index 56e51fea8..3bdeedd43 100644
--- a/yt_dlp/extractor/triller.py
+++ b/yt_dlp/extractor/triller.py
@@ -14,8 +14,8 @@ from ..utils import (
traverse_obj,
unified_timestamp,
url_basename,
- urljoin,
url_or_none,
+ urljoin,
)
diff --git a/yt_dlp/extractor/trueid.py b/yt_dlp/extractor/trueid.py
index 86f0990e8..efedac180 100644
--- a/yt_dlp/extractor/trueid.py
+++ b/yt_dlp/extractor/trueid.py
@@ -1,13 +1,13 @@
from .common import InfoExtractor
from ..networking.exceptions import HTTPError
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
int_or_none,
parse_age_limit,
traverse_obj,
unified_timestamp,
- url_or_none
+ url_or_none,
)
diff --git a/yt_dlp/extractor/tumblr.py b/yt_dlp/extractor/tumblr.py
index a26bdcaae..f2d0c5901 100644
--- a/yt_dlp/extractor/tumblr.py
+++ b/yt_dlp/extractor/tumblr.py
@@ -3,7 +3,7 @@ from ..utils import (
ExtractorError,
int_or_none,
traverse_obj,
- urlencode_postdata
+ urlencode_postdata,
)
diff --git a/yt_dlp/extractor/turner.py b/yt_dlp/extractor/turner.py
index 630d84bdc..b27db87bf 100644
--- a/yt_dlp/extractor/turner.py
+++ b/yt_dlp/extractor/turner.py
@@ -3,17 +3,17 @@ import re
from .adobepass import AdobePassIE
from ..compat import compat_str
from ..utils import (
- fix_xml_ampersands,
- xpath_text,
- int_or_none,
+ ExtractorError,
determine_ext,
+ fix_xml_ampersands,
float_or_none,
+ int_or_none,
parse_duration,
- xpath_attr,
- update_url_query,
- ExtractorError,
strip_or_none,
+ update_url_query,
url_or_none,
+ xpath_attr,
+ xpath_text,
)
diff --git a/yt_dlp/extractor/tv2.py b/yt_dlp/extractor/tv2.py
index 7756aa3f5..9b19e7995 100644
--- a/yt_dlp/extractor/tv2.py
+++ b/yt_dlp/extractor/tv2.py
@@ -3,10 +3,10 @@ import re
from .common import InfoExtractor
from ..networking.exceptions import HTTPError
from ..utils import (
- determine_ext,
ExtractorError,
- int_or_none,
+ determine_ext,
float_or_none,
+ int_or_none,
js_to_json,
parse_iso8601,
remove_end,
diff --git a/yt_dlp/extractor/tv2hu.py b/yt_dlp/extractor/tv2hu.py
index 9c0a111c0..cd35ff5fb 100644
--- a/yt_dlp/extractor/tv2hu.py
+++ b/yt_dlp/extractor/tv2hu.py
@@ -1,8 +1,8 @@
# encoding: utf-8
from .common import InfoExtractor
from ..utils import (
- traverse_obj,
UnsupportedError,
+ traverse_obj,
)
diff --git a/yt_dlp/extractor/tvanouvelles.py b/yt_dlp/extractor/tvanouvelles.py
index b9f5e110e..dbebda4f4 100644
--- a/yt_dlp/extractor/tvanouvelles.py
+++ b/yt_dlp/extractor/tvanouvelles.py
@@ -1,7 +1,7 @@
import re
-from .common import InfoExtractor
from .brightcove import BrightcoveNewIE
+from .common import InfoExtractor
class TVANouvellesIE(InfoExtractor):
diff --git a/yt_dlp/extractor/tvn24.py b/yt_dlp/extractor/tvn24.py
index 527681315..ac480580a 100644
--- a/yt_dlp/extractor/tvn24.py
+++ b/yt_dlp/extractor/tvn24.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..utils import (
- int_or_none,
NO_DEFAULT,
+ int_or_none,
unescapeHTML,
)
diff --git a/yt_dlp/extractor/tvp.py b/yt_dlp/extractor/tvp.py
index a8d00e243..f1ebf027a 100644
--- a/yt_dlp/extractor/tvp.py
+++ b/yt_dlp/extractor/tvp.py
@@ -4,10 +4,10 @@ import re
from .common import InfoExtractor
from ..utils import (
+ ExtractorError,
clean_html,
determine_ext,
dict_get,
- ExtractorError,
int_or_none,
js_to_json,
str_or_none,
diff --git a/yt_dlp/extractor/tvplay.py b/yt_dlp/extractor/tvplay.py
index 48a6efe1c..29185d34b 100644
--- a/yt_dlp/extractor/tvplay.py
+++ b/yt_dlp/extractor/tvplay.py
@@ -4,8 +4,8 @@ from .common import InfoExtractor
from ..compat import compat_urlparse
from ..networking.exceptions import HTTPError
from ..utils import (
- determine_ext,
ExtractorError,
+ determine_ext,
int_or_none,
parse_iso8601,
qualities,
diff --git a/yt_dlp/extractor/tvplayer.py b/yt_dlp/extractor/tvplayer.py
index 228c2366e..d43bdc2ff 100644
--- a/yt_dlp/extractor/tvplayer.py
+++ b/yt_dlp/extractor/tvplayer.py
@@ -2,10 +2,10 @@ from .common import InfoExtractor
from ..compat import compat_str
from ..networking.exceptions import HTTPError
from ..utils import (
+ ExtractorError,
extract_attributes,
try_get,
urlencode_postdata,
- ExtractorError,
)
diff --git a/yt_dlp/extractor/tweakers.py b/yt_dlp/extractor/tweakers.py
index e8e1fc666..9249550c9 100644
--- a/yt_dlp/extractor/tweakers.py
+++ b/yt_dlp/extractor/tweakers.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..utils import (
- int_or_none,
determine_ext,
+ int_or_none,
mimetype2ext,
)
diff --git a/yt_dlp/extractor/twitter.py b/yt_dlp/extractor/twitter.py
index fc80dade8..1a11162a0 100644
--- a/yt_dlp/extractor/twitter.py
+++ b/yt_dlp/extractor/twitter.py
@@ -1,10 +1,10 @@
+import functools
import json
import random
import re
from .common import InfoExtractor
from .periscope import PeriscopeBaseIE, PeriscopeIE
-from ..compat import functools # isort: split
from ..compat import (
compat_parse_qs,
compat_urllib_parse_unquote,
diff --git a/yt_dlp/extractor/udn.py b/yt_dlp/extractor/udn.py
index 10668ac4b..d5849d29b 100644
--- a/yt_dlp/extractor/udn.py
+++ b/yt_dlp/extractor/udn.py
@@ -1,12 +1,12 @@
import re
from .common import InfoExtractor
+from ..compat import compat_urlparse
from ..utils import (
determine_ext,
int_or_none,
js_to_json,
)
-from ..compat import compat_urlparse
class UDNEmbedIE(InfoExtractor):
diff --git a/yt_dlp/extractor/ukcolumn.py b/yt_dlp/extractor/ukcolumn.py
index f914613c0..f141804c8 100644
--- a/yt_dlp/extractor/ukcolumn.py
+++ b/yt_dlp/extractor/ukcolumn.py
@@ -1,11 +1,11 @@
+from .common import InfoExtractor
+from .vimeo import VimeoIE
+from .youtube import YoutubeIE
from ..utils import (
+ ExtractorError,
unescapeHTML,
urljoin,
- ExtractorError,
)
-from .common import InfoExtractor
-from .vimeo import VimeoIE
-from .youtube import YoutubeIE
class UkColumnIE(InfoExtractor):
diff --git a/yt_dlp/extractor/urplay.py b/yt_dlp/extractor/urplay.py
index 7f97fc95f..928e6e1c2 100644
--- a/yt_dlp/extractor/urplay.py
+++ b/yt_dlp/extractor/urplay.py
@@ -1,9 +1,9 @@
from .common import InfoExtractor
from ..utils import (
- dict_get,
ExtractorError,
- int_or_none,
ISO639Utils,
+ dict_get,
+ int_or_none,
parse_age_limit,
try_get,
unified_timestamp,
diff --git a/yt_dlp/extractor/usatoday.py b/yt_dlp/extractor/usatoday.py
index 3243f3e3b..42a28c509 100644
--- a/yt_dlp/extractor/usatoday.py
+++ b/yt_dlp/extractor/usatoday.py
@@ -1,4 +1,5 @@
from .common import InfoExtractor
+from ..compat import compat_str
from ..utils import (
ExtractorError,
get_element_by_attribute,
@@ -6,7 +7,6 @@ from ..utils import (
try_get,
update_url_query,
)
-from ..compat import compat_str
class USATodayIE(InfoExtractor):
diff --git a/yt_dlp/extractor/ustream.py b/yt_dlp/extractor/ustream.py
index 5df241653..046e3d768 100644
--- a/yt_dlp/extractor/ustream.py
+++ b/yt_dlp/extractor/ustream.py
@@ -7,10 +7,10 @@ from ..compat import (
compat_urlparse,
)
from ..utils import (
- encode_data_uri,
ExtractorError,
- int_or_none,
+ encode_data_uri,
float_or_none,
+ int_or_none,
join_nonempty,
mimetype2ext,
str_or_none,
diff --git a/yt_dlp/extractor/ustudio.py b/yt_dlp/extractor/ustudio.py
index c3aeeb961..f6ce5b357 100644
--- a/yt_dlp/extractor/ustudio.py
+++ b/yt_dlp/extractor/ustudio.py
@@ -1,8 +1,8 @@
from .common import InfoExtractor
from ..utils import (
int_or_none,
- unified_strdate,
unescapeHTML,
+ unified_strdate,
)
diff --git a/yt_dlp/extractor/veo.py b/yt_dlp/extractor/veo.py
index ef44d421e..205f8ea63 100644
--- a/yt_dlp/extractor/veo.py
+++ b/yt_dlp/extractor/veo.py
@@ -1,5 +1,4 @@
from .common import InfoExtractor
-
from ..utils import (
int_or_none,
mimetype2ext,
diff --git a/yt_dlp/extractor/vesti.py b/yt_dlp/extractor/vesti.py
index 3f2dddbe9..a2e90226a 100644
--- a/yt_dlp/extractor/vesti.py
+++ b/yt_dlp/extractor/vesti.py
@@ -1,8 +1,8 @@
import re
from .common import InfoExtractor
-from ..utils import ExtractorError
from .rutv import RUTVIE
+from ..utils import ExtractorError
class VestiIE(InfoExtractor):
diff --git a/yt_dlp/extractor/vevo.py b/yt_dlp/extractor/vevo.py
index aa40227a7..7715d6839 100644
--- a/yt_dlp/extractor/vevo.py
+++ b/yt_dlp/extractor/vevo.py
@@ -1,5 +1,5 @@
-import re
import json
+import re
from .common import InfoExtractor
from ..compat import compat_str
diff --git a/yt_dlp/extractor/vice.py b/yt_dlp/extractor/vice.py
index d31908fb1..b072d9d73 100644
--- a/yt_dlp/extractor/vice.py
+++ b/yt_dlp/extractor/vice.py
@@ -10,10 +10,10 @@ from .youtube import YoutubeIE
from ..compat import compat_str
from ..networking.exceptions import HTTPError
from ..utils import (
- clean_html,
ExtractorError,
- int_or_none,
OnDemandPagedList,
+ clean_html,
+ int_or_none,
parse_age_limit,
str_or_none,
try_get,
diff --git a/yt_dlp/extractor/vidio.py b/yt_dlp/extractor/vidio.py
index 770aa284d..6322bb04b 100644
--- a/yt_dlp/extractor/vidio.py
+++ b/yt_dlp/extractor/vidio.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..utils import (
- clean_html,
ExtractorError,
+ clean_html,
format_field,
get_element_by_class,
int_or_none,
diff --git a/yt_dlp/extractor/vidlii.py b/yt_dlp/extractor/vidlii.py
index 44353b7fc..e1219a8a0 100644
--- a/yt_dlp/extractor/vidlii.py
+++ b/yt_dlp/extractor/vidlii.py
@@ -3,8 +3,8 @@ import re
from .common import InfoExtractor
from ..networking import HEADRequest
from ..utils import (
- format_field,
float_or_none,
+ format_field,
get_element_by_id,
int_or_none,
str_to_int,
diff --git a/yt_dlp/extractor/vimeo.py b/yt_dlp/extractor/vimeo.py
index 91b976403..ac96ade18 100644
--- a/yt_dlp/extractor/vimeo.py
+++ b/yt_dlp/extractor/vimeo.py
@@ -1,21 +1,21 @@
import base64
import functools
-import re
import itertools
+import re
from .common import InfoExtractor
from ..compat import compat_str, compat_urlparse
from ..networking import HEADRequest, Request
from ..networking.exceptions import HTTPError
from ..utils import (
+ ExtractorError,
+ OnDemandPagedList,
clean_html,
determine_ext,
- ExtractorError,
get_element_by_class,
- js_to_json,
int_or_none,
+ js_to_json,
merge_dicts,
- OnDemandPagedList,
parse_filesize,
parse_iso8601,
parse_qs,
@@ -26,8 +26,8 @@ from ..utils import (
unified_timestamp,
unsmuggle_url,
urlencode_postdata,
- urljoin,
urlhandle_detect_ext,
+ urljoin,
)
diff --git a/yt_dlp/extractor/viu.py b/yt_dlp/extractor/viu.py
index 6f9af9f64..480f49b7b 100644
--- a/yt_dlp/extractor/viu.py
+++ b/yt_dlp/extractor/viu.py
@@ -1,8 +1,8 @@
-import re
import json
-import uuid
import random
+import re
import urllib.parse
+import uuid
from .common import InfoExtractor
from ..compat import compat_str
@@ -10,10 +10,10 @@ from ..utils import (
ExtractorError,
int_or_none,
remove_end,
+ smuggle_url,
strip_or_none,
traverse_obj,
try_get,
- smuggle_url,
unified_timestamp,
unsmuggle_url,
url_or_none,
diff --git a/yt_dlp/extractor/vk.py b/yt_dlp/extractor/vk.py
index 28d502685..132d65bca 100644
--- a/yt_dlp/extractor/vk.py
+++ b/yt_dlp/extractor/vk.py
@@ -20,6 +20,7 @@ from ..utils import (
parse_resolution,
str_or_none,
str_to_int,
+ traverse_obj,
try_call,
unescapeHTML,
unified_timestamp,
@@ -27,7 +28,6 @@ from ..utils import (
url_or_none,
urlencode_postdata,
urljoin,
- traverse_obj,
)
diff --git a/yt_dlp/extractor/walla.py b/yt_dlp/extractor/walla.py
index a1a9c1708..3ac0f8387 100644
--- a/yt_dlp/extractor/walla.py
+++ b/yt_dlp/extractor/walla.py
@@ -2,8 +2,8 @@ import re
from .common import InfoExtractor
from ..utils import (
- xpath_text,
int_or_none,
+ xpath_text,
)
diff --git a/yt_dlp/extractor/washingtonpost.py b/yt_dlp/extractor/washingtonpost.py
index 74501b1d2..1cfed2da5 100644
--- a/yt_dlp/extractor/washingtonpost.py
+++ b/yt_dlp/extractor/washingtonpost.py
@@ -1,7 +1,6 @@
import re
from .common import InfoExtractor
-
from ..utils import traverse_obj
diff --git a/yt_dlp/extractor/wdr.py b/yt_dlp/extractor/wdr.py
index f80f140ed..0b7ddd239 100644
--- a/yt_dlp/extractor/wdr.py
+++ b/yt_dlp/extractor/wdr.py
@@ -6,16 +6,16 @@ from ..compat import (
compat_urlparse,
)
from ..utils import (
+ ExtractorError,
determine_ext,
dict_get,
- ExtractorError,
js_to_json,
strip_jsonp,
try_get,
unified_strdate,
update_url_query,
- urlhandle_detect_ext,
url_or_none,
+ urlhandle_detect_ext,
)
diff --git a/yt_dlp/extractor/weibo.py b/yt_dlp/extractor/weibo.py
index 2fca745aa..b6a659385 100644
--- a/yt_dlp/extractor/weibo.py
+++ b/yt_dlp/extractor/weibo.py
@@ -1,6 +1,6 @@
+import itertools
import json
import random
-import itertools
import urllib.parse
from .common import InfoExtractor
diff --git a/yt_dlp/extractor/whowatch.py b/yt_dlp/extractor/whowatch.py
index f2808cd9f..492891d78 100644
--- a/yt_dlp/extractor/whowatch.py
+++ b/yt_dlp/extractor/whowatch.py
@@ -1,12 +1,12 @@
from .common import InfoExtractor
+from ..compat import compat_str
from ..utils import (
+ ExtractorError,
int_or_none,
qualities,
try_call,
try_get,
- ExtractorError,
)
-from ..compat import compat_str
class WhoWatchIE(InfoExtractor):
diff --git a/yt_dlp/extractor/wimtv.py b/yt_dlp/extractor/wimtv.py
index f9bf092df..d7d77c0db 100644
--- a/yt_dlp/extractor/wimtv.py
+++ b/yt_dlp/extractor/wimtv.py
@@ -1,9 +1,9 @@
from .common import InfoExtractor
from ..utils import (
+ ExtractorError,
determine_ext,
parse_duration,
urlencode_postdata,
- ExtractorError,
)
diff --git a/yt_dlp/extractor/wppilot.py b/yt_dlp/extractor/wppilot.py
index 5e590e2f4..0ef4e8e53 100644
--- a/yt_dlp/extractor/wppilot.py
+++ b/yt_dlp/extractor/wppilot.py
@@ -1,13 +1,13 @@
+import json
+import random
+import re
+
from .common import InfoExtractor
from ..utils import (
- try_get,
ExtractorError,
+ try_get,
)
-import json
-import random
-import re
-
class WPPilotBaseIE(InfoExtractor):
_VIDEO_URL = 'https://pilot.wp.pl/api/v1/channel/%s'
diff --git a/yt_dlp/extractor/wsj.py b/yt_dlp/extractor/wsj.py
index 86e264679..35fe30362 100644
--- a/yt_dlp/extractor/wsj.py
+++ b/yt_dlp/extractor/wsj.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..utils import (
- int_or_none,
float_or_none,
+ int_or_none,
unified_strdate,
)
diff --git a/yt_dlp/extractor/xhamster.py b/yt_dlp/extractor/xhamster.py
index 01ac5ddb6..0b3a620ec 100644
--- a/yt_dlp/extractor/xhamster.py
+++ b/yt_dlp/extractor/xhamster.py
@@ -4,11 +4,11 @@ import re
from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
+ ExtractorError,
clean_html,
determine_ext,
dict_get,
extract_attributes,
- ExtractorError,
float_or_none,
int_or_none,
parse_duration,
diff --git a/yt_dlp/extractor/xnxx.py b/yt_dlp/extractor/xnxx.py
index 1452aaec3..74d4f0419 100644
--- a/yt_dlp/extractor/xnxx.py
+++ b/yt_dlp/extractor/xnxx.py
@@ -2,9 +2,9 @@ import re
from .common import InfoExtractor
from ..utils import (
+ NO_DEFAULT,
determine_ext,
int_or_none,
- NO_DEFAULT,
str_to_int,
)
diff --git a/yt_dlp/extractor/xstream.py b/yt_dlp/extractor/xstream.py
index 8dd1cd9ef..322e86570 100644
--- a/yt_dlp/extractor/xstream.py
+++ b/yt_dlp/extractor/xstream.py
@@ -2,11 +2,11 @@ import re
from .common import InfoExtractor
from ..utils import (
+ find_xpath_attr,
int_or_none,
parse_iso8601,
- xpath_with_ns,
xpath_text,
- find_xpath_attr,
+ xpath_with_ns,
)
diff --git a/yt_dlp/extractor/xvideos.py b/yt_dlp/extractor/xvideos.py
index a489033ab..6b16ac291 100644
--- a/yt_dlp/extractor/xvideos.py
+++ b/yt_dlp/extractor/xvideos.py
@@ -3,9 +3,9 @@ import re
from .common import InfoExtractor
from ..compat import compat_urllib_parse_unquote
from ..utils import (
+ ExtractorError,
clean_html,
determine_ext,
- ExtractorError,
int_or_none,
parse_duration,
)
diff --git a/yt_dlp/extractor/xxxymovies.py b/yt_dlp/extractor/xxxymovies.py
index e3e3a9fe6..aa6c84d09 100644
--- a/yt_dlp/extractor/xxxymovies.py
+++ b/yt_dlp/extractor/xxxymovies.py
@@ -1,7 +1,7 @@
from .common import InfoExtractor
from ..utils import (
- parse_duration,
int_or_none,
+ parse_duration,
)
diff --git a/yt_dlp/extractor/yandexmusic.py b/yt_dlp/extractor/yandexmusic.py
index 794dc3eae..acfe69bf4 100644
--- a/yt_dlp/extractor/yandexmusic.py
+++ b/yt_dlp/extractor/yandexmusic.py
@@ -5,8 +5,8 @@ from .common import InfoExtractor
from ..compat import compat_str
from ..utils import (
ExtractorError,
- int_or_none,
float_or_none,
+ int_or_none,
try_get,
)
diff --git a/yt_dlp/extractor/zapiks.py b/yt_dlp/extractor/zapiks.py
index 88f526bbc..2a12aa509 100644
--- a/yt_dlp/extractor/zapiks.py
+++ b/yt_dlp/extractor/zapiks.py
@@ -2,11 +2,11 @@ import re
from .common import InfoExtractor
from ..utils import (
+ int_or_none,
parse_duration,
parse_iso8601,
- xpath_with_ns,
xpath_text,
- int_or_none,
+ xpath_with_ns,
)
diff --git a/yt_dlp/extractor/zhihu.py b/yt_dlp/extractor/zhihu.py
index c24b33874..18b22a5c7 100644
--- a/yt_dlp/extractor/zhihu.py
+++ b/yt_dlp/extractor/zhihu.py
@@ -1,5 +1,5 @@
from .common import InfoExtractor
-from ..utils import format_field, float_or_none, int_or_none
+from ..utils import float_or_none, format_field, int_or_none
class ZhihuIE(InfoExtractor):
diff --git a/yt_dlp/extractor/zingmp3.py b/yt_dlp/extractor/zingmp3.py
index ff5eac89a..909a7a3ae 100644
--- a/yt_dlp/extractor/zingmp3.py
+++ b/yt_dlp/extractor/zingmp3.py
@@ -10,8 +10,8 @@ from ..utils import (
int_or_none,
join_nonempty,
try_call,
+ url_or_none,
urljoin,
- url_or_none
)
from ..utils.traversal import traverse_obj
diff --git a/yt_dlp/extractor/zype.py b/yt_dlp/extractor/zype.py
index 2f3b4c47f..8d3156d64 100644
--- a/yt_dlp/extractor/zype.py
+++ b/yt_dlp/extractor/zype.py
@@ -3,8 +3,8 @@ import re
from .common import InfoExtractor
from ..networking.exceptions import HTTPError
from ..utils import (
- dict_get,
ExtractorError,
+ dict_get,
int_or_none,
js_to_json,
parse_iso8601,