Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

build: project metadata in pyproject.toml PEP621 #5438

Merged
merged 2 commits into from
Jul 17, 2023

Conversation

bastimeyer
Copy link
Member

@bastimeyer bastimeyer commented Jul 14, 2023

Ref #5401

Fresh PR in favor of #4441 (going to close that now).


Changes

This bumps the min version requirement of setuptools to 64.0.0 and replaces the project metadata defined in the setuptools-specific setup.cfg file with the standardized metadata format in pyproject.toml (PEP621):

The important part of these changes are the resulting packaging contents (sdist and bdist), as well as the packaging metadata (core metadata). Diffs shown below.

Definition of the packaging "core metadata":

The setuptools-specific pyproject configs are still considered "BETA", but that's nothing to worry about. The "custom" (aka. non-auto) package discovery of streamlink and streamlink_cli is pretty straightforward, and so is the package-data config.

The additional license-files config is tagged as provisional, because PEP639 will solve the licensing mess in the package metadata spec once supported by setuptools (it'll deprecate certain core metadata fields, so this is just package-tooling specific stuff).


Resulting core metadata changes

The Home-Page core metadata gets replaced with the Project-Url: Homepage, ... field.

This is intended behavior of the PEP621 metadata spec because it's considered redundant. Setuptools does the correct job when writing the final package metadata by leaving out the Home-Page field (so do other build backends like hatch for example).

However, there's currently a bug in pip which doesn't respect the project URL defined in the Project-Url metadata field when Home-Page is missing (pypa/pip#11221) when running pip show without the verbose flag. That shouldn't matter too much though and it'll get fixed eventually anyway.

$ pip show streamlink
Name: streamlink
Version: 5.5.1+110.g977dfb88
Summary: Streamlink is a command-line utility that extracts streams from various services and pipes them into a video player of choice.
Home-page: 
Author: Streamlink
Author-email: [email protected]
License: Simplified BSD
Location: /home/basti/venv/streamlink-pep621/lib/python3.11/site-packages
Editable project location: /home/basti/repos/streamlink
Requires: certifi, isodate, lxml, pycountry, pycryptodome, PySocks, requests, trio, trio-websocket, typing-extensions, urllib3, websocket-client
Required-by:

Notes

  • I've removed the upper version constraint of requires-python
    See https://discuss.python.org/t/requires-python-upper-limits/12663
  • I've reformatted some upper version strings of the dependencies field for consistency reasons
  • Building the Windows-specific wheel with the streamlinkw entry script works fine, just like before

Build

$ git checkout master
$ python -m build --outdir dist --sdist --wheel
Successfully built streamlink-5.5.1+108.gd89c7967.tar.gz and streamlink-5.5.1+108.gd89c7967-py3-none-any.whl

$ git checkout build/pep-621
$ python -m build --outdir dist --sdist --wheel
Successfully built streamlink-5.5.1+110.g977dfb88.tar.gz and streamlink-5.5.1+110.g977dfb88-py3-none-any.whl

Diffs

No changes in package file structure apart from version strings in the bdist (comparing the RECORD file):

$ diff \
  <(bsdtar -tf streamlink-5.5.1+108.gd89c7967.tar.gz | cut -d/ -f2-) \
  <(bsdtar -tf streamlink-5.5.1+110.g977dfb88.tar.gz | cut -d/ -f2-)
$ sdiff -w 150 -t \
  <(bsdtar -xOzf streamlink-5.5.1+108.gd89c7967-py3-none-any.whl 'streamlink-5.5.1+108.gd89c7967.dist-info/RECORD') \
  <(bsdtar -xOzf streamlink-5.5.1+110.g977dfb88-py3-none-any.whl 'streamlink-5.5.1+110.g977dfb88.dist-info/RECORD')
streamlink/__init__.py,sha256=TiUpS1NBzJAFRAseUZm32Aoq3ZOJU8CV6DS-3uEpkEw    streamlink/__init__.py,sha256=TiUpS1NBzJAFRAseUZm32Aoq3ZOJU8CV6DS-3uEpkEw
streamlink/__main__.py,sha256=tOXv6epIZDlOwGNq_kkiFbGoqbXfQs9QnfnH1N6Bsh0    streamlink/__main__.py,sha256=tOXv6epIZDlOwGNq_kkiFbGoqbXfQs9QnfnH1N6Bsh0
streamlink/_version.py,sha256=gFiUyDG-NNqJsqaexZbALBRkcaFVpAUag2emqmii0lc |  streamlink/_version.py,sha256=y18VOQf2AP8xpkO764EpTCrc9fxxtzdqfkSHR14wQcA
streamlink/api.py,sha256=pVs16zHlgjXvnvoTXNQDem_kcuawRxT4-S3ogwmrBTk,630     streamlink/api.py,sha256=pVs16zHlgjXvnvoTXNQDem_kcuawRxT4-S3ogwmrBTk,630
streamlink/buffers.py,sha256=EslOeeZM89chqVChFZ01J4wLOREJlCoLZS-ZuEC80ow,    streamlink/buffers.py,sha256=EslOeeZM89chqVChFZ01J4wLOREJlCoLZS-ZuEC80ow,
streamlink/cache.py,sha256=QdXP5KDlTNzVLANROFLUizAqGuak_0VVN0hDy8mHzUg,35    streamlink/cache.py,sha256=QdXP5KDlTNzVLANROFLUizAqGuak_0VVN0hDy8mHzUg,35
streamlink/compat.py,sha256=uetDQwobk2xgw7CnNLHdfwf3_KsEAzAZVxf0IDqQo-0,1    streamlink/compat.py,sha256=uetDQwobk2xgw7CnNLHdfwf3_KsEAzAZVxf0IDqQo-0,1
streamlink/exceptions.py,sha256=OsU-MTO3XINkSKhFMxqY2EUdz1UZUGnSoKSowSkRD    streamlink/exceptions.py,sha256=OsU-MTO3XINkSKhFMxqY2EUdz1UZUGnSoKSowSkRD
streamlink/logger.py,sha256=8Q_M1XsBnlxMWt2VrToxzB9-pSxLzgTwAu5_cW39Nos,8    streamlink/logger.py,sha256=8Q_M1XsBnlxMWt2VrToxzB9-pSxLzgTwAu5_cW39Nos,8
streamlink/options.py,sha256=8iM01ec0SeIYIKxH72y68NFdk9jk594Cd0n4NwQBt-Y,    streamlink/options.py,sha256=8iM01ec0SeIYIKxH72y68NFdk9jk594Cd0n4NwQBt-Y,
streamlink/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0     streamlink/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
streamlink/session.py,sha256=ZTC0ljeo-4R6c7Pg1m3ZJ30s7l-qqt6RXXQ1pU3hu4A,    streamlink/session.py,sha256=ZTC0ljeo-4R6c7Pg1m3ZJ30s7l-qqt6RXXQ1pU3hu4A,
streamlink/user_input.py,sha256=1e0tgt3FbRUbPfmerp70tUI5FalHUnucqtePAWQUi    streamlink/user_input.py,sha256=1e0tgt3FbRUbPfmerp70tUI5FalHUnucqtePAWQUi
streamlink/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ    streamlink/packages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJ
streamlink/packages/requests_file.py,sha256=rM6Hns3UYPqkrbR4oqFgcvfIUwZQu    streamlink/packages/requests_file.py,sha256=rM6Hns3UYPqkrbR4oqFgcvfIUwZQu
streamlink/plugin/__init__.py,sha256=RUv1UdK_ILdaekQPdPg0w6-SYCYCqN2k-85A    streamlink/plugin/__init__.py,sha256=RUv1UdK_ILdaekQPdPg0w6-SYCYCqN2k-85A
streamlink/plugin/plugin.py,sha256=TCep50nXIIGZzGYdUPiNKfIQRo0Pk2J6L3yahV    streamlink/plugin/plugin.py,sha256=TCep50nXIIGZzGYdUPiNKfIQRo0Pk2J6L3yahV
streamlink/plugin/api/__init__.py,sha256=zIOm_meB4FtKaLvkHfUGkFjoxzzU4Qaj    streamlink/plugin/api/__init__.py,sha256=zIOm_meB4FtKaLvkHfUGkFjoxzzU4Qaj
streamlink/plugin/api/http_session.py,sha256=b79wGhh9l3T-J8nvoX4hUQdwfejr    streamlink/plugin/api/http_session.py,sha256=b79wGhh9l3T-J8nvoX4hUQdwfejr
streamlink/plugin/api/useragents.py,sha256=lqGpUaKt_1KpvTRJfqwZJLeqcPmH7X    streamlink/plugin/api/useragents.py,sha256=lqGpUaKt_1KpvTRJfqwZJLeqcPmH7X
streamlink/plugin/api/websocket.py,sha256=QoKbMOmS9dEkeLiyD74PaCNnj4nYMY3    streamlink/plugin/api/websocket.py,sha256=QoKbMOmS9dEkeLiyD74PaCNnj4nYMY3
streamlink/plugin/api/validate/__init__.py,sha256=UykllBP_2iA94eQ7HR_u3zS    streamlink/plugin/api/validate/__init__.py,sha256=UykllBP_2iA94eQ7HR_u3zS
streamlink/plugin/api/validate/_exception.py,sha256=5D0EIStsVyJYdr1kGjhYp    streamlink/plugin/api/validate/_exception.py,sha256=5D0EIStsVyJYdr1kGjhYp
streamlink/plugin/api/validate/_schemas.py,sha256=VcZA2O4IdnJTTmNcmERoCJ8    streamlink/plugin/api/validate/_schemas.py,sha256=VcZA2O4IdnJTTmNcmERoCJ8
streamlink/plugin/api/validate/_validate.py,sha256=DJToTFvWFRKHmNQ8eFB7qA    streamlink/plugin/api/validate/_validate.py,sha256=DJToTFvWFRKHmNQ8eFB7qA
streamlink/plugin/api/validate/_validators.py,sha256=Qos12axAy_e0MRGf3rXc    streamlink/plugin/api/validate/_validators.py,sha256=Qos12axAy_e0MRGf3rXc
streamlink/plugins/__init__.py,sha256=RopzjJFXx4EjJO1yz39b25BFflpAbfnIueT    streamlink/plugins/__init__.py,sha256=RopzjJFXx4EjJO1yz39b25BFflpAbfnIueT
streamlink/plugins/abematv.py,sha256=wm7vH01jHL9tyvzR9-OmJCphs8fCktO5eDjb    streamlink/plugins/abematv.py,sha256=wm7vH01jHL9tyvzR9-OmJCphs8fCktO5eDjb
streamlink/plugins/adultswim.py,sha256=cS59FDu7trNKu7TbvEmx6xx9-CqCJxJE1M    streamlink/plugins/adultswim.py,sha256=cS59FDu7trNKu7TbvEmx6xx9-CqCJxJE1M
streamlink/plugins/afreeca.py,sha256=WQbjtE08NEOwgbF6KZqg7no_UqGH3lipN2ck    streamlink/plugins/afreeca.py,sha256=WQbjtE08NEOwgbF6KZqg7no_UqGH3lipN2ck
streamlink/plugins/albavision.py,sha256=AnpQcgynJ4fD-pPeDsrg6IVkghTrAH2OI    streamlink/plugins/albavision.py,sha256=AnpQcgynJ4fD-pPeDsrg6IVkghTrAH2OI
streamlink/plugins/aloula.py,sha256=yhEy8ovCcZvd_IadvtOxaV2GraXGlY8yXywAH    streamlink/plugins/aloula.py,sha256=yhEy8ovCcZvd_IadvtOxaV2GraXGlY8yXywAH
streamlink/plugins/app17.py,sha256=9Cd7s2ztxqBkAaq6P_01rA-cQpTV6fWKbrMpH4    streamlink/plugins/app17.py,sha256=9Cd7s2ztxqBkAaq6P_01rA-cQpTV6fWKbrMpH4
streamlink/plugins/ard_live.py,sha256=rttQrb9pijXuII4wsJfg0XJ7z5al6TeHI8P    streamlink/plugins/ard_live.py,sha256=rttQrb9pijXuII4wsJfg0XJ7z5al6TeHI8P
streamlink/plugins/ard_mediathek.py,sha256=8p-TWyvIl1Vc_BVvPweYIyIT9CkS-S    streamlink/plugins/ard_mediathek.py,sha256=8p-TWyvIl1Vc_BVvPweYIyIT9CkS-S
streamlink/plugins/artetv.py,sha256=De78ZkyXPdjTPsGkSbSWzlu9ooCL-7nzCxSX1    streamlink/plugins/artetv.py,sha256=De78ZkyXPdjTPsGkSbSWzlu9ooCL-7nzCxSX1
streamlink/plugins/atpchallenger.py,sha256=Oi34P5xR9hbNMkT9L7CBnS2TxW4Epm    streamlink/plugins/atpchallenger.py,sha256=Oi34P5xR9hbNMkT9L7CBnS2TxW4Epm
streamlink/plugins/atresplayer.py,sha256=1FSbHzWt4-wDt1OrZCO6laTZVaKUoOuH    streamlink/plugins/atresplayer.py,sha256=1FSbHzWt4-wDt1OrZCO6laTZVaKUoOuH
streamlink/plugins/bbciplayer.py,sha256=xbv4kwnIfcnpCCfXxt_YIGh8tWO5n_G6B    streamlink/plugins/bbciplayer.py,sha256=xbv4kwnIfcnpCCfXxt_YIGh8tWO5n_G6B
streamlink/plugins/bfmtv.py,sha256=jn9VhNEQDpMN3NUJZFcS2wuwCqe55sJ4XRi5u9    streamlink/plugins/bfmtv.py,sha256=jn9VhNEQDpMN3NUJZFcS2wuwCqe55sJ4XRi5u9
streamlink/plugins/bigo.py,sha256=p8Xi0VT_n4xgznWuQEyT1nLnPM0gB3sXYKV3T7Z    streamlink/plugins/bigo.py,sha256=p8Xi0VT_n4xgznWuQEyT1nLnPM0gB3sXYKV3T7Z
streamlink/plugins/bilibili.py,sha256=U_t5-Bh9wij9KwzewB0F0iTvMAAcBTN7XCF    streamlink/plugins/bilibili.py,sha256=U_t5-Bh9wij9KwzewB0F0iTvMAAcBTN7XCF
streamlink/plugins/blazetv.py,sha256=8UhvsoDGxIZclSef5l8rzf9d0skzZh2TITVi    streamlink/plugins/blazetv.py,sha256=8UhvsoDGxIZclSef5l8rzf9d0skzZh2TITVi
streamlink/plugins/bloomberg.py,sha256=myKrpNUrQLmIdnGKCu9DQq8CixNrvHMqaK    streamlink/plugins/bloomberg.py,sha256=myKrpNUrQLmIdnGKCu9DQq8CixNrvHMqaK
streamlink/plugins/booyah.py,sha256=wv8w39TIDptDYmAz21y2CNZi9a2JiSZdaoe2n    streamlink/plugins/booyah.py,sha256=wv8w39TIDptDYmAz21y2CNZi9a2JiSZdaoe2n
streamlink/plugins/brightcove.py,sha256=zJ33a_SItwfJ3S_sj3hKy1ZLm5H_4nLEr    streamlink/plugins/brightcove.py,sha256=zJ33a_SItwfJ3S_sj3hKy1ZLm5H_4nLEr
streamlink/plugins/btv.py,sha256=HbPFbMBPG0h_C-FJoxD_UpETPvFL4x84dF_wc34n    streamlink/plugins/btv.py,sha256=HbPFbMBPG0h_C-FJoxD_UpETPvFL4x84dF_wc34n
streamlink/plugins/cbsnews.py,sha256=VxckCEdAr1ejgnEvu9wGZfwRn_K8wiZbuAMa    streamlink/plugins/cbsnews.py,sha256=VxckCEdAr1ejgnEvu9wGZfwRn_K8wiZbuAMa
streamlink/plugins/cdnbg.py,sha256=6NPNnZS04cnwkOGIc7V5tufSTJx6DnJboX1QgF    streamlink/plugins/cdnbg.py,sha256=6NPNnZS04cnwkOGIc7V5tufSTJx6DnJboX1QgF
streamlink/plugins/ceskatelevize.py,sha256=2zngteRgZ0G26lFak_CdRI9KhKCE9s    streamlink/plugins/ceskatelevize.py,sha256=2zngteRgZ0G26lFak_CdRI9KhKCE9s
streamlink/plugins/cinergroup.py,sha256=i9IyV5cMlZJCUjAQY1FifGwKdFMLcIFWQ    streamlink/plugins/cinergroup.py,sha256=i9IyV5cMlZJCUjAQY1FifGwKdFMLcIFWQ
streamlink/plugins/clubbingtv.py,sha256=psl475lyLEf4-TzDzmeEMFkPE-8PAEGbB    streamlink/plugins/clubbingtv.py,sha256=psl475lyLEf4-TzDzmeEMFkPE-8PAEGbB
streamlink/plugins/cmmedia.py,sha256=QfzekJ2LYuDw8nZ4uFJGvtu6b7ciYaAyiV1q    streamlink/plugins/cmmedia.py,sha256=QfzekJ2LYuDw8nZ4uFJGvtu6b7ciYaAyiV1q
streamlink/plugins/cnews.py,sha256=u3L6N8Pd2QnIujS2zXBUEiN_-gCHOxmTR2ybve    streamlink/plugins/cnews.py,sha256=u3L6N8Pd2QnIujS2zXBUEiN_-gCHOxmTR2ybve
streamlink/plugins/crunchyroll.py,sha256=kdIv4kTd_Kk3TfL_Bfebvmep6ehCqoEa    streamlink/plugins/crunchyroll.py,sha256=kdIv4kTd_Kk3TfL_Bfebvmep6ehCqoEa
streamlink/plugins/dailymotion.py,sha256=Y3qgO3WLb4HejiDICnVXJCOQyGZKv98-    streamlink/plugins/dailymotion.py,sha256=Y3qgO3WLb4HejiDICnVXJCOQyGZKv98-
streamlink/plugins/dash.py,sha256=A3YFOK8azVCOtAG3XML-tpPbGpLAr9-FkgYecJf    streamlink/plugins/dash.py,sha256=A3YFOK8azVCOtAG3XML-tpPbGpLAr9-FkgYecJf
streamlink/plugins/delfi.py,sha256=4iEUCIBtj4NTHvNQ6i-EejHHQrNUSyhqFEZDgy    streamlink/plugins/delfi.py,sha256=4iEUCIBtj4NTHvNQ6i-EejHHQrNUSyhqFEZDgy
streamlink/plugins/deutschewelle.py,sha256=xVZibhy6P-nIleBsPKybgW8ALFWEmp    streamlink/plugins/deutschewelle.py,sha256=xVZibhy6P-nIleBsPKybgW8ALFWEmp
streamlink/plugins/dlive.py,sha256=4f6svIjRLV41gQ_sseU_32ulqiSwbaFQnVEwHH    streamlink/plugins/dlive.py,sha256=4f6svIjRLV41gQ_sseU_32ulqiSwbaFQnVEwHH
streamlink/plugins/dogan.py,sha256=SydlPo0wTa7Zm51ZIaTnnIZEXbJhkStBR2XpTw    streamlink/plugins/dogan.py,sha256=SydlPo0wTa7Zm51ZIaTnnIZEXbJhkStBR2XpTw
streamlink/plugins/dogus.py,sha256=340feIgZOjJ4_zeLQMn__qj_eEPoe2ahs3UkNs    streamlink/plugins/dogus.py,sha256=340feIgZOjJ4_zeLQMn__qj_eEPoe2ahs3UkNs
streamlink/plugins/drdk.py,sha256=U-5wdRXE5rBOHF_i5Uz9J4-j4v30nicyZ7odGRd    streamlink/plugins/drdk.py,sha256=U-5wdRXE5rBOHF_i5Uz9J4-j4v30nicyZ7odGRd
streamlink/plugins/earthcam.py,sha256=h8qwg1se8QcGGJzvxLLuDVImg959fXl02pL    streamlink/plugins/earthcam.py,sha256=h8qwg1se8QcGGJzvxLLuDVImg959fXl02pL
streamlink/plugins/euronews.py,sha256=25hxSvNwVT1kQ1En_z6FZFHMcNqFMfZS5N0    streamlink/plugins/euronews.py,sha256=25hxSvNwVT1kQ1En_z6FZFHMcNqFMfZS5N0
streamlink/plugins/facebook.py,sha256=HBlSJOvAaqLVWchvw5qSBkApyrAbZeSpcIJ    streamlink/plugins/facebook.py,sha256=HBlSJOvAaqLVWchvw5qSBkApyrAbZeSpcIJ
streamlink/plugins/filmon.py,sha256=dm8jWbGC_Zc5lMpyRMWYZNwH8AIafo2ogUPFu    streamlink/plugins/filmon.py,sha256=dm8jWbGC_Zc5lMpyRMWYZNwH8AIafo2ogUPFu
streamlink/plugins/foxtr.py,sha256=LcSfkmsUqD8iNaSpOTa3cN6Y51nhshcfIcQYWs    streamlink/plugins/foxtr.py,sha256=LcSfkmsUqD8iNaSpOTa3cN6Y51nhshcfIcQYWs
streamlink/plugins/funimationnow.py,sha256=__TM-Xog8VfdOq3xjtBe47vKaWwxTW    streamlink/plugins/funimationnow.py,sha256=__TM-Xog8VfdOq3xjtBe47vKaWwxTW
streamlink/plugins/galatasaraytv.py,sha256=ojgFCSjphuDxQ_EAlOxFErLhVdMeG-    streamlink/plugins/galatasaraytv.py,sha256=ojgFCSjphuDxQ_EAlOxFErLhVdMeG-
streamlink/plugins/goltelevision.py,sha256=tUd1v440rep01Fx92wA2UK_A5HXvNX    streamlink/plugins/goltelevision.py,sha256=tUd1v440rep01Fx92wA2UK_A5HXvNX
streamlink/plugins/goodgame.py,sha256=lZ3JvPZ0jIl2j8U5jSKmIaTfEO0Lgxy07Jz    streamlink/plugins/goodgame.py,sha256=lZ3JvPZ0jIl2j8U5jSKmIaTfEO0Lgxy07Jz
streamlink/plugins/googledrive.py,sha256=_2fQKDClaq5G7jgC9RT1HcYSXK_83hUB    streamlink/plugins/googledrive.py,sha256=_2fQKDClaq5G7jgC9RT1HcYSXK_83hUB
streamlink/plugins/gulli.py,sha256=raC2lwVj2meInnATwjFq9pnl6ObEQoq14PrJrK    streamlink/plugins/gulli.py,sha256=raC2lwVj2meInnATwjFq9pnl6ObEQoq14PrJrK
streamlink/plugins/hiplayer.py,sha256=o5653fAdVeHAMvV1qisVBuxO6Hy4zfk6L2l    streamlink/plugins/hiplayer.py,sha256=o5653fAdVeHAMvV1qisVBuxO6Hy4zfk6L2l
streamlink/plugins/hls.py,sha256=0ICRMSxB5u6Qdx3V0L6QDS71aTrRC7Wtfvy6wHCs    streamlink/plugins/hls.py,sha256=0ICRMSxB5u6Qdx3V0L6QDS71aTrRC7Wtfvy6wHCs
streamlink/plugins/http.py,sha256=kfAfV9EKmY3biQ3HjRBE0ipputuRyDpiLeueeND    streamlink/plugins/http.py,sha256=kfAfV9EKmY3biQ3HjRBE0ipputuRyDpiLeueeND
streamlink/plugins/htv.py,sha256=kg95YG7y-N1tu55-M8zWxwrWiT0d_aSuWhenxKcl    streamlink/plugins/htv.py,sha256=kg95YG7y-N1tu55-M8zWxwrWiT0d_aSuWhenxKcl
streamlink/plugins/huajiao.py,sha256=L5QcjH41oWcNfW4tEOsUDtp3h6YUFxlAq1xB    streamlink/plugins/huajiao.py,sha256=L5QcjH41oWcNfW4tEOsUDtp3h6YUFxlAq1xB
streamlink/plugins/huya.py,sha256=IrSno3TKI_RALK-2XUXQE4aK7KjlEAh2Z-uPKxQ    streamlink/plugins/huya.py,sha256=IrSno3TKI_RALK-2XUXQE4aK7KjlEAh2Z-uPKxQ
streamlink/plugins/idf1.py,sha256=o8nO4eDb-Exb9wlwsGhbkRAeheHlc-F17E42YHv    streamlink/plugins/idf1.py,sha256=o8nO4eDb-Exb9wlwsGhbkRAeheHlc-F17E42YHv
streamlink/plugins/indihometv.py,sha256=1V7PbcnLJEtG0CG2Ussvx2ihyxVwkvn6_    streamlink/plugins/indihometv.py,sha256=1V7PbcnLJEtG0CG2Ussvx2ihyxVwkvn6_
streamlink/plugins/invintus.py,sha256=ci_JVxsOpyQ5pROv347qLWMJuVtnPm0w2ws    streamlink/plugins/invintus.py,sha256=ci_JVxsOpyQ5pROv347qLWMJuVtnPm0w2ws
streamlink/plugins/kugou.py,sha256=cM7yhOvcnjO0IqMMmEYM1I64_jgYkuQmJHGBrK    streamlink/plugins/kugou.py,sha256=cM7yhOvcnjO0IqMMmEYM1I64_jgYkuQmJHGBrK
streamlink/plugins/linelive.py,sha256=kEC9VK_8e61PbqUSb7KJ1TO1_3YIDb3Gj5U    streamlink/plugins/linelive.py,sha256=kEC9VK_8e61PbqUSb7KJ1TO1_3YIDb3Gj5U
streamlink/plugins/livestream.py,sha256=mpicZnSRnB86oWcRZvx3vYa_Ov0CARYZs    streamlink/plugins/livestream.py,sha256=mpicZnSRnB86oWcRZvx3vYa_Ov0CARYZs
streamlink/plugins/lnk.py,sha256=ajtKY-pHaE3bX4KsTn1VtA8aHoFNpkpgzwv-Iz3f    streamlink/plugins/lnk.py,sha256=ajtKY-pHaE3bX4KsTn1VtA8aHoFNpkpgzwv-Iz3f
streamlink/plugins/lrt.py,sha256=f9KxJp15QC8hj5Af4zO8jOCvU8utSe8PYsGkN0qM    streamlink/plugins/lrt.py,sha256=f9KxJp15QC8hj5Af4zO8jOCvU8utSe8PYsGkN0qM
streamlink/plugins/ltv_lsm_lv.py,sha256=ApTH6skxcZcxSx-DeKTq1mqL5jvU_HH6a    streamlink/plugins/ltv_lsm_lv.py,sha256=ApTH6skxcZcxSx-DeKTq1mqL5jvU_HH6a
streamlink/plugins/mdstrm.py,sha256=5O07L2Lz_-pax2u_QOSMsXy9cSZ5GAzBE76rN    streamlink/plugins/mdstrm.py,sha256=5O07L2Lz_-pax2u_QOSMsXy9cSZ5GAzBE76rN
streamlink/plugins/mediaklikk.py,sha256=CyZgPf74W-00_d799RaLjGuXg2m3DBo1I    streamlink/plugins/mediaklikk.py,sha256=CyZgPf74W-00_d799RaLjGuXg2m3DBo1I
streamlink/plugins/mediavitrina.py,sha256=7thtZso0FeQC_uincV1VzTv_U41D09C    streamlink/plugins/mediavitrina.py,sha256=7thtZso0FeQC_uincV1VzTv_U41D09C
streamlink/plugins/mildom.py,sha256=u3ETfuSRjDVLSj13lPCS3nfnOp_BN9LyLGJ3S    streamlink/plugins/mildom.py,sha256=u3ETfuSRjDVLSj13lPCS3nfnOp_BN9LyLGJ3S
streamlink/plugins/mitele.py,sha256=O1je87mguAJ3m3hFEOTTa0mFEoCPIVBhxcY6w    streamlink/plugins/mitele.py,sha256=O1je87mguAJ3m3hFEOTTa0mFEoCPIVBhxcY6w
streamlink/plugins/mixcloud.py,sha256=F40YoVuZ4VRSQeo_GUNRB1Q02If9-pVG4fJ    streamlink/plugins/mixcloud.py,sha256=F40YoVuZ4VRSQeo_GUNRB1Q02If9-pVG4fJ
streamlink/plugins/mjunoon.py,sha256=8BP4mRBniU9qoaMM7DxbQsqJFjZN2hgetnrA    streamlink/plugins/mjunoon.py,sha256=8BP4mRBniU9qoaMM7DxbQsqJFjZN2hgetnrA
streamlink/plugins/mrtmk.py,sha256=YvMcbeCjBVC-ed0nLtFExil5CCf1BSwloYz_gu    streamlink/plugins/mrtmk.py,sha256=YvMcbeCjBVC-ed0nLtFExil5CCf1BSwloYz_gu
streamlink/plugins/n13tv.py,sha256=OX7SckewGQloULRCLGHlzlUVyC3Yc6d7_B5aJz    streamlink/plugins/n13tv.py,sha256=OX7SckewGQloULRCLGHlzlUVyC3Yc6d7_B5aJz
streamlink/plugins/nbcnews.py,sha256=m5VWzf2yHhuqsj4iI3-GEnO0ybisvQjJuC9d    streamlink/plugins/nbcnews.py,sha256=m5VWzf2yHhuqsj4iI3-GEnO0ybisvQjJuC9d
streamlink/plugins/nhkworld.py,sha256=7Gzijz8WLZ2hKqFS2lD-_A5n4A9eqlRRCfZ    streamlink/plugins/nhkworld.py,sha256=7Gzijz8WLZ2hKqFS2lD-_A5n4A9eqlRRCfZ
streamlink/plugins/nicolive.py,sha256=cAY3_UQtMwviKsBlGznkZbOzB8XYl9iebI1    streamlink/plugins/nicolive.py,sha256=cAY3_UQtMwviKsBlGznkZbOzB8XYl9iebI1
streamlink/plugins/nimotv.py,sha256=UbGC-KpIUyQtc1PYrxkh798VkjlrmVPj6vVgj    streamlink/plugins/nimotv.py,sha256=UbGC-KpIUyQtc1PYrxkh798VkjlrmVPj6vVgj
streamlink/plugins/nos.py,sha256=mCI7nIAJGP7v4bnjziNy6LOLlcljAyxLChXqeiR_    streamlink/plugins/nos.py,sha256=mCI7nIAJGP7v4bnjziNy6LOLlcljAyxLChXqeiR_
streamlink/plugins/nownews.py,sha256=nbc8OGsbWUf4CNGuACZBi29K3LNyqX-4JKNR    streamlink/plugins/nownews.py,sha256=nbc8OGsbWUf4CNGuACZBi29K3LNyqX-4JKNR
streamlink/plugins/nrk.py,sha256=fsGTztzcKaomxad_6-TUocrCpX1i1T48ptgcGadu    streamlink/plugins/nrk.py,sha256=fsGTztzcKaomxad_6-TUocrCpX1i1T48ptgcGadu
streamlink/plugins/ntv.py,sha256=4x6gBSNUzrlG6zcr5V_vFD4D5HskzjZQ1ZO3Tqod    streamlink/plugins/ntv.py,sha256=4x6gBSNUzrlG6zcr5V_vFD4D5HskzjZQ1ZO3Tqod
streamlink/plugins/okru.py,sha256=dAXfNMraEWu3eZGryrUXL2Ozxj_T6zh_p80yxX_    streamlink/plugins/okru.py,sha256=dAXfNMraEWu3eZGryrUXL2Ozxj_T6zh_p80yxX_
streamlink/plugins/olympicchannel.py,sha256=cnewJL3Upr98uhpbg9xISLGKrFh9p    streamlink/plugins/olympicchannel.py,sha256=cnewJL3Upr98uhpbg9xISLGKrFh9p
streamlink/plugins/oneplusone.py,sha256=Z-dRwV7yZyzJSsSJU2WBD2PDjG5KSsIVY    streamlink/plugins/oneplusone.py,sha256=Z-dRwV7yZyzJSsSJU2WBD2PDjG5KSsIVY
streamlink/plugins/onetv.py,sha256=xF7heY6DwRpI2Kyj2GQlGbuxk1s8WwPm3k_atd    streamlink/plugins/onetv.py,sha256=xF7heY6DwRpI2Kyj2GQlGbuxk1s8WwPm3k_atd
streamlink/plugins/openrectv.py,sha256=K4gnfS5yg2m_2IW8hFRsE1QZXwyiSJJvvh    streamlink/plugins/openrectv.py,sha256=K4gnfS5yg2m_2IW8hFRsE1QZXwyiSJJvvh
streamlink/plugins/orf_tvthek.py,sha256=UjnriFIHSGAgq7sw04gmzZhzjWlfKvXUZ    streamlink/plugins/orf_tvthek.py,sha256=UjnriFIHSGAgq7sw04gmzZhzjWlfKvXUZ
streamlink/plugins/pandalive.py,sha256=msnz6dgC4oaEN0KnjsyRk9Ho_SCnXinaV_    streamlink/plugins/pandalive.py,sha256=msnz6dgC4oaEN0KnjsyRk9Ho_SCnXinaV_
streamlink/plugins/picarto.py,sha256=NohvkKg_kOWmBCwsMTUPWVVKS7dO4x7WrhMO    streamlink/plugins/picarto.py,sha256=NohvkKg_kOWmBCwsMTUPWVVKS7dO4x7WrhMO
streamlink/plugins/piczel.py,sha256=57B47K7zPPhumPjysLrCYXyxfLVckIxzn-a-x    streamlink/plugins/piczel.py,sha256=57B47K7zPPhumPjysLrCYXyxfLVckIxzn-a-x
streamlink/plugins/pixiv.py,sha256=HP9fgkfai9StQ-u7kQo-Ev2Fa1c2_Xo7LzDzv9    streamlink/plugins/pixiv.py,sha256=HP9fgkfai9StQ-u7kQo-Ev2Fa1c2_Xo7LzDzv9
streamlink/plugins/pluto.py,sha256=f6bXixeuAUUlIHZLNZZBbf0ig91BwjfOrCt1gJ    streamlink/plugins/pluto.py,sha256=f6bXixeuAUUlIHZLNZZBbf0ig91BwjfOrCt1gJ
streamlink/plugins/pluzz.py,sha256=TMydtrolbRdoZ3YctZFiWylTPgXCKjpNcO_j9O    streamlink/plugins/pluzz.py,sha256=TMydtrolbRdoZ3YctZFiWylTPgXCKjpNcO_j9O
streamlink/plugins/qq.py,sha256=W5u-u1faq2Fbo-zTVQET8LIldp06gSiFybZkihY0k    streamlink/plugins/qq.py,sha256=W5u-u1faq2Fbo-zTVQET8LIldp06gSiFybZkihY0k
streamlink/plugins/radiko.py,sha256=fXOIw1j1hleZR-JKjlc2oeePYrcX__j8qe9cw    streamlink/plugins/radiko.py,sha256=fXOIw1j1hleZR-JKjlc2oeePYrcX__j8qe9cw
streamlink/plugins/radionet.py,sha256=ARRYw_kwrCPhWCuahYV-SKpK1L8vzQzBJ1D    streamlink/plugins/radionet.py,sha256=ARRYw_kwrCPhWCuahYV-SKpK1L8vzQzBJ1D
streamlink/plugins/raiplay.py,sha256=EH1NUEOg6p8lTUrreeAdqPH6w5MlVZM97BTs    streamlink/plugins/raiplay.py,sha256=EH1NUEOg6p8lTUrreeAdqPH6w5MlVZM97BTs
streamlink/plugins/reuters.py,sha256=ZcldeJ_CutSPjEaKr3rG8nIMQfMDsY8MwZIW    streamlink/plugins/reuters.py,sha256=ZcldeJ_CutSPjEaKr3rG8nIMQfMDsY8MwZIW
streamlink/plugins/rtbf.py,sha256=ym33lwtm5eeoks0Nfpx8m1X3MNkCNf1dCkZMHO0    streamlink/plugins/rtbf.py,sha256=ym33lwtm5eeoks0Nfpx8m1X3MNkCNf1dCkZMHO0
streamlink/plugins/rtpa.py,sha256=2zJcBAurmyZX43asYGBCBHVcUDh2Qpv4vK-03G9    streamlink/plugins/rtpa.py,sha256=2zJcBAurmyZX43asYGBCBHVcUDh2Qpv4vK-03G9
streamlink/plugins/rtpplay.py,sha256=YA29WPojFKb8YJUug7ElpKJIRdjolbXxb2T_    streamlink/plugins/rtpplay.py,sha256=YA29WPojFKb8YJUug7ElpKJIRdjolbXxb2T_
streamlink/plugins/rtve.py,sha256=123lTd9Mk7AQxUzKsinLyot3-gDOP26yGaZ2IJD    streamlink/plugins/rtve.py,sha256=123lTd9Mk7AQxUzKsinLyot3-gDOP26yGaZ2IJD
streamlink/plugins/rtvs.py,sha256=JmHTpBgpYjjXuUyDG-gNpSVKyFkQhUvvWXsQCd7    streamlink/plugins/rtvs.py,sha256=JmHTpBgpYjjXuUyDG-gNpSVKyFkQhUvvWXsQCd7
streamlink/plugins/ruv.py,sha256=YeYzymnQ71ZUCOYHPTN26-mfoc3dnIwZlPMunHVZ    streamlink/plugins/ruv.py,sha256=YeYzymnQ71ZUCOYHPTN26-mfoc3dnIwZlPMunHVZ
streamlink/plugins/sbscokr.py,sha256=g5dic8YaxCI-oOB5YaokewFwePk0ezTqeS_3    streamlink/plugins/sbscokr.py,sha256=g5dic8YaxCI-oOB5YaokewFwePk0ezTqeS_3
streamlink/plugins/schoolism.py,sha256=bWxQUhs5b6STHsw6KdjfovhFljy4l4t-68    streamlink/plugins/schoolism.py,sha256=bWxQUhs5b6STHsw6KdjfovhFljy4l4t-68
streamlink/plugins/showroom.py,sha256=-m-w_IU9Kf3Sth7itcZedW31Sa6OdwWGE1e    streamlink/plugins/showroom.py,sha256=-m-w_IU9Kf3Sth7itcZedW31Sa6OdwWGE1e
streamlink/plugins/sportal.py,sha256=hcpznpI49dd6XUo4GLykieQu-nQpzKc0e-tw    streamlink/plugins/sportal.py,sha256=hcpznpI49dd6XUo4GLykieQu-nQpzKc0e-tw
streamlink/plugins/sportschau.py,sha256=0tKrAAiC6_yrHEixlgZlLLLcE6Sp_dUJ2    streamlink/plugins/sportschau.py,sha256=0tKrAAiC6_yrHEixlgZlLLLcE6Sp_dUJ2
streamlink/plugins/ssh101.py,sha256=tLxEgBqmwEcTGS7Co6DX1NggAtSqcQf2qYzgN    streamlink/plugins/ssh101.py,sha256=tLxEgBqmwEcTGS7Co6DX1NggAtSqcQf2qYzgN
streamlink/plugins/stadium.py,sha256=2ImKNZYbtvUOR8PDhrcT0LTRbZy0tX7wmQU0    streamlink/plugins/stadium.py,sha256=2ImKNZYbtvUOR8PDhrcT0LTRbZy0tX7wmQU0
streamlink/plugins/steam.py,sha256=o_IXbcsPaUDCVR0-xHWHWxkfqWvvbWogW2r9q7    streamlink/plugins/steam.py,sha256=o_IXbcsPaUDCVR0-xHWHWxkfqWvvbWogW2r9q7
streamlink/plugins/streamable.py,sha256=and1jap7xnY8IUYP-Xj25s_63f589iS1J    streamlink/plugins/streamable.py,sha256=and1jap7xnY8IUYP-Xj25s_63f589iS1J
streamlink/plugins/streann.py,sha256=KU6r_4K-st6b_cyLLtCAmalPlKPWfsnQaofF    streamlink/plugins/streann.py,sha256=KU6r_4K-st6b_cyLLtCAmalPlKPWfsnQaofF
streamlink/plugins/stv.py,sha256=ij8K1XBBb8wOkVX1zggGCyB3TVwevTAhxU2qnBPo    streamlink/plugins/stv.py,sha256=ij8K1XBBb8wOkVX1zggGCyB3TVwevTAhxU2qnBPo
streamlink/plugins/svtplay.py,sha256=62Z1gImgZHJLpulEp9-VTWt-5CXGga7muXtL    streamlink/plugins/svtplay.py,sha256=62Z1gImgZHJLpulEp9-VTWt-5CXGga7muXtL
streamlink/plugins/swisstxt.py,sha256=3pZ-IIgcUpMcGj5RrG_9LskXbPa0z6f4dzO    streamlink/plugins/swisstxt.py,sha256=3pZ-IIgcUpMcGj5RrG_9LskXbPa0z6f4dzO
streamlink/plugins/telefe.py,sha256=47zLZ_f9TlVfvOznZ1v4GchdbvffLR37Hvdcw    streamlink/plugins/telefe.py,sha256=47zLZ_f9TlVfvOznZ1v4GchdbvffLR37Hvdcw
streamlink/plugins/telemadrid.py,sha256=VXdxe45ePvAfu-4nx6_l7En8KDQ_dlqar    streamlink/plugins/telemadrid.py,sha256=VXdxe45ePvAfu-4nx6_l7En8KDQ_dlqar
streamlink/plugins/tf1.py,sha256=PUYdDpxLwoR0db9ivlIrPz2309jgXT9BTtDeczlu    streamlink/plugins/tf1.py,sha256=PUYdDpxLwoR0db9ivlIrPz2309jgXT9BTtDeczlu
streamlink/plugins/trovo.py,sha256=lB9Wv-kdbMsbfRxo7-sKGK44sWEyIObqYvvcX_    streamlink/plugins/trovo.py,sha256=lB9Wv-kdbMsbfRxo7-sKGK44sWEyIObqYvvcX_
streamlink/plugins/turkuvaz.py,sha256=gRhpQOqCseQM5Rq6ApGBDOlhZzWLdU5K_hg    streamlink/plugins/turkuvaz.py,sha256=gRhpQOqCseQM5Rq6ApGBDOlhZzWLdU5K_hg
streamlink/plugins/tv360.py,sha256=x7m8nQn0YYMxpV523nJR0MM_dGBJRFkMF5zwwH    streamlink/plugins/tv360.py,sha256=x7m8nQn0YYMxpV523nJR0MM_dGBJRFkMF5zwwH
streamlink/plugins/tv3cat.py,sha256=voxa7k6N6tNeyS6a_hUmnPyN8t1RP8zkvxMem    streamlink/plugins/tv3cat.py,sha256=voxa7k6N6tNeyS6a_hUmnPyN8t1RP8zkvxMem
streamlink/plugins/tv4play.py,sha256=PKVCWFZ2mHeyKc4-dA1JNijG4bGWcfc2cOed    streamlink/plugins/tv4play.py,sha256=PKVCWFZ2mHeyKc4-dA1JNijG4bGWcfc2cOed
streamlink/plugins/tv5monde.py,sha256=ahgFGTIDFH5yrwX9MGQOcbbRsFE__RkZ6BH    streamlink/plugins/tv5monde.py,sha256=ahgFGTIDFH5yrwX9MGQOcbbRsFE__RkZ6BH
streamlink/plugins/tv8.py,sha256=vHJk6qTl4AJwkrI0k1mZpbX9MwM21aN_2GACT1Lx    streamlink/plugins/tv8.py,sha256=vHJk6qTl4AJwkrI0k1mZpbX9MwM21aN_2GACT1Lx
streamlink/plugins/tv999.py,sha256=lmVQ5ADAw8hbY3Q8Jna621GqLNerecW-TGRcq3    streamlink/plugins/tv999.py,sha256=lmVQ5ADAw8hbY3Q8Jna621GqLNerecW-TGRcq3
streamlink/plugins/tvibo.py,sha256=NWEgYARSoRFHxhsn455biunVycTU2UpbmL7-7G    streamlink/plugins/tvibo.py,sha256=NWEgYARSoRFHxhsn455biunVycTU2UpbmL7-7G
streamlink/plugins/tviplayer.py,sha256=JA1a8xILT1hj9duBmMq-QJksulVaf2cpVl    streamlink/plugins/tviplayer.py,sha256=JA1a8xILT1hj9duBmMq-QJksulVaf2cpVl
streamlink/plugins/tvp.py,sha256=KB-7SHk7vJ3RqaN1uxy_4fTcWI4efNS3Be14QJ8i    streamlink/plugins/tvp.py,sha256=KB-7SHk7vJ3RqaN1uxy_4fTcWI4efNS3Be14QJ8i
streamlink/plugins/tvrby.py,sha256=dkLL7Bqd0BEh1_T_WYkKKNXehfxnOvx0IGnctj    streamlink/plugins/tvrby.py,sha256=dkLL7Bqd0BEh1_T_WYkKKNXehfxnOvx0IGnctj
streamlink/plugins/tvrplus.py,sha256=RZd6J_4ZevJ9gxjbrmyvBuKC_2g2xL7S-LeD    streamlink/plugins/tvrplus.py,sha256=RZd6J_4ZevJ9gxjbrmyvBuKC_2g2xL7S-LeD
streamlink/plugins/tvtoya.py,sha256=SXMG-54m9m1AdEl0ADKijuQ-WNVXyqjKGDaxM    streamlink/plugins/tvtoya.py,sha256=SXMG-54m9m1AdEl0ADKijuQ-WNVXyqjKGDaxM
streamlink/plugins/twitcasting.py,sha256=j-32n_jTHI7PLBGm4FiZroKjWraVgKQr    streamlink/plugins/twitcasting.py,sha256=j-32n_jTHI7PLBGm4FiZroKjWraVgKQr
streamlink/plugins/twitch.py,sha256=3Gno5BYqwR57eJT1G_jm8g_7yNGrRlYH6eq4N    streamlink/plugins/twitch.py,sha256=3Gno5BYqwR57eJT1G_jm8g_7yNGrRlYH6eq4N
streamlink/plugins/useetv.py,sha256=MKcBmZMj0rap03sWf1PlbbVVTkupRLAWBD3Mx    streamlink/plugins/useetv.py,sha256=MKcBmZMj0rap03sWf1PlbbVVTkupRLAWBD3Mx
streamlink/plugins/ustreamtv.py,sha256=g977LaARp62v2KT-U6ehjG_8cOaw6uwiwS    streamlink/plugins/ustreamtv.py,sha256=g977LaARp62v2KT-U6ehjG_8cOaw6uwiwS
streamlink/plugins/ustvnow.py,sha256=v4MOhzi37IEqg6i3xXlQe_efFA6k_Rxpn9Ih    streamlink/plugins/ustvnow.py,sha256=v4MOhzi37IEqg6i3xXlQe_efFA6k_Rxpn9Ih
streamlink/plugins/vidio.py,sha256=nLJFpNq6CosOdio9wALC6SbZ8gD4dfclcdiQhV    streamlink/plugins/vidio.py,sha256=nLJFpNq6CosOdio9wALC6SbZ8gD4dfclcdiQhV
streamlink/plugins/vimeo.py,sha256=UDmKarWwlwfRPyibp-1M0I41iZ1OmQ9eiDAwz4    streamlink/plugins/vimeo.py,sha256=UDmKarWwlwfRPyibp-1M0I41iZ1OmQ9eiDAwz4
streamlink/plugins/vinhlongtv.py,sha256=Dk_gMdYHno0dckX29r35dz7KCtpBfBNql    streamlink/plugins/vinhlongtv.py,sha256=Dk_gMdYHno0dckX29r35dz7KCtpBfBNql
streamlink/plugins/vk.py,sha256=6s4J5lEV_eSru6K-cXRpIn7_B7cIf3UGdjqhkchwl    streamlink/plugins/vk.py,sha256=6s4J5lEV_eSru6K-cXRpIn7_B7cIf3UGdjqhkchwl
streamlink/plugins/vkplay.py,sha256=B9pr7J_WRDo1OO6Q7z57XGThGDupFti4Tluqw    streamlink/plugins/vkplay.py,sha256=B9pr7J_WRDo1OO6Q7z57XGThGDupFti4Tluqw
streamlink/plugins/vlive.py,sha256=G37TZKltbFDSqT-Gwtdzii16J5m5VNoVoNX_zK    streamlink/plugins/vlive.py,sha256=G37TZKltbFDSqT-Gwtdzii16J5m5VNoVoNX_zK
streamlink/plugins/vtvgo.py,sha256=av6GGcvXCnc4-RdrC2sM2DQYtCr-sAG3RVJnoq    streamlink/plugins/vtvgo.py,sha256=av6GGcvXCnc4-RdrC2sM2DQYtCr-sAG3RVJnoq
streamlink/plugins/wasd.py,sha256=_7d_iwUiMOQ3owMIgtkdjP27HdzkiTbdnS9CnIo    streamlink/plugins/wasd.py,sha256=_7d_iwUiMOQ3owMIgtkdjP27HdzkiTbdnS9CnIo
streamlink/plugins/webtv.py,sha256=rxKl4en2FHW1j4wd4J6cPDF5-BMAbRTXaheNj4    streamlink/plugins/webtv.py,sha256=rxKl4en2FHW1j4wd4J6cPDF5-BMAbRTXaheNj4
streamlink/plugins/welt.py,sha256=C0KLafMYsw0n0pF2QcOTXOnXZnN1quPEedr5xVG    streamlink/plugins/welt.py,sha256=C0KLafMYsw0n0pF2QcOTXOnXZnN1quPEedr5xVG
streamlink/plugins/wwenetwork.py,sha256=OQDoEzZzV9CJDZfyQYT50vi_CqDFx-He_    streamlink/plugins/wwenetwork.py,sha256=OQDoEzZzV9CJDZfyQYT50vi_CqDFx-He_
streamlink/plugins/youtube.py,sha256=no1hU_MnvdMDzi9hVcF3w1GazzncQrra2ZGa    streamlink/plugins/youtube.py,sha256=no1hU_MnvdMDzi9hVcF3w1GazzncQrra2ZGa
streamlink/plugins/yupptv.py,sha256=ad94N89z3EME_nPvoRMS9FCiDMds6wdAEinYm    streamlink/plugins/yupptv.py,sha256=ad94N89z3EME_nPvoRMS9FCiDMds6wdAEinYm
streamlink/plugins/zattoo.py,sha256=jfl-m9mGzW5gEtIjzfDnmwSLmP_88nvWMF_7x    streamlink/plugins/zattoo.py,sha256=jfl-m9mGzW5gEtIjzfDnmwSLmP_88nvWMF_7x
streamlink/plugins/zdf_mediathek.py,sha256=d6cHWqfx89wwPQL75RPB0UgU25-QOv    streamlink/plugins/zdf_mediathek.py,sha256=d6cHWqfx89wwPQL75RPB0UgU25-QOv
streamlink/plugins/zeenews.py,sha256=B02UcdXoGhqAkQeNfI2VrTrUlEYjQu3rDMoZ    streamlink/plugins/zeenews.py,sha256=B02UcdXoGhqAkQeNfI2VrTrUlEYjQu3rDMoZ
streamlink/plugins/zengatv.py,sha256=1wHU33Wu2sVdTtP2KMLVcrxUIEchiUP34Fpv    streamlink/plugins/zengatv.py,sha256=1wHU33Wu2sVdTtP2KMLVcrxUIEchiUP34Fpv
streamlink/plugins/zhanqi.py,sha256=kAaQn2s3WJmBU9h_WQPQb6MCr07c2W783WldH    streamlink/plugins/zhanqi.py,sha256=kAaQn2s3WJmBU9h_WQPQb6MCr07c2W783WldH
streamlink/stream/__init__.py,sha256=cAXNpGI0irPnwecxXYqOjqdd2s9e6oH2EY_O    streamlink/stream/__init__.py,sha256=cAXNpGI0irPnwecxXYqOjqdd2s9e6oH2EY_O
streamlink/stream/dash.py,sha256=7TSYtF7_6cRftmZHyzj2W2sndwUcnpP6iI61NdNg    streamlink/stream/dash.py,sha256=7TSYtF7_6cRftmZHyzj2W2sndwUcnpP6iI61NdNg
streamlink/stream/dash_manifest.py,sha256=VYXPuD-lP5XRlfyAeC1CBmAp97rIF29    streamlink/stream/dash_manifest.py,sha256=VYXPuD-lP5XRlfyAeC1CBmAp97rIF29
streamlink/stream/ffmpegmux.py,sha256=hsVhbHJw67Nzds5Lp7JO7l8lg4hLFkB6_Qd    streamlink/stream/ffmpegmux.py,sha256=hsVhbHJw67Nzds5Lp7JO7l8lg4hLFkB6_Qd
streamlink/stream/file.py,sha256=oWgXR3iMoooyo2yotfwJtRC26-lp5qOKINGJQf_x    streamlink/stream/file.py,sha256=oWgXR3iMoooyo2yotfwJtRC26-lp5qOKINGJQf_x
streamlink/stream/filtered.py,sha256=gkVTZ-AR2plMWaLWMArph8brv3l1F-wWAE5C    streamlink/stream/filtered.py,sha256=gkVTZ-AR2plMWaLWMArph8brv3l1F-wWAE5C
streamlink/stream/hls.py,sha256=UDaz_eelDHHzK5QJ9Wu3QHkm9rztW17AGu8amtmnW    streamlink/stream/hls.py,sha256=UDaz_eelDHHzK5QJ9Wu3QHkm9rztW17AGu8amtmnW
streamlink/stream/hls_playlist.py,sha256=Kd_4VcO7uqLfFdjEroLhg56bQ08xsN5-    streamlink/stream/hls_playlist.py,sha256=Kd_4VcO7uqLfFdjEroLhg56bQ08xsN5-
streamlink/stream/http.py,sha256=-OTncX8oht_d9W7SmwoVHkfWdgr8hzb5O3yxBgjV    streamlink/stream/http.py,sha256=-OTncX8oht_d9W7SmwoVHkfWdgr8hzb5O3yxBgjV
streamlink/stream/segmented.py,sha256=_xBx2D6V-hs8ylU88yTsIcIGNI1myp5rcTE    streamlink/stream/segmented.py,sha256=_xBx2D6V-hs8ylU88yTsIcIGNI1myp5rcTE
streamlink/stream/stream.py,sha256=h7DNWIJfnDKfrihufp6Wis9k-QtD-eOv_Pcd8K    streamlink/stream/stream.py,sha256=h7DNWIJfnDKfrihufp6Wis9k-QtD-eOv_Pcd8K
streamlink/stream/wrappers.py,sha256=9_nFfLqK6M1hmKBlm3VZxsQpLz6qvDn2XaDV    streamlink/stream/wrappers.py,sha256=9_nFfLqK6M1hmKBlm3VZxsQpLz6qvDn2XaDV
streamlink/utils/__init__.py,sha256=qKmSxchxhAGLHYBlyVGN0n1or0-AqsuscaiIk    streamlink/utils/__init__.py,sha256=qKmSxchxhAGLHYBlyVGN0n1or0-AqsuscaiIk
streamlink/utils/args.py,sha256=ONq57hdo3jSvR5R2VoIpttn_x6dtJZJKfaZ6O6t0_    streamlink/utils/args.py,sha256=ONq57hdo3jSvR5R2VoIpttn_x6dtJZJKfaZ6O6t0_
streamlink/utils/cache.py,sha256=qQWfrmcho0A2Ml0HCWxxjmKlH9LP8EFJEPHKvP0I    streamlink/utils/cache.py,sha256=qQWfrmcho0A2Ml0HCWxxjmKlH9LP8EFJEPHKvP0I
streamlink/utils/crypto.py,sha256=c4ala5fQcPZlCDS0pnx1ELbM9GNi9jJPoH7-S3f    streamlink/utils/crypto.py,sha256=c4ala5fQcPZlCDS0pnx1ELbM9GNi9jJPoH7-S3f
streamlink/utils/data.py,sha256=qGpNvhYqPKmAw2Wb0As1FPCZYoHjpRF_ACLl7HbhI    streamlink/utils/data.py,sha256=qGpNvhYqPKmAw2Wb0As1FPCZYoHjpRF_ACLl7HbhI
streamlink/utils/formatter.py,sha256=6YEIaaZJ7RXtwQLpeonjznG7OCt4Qeuqa-iC    streamlink/utils/formatter.py,sha256=6YEIaaZJ7RXtwQLpeonjznG7OCt4Qeuqa-iC
streamlink/utils/l10n.py,sha256=V2F1InwBbn_TD06ioeUpyuoi1WywhjPChmn9-rWAd    streamlink/utils/l10n.py,sha256=V2F1InwBbn_TD06ioeUpyuoi1WywhjPChmn9-rWAd
streamlink/utils/module.py,sha256=p2kb0ktvhQP5A_dCt4nGYppxwkHhwQjUkbf29NR    streamlink/utils/module.py,sha256=p2kb0ktvhQP5A_dCt4nGYppxwkHhwQjUkbf29NR
streamlink/utils/named_pipe.py,sha256=vpySyHINqPT-T1x6qQXomqq5lpCju2h5pSz    streamlink/utils/named_pipe.py,sha256=vpySyHINqPT-T1x6qQXomqq5lpCju2h5pSz
streamlink/utils/parse.py,sha256=1JYgs5W6DuE78GH8vz1GWyzNuj4ntKK9SqKZ-vN9    streamlink/utils/parse.py,sha256=1JYgs5W6DuE78GH8vz1GWyzNuj4ntKK9SqKZ-vN9
streamlink/utils/path.py,sha256=Sqq5nPJDi_Gr-lWDVjcpydhYDVSxNsyArZyY1pnEw    streamlink/utils/path.py,sha256=Sqq5nPJDi_Gr-lWDVjcpydhYDVSxNsyArZyY1pnEw
streamlink/utils/processoutput.py,sha256=hNtjtnrhAujvIk-2CQhrIrw2OVz45GGB    streamlink/utils/processoutput.py,sha256=hNtjtnrhAujvIk-2CQhrIrw2OVz45GGB
streamlink/utils/random.py,sha256=RTgk0swEBtc6Co30doyu5SXo4tRcNJvc1KIu-P3    streamlink/utils/random.py,sha256=RTgk0swEBtc6Co30doyu5SXo4tRcNJvc1KIu-P3
streamlink/utils/socket.py,sha256=oGx1uHTMY4lPfNHyCrBYsmyE71tghzmbByybAdW    streamlink/utils/socket.py,sha256=oGx1uHTMY4lPfNHyCrBYsmyE71tghzmbByybAdW
streamlink/utils/times.py,sha256=NYUadzlHDLnp0-dQ6ljV3B7JeQ3Htvi0lHxDEDvn    streamlink/utils/times.py,sha256=NYUadzlHDLnp0-dQ6ljV3B7JeQ3Htvi0lHxDEDvn
streamlink/utils/url.py,sha256=6GmULdLJGXCn_0pSECJ4f7vav-HewSmznsXRItyJSN    streamlink/utils/url.py,sha256=6GmULdLJGXCn_0pSECJ4f7vav-HewSmznsXRItyJSN
streamlink/webbrowser/__init__.py,sha256=s58ggzlYymMCoccKZMCGBvMBFZ81Pb75    streamlink/webbrowser/__init__.py,sha256=s58ggzlYymMCoccKZMCGBvMBFZ81Pb75
streamlink/webbrowser/chromium.py,sha256=_SnyY_puLMTwN9Y3a-zVrYSkcmMAmNhs    streamlink/webbrowser/chromium.py,sha256=_SnyY_puLMTwN9Y3a-zVrYSkcmMAmNhs
streamlink/webbrowser/exceptions.py,sha256=Q73EMWb8WXoAZukEkeKe5RczhfIQsG    streamlink/webbrowser/exceptions.py,sha256=Q73EMWb8WXoAZukEkeKe5RczhfIQsG
streamlink/webbrowser/webbrowser.py,sha256=8IzHBBavgSxXwHKcsxKSKzHA2t1Um3    streamlink/webbrowser/webbrowser.py,sha256=8IzHBBavgSxXwHKcsxKSKzHA2t1Um3
streamlink/webbrowser/cdp/__init__.py,sha256=-du2nDlzXIHqJ43if4zn_44jgP3W    streamlink/webbrowser/cdp/__init__.py,sha256=-du2nDlzXIHqJ43if4zn_44jgP3W
streamlink/webbrowser/cdp/client.py,sha256=z5s50Kia7hhBW6pvbYUI_nuFqoLUnI    streamlink/webbrowser/cdp/client.py,sha256=z5s50Kia7hhBW6pvbYUI_nuFqoLUnI
streamlink/webbrowser/cdp/connection.py,sha256=At-Ac-s7ufhKOgttMuaBemy66y    streamlink/webbrowser/cdp/connection.py,sha256=At-Ac-s7ufhKOgttMuaBemy66y
streamlink/webbrowser/cdp/exceptions.py,sha256=4SoxiQBLpufHdYTSGoGDxrHXAn    streamlink/webbrowser/cdp/exceptions.py,sha256=4SoxiQBLpufHdYTSGoGDxrHXAn
streamlink/webbrowser/cdp/devtools/__init__.py,sha256=aeYSDITXiNURfjA5V7M    streamlink/webbrowser/cdp/devtools/__init__.py,sha256=aeYSDITXiNURfjA5V7M
streamlink/webbrowser/cdp/devtools/browser.py,sha256=DGH0Teucgf8k8vGL0_7M    streamlink/webbrowser/cdp/devtools/browser.py,sha256=DGH0Teucgf8k8vGL0_7M
streamlink/webbrowser/cdp/devtools/debugger.py,sha256=LLFPuIKEOQVujbeIO2o    streamlink/webbrowser/cdp/devtools/debugger.py,sha256=LLFPuIKEOQVujbeIO2o
streamlink/webbrowser/cdp/devtools/dom.py,sha256=oKWNEclfsFz9w6bYHXN5g44J    streamlink/webbrowser/cdp/devtools/dom.py,sha256=oKWNEclfsFz9w6bYHXN5g44J
streamlink/webbrowser/cdp/devtools/emulation.py,sha256=0lWJ_ZchCJ7eHYD61d    streamlink/webbrowser/cdp/devtools/emulation.py,sha256=0lWJ_ZchCJ7eHYD61d
streamlink/webbrowser/cdp/devtools/fetch.py,sha256=OENLOv34Nm71ukV-74K1tn    streamlink/webbrowser/cdp/devtools/fetch.py,sha256=OENLOv34Nm71ukV-74K1tn
streamlink/webbrowser/cdp/devtools/input_.py,sha256=wmQvJZwF7Sc5iSLn8xbL8    streamlink/webbrowser/cdp/devtools/input_.py,sha256=wmQvJZwF7Sc5iSLn8xbL8
streamlink/webbrowser/cdp/devtools/inspector.py,sha256=b2UklYIPllhTi84sOs    streamlink/webbrowser/cdp/devtools/inspector.py,sha256=b2UklYIPllhTi84sOs
streamlink/webbrowser/cdp/devtools/io.py,sha256=HGHkWZnT24K3KqYRlc4EeVjFI    streamlink/webbrowser/cdp/devtools/io.py,sha256=HGHkWZnT24K3KqYRlc4EeVjFI
streamlink/webbrowser/cdp/devtools/network.py,sha256=kDwxkiw-wKbWPshShxH4    streamlink/webbrowser/cdp/devtools/network.py,sha256=kDwxkiw-wKbWPshShxH4
streamlink/webbrowser/cdp/devtools/page.py,sha256=WqwR2GNHia4ed-UM3jkN7PQ    streamlink/webbrowser/cdp/devtools/page.py,sha256=WqwR2GNHia4ed-UM3jkN7PQ
streamlink/webbrowser/cdp/devtools/runtime.py,sha256=UvSYEH_iycdazKAzIIlO    streamlink/webbrowser/cdp/devtools/runtime.py,sha256=UvSYEH_iycdazKAzIIlO
streamlink/webbrowser/cdp/devtools/security.py,sha256=xw_2RmrasGJJ_hcqrNd    streamlink/webbrowser/cdp/devtools/security.py,sha256=xw_2RmrasGJJ_hcqrNd
streamlink/webbrowser/cdp/devtools/target.py,sha256=qUR5Po-XAAd0dJyfl1hOn    streamlink/webbrowser/cdp/devtools/target.py,sha256=qUR5Po-XAAd0dJyfl1hOn
streamlink/webbrowser/cdp/devtools/util.py,sha256=3LpCegkv2KFUhJozWdjoVEY    streamlink/webbrowser/cdp/devtools/util.py,sha256=3LpCegkv2KFUhJozWdjoVEY
streamlink-5.5.1+108.gd89c7967.data/data/share/bash-completion/completion |  streamlink-5.5.1+110.g977dfb88.data/data/share/bash-completion/completion
streamlink-5.5.1+108.gd89c7967.data/data/share/zsh/site-functions/_stream |  streamlink-5.5.1+110.g977dfb88.data/data/share/zsh/site-functions/_stream
streamlink_cli/__init__.py,sha256=i_8Br3RCZvLLSf_ZCGq86JS0ZhIc0OjYw1N0hhw    streamlink_cli/__init__.py,sha256=i_8Br3RCZvLLSf_ZCGq86JS0ZhIc0OjYw1N0hhw
streamlink_cli/__main__.py,sha256=tOXv6epIZDlOwGNq_kkiFbGoqbXfQs9QnfnH1N6    streamlink_cli/__main__.py,sha256=tOXv6epIZDlOwGNq_kkiFbGoqbXfQs9QnfnH1N6
streamlink_cli/argparser.py,sha256=guqjo-bQXHUQTyxV_QCcUjV_CfVoqeIu8BNM69    streamlink_cli/argparser.py,sha256=guqjo-bQXHUQTyxV_QCcUjV_CfVoqeIu8BNM69
streamlink_cli/compat.py,sha256=H9lwYB3rEcZVhXAesbEJuLvoM4FkB4YFGDGdJqXiB    streamlink_cli/compat.py,sha256=H9lwYB3rEcZVhXAesbEJuLvoM4FkB4YFGDGdJqXiB
streamlink_cli/console.py,sha256=T5oUEr6E_EsADaYMoZZCeftiBr3kN0HOeXkYQJtb    streamlink_cli/console.py,sha256=T5oUEr6E_EsADaYMoZZCeftiBr3kN0HOeXkYQJtb
streamlink_cli/constants.py,sha256=Gd8o8CmDnb_-E62zCjyorIr-ybtarw93ZIM3vF    streamlink_cli/constants.py,sha256=Gd8o8CmDnb_-E62zCjyorIr-ybtarw93ZIM3vF
streamlink_cli/main.py,sha256=4SL7hRDi-0EoD8RFzn8-T2D8RIs0-yQDSDrD4c-ACXM    streamlink_cli/main.py,sha256=4SL7hRDi-0EoD8RFzn8-T2D8RIs0-yQDSDrD4c-ACXM
streamlink_cli/output.py,sha256=LgvePsDZy-Ub-ltZqp_5GdsEIJGYfN8ANjPbwqS_H    streamlink_cli/output.py,sha256=LgvePsDZy-Ub-ltZqp_5GdsEIJGYfN8ANjPbwqS_H
streamlink_cli/streamrunner.py,sha256=W4_05iHiukMyB8gVdvjyySr83HPyIputOpL    streamlink_cli/streamrunner.py,sha256=W4_05iHiukMyB8gVdvjyySr83HPyIputOpL
streamlink_cli/output/__init__.py,sha256=GKPwr6qMfvo6nLdN-nKZNN6WVzr4hZb9    streamlink_cli/output/__init__.py,sha256=GKPwr6qMfvo6nLdN-nKZNN6WVzr4hZb9
streamlink_cli/output/abc.py,sha256=OW49TvLnFt6OAbJ-0-jEkipGThM_M3texHQuZ    streamlink_cli/output/abc.py,sha256=OW49TvLnFt6OAbJ-0-jEkipGThM_M3texHQuZ
streamlink_cli/output/file.py,sha256=-1aB-6JO3h6IPIaZ75GgS4VtETsJzBOmhqHO    streamlink_cli/output/file.py,sha256=-1aB-6JO3h6IPIaZ75GgS4VtETsJzBOmhqHO
streamlink_cli/output/http.py,sha256=Pmfc2gpTnGLtmpnkQfMOIE-OIXu4kqH5rxew    streamlink_cli/output/http.py,sha256=Pmfc2gpTnGLtmpnkQfMOIE-OIXu4kqH5rxew
streamlink_cli/output/player.py,sha256=ZdKBDyjJmsyyitzGGF3xn0ipGwZnVvFxRf    streamlink_cli/output/player.py,sha256=ZdKBDyjJmsyyitzGGF3xn0ipGwZnVvFxRf
streamlink_cli/utils/__init__.py,sha256=Y9EPOQ89eQHphS-k2mbfYqWYp2Bf6YChp    streamlink_cli/utils/__init__.py,sha256=Y9EPOQ89eQHphS-k2mbfYqWYp2Bf6YChp
streamlink_cli/utils/formatter.py,sha256=91yOz_Nroa1Uq4SxDC7u_4zZz9d6gEK4    streamlink_cli/utils/formatter.py,sha256=91yOz_Nroa1Uq4SxDC7u_4zZz9d6gEK4
streamlink_cli/utils/http_server.py,sha256=_1aBr-pNip_DBytFmdVtJGNtcW3-Ig    streamlink_cli/utils/http_server.py,sha256=_1aBr-pNip_DBytFmdVtJGNtcW3-Ig
streamlink_cli/utils/path.py,sha256=18ktE6Gg7XbrdozVhPFQu0u963Td5Fm4tgihW    streamlink_cli/utils/path.py,sha256=18ktE6Gg7XbrdozVhPFQu0u963Td5Fm4tgihW
streamlink_cli/utils/player.py,sha256=6Db44aux_pv3Bp1nxgits8QqruvZaefp0j7    streamlink_cli/utils/player.py,sha256=6Db44aux_pv3Bp1nxgits8QqruvZaefp0j7
streamlink_cli/utils/progress.py,sha256=Vrmai9xsHK8BCXS_EXg0ybSK_FHw7j1oB    streamlink_cli/utils/progress.py,sha256=Vrmai9xsHK8BCXS_EXg0ybSK_FHw7j1oB
streamlink_cli/utils/versioncheck.py,sha256=FLQSL3qkluo3cKf6DiBDIyo7fT9wq    streamlink_cli/utils/versioncheck.py,sha256=FLQSL3qkluo3cKf6DiBDIyo7fT9wq
streamlink-5.5.1+108.gd89c7967.dist-info/LICENSE,sha256=8ngZTgikehorReRG6 |  streamlink-5.5.1+110.g977dfb88.dist-info/LICENSE,sha256=8ngZTgikehorReRG6
streamlink-5.5.1+108.gd89c7967.dist-info/METADATA,sha256=laqx8ccR2NL_FDgW |  streamlink-5.5.1+110.g977dfb88.dist-info/METADATA,sha256=xPvIySWidwn0NBsb
streamlink-5.5.1+108.gd89c7967.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7 |  streamlink-5.5.1+110.g977dfb88.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7
streamlink-5.5.1+108.gd89c7967.dist-info/entry_points.txt,sha256=Phgx2dUJ |  streamlink-5.5.1+110.g977dfb88.dist-info/entry_points.txt,sha256=Phgx2dUJ
streamlink-5.5.1+108.gd89c7967.dist-info/top_level.txt,sha256=nbnRVbUqQSR |  streamlink-5.5.1+110.g977dfb88.dist-info/top_level.txt,sha256=nbnRVbUqQSR
streamlink-5.5.1+108.gd89c7967.dist-info/RECORD,,                         |  streamlink-5.5.1+110.g977dfb88.dist-info/RECORD,,

And finally, the metadata diff (with the mentioned additional minor changes)

$ sdiff -t \
  <(bsdtar -xOzf streamlink-5.5.1+108.gd89c7967-py3-none-any.whl 'streamlink-5.5.1+108.gd89c7967.dist-info/METADATA') \
  <(bsdtar -xOzf streamlink-5.5.1+110.g977dfb88-py3-none-any.whl 'streamlink-5.5.1+110.g977dfb88.dist-info/METADATA')
Metadata-Version: 2.1                                              Metadata-Version: 2.1
Name: streamlink                                                   Name: streamlink
Version: 5.5.1+108.gd89c7967                                    |  Version: 5.5.1+110.g977dfb88
Summary: Streamlink is a command-line utility that extracts str    Summary: Streamlink is a command-line utility that extracts str
Home-page: https://github.com/streamlink/streamlink             <
Author: Streamlink                                                 Author: Streamlink
Author-email: [email protected]                            Author-email: [email protected]
License: Simplified BSD                                            License: Simplified BSD
                                                                >  Project-URL: Homepage, https://github.com/streamlink/streamlink
Project-URL: Documentation, https://streamlink.github.io/          Project-URL: Documentation, https://streamlink.github.io/
Project-URL: Tracker, https://github.com/streamlink/streamlink/    Project-URL: Tracker, https://github.com/streamlink/streamlink/
Project-URL: Source, https://github.com/streamlink/streamlink      Project-URL: Source, https://github.com/streamlink/streamlink
Project-URL: Funding, https://streamlink.github.io/latest/donat    Project-URL: Funding, https://streamlink.github.io/latest/donat
Classifier: Development Status :: 5 - Production/Stable            Classifier: Development Status :: 5 - Production/Stable
Classifier: License :: OSI Approved :: BSD License                 Classifier: License :: OSI Approved :: BSD License
Classifier: Environment :: Console                                 Classifier: Environment :: Console
Classifier: Intended Audience :: End Users/Desktop                 Classifier: Intended Audience :: End Users/Desktop
Classifier: Operating System :: POSIX                              Classifier: Operating System :: POSIX
Classifier: Operating System :: MacOS                              Classifier: Operating System :: MacOS
Classifier: Operating System :: Microsoft :: Windows               Classifier: Operating System :: Microsoft :: Windows
Classifier: Programming Language :: Python :: 3                    Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only            Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.8                  Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9                  Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10                 Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11                 Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Internet :: WWW/HTTP                          Classifier: Topic :: Internet :: WWW/HTTP
Classifier: Topic :: Multimedia :: Sound/Audio                     Classifier: Topic :: Multimedia :: Sound/Audio
Classifier: Topic :: Multimedia :: Video                           Classifier: Topic :: Multimedia :: Video
Classifier: Topic :: Utilities                                     Classifier: Topic :: Utilities
Requires-Python: <4,>=3.8                                       |  Requires-Python: >=3.8
Description-Content-Type: text/markdown                            Description-Content-Type: text/markdown
License-File: LICENSE                                              License-File: LICENSE
Requires-Dist: certifi                                             Requires-Dist: certifi
Requires-Dist: isodate                                             Requires-Dist: isodate
Requires-Dist: lxml (<6,>=4.6.4)                                   Requires-Dist: lxml (<6,>=4.6.4)
Requires-Dist: pycountry                                           Requires-Dist: pycountry
Requires-Dist: pycryptodome (<4,>=3.4.3)                           Requires-Dist: pycryptodome (<4,>=3.4.3)
Requires-Dist: PySocks (!=1.5.7,>=1.5.6)                           Requires-Dist: PySocks (!=1.5.7,>=1.5.6)
Requires-Dist: requests (<3.0,>=2.26.0)                         |  Requires-Dist: requests (<3,>=2.26.0)
Requires-Dist: trio (<1,>=0.22.0)                                  Requires-Dist: trio (<1,>=0.22.0)
Requires-Dist: trio-websocket (<1,>=0.9.0)                         Requires-Dist: trio-websocket (<1,>=0.9.0)
Requires-Dist: typing-extensions (>=4.0.0)                         Requires-Dist: typing-extensions (>=4.0.0)
Requires-Dist: urllib3 (<3,>=1.26.0)                               Requires-Dist: urllib3 (<3,>=1.26.0)
Requires-Dist: websocket-client (<2.0,>=1.2.1)                  |  Requires-Dist: websocket-client (<2,>=1.2.1)

<h1 align="center"><a href="https://streamlink.github.io/">Stre    <h1 align="center"><a href="https://streamlink.github.io/">Stre

<p align="center">                                                 <p align="center">
  <a href="https://streamlink.github.io/install.html"><img alt=      <a href="https://streamlink.github.io/install.html"><img alt=
  <a href="https://streamlink.github.io/changelog.html"><img al      <a href="https://streamlink.github.io/changelog.html"><img al
  <a href="https://github.com/streamlink/streamlink"><img alt="      <a href="https://github.com/streamlink/streamlink"><img alt="
  <a href="https://github.com/streamlink/streamlink/issues"><im      <a href="https://github.com/streamlink/streamlink/issues"><im
  <a href="https://github.com/streamlink/streamlink/actions?que      <a href="https://github.com/streamlink/streamlink/actions?que
  <a href="https://codecov.io/github/streamlink/streamlink?bran      <a href="https://codecov.io/github/streamlink/streamlink?bran
</p>                                                               </p>

<p align="center">                                                 <p align="center">
  A Python library and command-line interface which pipes strea      A Python library and command-line interface which pipes strea
  Avoid resource-heavy and unoptimized websites, and still enjo      Avoid resource-heavy and unoptimized websites, and still enjo
</p>                                                               </p>

<p align="center">                                                 <p align="center">
  Streamlink was forked in 2016 from the abandoned <em>Livestre      Streamlink was forked in 2016 from the abandoned <em>Livestre
</p>                                                               </p>


# 📦 Installation                                                  # 📦 Installation

Please take a look at the documentation for different ways of i    Please take a look at the documentation for different ways of i

- [Windows][streamlink-installation-windows]                       - [Windows][streamlink-installation-windows]
- [macOS][streamlink-installation-macos]                           - [macOS][streamlink-installation-macos]
- [Linux and BSD][streamlink-installation-linux-and-bsd]           - [Linux and BSD][streamlink-installation-linux-and-bsd]
- [PyPI package and source code][streamlink-installation-pypi-s    - [PyPI package and source code][streamlink-installation-pypi-s


# 👍 Features                                                      # 👍 Features

Streamlink is built on top of a plugin system which allows supp    Streamlink is built on top of a plugin system which allows supp

Most of the popular streaming services are supported, such as:     Most of the popular streaming services are supported, such as:

- [Twitch](https://www.twitch.tv)                                  - [Twitch](https://www.twitch.tv)
- [YouTube](https://www.youtube.com)                               - [YouTube](https://www.youtube.com)
- [Livestream](https://livestream.com)                             - [Livestream](https://livestream.com)
- [Dailymotion](https://www.dailymotion.com)                       - [Dailymotion](https://www.dailymotion.com)

... and many more. A list of all plugins currently included can    ... and many more. A list of all plugins currently included can


# 💡 Quickstart                                                    # 💡 Quickstart

After installing, simply run:                                      After installing, simply run:

```sh                                                              ```sh
streamlink "STREAMURL" best                                        streamlink "STREAMURL" best
```                                                                ```

The default behavior of Streamlink is to play back streams in t    The default behavior of Streamlink is to play back streams in t

For more in-depth usage, please refer to the [CLI documentation    For more in-depth usage, please refer to the [CLI documentation

An [API guide][streamlink-documentation-apiguide] and [API refe    An [API guide][streamlink-documentation-apiguide] and [API refe


# 🙏 Contributing                                                  # 🙏 Contributing

All contributions are welcome.                                     All contributions are welcome.
Feel free to open a new thread on the issue tracker or submit a    Feel free to open a new thread on the issue tracker or submit a
Please read [CONTRIBUTING.md][contributing] first. Thanks!         Please read [CONTRIBUTING.md][contributing] first. Thanks!


# ❤️ Support                                                        # ❤️ Support

If you think that Streamlink is useful and if you want to keep     If you think that Streamlink is useful and if you want to keep 
Your support is very much appreciated, thank you!                  Your support is very much appreciated, thank you!


  [streamlink-installation-windows]: https://streamlink.github.      [streamlink-installation-windows]: https://streamlink.github.
  [streamlink-installation-macos]: https://streamlink.github.io      [streamlink-installation-macos]: https://streamlink.github.io
  [streamlink-installation-linux-and-bsd]: https://streamlink.g      [streamlink-installation-linux-and-bsd]: https://streamlink.g
  [streamlink-installation-pypi-source]: https://streamlink.git      [streamlink-installation-pypi-source]: https://streamlink.git
  [streamlink-documentation-cli]: https://streamlink.github.io/      [streamlink-documentation-cli]: https://streamlink.github.io/
  [streamlink-documentation-apiguide]: https://streamlink.githu      [streamlink-documentation-apiguide]: https://streamlink.githu
  [streamlink-documentation-apiref]: https://streamlink.github.      [streamlink-documentation-apiref]: https://streamlink.github.
  [streamlink-plugins]: https://streamlink.github.io/plugins.ht      [streamlink-plugins]: https://streamlink.github.io/plugins.ht
  [player-vlc]: https://www.videolan.org/vlc/                        [player-vlc]: https://www.videolan.org/vlc/
  [contributing]: https://github.com/streamlink/streamlink/blob      [contributing]: https://github.com/streamlink/streamlink/blob
  [support]: https://streamlink.github.io/latest/donate.html         [support]: https://streamlink.github.io/latest/donate.html

Move Streamlink's project metadata from setuptools's own `setup.cfg`
to the standardized `pyproject.toml` format (PEP621)

- Bump setuptools to `>=64.0.0`
- Bump pip dev-requirement to `>=21.0.0`
- Set two `author` entries, to keep the same `Author` and `Author-email`
  core metadata in the resulting sdist and bdist packages
- Set `license.text` field instead of `license.file` and add the
  setuptools-specific `license-files` config attribute, so that
  the `License` and `License-File` core metadata doesn't change.
  License data will receive another change in the future once PEP639
  comes into effect
- By switching to PEP621 metadata, implicitly move the `Home-page`
  core metadata to `Project-URL: Homepage, ...`
- Remove upper version constraint from `requires-python`
- Reformat some version strings of the `dependencies` field
- Move setuptools's package discovery config and data-files config
  to pyproject.toml
- Remove empty setup.cfg
@bastimeyer bastimeyer merged commit 628e8ab into streamlink:master Jul 17, 2023
@bastimeyer bastimeyer deleted the build/pep-621 branch July 17, 2023 00:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant