pkgsrc-Changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

CVS commit: pkgsrc/audio/py-beets



Module Name:    pkgsrc
Committed By:   wiz
Date:           Sun Sep 21 15:17:23 UTC 2025

Modified Files:
        pkgsrc/audio/py-beets: Makefile PLIST distinfo

Log Message:
py-beets: update to 2.4.0.

2.4.0 (September 13, 2025)
--------------------------

New features:

- :doc:`plugins/musicbrainz`: The MusicBrainz autotagger has been moved to a
  separate plugin. The default :ref:`plugins-config` includes ``musicbrainz``,
  but if you've customized your ``plugins`` list in your configuration, you'll
  need to explicitly add ``musicbrainz`` to continue using this functionality.
  Configuration option ``musicbrainz.enabled`` has thus been deprecated.
  :bug:`2686` :bug:`4605`
- :doc:`plugins/web`: Show notifications when a track plays. This uses the Media
  Session API to customize media notifications.
- :doc:`plugins/discogs`: Add configurable ``search_limit`` option to limit the
  number of results returned by the Discogs metadata search queries.
- :doc:`plugins/discogs`: Implement ``track_for_id`` method to allow retrieving
  singletons by their Discogs ID. :bug:`4661`
- :doc:`plugins/replace`: Add new plugin.
- :doc:`plugins/duplicates`: Add ``--remove`` option, allowing to remove from
  the library without deleting media files. :bug:`5832`
- :doc:`plugins/playlist`: Support files with the ``.m3u8`` extension.
  :bug:`5829`
- :doc:`plugins/mbcollection`: When getting the user collections, only consider
  collections of releases, and ignore collections of other entity types.
- :doc:`plugins/mpdstats`: Add new configuration option,
  ``played_ratio_threshold``, to allow configuring the percentage the song must
  be played for it to be counted as played instead of skipped.
- :doc:`plugins/web`: Display artist and album as part of the search results.
- :doc:`plugins/spotify` :doc:`plugins/deezer`: Add new configuration option
  ``search_limit`` to limit the number of results returned by search queries.

Bug fixes:

- :doc:`plugins/musicbrainz`: fix regression where user configured
  ``extra_tags`` have been read incorrectly. :bug:`5788`
- tests: Fix library tests failing on Windows when run from outside ``D:/``.
  :bug:`5802`
- Fix an issue where calling ``Library.add`` would cause the ``database_change``
  event to be sent twice, not once. :bug:`5560`
- Fix ``HiddenFileTest`` by using ``bytestring_path()``.
- tests: Fix tests failing without ``langdetect`` (by making it required).
  :bug:`5797`
- :doc:`plugins/musicbrainz`: Fix the MusicBrainz search not taking into account
  the album/recording aliases
- :doc:`/plugins/spotify`: Fix the issue with that every query to spotify was
  ascii encoded. This resulted in bad matches for queries that contained special
  e.g. non latin characters as 盗作. If you want to keep the legacy behavior set
  the config option ``spotify.search_query_ascii: yes``. :bug:`5699`
- :doc:`plugins/discogs`: Beets will no longer crash if a release has been
  deleted, and returns a 404.
- :doc:`plugins/lastgenre`: Fix the issue introduced in Beets 2.3.0 where
  non-whitelisted last.fm genres were not canonicalized to parent genres.
  :bug:`5930`
- :doc:`plugins/chroma`: AcoustID lookup HTTP requests will now time out after
  10 seconds, rather than hanging the entire import process.
- :doc:`/plugins/deezer`: Fix the issue with that every query to deezer was
  ascii encoded. This resulted in bad matches for queries that contained special
  e.g. non latin characters as 盗作. If you want to keep the legacy behavior set
  the config option ``deezer.search_query_ascii: yes``. :bug:`5860`
- Fixed regression with :doc:`/plugins/listenbrainz` where the plugin could not
  be loaded :bug:`5975`

For packagers:

