Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package eyeD3 for openSUSE:Factory checked in at 2026-01-19 18:38:10 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/eyeD3 (Old) and /work/SRC/openSUSE:Factory/.eyeD3.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "eyeD3" Mon Jan 19 18:38:10 2026 rev:8 rq:1328042 version:0.9.9 Changes: -------- --- /work/SRC/openSUSE:Factory/eyeD3/eyeD3.changes 2025-07-31 17:47:07.778470959 +0200 +++ /work/SRC/openSUSE:Factory/.eyeD3.new.1928/eyeD3.changes 2026-01-19 18:42:15.040350183 +0100 @@ -1,0 +2,18 @@ +Sun Jan 18 13:17:31 UTC 2026 - Ben Greiner <[email protected]> + +- Update to 0.9.9 + * Remove eyed3.utils.console.getTtySize() implementation by + @nicfit in #682 + * Resolve logger warnings by @emmanuel-ferdman in #668 + * User expanduser instead of expandvars by @nicfit in #670 + * fix: catch GenreException by @nicfit in #676 + * Fix links in docs by @gene1wood in #677 + * Add Python 3.14, and EOL 3.9 by @nicfit in #681 +- Cleanup dependencies + * Remove old unused dependencies + * Remove hard requirements that aren't + * Remove unused poetry build backend from requirements: they + switched in 0.9.8 +- Use test data + +------------------------------------------------------------------- Old: ---- eyed3-0.9.8.tar.gz New: ---- eyeD3-test-data.tgz eyed3-0.9.9.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ eyeD3.spec ++++++ --- /var/tmp/diff_new_pack.vhObQE/_old 2026-01-19 18:42:16.808423339 +0100 +++ /var/tmp/diff_new_pack.vhObQE/_new 2026-01-19 18:42:16.812423504 +0100 @@ -1,7 +1,7 @@ # # spec file for package eyeD3 # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2026 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,26 +17,31 @@ Name: eyeD3 -Version: 0.9.8 +Version: 0.9.9 Release: 0 Summary: Audio files and ID3 Manipulation Tool License: GPL-2.0-or-later AND GPL-3.0-only Group: Productivity/Multimedia/Sound/Utilities URL: https://eyed3.readthedocs.io/en/latest/ -Source: https://files.pythonhosted.org/packages/source/e/eyeD3/eyed3-%{version}.tar.gz -BuildRequires: %{python_module base >= 3.9} -BuildRequires: %{python_module chardet >= 5.2.0} -BuildRequires: %{python_module colorama >= 0.4.6} +Source0: https://files.pythonhosted.org/packages/source/e/eyeD3/eyed3-%{version}.tar.gz +#Source1: https://eyed3.nicfit.net/releases/eyeD3-test-data.tgz -- unversioned, could change with releases, download manually! +Source1: eyeD3-test-data.tgz +BuildRequires: %{python_module base >= 3.10} BuildRequires: %{python_module deprecation >= 2.1.0} -BuildRequires: %{python_module factory_boy >= 3.3.3} BuildRequires: %{python_module filetype >= 1.2.0} -BuildRequires: %{python_module idna >= 2.10} BuildRequires: %{python_module pip} -BuildRequires: %{python_module poetry} -BuildRequires: %{python_module pytest} -BuildRequires: %{python_module requests >= 2.32.4} -BuildRequires: %{python_module toml >= 0.10.2} +BuildRequires: %{python_module setuptools} BuildRequires: %{python_module wheel} +# SECTION test requirements +BuildRequires: %{python_module pytest >= 8.3.5} +BuildRequires: %{python_module factory_boy >= 3.3.3} +# /SECTION +# SECTION optional requirements for plugins +BuildRequires: %{python_module PyYAML >= 6.0.2} +BuildRequires: %{python_module Pillow >= 11.3.0} +BuildRequires: %{python_module pylast >= 5.5.0} +BuildRequires: %{python_module requests >= 2.32.4} +# /SECTION BuildRequires: fdupes BuildArch: noarch # %%primary_python not available in Leap yet @@ -63,31 +68,24 @@ %package -n python-eyed3 Summary: Component library of eyeD3, an ID3 tag manipulation tool Group: Development/Languages/Python -Requires: python-chardet >= 5.2.0 -Requires: python-colorama >= 0.4.6 Requires: python-deprecation >= 2.1.0 Requires: python-filetype >= 1.2.0 -Requires: python-idna >= 2.10 -Requires: python-packaging >= 20.8 -Requires: python-pyparsing >= 2.4.7 -Requires: python-requests >= 2.32.4 -Requires: python-toml >= 0.10.2 -Requires: python-urllib3 >= 2.5.0 -Recommends: python-grako -Recommends: python-pillow # for plugins +Recommends: python-PyYAML +Recommends: python-Pillow Recommends: python-pylast Recommends: python-requests -Recommends: python-ruamel.yaml %description -n python-eyed3 eyeD3 is a Python tool for working with audio files, specifically MP3 files containing ID3 metadata (i.e. song info). %prep -%autosetup -p1 -n eyed3-%{version} +%autosetup -p1 -n eyed3-%{version} -b1 # currently broken rm eyed3/plugins/mimetype.py +# See Makefile +ln -s $PWD/../eyeD3-test-data tests/data %build %pyproject_wheel @@ -105,8 +103,8 @@ %doc README.rst %doc CONTRIBUTING.rst %doc HISTORY.rst -#%doc docs -#%doc examples +#%%doc docs +#%%doc examples %{_bindir}/eyeD3 %files %{python_files eyed3} ++++++ eyed3-0.9.8.tar.gz -> eyed3-0.9.9.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/AUTHORS.rst new/eyed3-0.9.9/AUTHORS.rst --- old/eyed3-0.9.8/AUTHORS.rst 2025-04-23 04:07:47.000000000 +0200 +++ new/eyed3-0.9.9/AUTHORS.rst 2025-11-16 16:13:46.000000000 +0100 @@ -43,3 +43,5 @@ * Steve Kowalik <[email protected]> * gersonkurz <[email protected]> * obskyr <[email protected]> + * Emmanuel Ferdman <[email protected]> + * Gene Wood <[email protected]> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/MANIFEST.in new/eyed3-0.9.9/MANIFEST.in --- old/eyed3-0.9.8/MANIFEST.in 2025-04-23 04:07:47.000000000 +0200 +++ new/eyed3-0.9.9/MANIFEST.in 2025-10-23 05:40:24.000000000 +0200 @@ -16,7 +16,6 @@ include tests/pytest.ini exclude .cookiecutter.yml -exclude .gitchangelog.rc global-exclude __pycache__ global-exclude .editorconfig global-exclude *.py[co] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/Makefile new/eyed3-0.9.9/Makefile --- old/eyed3-0.9.8/Makefile 2025-04-26 23:18:25.000000000 +0200 +++ new/eyed3-0.9.9/Makefile 2025-11-16 16:13:46.000000000 +0100 @@ -75,7 +75,7 @@ find . -name '*.pyc' -exec rm -f {} + find . -name '*.pyo' -exec rm -f {} + find . -name '*~' -exec rm -f {} + - find . -name '__pycache__' -exec rm -fr {} + + find . -name '__pycache__' -type d -exec rm -fr {} + clean-local: -rm tags @@ -157,7 +157,9 @@ $(BROWSER) docs/_build/html/index.html clean-docs: - $(MAKE) -C docs clean + if which sphinx-build >/dev/null 2>&1; then \ + $(MAKE) -C docs clean;\ + fi -rm README.html diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/PKG-INFO new/eyed3-0.9.9/PKG-INFO --- old/eyed3-0.9.8/PKG-INFO 2025-04-26 23:22:31.935083900 +0200 +++ new/eyed3-0.9.9/PKG-INFO 2025-11-16 17:08:09.367206300 +0100 @@ -1,9 +1,9 @@ Metadata-Version: 2.4 Name: eyeD3 -Version: 0.9.8 +Version: 0.9.9 Summary: Python audio data toolkit (ID3 and MP3) Author-email: Travis Shirk <[email protected]> -Project-URL: homepage, https://eyeD3.nicfit.net/ +Project-URL: homepage, https://eyed3.readthedocs.io/ Project-URL: repository, https://github.com/nicfit/eyeD3 Keywords: id3,mp3,python Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3) @@ -15,12 +15,12 @@ Classifier: Operating System :: POSIX Classifier: Natural Language :: English Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 -Requires-Python: <4.0,>=3.9 +Classifier: Programming Language :: Python :: 3.14 +Requires-Python: <4.0,>=3.10 Description-Content-Type: text/x-rst License-File: LICENSE License-File: AUTHORS.rst @@ -29,9 +29,9 @@ Provides-Extra: yaml-plugin Requires-Dist: PyYAML>=6.0.2; extra == "yaml-plugin" Provides-Extra: art-plugin -Requires-Dist: Pillow>=11.2.1; extra == "art-plugin" +Requires-Dist: Pillow>=11.3.0; extra == "art-plugin" Requires-Dist: pylast>=5.5.0; extra == "art-plugin" -Requires-Dist: requests>=2.32.3; extra == "art-plugin" +Requires-Dist: requests>=2.32.4; extra == "art-plugin" Provides-Extra: test Requires-Dist: pytest>=8.3.5; extra == "test" Requires-Dist: coverage>=7.8.0; extra == "test" @@ -45,7 +45,7 @@ Requires-Dist: Sphinx>=7.4.7; extra == "dev" Requires-Dist: sphinx-rtd-theme>=3.0.2; extra == "dev" Requires-Dist: sphinx-issues>=5.0.1; extra == "dev" -Requires-Dist: cogapp>=3.4.1; extra == "dev" +Requires-Dist: cogapp>=3.5; extra == "dev" Requires-Dist: Paver>=1.3.4; extra == "dev" Requires-Dist: nicfit-py[cookiecutter]>=0.8.7; extra == "dev" Requires-Dist: regarding>=0.2.0; extra == "dev" @@ -62,9 +62,14 @@ .. image:: https://img.shields.io/pypi/pyversions/eyeD3.svg :target: https://pypi.python.org/pypi/eyeD3/ :alt: Supported Python versions -.. image:: https://img.shields.io/pypi/dm/eyeD3 +.. image:: https://img.shields.io/pypi/dm/eyeD3?style=plastic&label=PyPI%20Downloads + :target: https://pypi.org/project/eyeD3/ :alt: PyPI - Downloads -.. image:: https://img.shields.io/github/stars/nicfit/eyeD3 +.. image:: https://img.shields.io/github/downloads/nicfit/eyeD3/total?style=plastic&label=GitHub%20Downloads + :target: https://github.com/nicfit/eyeD3/releases + :alt: GitHub Downloads (all assets, all releases) +.. image:: https://img.shields.io/github/stars/nicfit/eyeD3?style=plastic&label=GitHub%20Stars + :target: https://github.com/nicfit/eyeD3/stargazers :alt: GitHub Repo stars @@ -140,19 +145,19 @@ Get Started ----------- -Python >= 3.9 is required. +Python >= 3.10 is required. For `installation instructions`_ or more complete `documentation`_ see -http://eyeD3.nicfit.net/ +https://eyed3.readthedocs.io/ Please post feedback and/or defects on the `issue tracker`_, or `mailing list`_. -.. _eyeD3: http://eyeD3.nicfit.net/ +.. _eyeD3: https://eyed3.readthedocs.io/ .. _Travis Shirk: [email protected] .. _issue tracker: https://github.com/nicfit/eyeD3/issues .. _mailing list: https://groups.google.com/forum/?fromgroups#!forum/eyed3-users -.. _installation instructions: http://eyeD3.nicfit.net/index.html#installation -.. _documentation: http://eyeD3.nicfit.net/index.html#documentation +.. _installation instructions: https://eyed3.readthedocs.io/en/latest/installation.html +.. _documentation: https://eyed3.readthedocs.io/ .. _GPL: http://www.gnu.org/licenses/gpl-2.0.html .. _ID3: http://id3.org/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/README.rst new/eyed3-0.9.9/README.rst --- old/eyed3-0.9.8/README.rst 2025-04-23 04:07:47.000000000 +0200 +++ new/eyed3-0.9.9/README.rst 2025-10-23 05:40:24.000000000 +0200 @@ -9,9 +9,14 @@ .. image:: https://img.shields.io/pypi/pyversions/eyeD3.svg :target: https://pypi.python.org/pypi/eyeD3/ :alt: Supported Python versions -.. image:: https://img.shields.io/pypi/dm/eyeD3 +.. image:: https://img.shields.io/pypi/dm/eyeD3?style=plastic&label=PyPI%20Downloads + :target: https://pypi.org/project/eyeD3/ :alt: PyPI - Downloads -.. image:: https://img.shields.io/github/stars/nicfit/eyeD3 +.. image:: https://img.shields.io/github/downloads/nicfit/eyeD3/total?style=plastic&label=GitHub%20Downloads + :target: https://github.com/nicfit/eyeD3/releases + :alt: GitHub Downloads (all assets, all releases) +.. image:: https://img.shields.io/github/stars/nicfit/eyeD3?style=plastic&label=GitHub%20Stars + :target: https://github.com/nicfit/eyeD3/stargazers :alt: GitHub Repo stars @@ -87,19 +92,19 @@ Get Started ----------- -Python >= 3.9 is required. +Python >= 3.10 is required. For `installation instructions`_ or more complete `documentation`_ see -http://eyeD3.nicfit.net/ +https://eyed3.readthedocs.io/ Please post feedback and/or defects on the `issue tracker`_, or `mailing list`_. -.. _eyeD3: http://eyeD3.nicfit.net/ +.. _eyeD3: https://eyed3.readthedocs.io/ .. _Travis Shirk: [email protected] .. _issue tracker: https://github.com/nicfit/eyeD3/issues .. _mailing list: https://groups.google.com/forum/?fromgroups#!forum/eyed3-users -.. _installation instructions: http://eyeD3.nicfit.net/index.html#installation -.. _documentation: http://eyeD3.nicfit.net/index.html#documentation +.. _installation instructions: https://eyed3.readthedocs.io/en/latest/installation.html +.. _documentation: https://eyed3.readthedocs.io/ .. _GPL: http://www.gnu.org/licenses/gpl-2.0.html .. _ID3: http://id3.org/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/docs/cli.rst new/eyed3-0.9.9/docs/cli.rst --- old/eyed3-0.9.8/docs/cli.rst 2022-01-14 06:33:24.000000000 +0100 +++ new/eyed3-0.9.9/docs/cli.rst 2025-11-16 16:13:46.000000000 +0100 @@ -101,16 +101,16 @@ Documenting Plugins ^^^^^^^^^^^^^^^^^^^^ Plugin docs are generated. Start each plugin with the following template; -**but replace the square brackets with curly.*** :: +**but replace the parenthesis with curly brackets.*** :: Example Plugin =============== - .. [[[cog + .. (((cog .. cog.out(cog_pluginHelp("example-plugin")) - .. ]]] + .. ))) - .. [[[end]]] + .. (((end))) The documentation build process will run `eyeD3 --plugin example-plugin` and generate docs from the command line options and plugin metadata such as the diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/docs/installation.rst new/eyed3-0.9.9/docs/installation.rst --- old/eyed3-0.9.8/docs/installation.rst 2022-01-14 06:33:35.000000000 +0100 +++ new/eyed3-0.9.9/docs/installation.rst 2025-10-23 05:40:24.000000000 +0200 @@ -70,7 +70,7 @@ $ export PYTHONPATH=`pwd`/build/lib $ export PATH=${PATH}:`pwd`/bin -.. _release archive: http://eyed3.nicfit.net/releases/ +.. _release archive: https://github.com/nicfit/eyeD3/releases Checking Out the Source Code ============================ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/docs/plugins/classic_plugin.rst new/eyed3-0.9.9/docs/plugins/classic_plugin.rst --- old/eyed3-0.9.8/docs/plugins/classic_plugin.rst 2025-04-23 04:07:51.000000000 +0200 +++ new/eyed3-0.9.9/docs/plugins/classic_plugin.rst 2025-11-16 16:13:46.000000000 +0100 @@ -27,42 +27,45 @@ ------- .. code-block:: text - -a, --artist STRING Set the artist name. - -A, --album STRING Set the album name. - -b, --album-artist STRING - Set the album artist name. 'Various Artists', for example. Another example is collaborations when the track artist - might be 'Eminem featuring Proof' the album artist would be 'Eminem'. - -t, --title STRING Set the track title. - -n, --track NUM Set the track number. Use 0 to clear. - -N, --track-total NUM + -a STRING, --artist STRING + Set the artist name. + -A STRING, --album STRING + Set the album name. + -b STRING, --album-artist STRING + Set the album artist name. 'Various Artists', for example. Another example is collaborations when the track artist might be 'Eminem featuring Proof' the album artist + would be 'Eminem'. + -t STRING, --title STRING + Set the track title. + -n NUM, --track NUM Set the track number. Use 0 to clear. + -N NUM, --track-total NUM Set total number of tracks. Use 0 to clear. --track-offset N Increment/decrement the track number by [-]N. This option is applied after --track=N is set. --composer STRING Set the composer's name. --orig-artist STRING Set the orignal artist's name. For example, a cover song can include the orignal author of the track. - -d, --disc-num NUM Set the disc number. Use 0 to clear. - -D, --disc-total NUM Set total number of discs in set. Use 0 to clear. - -G, --genre GENRE Set the genre. If the argument is a standard ID3 genre name or number both will be set. Otherwise, any string can be - used. Run 'eyeD3 --plugin=genres' for a list of standard ID3 genre names/ids. - --non-std-genres Disables certain ID3 genre standards, such as the mapping of numeric value to genre names. For example, genre=1 is - taken literally, not mapped to 'Classic Rock'. - -Y, --release-year YEAR + -d NUM, --disc-num NUM + Set the disc number. Use 0 to clear. + -D NUM, --disc-total NUM + Set total number of discs in set. Use 0 to clear. + -G GENRE, --genre GENRE + Set the genre. If the argument is a standard ID3 genre name or number both will be set. Otherwise, any string can be used. Run 'eyeD3 --plugin=genres' for a list of + standard ID3 genre names/ids. + --non-std-genres Disables certain ID3 genre standards, such as the mapping of numeric value to genre names. For example, genre=1 is taken literally, not mapped to 'Classic Rock'. + -Y YEAR, --release-year YEAR Set the year the track was released. Use the date options for more precise values or dates other than release. - -c, --comment STRING Set a comment. In ID3 tags this is the comment with an empty description. See --add-comment to add multiple comment - frames. + -c STRING, --comment STRING + Set a comment. In ID3 tags this is the comment with an empty description. See --add-comment to add multiple comment frames. --artist-city STRING The artist's city of origin. Stored as a user text frame `eyeD3#artist_origin` --artist-state STRING The artist's state of origin. Stored as a user text frame `eyeD3#artist_origin` --artist-country STRING The artist's country of origin. Stored as a user text frame `eyeD3#artist_origin` - --rename PATTERN Rename file (the extension is not affected) based on data in the tag using substitution variables: $album, - $album_artist, $artist, $best_date, $best_date:prefer_recording, $best_date:prefer_recording:year, - $best_date:prefer_release, $best_date:prefer_release:year, $best_date:year, $disc:num, $disc:total, $file, $file:ext, - $original_release_date, $original_release_date:year, $recording_date, $recording_date:year, $release_date, - $release_date:year, $title, $track:num, $track:total + --rename PATTERN Rename file (the extension is not affected) based on data in the tag using substitution variables: $album, $album_artist, $artist, $best_date, + $best_date:prefer_recording, $best_date:prefer_recording:year, $best_date:prefer_release, $best_date:prefer_release:year, $best_date:year, $disc:num, $disc:total, + $file, $file:ext, $original_release_date, $original_release_date:year, $recording_date, $recording_date:year, $release_date, $release_date:year, $title, $track:num, + $track:total ID3 options: - -1, --v1 Only read and write ID3 v1.x tags. By default, v1.x tags are only read or written if there is not a v2 tag in the - file. + -1, --v1 Only read and write ID3 v1.x tags. By default, v1.x tags are only read or written if there is not a v2 tag in the file. -2, --v2 Only read/write ID3 v2.x tags. This is the default unless the file only contains a v1 tag. --to-v1.1 Convert the file's tag to ID3 v1.1 (Or 1.0 if there is no track number) --to-v2.3 Convert the file's tag to ID3 v2.3 @@ -75,56 +78,49 @@ --encoding-date DATE Set the date the file was encoded --tagging-date DATE Set the date the file was tagged --publisher STRING Set the publisher/label name - --play-count <+>N Set the number of times played counter. If the argument value begins with '+' the tag's play count is incremented by - N, otherwise the value is set to exactly N. + --play-count <+>N Set the number of times played counter. If the argument value begins with '+' the tag's play count is incremented by N, otherwise the value is set to exactly N. --bpm N Set the beats per minute value. --unique-file-id OWNER_ID:ID - Add a unique file ID frame. If the ID arg is empty the frame is removed. An OWNER_ID is required. The ID may be no - more than 64 bytes. + Add a unique file ID frame. If the ID arg is empty the frame is removed. An OWNER_ID is required. The ID may be no more than 64 bytes. --add-comment COMMENT[:DESCRIPTION[:LANG]] - Add or replace a comment. There may be more than one comment in a tag, as long as the DESCRIPTION and LANG values are - unique. The default DESCRIPTION is '' and the default language code is 'eng'. + Add or replace a comment. There may be more than one comment in a tag, as long as the DESCRIPTION and LANG values are unique. The default DESCRIPTION is '' and the + default language code is 'eng'. --remove-comment DESCRIPTION[:LANG] Remove comment matching DESCRIPTION and LANG. The default language code is 'eng'. --remove-all-comments Remove all comments from the tag. --remove-all-unknown Remove all unknown frames from the tag. --add-lyrics LYRICS_FILE[:DESCRIPTION[:LANG]] - Add or replace a lyrics. There may be more than one set of lyrics in a tag, as long as the DESCRIPTION and LANG values - are unique. The default DESCRIPTION is '' and the default language code is 'eng'. + Add or replace a lyrics. There may be more than one set of lyrics in a tag, as long as the DESCRIPTION and LANG values are unique. The default DESCRIPTION is '' and + the default language code is 'eng'. --remove-lyrics DESCRIPTION[:LANG] Remove lyrics matching DESCRIPTION and LANG. The default language code is 'eng'. --remove-all-lyrics Remove all lyrics from the tag. --text-frame FID:TEXT Set the value of a text frame. To remove the frame, specify an empty value. For example, --text-frame='TDRC:' --user-text-frame DESC:TEXT - Set the value of a user text frame (i.e., TXXX). To remove the frame, specify an empty value. e.g., --user-text- - frame='SomeDesc:' + Set the value of a user text frame (i.e., TXXX). To remove the frame, specify an empty value. e.g., --user-text-frame='SomeDesc:' --url-frame FID:URL Set the value of a URL frame. To remove the frame, specify an empty value. e.g., --url-frame='WCOM:' --user-url-frame DESCRIPTION:URL - Set the value of a user URL frame (i.e., WXXX). To remove the frame, specify an empty value. e.g., --user-url- - frame='SomeDesc:' + Set the value of a user URL frame (i.e., WXXX). To remove the frame, specify an empty value. e.g., --user-url-frame='SomeDesc:' --add-image IMG_PATH:TYPE[:DESCRIPTION] - Add or replace an image. There may be more than one image in a tag, as long as the DESCRIPTION values are unique. The - default DESCRIPTION is ''. If PATH begins with 'http[s]://' then it is interpreted as a URL instead of a file - containing image data. The TYPE must be one of the following: OTHER, ICON, OTHER_ICON, FRONT_COVER, BACK_COVER, - LEAFLET, MEDIA, LEAD_ARTIST, ARTIST, CONDUCTOR, BAND, COMPOSER, LYRICIST, RECORDING_LOCATION, DURING_RECORDING, - DURING_PERFORMANCE, VIDEO, BRIGHT_COLORED_FISH, ILLUSTRATION, BAND_LOGO, PUBLISHER_LOGO. + Add or replace an image. There may be more than one image in a tag, as long as the DESCRIPTION values are unique. The default DESCRIPTION is ''. If PATH begins with + 'http[s]://' then it is interpreted as a URL instead of a file containing image data. The TYPE must be one of the following: OTHER, ICON, OTHER_ICON, FRONT_COVER, + BACK_COVER, LEAFLET, MEDIA, LEAD_ARTIST, ARTIST, CONDUCTOR, BAND, COMPOSER, LYRICIST, RECORDING_LOCATION, DURING_RECORDING, DURING_PERFORMANCE, VIDEO, + BRIGHT_COLORED_FISH, ILLUSTRATION, BAND_LOGO, PUBLISHER_LOGO. --remove-image DESCRIPTION Remove image matching DESCRIPTION. --remove-all-images Remove all images from the tag --write-images DIR Causes all attached images (APIC frames) to be written to the specified directory. --add-object OBJ_PATH:MIME-TYPE[:DESCRIPTION[:FILENAME]] - Add or replace an object. There may be more than one object in a tag, as long as the DESCRIPTION values are unique. - The default DESCRIPTION is ''. + Add or replace an object. There may be more than one object in a tag, as long as the DESCRIPTION values are unique. The default DESCRIPTION is ''. --remove-object DESCRIPTION Remove object matching DESCRIPTION. --write-objects DIR Causes all attached objects (GEOB frames) to be written to the specified directory. --remove-all-objects Remove all objects from the tag --add-popularity EMAIL:RATING[:PLAY_COUNT] - Adds a pupularity metric. There may be multiples popularity values, but each must have a unique email address - component. The rating is a number between 0 (worst) and 255 (best). The play count is optional, and defaults to 0, - since there is already a dedicated play count frame. + Adds a pupularity metric. There may be multiples popularity values, but each must have a unique email address component. The rating is a number between 0 (worst) and + 255 (best). The play count is optional, and defaults to 0, since there is already a dedicated play count frame. --remove-popularity EMAIL Removes the popularity frame with the specified email key. --remove-v1 Remove ID3 v1.x tag. @@ -132,12 +128,12 @@ --remove-all Remove ID3 v1.x and v2.x tags. --remove-frame FID Remove all frames with the given ID. This option may be specified multiple times. --max-padding NUM_BYTES - Shrink file if tag padding (unused space) exceeds the given number of bytes. (Useful e.g. after removal of large cover - art.) Default is 64 KiB, file will be rewritten with default padding (1 KiB) or max padding, whichever is smaller. + Shrink file if tag padding (unused space) exceeds the given number of bytes. (Useful e.g. after removal of large cover art.) Default is 64 KiB, file will be rewritten + with default padding (1 KiB) or max padding, whichever is smaller. --no-max-padding Disable --max-padding altogether. --encoding latin1|utf8|utf16|utf16-be - Set the encoding that is used for all text frames. This option is only applied if the tag is updated as the result of - an edit option (e.g. --artist, --title, etc.) or --force-update is specified. + Set the encoding that is used for all text frames. This option is only applied if the tag is updated as the result of an edit option (e.g. --artist, --title, etc.) or + --force-update is specified. Misc options: --force-update Rewrite the tag despite there being no edit options. @@ -203,7 +199,7 @@ # Convert the current v2.4 frame to v2.3 $ eyeD3 --to-v2.3 example.id3 -Q - /home/travis/devel/eyeD3/git/example.id3 [ 0.00 Bytes ] + /home/trshirk/devel/eyeD3/example.id3 [ 0.00 Bytes ] ------------------------------------------------------------------------------- ID3 v2.4: 0 frames Writing ID3 version v2.3 @@ -212,7 +208,7 @@ # Convert back $ eyeD3 --to-v2.4 example.id3 -Q - /home/travis/devel/eyeD3/git/example.id3 [ 266.00 Bytes ] + /home/trshirk/devel/eyeD3/example.id3 [ 266.00 Bytes ] ------------------------------------------------------------------------------- ID3 v2.3: 0 frames Writing ID3 version v2.4 @@ -221,7 +217,7 @@ # Convert to v1, this will lose all the more advanced data members ID3 v2 offers $ eyeD3 --to-v1.1 example.id3 -Q - /home/travis/devel/eyeD3/git/example.id3 [ 266.00 Bytes ] + /home/trshirk/devel/eyeD3/example.id3 [ 266.00 Bytes ] ------------------------------------------------------------------------------- ID3 v2.4: 0 frames Writing ID3 version v1.1 @@ -242,7 +238,7 @@ $ eyeD3 -1 example.id3 - /home/travis/devel/eyeD3/git/example.id3 [ 394.00 Bytes ] + /home/trshirk/devel/eyeD3/example.id3 [ 394.00 Bytes ] ------------------------------------------------------------------------------- ID3 v1.0: title: @@ -263,7 +259,7 @@ # Set an artist value in the ID3 v1 tag $ eyeD3 -1 example.id3 -a id3v1 - /home/travis/devel/eyeD3/git/example.id3 [ 394.00 Bytes ] + /home/trshirk/devel/eyeD3/example.id3 [ 394.00 Bytes ] ------------------------------------------------------------------------------- Setting artist: id3v1 ID3 v1.0: @@ -277,7 +273,7 @@ # The file now has a v1 and v2 tag, change the v2 artist $ eyeD3 -2 example.id3 -a id3v2 - /home/travis/devel/eyeD3/git/example.id3 [ 394.00 Bytes ] + /home/trshirk/devel/eyeD3/example.id3 [ 394.00 Bytes ] ------------------------------------------------------------------------------- Setting artist: id3v2 ID3 v2.4: @@ -291,7 +287,7 @@ # Take all the values from v2.4 tag (the default) and set them in the v1 tag. $ eyeD3 -2 --to-v1.1 example.id3 - /home/travis/devel/eyeD3/git/example.id3 [ 394.00 Bytes ] + /home/trshirk/devel/eyeD3/example.id3 [ 394.00 Bytes ] ------------------------------------------------------------------------------- ID3 v2.4: title: @@ -304,7 +300,7 @@ # Take all the values from v1 tag and convert to ID3 v2.3 $ eyeD3 -1 --to-v2.3 example.id3 - /home/travis/devel/eyeD3/git/example.id3 [ 394.00 Bytes ] + /home/trshirk/devel/eyeD3/example.id3 [ 394.00 Bytes ] ------------------------------------------------------------------------------- ID3 v1.0: title: @@ -325,7 +321,7 @@ $ eyeD3 --remove-all example.id3 - /home/travis/devel/eyeD3/git/example.id3 [ 394.00 Bytes ] + /home/trshirk/devel/eyeD3/example.id3 [ 394.00 Bytes ] ------------------------------------------------------------------------------- Removing ID3 v1.x and/or v2.x tag: SUCCESS No ID3 v1.x/v2.x tag found! @@ -370,7 +366,7 @@ $ eyeD3 --add-image http\\://example.com/cover.jpg:FRONT_COVER example.id3 - /home/travis/devel/eyeD3/git/example.id3 [ 0.00 Bytes ] + /home/trshirk/devel/eyeD3/example.id3 [ 0.00 Bytes ] ------------------------------------------------------------------------------- Adding image http://example.com/cover.jpg ID3 v2.4: @@ -394,7 +390,7 @@ $ eyeD3 --add-image http\\://example.com/cover.jpg:FRONT_COVER example.id3 - /home/travis/devel/eyeD3/git/example.id3 [ 311.00 Bytes ] + /home/trshirk/devel/eyeD3/example.id3 [ 311.00 Bytes ] ------------------------------------------------------------------------------- Adding image http://example.com/cover.jpg ID3 v2.4: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/docs/plugins/extract_plugin.rst new/eyed3-0.9.9/docs/plugins/extract_plugin.rst --- old/eyed3-0.9.8/docs/plugins/extract_plugin.rst 2025-04-23 04:07:47.000000000 +0200 +++ new/eyed3-0.9.9/docs/plugins/extract_plugin.rst 2025-11-16 16:13:46.000000000 +0100 @@ -19,7 +19,7 @@ ------- .. code-block:: text - -o, --output-file OUTPUT_FILE + -o OUTPUT_FILE, --output-file OUTPUT_FILE The the tag is written to this file in native format. -H, --hex Output hexadecimal format. --strip-padding Exclude tag padding, if any. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/docs/plugins/fixup_plugin.rst new/eyed3-0.9.9/docs/plugins/fixup_plugin.rst --- old/eyed3-0.9.8/docs/plugins/fixup_plugin.rst 2025-04-23 04:07:47.000000000 +0200 +++ new/eyed3-0.9.9/docs/plugins/fixup_plugin.rst 2025-11-16 16:13:46.000000000 +0100 @@ -73,24 +73,20 @@ .. code-block:: text --type {lp,ep,compilation,live,various,demo,single} - How to treat each directory. The default is 'lp', although you may be prompted for an alternate choice if the files - look like another type. + How to treat each directory. The default is 'lp', although you may be prompted for an alternate choice if the files look like another type. --fix-case Fix casing on each string field by capitalizing each word. -n, --dry-run Only print the operations that would take place, but do not execute them. --no-prompt Exit if prompted. --dotted-dates Separate date with '.' instead of '-' when naming directories. --file-rename-pattern FILE_RENAME_PATTERN - Rename file (the extension is not affected) based on data in the tag using substitution variables: $album, - $album_artist, $artist, $best_date, $best_date:prefer_recording, $best_date:prefer_recording:year, - $best_date:prefer_release, $best_date:prefer_release:year, $best_date:year, $disc:num, $disc:total, $file, $file:ext, - $original_release_date, $original_release_date:year, $recording_date, $recording_date:year, $release_date, - $release_date:year, $title, $track:num, $track:total + Rename file (the extension is not affected) based on data in the tag using substitution variables: $album, $album_artist, $artist, $best_date, + $best_date:prefer_recording, $best_date:prefer_recording:year, $best_date:prefer_release, $best_date:prefer_release:year, $best_date:year, $disc:num, $disc:total, + $file, $file:ext, $original_release_date, $original_release_date:year, $recording_date, $recording_date:year, $release_date, $release_date:year, $title, $track:num, + $track:total --dir-rename-pattern DIR_RENAME_PATTERN - Rename directory based on data in the tag using substitution variables: $album, $album_artist, $artist, $best_date, - $best_date:prefer_recording, $best_date:prefer_recording:year, $best_date:prefer_release, - $best_date:prefer_release:year, $best_date:year, $disc:num, $disc:total, $file, $file:ext, $original_release_date, - $original_release_date:year, $recording_date, $recording_date:year, $release_date, $release_date:year, $title, - $track:num, $track:total + Rename directory based on data in the tag using substitution variables: $album, $album_artist, $artist, $best_date, $best_date:prefer_recording, + $best_date:prefer_recording:year, $best_date:prefer_release, $best_date:prefer_release:year, $best_date:year, $disc:num, $disc:total, $file, $file:ext, + $original_release_date, $original_release_date:year, $recording_date, $recording_date:year, $release_date, $release_date:year, $title, $track:num, $track:total --no-dir-rename Do not rename the directory. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/docs/plugins/itunes_plugin.rst new/eyed3-0.9.9/docs/plugins/itunes_plugin.rst --- old/eyed3-0.9.8/docs/plugins/itunes_plugin.rst 2025-04-23 04:07:47.000000000 +0200 +++ new/eyed3-0.9.9/docs/plugins/itunes_plugin.rst 2025-11-16 16:13:46.000000000 +0100 @@ -34,19 +34,19 @@ $ eyeD3 -P itunes-podcast example.id3 - /home/travis/devel/eyeD3/git/example.id3 + /home/trshirk/devel/eyeD3/example.id3 iTunes podcast? :-( $ eyeD3 -P itunes-podcast example.id3 --add - /home/travis/devel/eyeD3/git/example.id3 + /home/trshirk/devel/eyeD3/example.id3 iTunes podcast? :-( Adding... iTunes podcast? :-) $ eyeD3 -P itunes-podcast example.id3 --remove - /home/travis/devel/eyeD3/git/example.id3 + /home/trshirk/devel/eyeD3/example.id3 iTunes podcast? :-) Removing... iTunes podcast? :-( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/docs/plugins/lameinfo_plugin.rst new/eyed3-0.9.9/docs/plugins/lameinfo_plugin.rst --- old/eyed3-0.9.8/docs/plugins/lameinfo_plugin.rst 2025-04-23 04:07:51.000000000 +0200 +++ new/eyed3-0.9.9/docs/plugins/lameinfo_plugin.rst 2025-11-16 16:13:46.000000000 +0100 @@ -34,7 +34,7 @@ $ eyeD3 -P lameinfo tests/data/notag-vbr.mp3 - /home/travis/devel/eyeD3/git/tests/data/notag-vbr.mp3 [ 5.98 MB ] + /home/trshirk/devel/eyeD3/tests/data/notag-vbr.mp3 [ 5.98 MB ] ------------------------------------------------------------------------------- Encoder Version : LAME3.91 LAME Tag Revision : 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/docs/plugins/pymod_plugin.rst new/eyed3-0.9.9/docs/plugins/pymod_plugin.rst --- old/eyed3-0.9.8/docs/plugins/pymod_plugin.rst 2025-04-23 04:07:47.000000000 +0200 +++ new/eyed3-0.9.9/docs/plugins/pymod_plugin.rst 2025-11-16 16:13:46.000000000 +0100 @@ -37,7 +37,8 @@ ------- .. code-block:: text - -m, --module MODULE The Python module module to invoke. The default is ./eyeD3mod.py + -m MODULE, --module MODULE + The Python module module to invoke. The default is ./eyeD3mod.py .. {{{end}}} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/eyeD3.egg-info/PKG-INFO new/eyed3-0.9.9/eyeD3.egg-info/PKG-INFO --- old/eyed3-0.9.8/eyeD3.egg-info/PKG-INFO 2025-04-26 23:22:31.000000000 +0200 +++ new/eyed3-0.9.9/eyeD3.egg-info/PKG-INFO 2025-11-16 17:08:09.000000000 +0100 @@ -1,9 +1,9 @@ Metadata-Version: 2.4 Name: eyeD3 -Version: 0.9.8 +Version: 0.9.9 Summary: Python audio data toolkit (ID3 and MP3) Author-email: Travis Shirk <[email protected]> -Project-URL: homepage, https://eyeD3.nicfit.net/ +Project-URL: homepage, https://eyed3.readthedocs.io/ Project-URL: repository, https://github.com/nicfit/eyeD3 Keywords: id3,mp3,python Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3) @@ -15,12 +15,12 @@ Classifier: Operating System :: POSIX Classifier: Natural Language :: English Classifier: Programming Language :: Python -Classifier: Programming Language :: Python :: 3.9 Classifier: Programming Language :: Python :: 3.10 Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.13 -Requires-Python: <4.0,>=3.9 +Classifier: Programming Language :: Python :: 3.14 +Requires-Python: <4.0,>=3.10 Description-Content-Type: text/x-rst License-File: LICENSE License-File: AUTHORS.rst @@ -29,9 +29,9 @@ Provides-Extra: yaml-plugin Requires-Dist: PyYAML>=6.0.2; extra == "yaml-plugin" Provides-Extra: art-plugin -Requires-Dist: Pillow>=11.2.1; extra == "art-plugin" +Requires-Dist: Pillow>=11.3.0; extra == "art-plugin" Requires-Dist: pylast>=5.5.0; extra == "art-plugin" -Requires-Dist: requests>=2.32.3; extra == "art-plugin" +Requires-Dist: requests>=2.32.4; extra == "art-plugin" Provides-Extra: test Requires-Dist: pytest>=8.3.5; extra == "test" Requires-Dist: coverage>=7.8.0; extra == "test" @@ -45,7 +45,7 @@ Requires-Dist: Sphinx>=7.4.7; extra == "dev" Requires-Dist: sphinx-rtd-theme>=3.0.2; extra == "dev" Requires-Dist: sphinx-issues>=5.0.1; extra == "dev" -Requires-Dist: cogapp>=3.4.1; extra == "dev" +Requires-Dist: cogapp>=3.5; extra == "dev" Requires-Dist: Paver>=1.3.4; extra == "dev" Requires-Dist: nicfit-py[cookiecutter]>=0.8.7; extra == "dev" Requires-Dist: regarding>=0.2.0; extra == "dev" @@ -62,9 +62,14 @@ .. image:: https://img.shields.io/pypi/pyversions/eyeD3.svg :target: https://pypi.python.org/pypi/eyeD3/ :alt: Supported Python versions -.. image:: https://img.shields.io/pypi/dm/eyeD3 +.. image:: https://img.shields.io/pypi/dm/eyeD3?style=plastic&label=PyPI%20Downloads + :target: https://pypi.org/project/eyeD3/ :alt: PyPI - Downloads -.. image:: https://img.shields.io/github/stars/nicfit/eyeD3 +.. image:: https://img.shields.io/github/downloads/nicfit/eyeD3/total?style=plastic&label=GitHub%20Downloads + :target: https://github.com/nicfit/eyeD3/releases + :alt: GitHub Downloads (all assets, all releases) +.. image:: https://img.shields.io/github/stars/nicfit/eyeD3?style=plastic&label=GitHub%20Stars + :target: https://github.com/nicfit/eyeD3/stargazers :alt: GitHub Repo stars @@ -140,19 +145,19 @@ Get Started ----------- -Python >= 3.9 is required. +Python >= 3.10 is required. For `installation instructions`_ or more complete `documentation`_ see -http://eyeD3.nicfit.net/ +https://eyed3.readthedocs.io/ Please post feedback and/or defects on the `issue tracker`_, or `mailing list`_. -.. _eyeD3: http://eyeD3.nicfit.net/ +.. _eyeD3: https://eyed3.readthedocs.io/ .. _Travis Shirk: [email protected] .. _issue tracker: https://github.com/nicfit/eyeD3/issues .. _mailing list: https://groups.google.com/forum/?fromgroups#!forum/eyed3-users -.. _installation instructions: http://eyeD3.nicfit.net/index.html#installation -.. _documentation: http://eyeD3.nicfit.net/index.html#documentation +.. _installation instructions: https://eyed3.readthedocs.io/en/latest/installation.html +.. _documentation: https://eyed3.readthedocs.io/ .. _GPL: http://www.gnu.org/licenses/gpl-2.0.html .. _ID3: http://id3.org/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/eyeD3.egg-info/requires.txt new/eyed3-0.9.9/eyeD3.egg-info/requires.txt --- old/eyed3-0.9.8/eyeD3.egg-info/requires.txt 2025-04-26 23:22:31.000000000 +0200 +++ new/eyed3-0.9.9/eyeD3.egg-info/requires.txt 2025-11-16 17:08:09.000000000 +0100 @@ -2,16 +2,16 @@ deprecation>=2.1.0 [art-plugin] -Pillow>=11.2.1 +Pillow>=11.3.0 pylast>=5.5.0 -requests>=2.32.3 +requests>=2.32.4 [dev] twine>=6.1.0 Sphinx>=7.4.7 sphinx-rtd-theme>=3.0.2 sphinx-issues>=5.0.1 -cogapp>=3.4.1 +cogapp>=3.5 Paver>=1.3.4 nicfit-py[cookiecutter]>=0.8.7 regarding>=0.2.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/eyed3/__regarding__.py new/eyed3-0.9.9/eyed3/__regarding__.py --- old/eyed3-0.9.8/eyed3/__regarding__.py 2025-04-26 23:22:30.000000000 +0200 +++ new/eyed3-0.9.9/eyed3/__regarding__.py 2025-11-16 17:08:07.000000000 +0100 @@ -22,20 +22,20 @@ project_name = "eyeD3" -version = "0.9.8" +version = "0.9.9" version_info = Version( - 0, 9, 8, + 0, 9, 9, None, None, None, - "Armed & Dangerous", + "Guilty Conscience", ) author = "Travis Shirk" author_email = "[email protected]" years = "2002-2025" description = "Python audio data toolkit (ID3 and MP3)" -homepage = "https://eyeD3.nicfit.net/" +homepage = "https://eyed3.readthedocs.io/" def versionBanner() -> str: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/eyed3/id3/tag.py new/eyed3-0.9.9/eyed3/id3/tag.py --- old/eyed3-0.9.8/eyed3/id3/tag.py 2025-04-23 04:07:47.000000000 +0200 +++ new/eyed3-0.9.9/eyed3/id3/tag.py 2025-10-23 05:40:24.000000000 +0200 @@ -10,7 +10,7 @@ from ..core import TXXX_ALBUM_TYPE, TXXX_ARTIST_ORIGIN, ALBUM_TYPE_IDS, ArtistOrigin from .. import Error from . import (ID3_ANY_VERSION, ID3_DEFAULT_VERSION, ID3_V1, ID3_V1_0, ID3_V1_1, - ID3_V2, ID3_V2_2, ID3_V2_3, ID3_V2_4, versionToString) + ID3_V2, ID3_V2_2, ID3_V2_3, ID3_V2_4, versionToString, GenreException) from . import DEFAULT_LANG from . import Genre from . import frames @@ -174,7 +174,7 @@ self.release_date = int(year) except ValueError: # Bogus year strings. - log.warn("ID3v1.x tag contains invalid year: %s" % year) + log.warning("ID3v1.x tag contains invalid year: %s" % year) pass # Can't use ID3_V1_STRIP_CHARS here, since the final byte is numeric @@ -202,7 +202,7 @@ log.debug(f"Genre ID: {genre}") try: self.genre = genre - except ValueError as ex: + except GenreException as ex: log.warning(ex) self.genre = None @@ -535,7 +535,7 @@ The date the work was originally released. NOTE: ID3v2.3 only stores year. If the Date object is more precise it is store in `XDOR`, and - XDOR is preferred when acessing. The year-only date is stored in the standard `TORY` frame as + XDOR is preferred when accessing. The year-only date is stored in the standard `TORY` frame as well. """) @@ -1845,7 +1845,7 @@ return super().get(element_id) def __getitem__(self, elem_id): - """Overiding the index based __getitem__ for one indexed with chapter + """Overriding the index based __getitem__ for one indexed with chapter element IDs. These are stored in the tag's table of contents frames.""" for chapter in (self._fs[frames.CHAPTER_FID] or []): if chapter.element_id == elem_id: @@ -1905,7 +1905,7 @@ return super().get(element_id) def __getitem__(self, elem_id): - """Overiding the index based __getitem__ for one indexed with table + """Overriding the index based __getitem__ for one indexed with table of contents element IDs.""" for toc in (self._fs[frames.TOC_FID] or []): if toc.element_id == elem_id: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/eyed3/main.py new/eyed3-0.9.9/eyed3/main.py --- old/eyed3-0.9.8/eyed3/main.py 2025-04-23 04:07:47.000000000 +0200 +++ new/eyed3-0.9.9/eyed3/main.py 2025-10-23 05:40:24.000000000 +0200 @@ -17,10 +17,10 @@ from eyed3.utils.log import initLogging DEFAULT_PLUGIN = "classic" -DEFAULT_CONFIG = os.path.expandvars("${HOME}/.config/eyeD3/config.ini") -USER_PLUGINS_DIR = os.path.expandvars("${HOME}/.config/eyeD3/plugins") -DEFAULT_CONFIG_DEPRECATED = os.path.expandvars("${HOME}/.eyeD3/config.ini") -USER_PLUGINS_DIR_DEPRECATED = os.path.expandvars("${HOME}/.eyeD3/plugins") +DEFAULT_CONFIG = os.path.expanduser("~/.config/eyeD3/config.ini") +USER_PLUGINS_DIR = os.path.expanduser("~/.config/eyeD3/plugins") +DEFAULT_CONFIG_DEPRECATED = os.path.expanduser("~/.eyeD3/config.ini") +USER_PLUGINS_DIR_DEPRECATED = os.path.expanduser("~/.eyeD3/plugins") def main(args, config): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/eyed3/plugins/classic.py new/eyed3-0.9.9/eyed3/plugins/classic.py --- old/eyed3-0.9.8/eyed3/plugins/classic.py 2025-04-23 04:07:47.000000000 +0200 +++ new/eyed3-0.9.9/eyed3/plugins/classic.py 2025-10-23 05:40:39.000000000 +0200 @@ -1,6 +1,7 @@ import os import re import dataclasses +import shutil from functools import partial from argparse import ArgumentTypeError @@ -8,7 +9,7 @@ from eyed3 import core, id3, mp3 from eyed3.utils import makeUniqueFileName, b, formatTime from eyed3.utils.console import ( - printMsg, printError, printWarning, boldText, getTtySize, + printMsg, printError, printWarning, boldText, ) from eyed3.id3.frames import ImageFrame from eyed3.mimetype import guessMimetype @@ -444,7 +445,7 @@ if not self.audio_file: return - self.terminal_width = getTtySize()[1] + self.terminal_width = shutil.get_terminal_size()[1] self.printHeader(f) if self.audio_file.tag and self.handleRemoves(self.audio_file.tag): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/eyed3/plugins/lameinfo.py new/eyed3-0.9.9/eyed3/plugins/lameinfo.py --- old/eyed3-0.9.8/eyed3/plugins/lameinfo.py 2021-01-01 05:10:12.000000000 +0100 +++ new/eyed3-0.9.9/eyed3/plugins/lameinfo.py 2025-10-23 05:40:39.000000000 +0200 @@ -1,6 +1,8 @@ import math +import shutil + from eyed3.utils import formatSize -from eyed3.utils.console import printMsg, getTtySize +from eyed3.utils.console import printMsg from eyed3.plugins import LoaderPlugin @@ -16,7 +18,7 @@ ) def printHeader(self, file_path): - w = getTtySize()[1] + w = shutil.get_terminal_size()[1] printMsg(self._getFileHeader(file_path, w)) printMsg(self._getHardRule(w)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/eyed3/utils/console.py new/eyed3-0.9.9/eyed3/utils/console.py --- old/eyed3-0.9.8/eyed3/utils/console.py 2025-04-23 04:07:47.000000000 +0200 +++ new/eyed3-0.9.9/eyed3/utils/console.py 2025-10-23 05:40:39.000000000 +0200 @@ -1,13 +1,14 @@ import os -import struct import sys import time import typing +import shutil from typing import Union +import deprecation +from ..__about__ import __version__ + try: - import fcntl - import termios import signal _CAN_RESIZE_TERMINAL = True except ImportError: @@ -277,8 +278,7 @@ self.update(0) def _handle_resize(self, signum=None, frame=None): - self._terminal_width = getTtySize(self._file, - self._should_handle_resize)[1] + self._terminal_width = shutil.get_terminal_size()[1] def __enter__(self): return self @@ -469,21 +469,10 @@ return output [email protected](deprecated_in="0.9.9", removed_in="1.0", current_version=__version__, + details="Use shutil.get_terminal_size() instead.") def getTtySize(fd=sys.stdout, check_tty=True): - hw = None - if check_tty: - try: - data = fcntl.ioctl(fd, termios.TIOCGWINSZ, '\0' * 4) - hw = struct.unpack("hh", data) - except (OSError, NameError): - pass - if not hw: - try: - hw = (int(os.environ.get('LINES')), - int(os.environ.get('COLUMNS'))) - except (TypeError, ValueError): - hw = (25, 79) - return hw + return shutil.get_terminal_size() # Added in Python 3.3 def cprint(msg, fg, bg=None, styles=None, file=sys.stdout): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/pyproject.toml new/eyed3-0.9.9/pyproject.toml --- old/eyed3-0.9.8/pyproject.toml 2025-04-26 23:22:30.000000000 +0200 +++ new/eyed3-0.9.9/pyproject.toml 2025-11-16 17:08:06.000000000 +0100 @@ -6,10 +6,10 @@ [tool.regarding] years = "2002-2025" -release_name = "Armed & Dangerous" +release_name = "Guilty Conscience" [project] -version = "0.9.8" +version = "0.9.9" name = "eyeD3" description = "Python audio data toolkit (ID3 and MP3)" readme = "README.rst" @@ -17,7 +17,7 @@ {name = "Travis Shirk", email = "[email protected]"}, ] #license = "GPL-3.0-or-later" -requires-python = ">=3.9,<4.0" +requires-python = ">=3.10,<4.0" classifiers = [ "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Environment :: Console", @@ -28,11 +28,11 @@ "Operating System :: POSIX", "Natural Language :: English", "Programming Language :: Python", - "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", ] keywords = ["id3", "mp3", "python"] dependencies = [ @@ -41,7 +41,7 @@ ] [project.urls] -homepage = "https://eyeD3.nicfit.net/" +homepage = "https://eyed3.readthedocs.io/" repository = "https://github.com/nicfit/eyeD3" [project.scripts] @@ -55,9 +55,9 @@ "PyYAML>=6.0.2", ] art-plugin = [ - "Pillow>=11.2.1", + "Pillow>=11.3.0", "pylast>=5.5.0", - "requests>=2.32.3", + "requests>=2.32.4", ] test = [ "pytest>=8.3.5", @@ -73,11 +73,10 @@ "Sphinx>=7.4.7", "sphinx-rtd-theme>=3.0.2", "sphinx-issues>=5.0.1", - "cogapp>=3.4.1", + "cogapp>=3.5", "Paver>=1.3.4", "nicfit-py[cookiecutter]>=0.8.7", "regarding>=0.2.0", - #"git+https://github.com/nicfit/[email protected]", ] [tool.pdm] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/requirements/dev-requirements.txt new/eyed3-0.9.9/requirements/dev-requirements.txt --- old/eyed3-0.9.8/requirements/dev-requirements.txt 2025-04-26 23:21:49.000000000 +0200 +++ new/eyed3-0.9.9/requirements/dev-requirements.txt 2025-11-16 17:02:46.000000000 +0100 @@ -1,79 +1,79 @@ # This file is @generated by PDM. # Please do not edit it manually. -alabaster==0.7.16 -arrow==1.3.0 -attrs==25.3.0 +alabaster==1.0.0 +arrow==1.4.0 +attrs==25.4.0 babel==2.17.0 backports-tarfile==1.2.0; (platform_machine != "ppc64le" and platform_machine != "s390x") and python_version < "3.12" binaryornot==0.4.4 -build==1.2.2.post1 -cachetools==5.5.2 -certifi==2025.4.26 -cffi==1.17.1; (platform_machine != "ppc64le" and platform_machine != "s390x") and sys_platform == "linux" and platform_python_implementation != "PyPy" +build==1.3.0 +cachetools==6.2.2 +certifi==2025.11.12 +cffi==2.0.0; python_full_version >= "3.9" and platform_python_implementation != "PyPy" and (platform_machine != "ppc64le" and platform_machine != "s390x") and sys_platform == "linux" chardet==5.2.0 -charset-normalizer==3.4.1 -check-manifest==0.50 -click==8.1.8 -cogapp==3.4.1 +charset-normalizer==3.4.4 +check-manifest==0.51 +click==8.3.1 +cogapp==3.6.0 colorama==0.4.6 cookiecutter==2.6.0 -coverage[toml]==7.8.0 -cryptography==43.0.3; (platform_machine != "ppc64le" and platform_machine != "s390x") and sys_platform == "linux" +coverage[toml]==7.11.3 +cryptography==46.0.3; (platform_machine != "ppc64le" and platform_machine != "s390x") and sys_platform == "linux" deprecation==2.1.0 -distlib==0.3.9 +distlib==0.4.0 docutils==0.21.2 -exceptiongroup==1.2.2; python_version < "3.11" +exceptiongroup==1.3.0; python_version < "3.11" factory-boy==3.3.3 -faker==37.1.0 -filelock==3.18.0 +faker==38.0.0 +filelock==3.20.0 filetype==1.2.0 -flake8==7.2.0 +flake8==7.3.0 id==1.5.0 -idna==3.10 +idna==3.11 imagesize==1.4.1 -importlib-metadata==8.6.1; (platform_machine != "ppc64le" and platform_machine != "s390x") and python_version < "3.12" or python_full_version < "3.10.2" -iniconfig==2.1.0 +importlib-metadata==8.7.0; (platform_machine != "ppc64le" and platform_machine != "s390x") and python_version < "3.12" or python_full_version < "3.10.2" +iniconfig==2.3.0 jaraco-classes==3.4.0; platform_machine != "ppc64le" and platform_machine != "s390x" jaraco-context==6.0.1; platform_machine != "ppc64le" and platform_machine != "s390x" -jaraco-functools==4.1.0; platform_machine != "ppc64le" and platform_machine != "s390x" +jaraco-functools==4.3.0; platform_machine != "ppc64le" and platform_machine != "s390x" jeepney==0.9.0; (platform_machine != "ppc64le" and platform_machine != "s390x") and sys_platform == "linux" jinja2==3.1.6 keyring==25.6.0; platform_machine != "ppc64le" and platform_machine != "s390x" -markdown-it-py==3.0.0 -markupsafe==3.0.2 +markdown-it-py==4.0.0 +markupsafe==3.0.3 mccabe==0.7.0 mdurl==0.1.2 -more-itertools==10.7.0; platform_machine != "ppc64le" and platform_machine != "s390x" -nh3==0.2.21 +more-itertools==10.8.0; platform_machine != "ppc64le" and platform_machine != "s390x" +nh3==0.3.2 nicfit-py[cookiecutter]==0.8.7 packaging==25.0 paver==1.3.4 -platformdirs==4.3.7 -pluggy==1.5.0 -pycodestyle==2.13.0 -pycparser==2.22; (platform_machine != "ppc64le" and platform_machine != "s390x") and sys_platform == "linux" and platform_python_implementation != "PyPy" -pyflakes==3.3.2 -pygments==2.19.1 -pyproject-api==1.9.0 +platformdirs==4.5.0 +pluggy==1.6.0 +pycodestyle==2.14.0 +pycparser==2.23; python_full_version >= "3.9" and platform_python_implementation != "PyPy" and (platform_machine != "ppc64le" and platform_machine != "s390x") and sys_platform == "linux" and implementation_name != "PyPy" +pyflakes==3.4.0 +pygments==2.19.2 +pyproject-api==1.10.0 pyproject-hooks==1.2.0 -pytest==8.3.5 -pytest-cov==6.1.1 +pytest==9.0.1 +pytest-cov==7.0.0 python-dateutil==2.9.0.post0 python-slugify==8.0.4 pywin32-ctypes==0.2.3; (platform_machine != "ppc64le" and platform_machine != "s390x") and sys_platform == "win32" -pyyaml==6.0.2 +pyyaml==6.0.3 readme-renderer==44.0 regarding==0.2.0 -requests==2.32.3 +requests==2.32.5 requests-toolbelt==1.0.0 rfc3986==2.0.0 -rich==14.0.0 -secretstorage==3.3.3; (platform_machine != "ppc64le" and platform_machine != "s390x") and sys_platform == "linux" -setuptools==79.0.1 +rich==14.2.0 +secretstorage==3.4.1; (platform_machine != "ppc64le" and platform_machine != "s390x") and sys_platform == "linux" +setuptools==80.9.0 six==1.17.0 -snowballstemmer==2.2.0 -sphinx==7.4.7 +snowballstemmer==3.0.1 +sphinx==8.1.3 sphinx-issues==5.0.1 sphinx-rtd-theme==3.0.2 sphinxcontrib-applehelp==2.0.0 @@ -85,13 +85,12 @@ sphinxcontrib-serializinghtml==2.0.0 text-unidecode==1.3 toml==0.10.2 -tomli==2.2.1; python_version < "3.11" -tox==4.25.0 -twine==6.1.0 -types-python-dateutil==2.9.0.20241206 -typing-extensions==4.13.2; python_version < "3.13" +tomli==2.3.0; python_version < "3.11" +tox==4.32.0 +twine==6.2.0 +typing-extensions==4.15.0; python_version < "3.13" tzdata==2025.2 -urllib3==2.4.0 -virtualenv==20.30.0 -zipp==3.21.0; (platform_machine != "ppc64le" and platform_machine != "s390x") and python_version < "3.12" or python_full_version < "3.10.2" +urllib3==2.5.0 +virtualenv==20.35.4 +zipp==3.23.0; (platform_machine != "ppc64le" and platform_machine != "s390x") and python_version < "3.12" or python_full_version < "3.10.2" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/requirements/plugin-requirements.txt new/eyed3-0.9.9/requirements/plugin-requirements.txt --- old/eyed3-0.9.8/requirements/plugin-requirements.txt 2025-04-26 23:21:49.000000000 +0200 +++ new/eyed3-0.9.9/requirements/plugin-requirements.txt 2025-11-16 17:02:46.000000000 +0100 @@ -1,21 +1,21 @@ # This file is @generated by PDM. # Please do not edit it manually. -anyio==4.9.0 -certifi==2025.4.26 -charset-normalizer==3.4.1 +anyio==4.11.0 +certifi==2025.11.12 +charset-normalizer==3.4.4 deprecation==2.1.0 -exceptiongroup==1.2.2; python_version < "3.11" +exceptiongroup==1.3.0; python_version < "3.11" filetype==1.2.0 h11==0.16.0 httpcore==1.0.9 httpx==0.28.1 -idna==3.10 +idna==3.11 packaging==25.0 -pillow==11.2.1 -pylast==5.5.0 -requests==2.32.3 +pillow==12.0.0 +pylast==6.0.0 +requests==2.32.5 sniffio==1.3.1 -typing-extensions==4.13.2; python_version < "3.13" -urllib3==2.4.0 +typing-extensions==4.15.0; python_version < "3.13" +urllib3==2.5.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/eyed3-0.9.8/tox.ini new/eyed3-0.9.9/tox.ini --- old/eyed3-0.9.8/tox.ini 2025-04-23 04:07:47.000000000 +0200 +++ new/eyed3-0.9.9/tox.ini 2025-10-23 05:40:24.000000000 +0200 @@ -1,5 +1,5 @@ [tox] -envlist = py{39,310,311,312,313},pypy3 +envlist = py{310,311,312,313,314},pypy3 [default] src_dir = ./eyed3
