From 7bbd215efc98bb2e88feeba1a68f276916ed5934 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0ar=C5=ABnas=20Nejus?= Date: Mon, 13 May 2024 07:03:47 +0100 Subject: [PATCH] Update all docs with Poetry --- CONTRIBUTING.rst | 45 +++++++++++++++--------------------- docs/faq.rst | 15 ++++++------ docs/plugins/absubmit.rst | 9 ++++---- docs/plugins/aura.rst | 15 +++--------- docs/plugins/beatport.rst | 11 ++++----- docs/plugins/bpd.rst | 7 ++++++ docs/plugins/chroma.rst | 28 +++++++++++++++------- docs/plugins/discogs.rst | 6 ++--- docs/plugins/embedart.rst | 13 +++++++---- docs/plugins/embyupdate.rst | 20 ++++++++++------ docs/plugins/fetchart.rst | 12 +++------- docs/plugins/kodiupdate.rst | 11 +++++---- docs/plugins/lastgenre.rst | 10 ++++---- docs/plugins/lastimport.rst | 11 ++++----- docs/plugins/lyrics.rst | 34 ++++++--------------------- docs/plugins/metasync.rst | 8 +++++-- docs/plugins/mpdstats.rst | 9 +++----- docs/plugins/plexupdate.rst | 23 ++++++++---------- docs/plugins/replaygain.rst | 12 ++++++++-- docs/plugins/scrub.rst | 16 +++++++++---- docs/plugins/sonosupdate.rst | 6 ++--- docs/plugins/thumbnails.rst | 12 ++++++---- docs/plugins/web.rst | 16 +++++-------- poetry.lock | 5 ++-- pyproject.toml | 3 ++- 25 files changed, 176 insertions(+), 181 deletions(-) diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 6eb66e14e..672b0942c 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -65,30 +65,24 @@ Programming Getting the Source ^^^^^^^^^^^^^^^^^^ -The easiest way to get started with the latest beets source is to use -`pip`_ to install an “editable” package. This -can be done with one command: - -.. code-block:: bash - - $ pip install -e git+https://github.com/beetbox/beets.git#egg=beets - -Or, equivalently: +The easiest way to get started with the latest beets source is to clone the +repository and install ``beets`` in a local virtual environment using `poetry`_. +This can be done with: .. code-block:: bash $ git clone https://github.com/beetbox/beets.git $ cd beets - $ pip install -e . + $ poetry install + +This will install ``beets`` and all development dependencies into its own +virtual environment in your ``$POETRY_CACHE_DIR``. See ``poetry install +--help`` for installation options, including installing ``extra`` dependencies +for plugins. + +In order to run commands within this virtual environment, prepend ``poetry +run`` to them, for example ``poetry run pytest``. -If you already have a released version of beets installed, you may need -to remove it first by typing ``pip uninstall beets``. The pip command -above will put the beets source in a ``src/beets`` directory and install -the ``beet`` CLI script to a standard location on your system. You may -want to use the ``--src`` option to specify the parent directory where -the source will be checked out and the ``--user`` option such that the -package will be installed to your home directory (compare with the -output of ``pip install --help``). Code Contribution Ideas ^^^^^^^^^^^^^^^^^^^^^^^ @@ -310,15 +304,12 @@ that reveal ordering dependencies—which are bad news! Test Dependencies ^^^^^^^^^^^^^^^^^ -The tests have a few more dependencies than beets itself. (The -additional dependencies consist of testing utilities and dependencies of -non-default plugins exercised by the test suite.) The dependencies are -listed under 'test' in ``extras_require`` in `setup.py`_. -To install the test dependencies, run ``python -m pip install .[test]``. -Or, just run a test suite with ``tox`` which will install them -automatically. +The tests have a few more dependencies than beets itself. (The additional +dependencies consist of testing utilities and dependencies of non-default +plugins exercised by the test suite.) The dependencies are listed under the +``tool.poetry.group.test.dependencies`` section in `pyproject.toml`_. -.. _setup.py: https://github.com/beetbox/beets/blob/master/setup.py +.. _pyproject.toml: https://github.com/beetbox/beets/blob/master/pyproject.toml Writing Tests ------------- @@ -359,5 +350,5 @@ others. See `unittest.mock`_ for more info. .. _integration test: https://github.com/beetbox/beets/actions?query=workflow%3A%22integration+tests%22 .. _unittest.mock: https://docs.python.org/3/library/unittest.mock.html .. _documentation: https://beets.readthedocs.io/en/stable/ -.. _pip: https://pip.pypa.io/en/stable/ +.. _poetry: https://python-poetry.org/docs/ .. _vim: https://www.vim.org/ diff --git a/docs/faq.rst b/docs/faq.rst index 44c8fa25c..b740c6503 100644 --- a/docs/faq.rst +++ b/docs/faq.rst @@ -149,18 +149,19 @@ it's helpful to run on the "bleeding edge". To run the latest source: and ``python3`` instead of ``pip`` and ``python`` respectively. - Use ``pip`` to install the latest snapshot tarball. Type: ``pip install https://github.com/beetbox/beets/tarball/master`` - - Grab the source using git. First, clone the repository: - ``git clone https://github.com/beetbox/beets.git``. - Then, ``cd beets`` and ``python setup.py install``. - Use ``pip`` to install an "editable" version of beets based on an automatic source checkout. For example, run ``pip install -e git+https://github.com/beetbox/beets#egg=beets`` to clone beets and install it, allowing you to modify the source in-place to try out changes. - - Combine the previous two approaches, cloning the source yourself, - and then installing in editable mode: - ``git clone https://github.com/beetbox/beets.git`` then - ``pip install -e beets``. This approach lets you decide where the + - Clone source code and install it in editable mode + + .. code-block:: shell + + git clone https://github.com/beetbox/beets.git + poetry install + + This approach lets you decide where the source is stored, with any changes immediately reflected in your environment. diff --git a/docs/plugins/absubmit.rst b/docs/plugins/absubmit.rst index b0f8710ad..25c176e51 100644 --- a/docs/plugins/absubmit.rst +++ b/docs/plugins/absubmit.rst @@ -21,13 +21,12 @@ to run. Its source can be found on `GitHub`_, and while it is possible to compile the extractor from source, AcousticBrainz would prefer if you used their binary (see the AcousticBrainz `FAQ`_). -The ``absubmit`` plugin also requires `requests`_, which you can install -using `pip`_ by typing:: +Then, install ``beets`` with ``absubmit`` extra - pip install requests + pip install "beets[absubmit]" + +Lastly, enable the plugin in your configuration (see :ref:`using-plugins`). -After installing both the extractor binary and requests you can enable -the plugin ``absubmit`` in your configuration (see :ref:`using-plugins`). Submitting Data --------------- diff --git a/docs/plugins/aura.rst b/docs/plugins/aura.rst index d849d30eb..49e2649b6 100644 --- a/docs/plugins/aura.rst +++ b/docs/plugins/aura.rst @@ -12,19 +12,10 @@ read the :ref:`aura-issues` section. Install ------- -The ``aura`` plugin depends on `Flask`_, which can be installed using -``python -m pip install flask``. Then you can enable the ``aura`` plugin in -your configuration (see :ref:`using-plugins`). +To use the ``aura`` plugin, first enable it in your configuration (see +:ref:`using-plugins`). Then, install ``beets`` with ``aura`` extra -It is likely that you will need to enable :ref:`aura-cors`, which introduces -an additional dependency: `flask-cors`_. This can be installed with -``python -m pip install flask-cors``. - -If `Pillow`_ is installed (``python -m pip install Pillow``) then the optional -``width`` and ``height`` attributes are included in image resource objects. - -.. _flask-cors: https://flask-cors.readthedocs.io -.. _Pillow: https://pillow.readthedocs.io + pip install "beets[aura]" Usage diff --git a/docs/plugins/beatport.rst b/docs/plugins/beatport.rst index f44fdeb34..bc10f02a4 100644 --- a/docs/plugins/beatport.rst +++ b/docs/plugins/beatport.rst @@ -10,13 +10,12 @@ both MusicBrainz and (to a lesser degree) `Discogs`_ show no matches. Installation ------------ - To use the ``beatport`` plugin, first enable it in your configuration (see -:ref:`using-plugins`). Then, install the `requests`_ and `requests_oauthlib`_ -libraries (which we need for querying and authorizing with the Beatport API) -by typing:: +:ref:`using-plugins`). Then, install ``beets`` with ``beatport`` extra - pip install requests requests_oauthlib +.. code-block:: bash + + pip install "beets[beatport]" You will also need to register for a `Beatport`_ account. The first time you run the :ref:`import-cmd` command after enabling the plugin, it will ask you @@ -41,6 +40,4 @@ Configuration This plugin can be configured like other metadata source plugins as described in :ref:`metadata-source-plugin-configuration`. -.. _requests: https://requests.readthedocs.io/en/master/ -.. _requests_oauthlib: https://github.com/requests/requests-oauthlib .. _Beatport: https://www.beatport.com/ diff --git a/docs/plugins/bpd.rst b/docs/plugins/bpd.rst index 2330bea70..c7ac350df 100644 --- a/docs/plugins/bpd.rst +++ b/docs/plugins/bpd.rst @@ -26,6 +26,13 @@ You will also need the various GStreamer plugin packages to make everything work. See the :doc:`/plugins/chroma` documentation for more information on installing GStreamer plugins. +Once you have system dependencies installed, install ``beets`` with ``bpd`` +extra which installs Python bindings for ``GStreamer``: + +.. code-block:: console + + pip install "beets[bpd]" + .. _GStreamer: https://gstreamer.freedesktop.org/download .. _Homebrew: https://brew.sh diff --git a/docs/plugins/chroma.rst b/docs/plugins/chroma.rst index 9315a1b8c..30d57939f 100644 --- a/docs/plugins/chroma.rst +++ b/docs/plugins/chroma.rst @@ -23,18 +23,23 @@ If you're willing to pay the performance cost for fingerprinting, read on! Installing Dependencies ----------------------- -To get fingerprinting working, you'll need to install three things: the -`Chromaprint`_ library or command-line tool, an audio decoder, and the -`pyacoustid`_ Python library (version 0.6 or later). +To get fingerprinting working, you'll need to install three things: -First, install pyacoustid itself. You can do this using `pip`_, like so:: +1. `pyacoustid`_ Python library (version 0.6 or later). You can install it by + installing ``beets`` with ``chroma`` extra - $ pip install pyacoustid +.. code-block:: bash -.. _pip: https://pip.pypa.io + pip install "beets[chroma]" -Then, you will need to install `Chromaprint`_, either as a dynamic library or -in the form of a command-line tool (``fpcalc``). +2. the `Chromaprint`_ library_ or |command-line-tool|_ +3. an |audio-decoder|_ + +.. |command-line-tool| replace:: command line tool +.. |audio-decoder| replace:: audio decoder + + +.. _command-line-tool: Installing the Binary Command-Line Tool ''''''''''''''''''''''''''''''''''''''' @@ -47,6 +52,8 @@ executable somewhere like ``/usr/local/bin``. .. _download: https://acoustid.org/chromaprint +.. _library: + Installing the Library '''''''''''''''''''''' @@ -58,6 +65,11 @@ chromaprint``. .. _Homebrew: https://brew.sh/ +.. _audio-decoder: + +Audio Decoder +''''''''''''' + You will also need a mechanism for decoding audio files supported by the `audioread`_ library: diff --git a/docs/plugins/discogs.rst b/docs/plugins/discogs.rst index bc4794724..ac67f2d0a 100644 --- a/docs/plugins/discogs.rst +++ b/docs/plugins/discogs.rst @@ -15,11 +15,11 @@ Installation ------------ To use the ``discogs`` plugin, first enable it in your configuration (see -:ref:`using-plugins`). Then, install the `python3-discogs-client`_ library by typing: +:ref:`using-plugins`). Then, install ``beets`` with ``discogs`` extra -.. code-block:: console +.. code-block:: bash - $ pip install python3-discogs-client + pip install "beets[discogs]" You will also need to register for a `Discogs`_ account, and provide authentication credentials via a personal access token or an OAuth2 diff --git a/docs/plugins/embedart.rst b/docs/plugins/embedart.rst index f87fabc71..9a91055f4 100644 --- a/docs/plugins/embedart.rst +++ b/docs/plugins/embedart.rst @@ -10,10 +10,15 @@ displaying album art in some media players (iPods, for example). Embedding Art Automatically --------------------------- -To automatically embed discovered album art into imported files, just enable -the ``embedart`` plugin (see :doc:`/plugins/index`). You'll also want to enable the -:doc:`/plugins/fetchart` to obtain the images to be embedded. Art will be -embedded after each album has its cover art set. +To use the ``embedart`` plugin, first enable it in your configuration (see +:ref:`using-plugins`). Then, install ``beets`` with ``embedart`` extra + +.. code-block:: bash + + pip install "beets[embedart]" + +You'll also want to enable the :doc:`/plugins/fetchart` to obtain the images to +be embedded. Art will be embedded after each album has its cover art set. This behavior can be disabled with the ``auto`` config option (see below). diff --git a/docs/plugins/embyupdate.rst b/docs/plugins/embyupdate.rst index fed7e994c..1c6fc61e4 100644 --- a/docs/plugins/embyupdate.rst +++ b/docs/plugins/embyupdate.rst @@ -1,9 +1,20 @@ EmbyUpdate Plugin ================= -``embyupdate`` is a plugin that lets you automatically update `Emby`_'s library whenever you change your beets library. +``embyupdate`` is a plugin that lets you automatically update `Emby`_'s library +whenever you change your beets library. -To use ``embyupdate`` plugin, enable it in your configuration (see :ref:`using-plugins`). Then, you'll want to configure the specifics of your Emby server. You can do that using an ``emby:`` section in your ``config.yaml``, which looks like this:: +To use it, first enable the your configuration (see :ref:`using-plugins`). +Then, install ``beets`` with ``embyupdate`` extra + +.. code-block:: bash + + pip install "beets[embyupdate]" + +Then, you'll want to configure the specifics of your Emby server. You can do +that using an ``emby`` section in your ``config.yaml`` + +.. code-block:: yaml emby: host: localhost @@ -11,14 +22,9 @@ To use ``embyupdate`` plugin, enable it in your configuration (see :ref:`using-p username: user apikey: apikey -To use the ``embyupdate`` plugin you need to install the `requests`_ library with:: - - pip install requests - With that all in place, you'll see beets send the "update" command to your Emby server every time you change your beets library. .. _Emby: https://emby.media/ -.. _requests: https://requests.readthedocs.io/en/master/ Configuration ------------- diff --git a/docs/plugins/fetchart.rst b/docs/plugins/fetchart.rst index 6828b93fe..1da92a493 100644 --- a/docs/plugins/fetchart.rst +++ b/docs/plugins/fetchart.rst @@ -5,13 +5,11 @@ The ``fetchart`` plugin retrieves album art images from various sources on the Web and stores them as image files. To use the ``fetchart`` plugin, first enable it in your configuration (see -:ref:`using-plugins`). Then, install the `requests`_ library by typing:: +:ref:`using-plugins`). Then, install ``beets`` with ``fetchart`` extra - pip install requests +.. code-block:: bash -The plugin uses `requests`_ to fetch album art from the Web. - -.. _requests: https://requests.readthedocs.io/en/master/ + pip install "beets[fetchart]" Fetching Album Art During Import -------------------------------- @@ -260,10 +258,6 @@ the list of sources in your configuration. Spotify ''''''' -Spotify backend requires `BeautifulSoup`_, which you can install using `pip`_ by typing:: - - pip install beautifulsoup4 - Spotify backend is enabled by default and will update album art if a valid Spotify album id is found. .. _pip: https://pip.pypa.io diff --git a/docs/plugins/kodiupdate.rst b/docs/plugins/kodiupdate.rst index 6713f0506..90b33d9c1 100644 --- a/docs/plugins/kodiupdate.rst +++ b/docs/plugins/kodiupdate.rst @@ -29,18 +29,21 @@ To update multiple Kodi instances, specify them as an array:: pwd: kodi2 -To use the ``kodiupdate`` plugin you need to install the `requests`_ library with:: +To use the ``kodiupdate`` plugin, first enable it in your configuration (see +:ref:`using-plugins`). Then, install ``beets`` with ``kodiupdate`` extra - pip install requests +.. code-block:: bash + + pip install "beets[kodiupdate]" + +You'll also need to enable JSON-RPC in Kodi. -You'll also need to enable JSON-RPC in Kodi in order the use the plugin. In Kodi's interface, navigate to System/Settings/Network/Services and choose "Allow control of Kodi via HTTP." With that all in place, you'll see beets send the "update" command to your Kodi host every time you change your beets library. .. _Kodi: https://kodi.tv/ -.. _requests: https://requests.readthedocs.io/en/master/ Configuration ------------- diff --git a/docs/plugins/lastgenre.rst b/docs/plugins/lastgenre.rst index cbc54f1cc..9ba2d4eba 100644 --- a/docs/plugins/lastgenre.rst +++ b/docs/plugins/lastgenre.rst @@ -10,12 +10,12 @@ to your albums and items. Installation ------------ -The plugin requires `pylast`_, which you can install using `pip`_ by typing:: +To use the ``lastgenre`` plugin, first enable it in your configuration (see +:ref:`using-plugins`). Then, install ``beets`` with ``lastgenre`` extra - pip install pylast +.. code-block:: bash -After you have pylast installed, enable the ``lastgenre`` plugin in your -configuration (see :ref:`using-plugins`). + pip install "beets[lastgenre]" Usage ----- @@ -31,8 +31,6 @@ The genre list file should contain one genre per line. Blank lines are ignored. For the curious, the default genre list is generated by a `script that scrapes Wikipedia`_. -.. _pip: https://pip.pypa.io -.. _pylast: https://github.com/pylast/pylast .. _script that scrapes Wikipedia: https://gist.github.com/1241307 .. _internal whitelist: https://raw.githubusercontent.com/beetbox/beets/master/beetsplug/lastgenre/genres.txt diff --git a/docs/plugins/lastimport.rst b/docs/plugins/lastimport.rst index 1c12b8616..5fc7e4b4c 100644 --- a/docs/plugins/lastimport.rst +++ b/docs/plugins/lastimport.rst @@ -11,21 +11,18 @@ with this field. Installation ------------ -The plugin requires `pylast`_, which you can install using `pip`_ by typing:: +To use the ``lastimport`` plugin, first enable it in your configuration (see +:ref:`using-plugins`). Then, install ``beets`` with ``lastimport`` extra - pip install pylast +.. code-block:: bash -After you have pylast installed, enable the ``lastimport`` plugin in your -configuration (see :ref:`using-plugins`). + pip install "beets[lastimport]" Next, add your Last.fm username to your beets configuration file:: lastfm: user: beetsfanatic -.. _pip: https://pip.pypa.io -.. _pylast: https://github.com/pylast/pylast - Importing Play Counts --------------------- diff --git a/docs/plugins/lyrics.rst b/docs/plugins/lyrics.rst index 8a9abdb46..493947693 100644 --- a/docs/plugins/lyrics.rst +++ b/docs/plugins/lyrics.rst @@ -13,22 +13,19 @@ and, optionally, the Google custom search API. Fetch Lyrics During Import -------------------------- -To automatically fetch lyrics for songs you import, enable the ``lyrics`` -plugin in your configuration (see :ref:`using-plugins`). -Then, install the `requests`_ library by typing:: +To automatically fetch lyrics for songs you import, first enable it in your +configuration (see :ref:`using-plugins`). Then, install ``beets`` with +``lyrics`` extra - pip install requests +.. code-block:: bash -The plugin uses `requests`_ to download lyrics. + pip install "beets[lyrics]" When importing new files, beets will now fetch lyrics for files that don't already have them. The lyrics will be stored in the beets database. If the ``import.write`` config option is on, then the lyrics will also be written to the files' tags. -.. _requests: https://requests.readthedocs.io/en/master/ - - Configuration ------------- @@ -130,12 +127,7 @@ few suggestions. Activate Google Custom Search ------------------------------ -Using the Google backend requires `BeautifulSoup`_, which you can install -using `pip`_ by typing:: - - pip install beautifulsoup4 - -You also need to `register for a Google API key`_. Set the ``google_API_key`` +You need to `register for a Google API key`_. Set the ``google_API_key`` configuration option to your key. Then add ``google`` to the list of sources in your configuration (or use default list, which includes it as long as you have an API key). @@ -153,17 +145,11 @@ default, beets use a list of sources known to be scrapeable. Note that the Google custom search API is limited to 100 queries per day. After that, the lyrics plugin will fall back on other declared data sources. -.. _pip: https://pip.pypa.io .. _BeautifulSoup: https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Activate Genius and Tekstowo.pl Lyrics -------------------------------------- -Using the Genius or Tekstowo.pl backends requires `BeautifulSoup`_, which -you can install using `pip`_ by typing:: - - pip install beautifulsoup4 - These backends are enabled by default. .. _lyrics-translation: @@ -171,16 +157,10 @@ These backends are enabled by default. Activate On-the-Fly Translation ------------------------------- -Using the Bing Translation API requires `langdetect`_, which you can install -using `pip`_ by typing:: - - pip install langdetect - -You also need to register for a Microsoft Azure Marketplace free account and +You need to register for a Microsoft Azure Marketplace free account and to the `Microsoft Translator API`_. Follow the four steps process, specifically at step 3 enter ``beets`` as *Client ID* and copy/paste the generated *Client secret* into your ``bing_client_secret`` configuration, alongside ``bing_lang_to`` target `language code`. -.. _langdetect: https://pypi.python.org/pypi/langdetect .. _Microsoft Translator API: https://docs.microsoft.com/en-us/azure/cognitive-services/translator/translator-how-to-signup diff --git a/docs/plugins/metasync.rst b/docs/plugins/metasync.rst index 691550595..8d9dac5a3 100644 --- a/docs/plugins/metasync.rst +++ b/docs/plugins/metasync.rst @@ -19,8 +19,12 @@ Installation Enable the ``metasync`` plugin in your configuration (see :ref:`using-plugins`). -To synchronize with Amarok, you'll need the `dbus-python`_ library. There are -packages for most major Linux distributions. +To synchronize with Amarok, you'll need the `dbus-python`_ library. In such +case, install ``beets`` with ``metasync`` extra + +.. code-block:: bash + + pip install "beets[metasync]" .. _dbus-python: https://dbus.freedesktop.org/releases/dbus-python/ diff --git a/docs/plugins/mpdstats.rst b/docs/plugins/mpdstats.rst index c5adbc64b..cb2cf1606 100644 --- a/docs/plugins/mpdstats.rst +++ b/docs/plugins/mpdstats.rst @@ -21,13 +21,10 @@ Installing Dependencies This plugin requires the python-mpd2 library in order to talk to the MPD server. -Install the library from `pip`_, like so:: +To use the ``mpdstats`` plugin, first enable it in your configuration (see +:ref:`using-plugins`). Then, install ``beets`` with ``mpdstats`` extra - $ pip install python-mpd2 - -Add the ``mpdstats`` plugin to your configuration (see :ref:`using-plugins`). - -.. _pip: https://pip.pypa.io + pip install "beets[mpdstats]" Usage ----- diff --git a/docs/plugins/plexupdate.rst b/docs/plugins/plexupdate.rst index aaeb28e5b..3ca9cbfab 100644 --- a/docs/plugins/plexupdate.rst +++ b/docs/plugins/plexupdate.rst @@ -4,11 +4,15 @@ PlexUpdate Plugin ``plexupdate`` is a very simple plugin for beets that lets you automatically update `Plex`_'s music library whenever you change your beets library. -To use ``plexupdate`` plugin, enable it in your configuration -(see :ref:`using-plugins`). -Then, you'll probably want to configure the specifics of your Plex server. -You can do that using an ``plex:`` section in your ``config.yaml``, -which looks like this: +Firstly, install ``beets`` with ``plexupdate`` extra + +.. code-block:: console + + pip install "beets[plexupdate]" + +Then, enable ``plexupdate`` plugin it in your configuration (see :ref:`using-plugins`). +Optionally, configure the specifics of your Plex server. You can do this using +a ``plex:`` section in your ``config.yaml``: .. code-block:: yaml @@ -19,17 +23,10 @@ which looks like this: The ``token`` key is optional: you'll need to use it when in a Plex Home (see Plex's own `documentation about tokens`_). -To use the ``plexupdate`` plugin you need to install the `requests`_ library with: - -.. code-block:: console - - $ pip install beets[plexupdate] - With that all in place, you'll see beets send the "update" command to your Plex server every time you change your beets library. .. _Plex: https://plex.tv/ -.. _requests: https://requests.readthedocs.io/en/master/ .. _documentation about tokens: https://support.plex.tv/hc/en-us/articles/204059436-Finding-your-account-token-X-Plex-Token Configuration @@ -48,4 +45,4 @@ The available options under the ``plex:`` section are: - **secure**: Use secure connections to the Plex server. Default: ``False`` - **ignore_cert_errors**: Ignore TLS certificate errors when using secure connections. - Default: ``False`` \ No newline at end of file + Default: ``False`` diff --git a/docs/plugins/replaygain.rst b/docs/plugins/replaygain.rst index c44e87442..900f6f8c4 100644 --- a/docs/plugins/replaygain.rst +++ b/docs/plugins/replaygain.rst @@ -33,8 +33,16 @@ You will need at least GStreamer 1.0 and `PyGObject 3.x`_ (a.k.a. ``python-gi``) .. _PyGObject 3.x: https://pygobject.readthedocs.io/en/latest/ .. _GStreamer: https://gstreamer.freedesktop.org/ -Then, enable the ``replaygain`` plugin (see :ref:`using-plugins`) and specify -the GStreamer backend by adding this to your configuration file:: +Then, install ``beets`` with ``replaygain`` extra which installs +``GStreamer`` bindings for Python + +.. code-block:: bash + + pip install "beets[replaygain]" + +Lastly, enable the ``replaygain`` plugin in your configuration (see +:ref:`using-plugins`) and specify the GStreamer backend by adding this to your +configuration file:: replaygain: backend: gstreamer diff --git a/docs/plugins/scrub.rst b/docs/plugins/scrub.rst index cb8bb81d2..73ee01645 100644 --- a/docs/plugins/scrub.rst +++ b/docs/plugins/scrub.rst @@ -10,11 +10,17 @@ also provides a command that lets you manually remove files' tags. Automatic Scrubbing ------------------- -To automatically remove files' tags before writing new ones, just -enable the ``scrub`` plugin (see :ref:`using-plugins`). When importing new files (with -``import.write`` turned on) or modifying files' tags with the ``beet modify`` -command, beets will first strip all types of tags entirely and then write the -database-tracked metadata to the file. +To automatically remove files' tags before writing new ones, enable ``scrub`` +plugin in your configuration (see :ref:`using-plugins`) and install ``beets`` +with ``scrub`` extra + +.. code-block:: bash + + pip install "beets[scrub]" + +When importing new files (with ``import.write`` turned on) or modifying files' +tags with the ``beet modify`` command, beets will first strip all types of tags +entirely and then write the database-tracked metadata to the file. This behavior can be disabled with the ``auto`` config option (see below). diff --git a/docs/plugins/sonosupdate.rst b/docs/plugins/sonosupdate.rst index cae69d554..6076590e3 100644 --- a/docs/plugins/sonosupdate.rst +++ b/docs/plugins/sonosupdate.rst @@ -7,12 +7,12 @@ library whenever you change your beets library. To use ``sonosupdate`` plugin, enable it in your configuration (see :ref:`using-plugins`). -To use the ``sonosupdate`` plugin you need to install the `soco`_ library with:: +To use the ``sonosupdate`` plugin, first enable it in your configuration (see +:ref:`using-plugins`). Then, install ``beets`` with ``sonosupdate`` extra - pip install soco + pip install "beets[sonosupdate]" With that all in place, you'll see beets send the "update" command to your Sonos controller every time you change your beets library. .. _Sonos: https://sonos.com/ -.. _soco: http://python-soco.com diff --git a/docs/plugins/thumbnails.rst b/docs/plugins/thumbnails.rst index 0f46e04e8..c5cc3f5e5 100644 --- a/docs/plugins/thumbnails.rst +++ b/docs/plugins/thumbnails.rst @@ -5,11 +5,15 @@ The ``thumbnails`` plugin creates thumbnails for your album folders with the album cover. This works on freedesktop.org-compliant file managers such as Nautilus or Thunar, and is therefore POSIX-only. -To use the ``thumbnails`` plugin, enable it (see :doc:`/plugins/index`) as well -as the :doc:`/plugins/fetchart`. You'll need 2 additional python packages: -:pypi:`pyxdg` and :pypi:`pathlib`. +To use the ``thumbnails`` plugin, enable ``thumbnails`` and +:doc:`/plugins/fetchart` in your configuration (see :ref:`using-plugins`) and +install ``beets`` with ``thumbnails`` and ``fetchart`` extras -``thumbnails`` needs to resize the covers, and therefore requires either +.. code-block:: bash + + pip install "beets[fetchart,thumbnails]" + +``thumbnails`` need to resize the covers, and therefore requires either `ImageMagick`_ or `Pillow`_. .. _Pillow: https://github.com/python-pillow/Pillow diff --git a/docs/plugins/web.rst b/docs/plugins/web.rst index 3a7e6d122..15719e119 100644 --- a/docs/plugins/web.rst +++ b/docs/plugins/web.rst @@ -15,16 +15,12 @@ drastically increase the number of people who can use beets. Install ------- -The Web interface depends on `Flask`_. To get it, just run ``pip install -flask``. Then enable the ``web`` plugin in your configuration (see -:ref:`using-plugins`). +To use the ``web`` plugin, first enable it in your configuration (see +:ref:`using-plugins`). Then, install ``beets`` with ``web`` extra -If you need CORS (it's disabled by default---see :ref:`web-cors`, below), then -you also need `flask-cors`_. Just type ``pip install flask-cors``. - -.. _flask-cors: https://github.com/CoryDolphin/flask-cors -.. _CORS: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing +.. code-block:: bash + pip install "beets[web]" Run the Server -------------- @@ -101,8 +97,7 @@ server as the API. (You will get an arcane error about ``XMLHttpRequest`` otherwise.) A technology called `CORS`_ lets you relax this restriction. If you want to use an in-browser client hosted elsewhere (or running from a -different server on your machine), first install the `flask-cors`_ plugin by -typing ``pip install flask-cors``. Then set the ``cors`` configuration option to +different server on your machine), set the ``cors`` configuration option to the "origin" (protocol, host, and optional port number) where the client is served. Or set it to ``'*'`` to enable access from all origins. Note that there are security implications if you set the origin to ``'*'``, so please research @@ -118,6 +113,7 @@ For example:: host: 0.0.0.0 cors: 'http://example.com' +.. _CORS: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing .. _reverse-proxy: Reverse Proxy Support diff --git a/poetry.lock b/poetry.lock index 0703f9b42..90b39993e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2602,13 +2602,14 @@ files = [ [extras] absubmit = ["requests"] +aura = ["Pillow", "flask", "flask-cors"] beatport = ["requests-oauthlib"] bpd = ["PyGObject"] chroma = ["pyacoustid"] discogs = ["python3-discogs-client"] embedart = ["Pillow"] embyupdate = ["requests"] -fetchart = ["Pillow", "beautifulsoup4", "requests"] +fetchart = ["Pillow", "beautifulsoup4", "langdetect", "requests"] import = ["py7zr", "rarfile"] kodiupdate = ["requests"] lastgenre = ["pylast"] @@ -2627,4 +2628,4 @@ web = ["flask", "flask-cors"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<4" -content-hash = "3c37973d479d97cb7cb4ca195fe15ede03577e4c91a88a939769aa7924ca2d3c" +content-hash = "697ebfc73bb20e4bf4ee41f639847212384102601d94b0231374f41e6932e5bd" diff --git a/pyproject.toml b/pyproject.toml index 1f8463b79..14d3d4c7d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -105,6 +105,7 @@ sphinx = "*" [tool.poetry.extras] # inline comments note required external / non-python dependencies absubmit = ["requests"] # extractor binary from https://acousticbrainz.org/download +aura = ["flask", "flask-cors", "Pillow"] # badfiles # mp3val and flac beatport = ["requests-oauthlib"] bpd = ["PyGObject"] # python-gi and GStreamer 1.0+ @@ -113,7 +114,7 @@ chroma = ["pyacoustid"] # chromaprint or fpcalc discogs = ["python3-discogs-client"] embedart = ["Pillow"] # ImageMagick embyupdate = ["requests"] -fetchart = ["beautifulsoup4", "Pillow", "requests"] +fetchart = ["beautifulsoup4", "langdetect", "Pillow", "requests"] import = ["py7zr", "rarfile"] # ipfs # go-ipfs # keyfinder # KeyFinder