- Optional ``extra_tags`` parameter has been removed from
  ``BeetsPlugin.candidates`` method signature since it is never passed in. If
  you override this method in your plugin, feel free to remove this parameter.
- Loosened ``typing_extensions`` dependency in pyproject.toml to apply to every
  python version.

For plugin developers:

- The ``fetchart`` plugins has seen a few changes to function signatures and
  source registration in the process of introducing typings to the code. Custom
  art sources might need to be adapted.
- We split the responsibilities of plugins into two base classes

  1. :class:`beets.plugins.BeetsPlugin` is the base class for all plugins, any
     plugin needs to inherit from this class.
  2. :class:`beets.metadata_plugin.MetadataSourcePlugin` allows plugins to act
     like metadata sources. E.g. used by the MusicBrainz plugin. All plugins in
     the beets repo are opted into this class where applicable. If you are
     maintaining a plugin that acts like a metadata source, i.e. you expose any
     of ``track_for_id``, ``album_for_id``, ``candidates``, ``item_candidates``,
     ``album_distance``, ``track_distance`` methods, please update your plugin
     to inherit from the new baseclass, as otherwise your plugin will stop
     working with the next major release.

- Several definitions have been moved:

  - ``BLOB_TYPE`` constant, ``PathQuery`` and ``SingletonQuery`` queries have
    moved from ``beets.library`` to ``beets.dbcore.query`` module
  - ``DateType``, ``DurationType``, ``PathType`` types and ``MusicalKey`` class
    have moved from ``beets.library`` to ``beets.dbcore.types`` module.
  - ``Distance`` has moved from ``beets.autotag`` to ``beets.autotag.distance``
    module.
  - ``beets.autotag.current_metadata`` has been renamed to
    ``beets.util.get_most_common_tags``.

  Old imports are now deprecated and will be removed in version ``3.0.0``.

- ``beets.ui.decargs`` is deprecated and will be removed in version ``3.0.0``.
- Beets is now PEP 561 compliant, which means that it provides type hints for
  all public APIs. This allows IDEs to provide better autocompletion and type
  checking for downstream users of the beets API.
- ``plugins.find_plugins`` function does not anymore load plugins. You need to
  explicitly call ``plugins.load_plugins()`` to load them.
- ``plugins.load_plugins`` function does not anymore accept the list of plugins
  to load. Instead, it loads all plugins that are configured by
  :ref:`plugins-config` configuration.
- Flexible fields, which can be used by plugins to store additional metadata,
  now also support list values. Previously, beets would throw an error while
  storing the data in the SQL database due to missing type conversion.
  :bug:`5698`

Other changes:

- Refactor: Split responsibilities of Plugins into MetaDataPlugins and general
  Plugins.
- Documentation structure for auto generated API references changed slightly.
  Autogenerated API references are now located in the ``docs/api`` subdirectory.
- :doc:`/plugins/substitute`: Fix rST formatting for example cases so that each
  case is shown on separate lines.
- Refactored library.py file by splitting it into multiple modules within the
  beets/library directory.
- Added a test to check that all plugins can be imported without errors.
- :doc:`/guides/main`: Add instructions to install beets on Void Linux.
- :doc:`plugins/lastgenre`: Refactor loading whitelist and canonicalization
  file. :bug:`5979`
- :doc:`plugins/lastgenre`: Updated and streamlined the genre whitelist and
  canonicalization tree :bug:`5977`
- UI: Update default ``text_diff_added`` color from **bold red** to **bold
  green.**
- UI: Use ``text_diff_added`` and ``text_diff_removed`` colors in **all** diff
  comparisons, including case differences.


To generate a diff of this commit:
cvs rdiff -u -r1.39 -r1.40 pkgsrc/audio/py-beets/Makefile
cvs rdiff -u -r1.22 -r1.23 pkgsrc/audio/py-beets/PLIST
cvs rdiff -u -r1.23 -r1.24 pkgsrc/audio/py-beets/distinfo

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: pkgsrc/audio/py-beets/Makefile
diff -u pkgsrc/audio/py-beets/Makefile:1.39 pkgsrc/audio/py-beets/Makefile:1.40
--- pkgsrc/audio/py-beets/Makefile:1.39 Thu Jul  3 19:18:02 2025
+++ pkgsrc/audio/py-beets/Makefile      Sun Sep 21 15:17:23 2025
@@ -1,6 +1,6 @@
-# $NetBSD: Makefile,v 1.39 2025/07/03 19:18:02 wiz Exp $
+# $NetBSD: Makefile,v 1.40 2025/09/21 15:17:23 wiz Exp $
 
-DISTNAME=      beets-2.3.1
+DISTNAME=      beets-2.4.0
 PKGNAME=       ${PYPKGPREFIX}-${DISTNAME}
 CATEGORIES=    audio python
 MASTER_SITES=  ${MASTER_SITE_PYPI:=b/beets/}
@@ -20,6 +20,7 @@ DEPENDS+=     ${PYPKGPREFIX}-mediafile>=0.12
 DEPENDS+=      ${PYPKGPREFIX}-musicbrainz-ngs>=0.4:../../audio/py-musicbrainz-ngs
 DEPENDS+=      ${PYPKGPREFIX}-numpy>=1.24.4:../../math/py-numpy
 DEPENDS+=      ${PYPKGPREFIX}-platformdirs>=3.5.0:../../misc/py-platformdirs
+DEPENDS+=      ${PYPKGPREFIX}-typing-extensions-[0-9]*:../../devel/py-typing-extensions
 DEPENDS+=      ${PYPKGPREFIX}-yaml-[0-9]*:../../textproc/py-yaml
 # update
 DEPENDS+=      ${PYPKGPREFIX}-requests-[0-9]*:../../devel/py-requests
@@ -40,6 +41,12 @@ INSTALLATION_DIRS+=  ${PKGMANDIR}/man1 ${
 
 PYTHON_VERSIONS_INCOMPATIBLE=  39 310
 
+# as of 2.4.0
+# 1067 passed, 101 skipped, 1 warning
+.if make(test)
+ALLOW_NETWORK_ACCESS=  yes
+.endif
+
 .include "../../lang/python/pyversion.mk"
 .if ${PYTHON_VERSION} < 311
 DEPENDS+=      ${PYPKGPREFIX}-typing-extensions-[0-9]*:../../devel/py-typing-extensions

Index: pkgsrc/audio/py-beets/PLIST
diff -u pkgsrc/audio/py-beets/PLIST:1.22 pkgsrc/audio/py-beets/PLIST:1.23
--- pkgsrc/audio/py-beets/PLIST:1.22    Wed May 14 13:33:05 2025
+++ pkgsrc/audio/py-beets/PLIST Sun Sep 21 15:17:23 2025
@@ -1,4 +1,4 @@
-@comment $NetBSD: PLIST,v 1.22 2025/05/14 13:33:05 adam Exp $
+@comment $NetBSD: PLIST,v 1.23 2025/09/21 15:17:23 wiz Exp $
 bin/beet-${PYVERSSUFFIX}
 ${PYSITELIB}/${WHEEL_INFODIR}/LICENSE
 ${PYSITELIB}/${WHEEL_INFODIR}/METADATA
@@ -17,15 +17,15 @@ ${PYSITELIB}/beets/art.pyo
 ${PYSITELIB}/beets/autotag/__init__.py
 ${PYSITELIB}/beets/autotag/__init__.pyc
 ${PYSITELIB}/beets/autotag/__init__.pyo
+${PYSITELIB}/beets/autotag/distance.py
+${PYSITELIB}/beets/autotag/distance.pyc
+${PYSITELIB}/beets/autotag/distance.pyo
 ${PYSITELIB}/beets/autotag/hooks.py
 ${PYSITELIB}/beets/autotag/hooks.pyc
 ${PYSITELIB}/beets/autotag/hooks.pyo
 ${PYSITELIB}/beets/autotag/match.py
 ${PYSITELIB}/beets/autotag/match.pyc
 ${PYSITELIB}/beets/autotag/match.pyo
-${PYSITELIB}/beets/autotag/mb.py
-${PYSITELIB}/beets/autotag/mb.pyc
-${PYSITELIB}/beets/autotag/mb.pyo
 ${PYSITELIB}/beets/config_default.yaml
 ${PYSITELIB}/beets/dbcore/__init__.py
 ${PYSITELIB}/beets/dbcore/__init__.pyc
@@ -42,21 +42,49 @@ ${PYSITELIB}/beets/dbcore/queryparse.pyo
 ${PYSITELIB}/beets/dbcore/types.py
 ${PYSITELIB}/beets/dbcore/types.pyc
 ${PYSITELIB}/beets/dbcore/types.pyo
-${PYSITELIB}/beets/importer.py
-${PYSITELIB}/beets/importer.pyc
-${PYSITELIB}/beets/importer.pyo
-${PYSITELIB}/beets/library.py
-${PYSITELIB}/beets/library.pyc
-${PYSITELIB}/beets/library.pyo
+${PYSITELIB}/beets/importer/__init__.py
+${PYSITELIB}/beets/importer/__init__.pyc
+${PYSITELIB}/beets/importer/__init__.pyo
+${PYSITELIB}/beets/importer/session.py
+${PYSITELIB}/beets/importer/session.pyc
+${PYSITELIB}/beets/importer/session.pyo
+${PYSITELIB}/beets/importer/stages.py
+${PYSITELIB}/beets/importer/stages.pyc
+${PYSITELIB}/beets/importer/stages.pyo
+${PYSITELIB}/beets/importer/state.py
+${PYSITELIB}/beets/importer/state.pyc
+${PYSITELIB}/beets/importer/state.pyo
+${PYSITELIB}/beets/importer/tasks.py
+${PYSITELIB}/beets/importer/tasks.pyc
+${PYSITELIB}/beets/importer/tasks.pyo
+${PYSITELIB}/beets/library/__init__.py
+${PYSITELIB}/beets/library/__init__.pyc
+${PYSITELIB}/beets/library/__init__.pyo
+${PYSITELIB}/beets/library/exceptions.py
+${PYSITELIB}/beets/library/exceptions.pyc
+${PYSITELIB}/beets/library/exceptions.pyo
+${PYSITELIB}/beets/library/library.py
+${PYSITELIB}/beets/library/library.pyc
+${PYSITELIB}/beets/library/library.pyo
+${PYSITELIB}/beets/library/models.py
+${PYSITELIB}/beets/library/models.pyc
+${PYSITELIB}/beets/library/models.pyo
+${PYSITELIB}/beets/library/queries.py
+${PYSITELIB}/beets/library/queries.pyc
+${PYSITELIB}/beets/library/queries.pyo
 ${PYSITELIB}/beets/logging.py
 ${PYSITELIB}/beets/logging.pyc
 ${PYSITELIB}/beets/logging.pyo
 ${PYSITELIB}/beets/mediafile.py
 ${PYSITELIB}/beets/mediafile.pyc
 ${PYSITELIB}/beets/mediafile.pyo
+${PYSITELIB}/beets/metadata_plugins.py
+${PYSITELIB}/beets/metadata_plugins.pyc
+${PYSITELIB}/beets/metadata_plugins.pyo
 ${PYSITELIB}/beets/plugins.py
 ${PYSITELIB}/beets/plugins.pyc
 ${PYSITELIB}/beets/plugins.pyo
+${PYSITELIB}/beets/py.typed
 ${PYSITELIB}/beets/random.py
 ${PYSITELIB}/beets/random.pyc
 ${PYSITELIB}/beets/random.pyo
@@ -85,6 +113,9 @@ ${PYSITELIB}/beets/util/artresizer.pyo
 ${PYSITELIB}/beets/util/bluelet.py
 ${PYSITELIB}/beets/util/bluelet.pyc
 ${PYSITELIB}/beets/util/bluelet.pyo
+${PYSITELIB}/beets/util/config.py
+${PYSITELIB}/beets/util/config.pyc
+${PYSITELIB}/beets/util/config.pyo
 ${PYSITELIB}/beets/util/functemplate.py
 ${PYSITELIB}/beets/util/functemplate.pyc
 ${PYSITELIB}/beets/util/functemplate.pyo
@@ -100,6 +131,9 @@ ${PYSITELIB}/beets/util/m3u.pyo
 ${PYSITELIB}/beets/util/pipeline.py
 ${PYSITELIB}/beets/util/pipeline.pyc
 ${PYSITELIB}/beets/util/pipeline.pyo
+${PYSITELIB}/beets/util/units.py
+${PYSITELIB}/beets/util/units.pyc
+${PYSITELIB}/beets/util/units.pyo
 ${PYSITELIB}/beets/vfs.py
 ${PYSITELIB}/beets/vfs.pyc
 ${PYSITELIB}/beets/vfs.pyo
@@ -276,6 +310,9 @@ ${PYSITELIB}/beetsplug/mpdstats.pyo
 ${PYSITELIB}/beetsplug/mpdupdate.py
 ${PYSITELIB}/beetsplug/mpdupdate.pyc
 ${PYSITELIB}/beetsplug/mpdupdate.pyo
+${PYSITELIB}/beetsplug/musicbrainz.py
+${PYSITELIB}/beetsplug/musicbrainz.pyc
+${PYSITELIB}/beetsplug/musicbrainz.pyo
 ${PYSITELIB}/beetsplug/parentwork.py
 ${PYSITELIB}/beetsplug/parentwork.pyc
 ${PYSITELIB}/beetsplug/parentwork.pyo
@@ -294,6 +331,9 @@ ${PYSITELIB}/beetsplug/plexupdate.pyo
 ${PYSITELIB}/beetsplug/random.py
 ${PYSITELIB}/beetsplug/random.pyc
 ${PYSITELIB}/beetsplug/random.pyo
+${PYSITELIB}/beetsplug/replace.py
+${PYSITELIB}/beetsplug/replace.pyc
+${PYSITELIB}/beetsplug/replace.pyo
 ${PYSITELIB}/beetsplug/replaygain.py
 ${PYSITELIB}/beetsplug/replaygain.pyc
 ${PYSITELIB}/beetsplug/replaygain.pyo

Index: pkgsrc/audio/py-beets/distinfo
diff -u pkgsrc/audio/py-beets/distinfo:1.23 pkgsrc/audio/py-beets/distinfo:1.24
--- pkgsrc/audio/py-beets/distinfo:1.23 Wed May 14 13:33:05 2025
+++ pkgsrc/audio/py-beets/distinfo      Sun Sep 21 15:17:23 2025
@@ -1,5 +1,5 @@
-$NetBSD: distinfo,v 1.23 2025/05/14 13:33:05 adam Exp $
+$NetBSD: distinfo,v 1.24 2025/09/21 15:17:23 wiz Exp $
 
-BLAKE2s (beets-2.3.1.tar.gz) = 16198c080d7e219873d4133822726325351684a9ab2011c78b61af196130fb08
-SHA512 (beets-2.3.1.tar.gz) = b065dd9f1ce5dd63779b085d44510e5158d23046fdc9ecaa1ce9a10d5f8fa660e1ad130c68fed4ddac323453fcbf6d1ea2dc2a9897931c486da099b87dcfc047
-Size (beets-2.3.1.tar.gz) = 2133246 bytes
+BLAKE2s (beets-2.4.0.tar.gz) = 98edb65c8713b046886b166e40d86ab1e876856a4057451677c456c11279b4b4
+SHA512 (beets-2.4.0.tar.gz) = 630cac17141d235332dcb661301b0a94a085812f8cbf5839c56c9991698cbc165b537a8f8bf286ad70a945b288e8535e8aad4f1a97541389193134704fd95715
+Size (beets-2.4.0.tar.gz) = 2134935 bytes



Home | Main Index | Thread Index | Old Index