Commit graph

3585 commits

Author SHA1 Message Date
J0J0 T
55b386375a convert: playlist: Move m3u creation after conversions
- Move the creation of the playlist file to the very end, right after
  self._parallel_convert, in the convert plugin's main function.
- In the test code, the destination directory is created when the
  conversion happens, thus this fixes test_playlist and doesn't hurt the
  feature - The playlist creation can as well be the very last step in
  the process.
2023-03-29 07:21:27 +02:00
J0J0 T
5dfff50005 convert: playlist: Refactor m3u writing to class
and also implement a currently untested load() method.
2023-03-29 07:21:27 +02:00
J0J0 T
c251ed19c4 convert: playlist: Generate m3u file in one batch
to avoid any possible interference with the threaded file conversion
mechanism.
2023-03-29 07:21:27 +02:00
J0J0 T
d589e77ade convert: playlist: Fix redundant join path
It's done in _get_opts_and_config already.
2023-03-29 07:21:27 +02:00
J0J0 T
c0b1bc9867 convert: playlist feature: Better relative path gen
Use Item.destination method for generation of relative paths to media
files in playlist. The fragment keyword enables returning the path as
unicode instead of bytes, let's keep that in mind.
2023-03-29 07:21:27 +02:00
J0J0 T
16e25bb61b convert: playlist feature: Fix relative paths
pointing to media files in playlist. Also refine code comment and move
to a better fitting place.
2023-03-29 07:21:27 +02:00
J0J0 T
fd8fe69738 convert: Playlist feature linting fixes 2023-03-29 07:21:27 +02:00
J0J0 T
d448e0c4de convert: Refine and fix playlist feature
- Improve --help text
- Use unicode instead of bytes when adding media file paths to the
  playlist file.
- The "standard" (?) of m3u8 defines that unicode should ensure support
  of special characters in media file names. util.displayable_path() is
  used to do the conversion from bytes. We save everything in bytes in
  the config since it seemes to be the way this plugin or beets in
  general likes to save paths.
- Join dest and playlist in the config reader method already to have it
  ready in both methods that require the full path to the playlist file.
2023-03-29 07:21:27 +02:00
J0J0 T
861bc69df5 convert: Add a quick & dirty m3u playlist feature 2023-03-29 07:21:27 +02:00
Alok Saboo
3b39a4fe66 Raise OSError 2023-03-28 13:23:26 -04:00
Alok Saboo
2fcdb8c2ca Add FilesystemError handling 2023-03-28 09:22:51 -04:00
Alok Saboo
a4b4df8b12 More error handling 2023-03-27 19:28:09 -04:00
Alok Saboo
2e2a3bf223 Add additional error handling 2023-03-27 11:56:26 -04:00
J0J0 Todos
5bf4e3d92f Dedicated flex attrs for Deezer, Beatport album ID
- Similar to what the Spotify plugin does, on imports we save to a field
  `..._album_id` (spotify_album_id, deezer_album_id, beatport_album_id)
- It would be good to submit such a change to the 3rd-party plugins beetcamp
  and beatport4 as well (beatport_album_id, bandcamp_album_id).
- We might need to investigate why none of these
  flex attr fields get populated to the beets album level (`beet info -a`,
  album_attributes db table), it is only available at the item level (`beet
  info`, item_attributes db table). This should be tackled in a future
  issue/PR.
2023-03-26 13:20:07 +02:00
Alok Saboo
2060e047d2 Update parser options 2023-03-19 10:21:32 -04:00
Alok Saboo
2d942ce722 Move import inside the function 2023-03-19 09:15:38 -04:00
Alok Saboo
59d5d23bb3 Update embedart.py 2023-03-18 19:12:29 -04:00
Alok Saboo
64c2ae138d Update embedart.py 2023-03-18 19:11:24 -04:00
Alok Saboo
81835b0721 Update embedart.py 2023-03-18 19:08:46 -04:00
Alok Saboo
4dd165495f Update embedart.py 2023-03-18 19:00:28 -04:00
Alok Saboo
feeeb4080c Update embedart.py 2023-03-18 18:58:32 -04:00
Alok Saboo
f051d67947 Add option to import using URL 2023-03-18 18:23:53 -04:00
Adrian Sampson
2e18f84b38
Merge pull request #4698 from ghbrown/discogs_client_check
discogs_client version check
2023-03-10 21:56:48 -08:00
ghbrown
f1b7832d52 Change minimum discogs_client version to 2.3.15 2023-03-10 15:28:29 -06:00
Andrew Rogl
e33369d231
Fix typo in beetsplug/deezer.py
Found another typo
2023-03-10 17:28:52 +10:00
ghbrown
bad541e2c4 Address lint errors for discogs_client version check 2023-03-09 17:38:47 -06:00
ghbrown
437f6e76e4 Add warning about (python3-)discogs-client version 2023-03-09 17:16:11 -06:00
Andrew Rogl
5662fef842
Fix type in deezer.py 2023-03-09 17:05:03 +10:00
J0J0 Todos
f36c55f730 Refactor Beatport plugin to use _get_id
from MetadataSourcePlugin and save beatport_id_regex in id_extractors module.
This streamlines the Beatport release ID extraction magic with plugins Deezer
and Spotify.
2023-03-08 18:12:31 +01:00
J0J0 Todos
8ab25694a5 Move Deezer ID regex to id_extractors module
in beets.util package.
2023-03-08 18:12:31 +01:00
J0J0 Todos
284180ec75 Refactor MetadataSourcePlugin._get_id()
and put to use in Spotify plugin.

- Make _get_id() a staticmethod usable from outside a metadata source plugin.
- id_regex now has to be passed as an argument instead of assuming it is
  accessible via an instance variable (self.id_regex).
- In the Spotify plugin, import spotify_id_regex from util.id_extractors
2023-03-08 18:12:31 +01:00
J0J0 Todos
0175a9aed8 Introduce new module beets.util.id_extractors
- We introduce a new submodule of beets.util named id_extractors.
- Parts of the ID extraction utilites required by metadata source plugins
  should live there.
- Also this enables future usage of those utilities from the "outside" of
  metadata source plugins.
- Move Discogs ID extractor to the new module and change test_discogs to use
  the new location.
- Add spotify_id_regex variable to the new module.
2023-03-08 18:12:31 +01:00
J0J0 Todos
1f9113af73
Merge pull request #4582 from jpluscplusm/jcm_fix_albumtypes
Store `albumtypes` multi-value field consistently in-DB & in-tag, preventing continual file re-tagging
2023-03-08 14:26:19 +01:00
Alok Saboo
abf6b1e1f3 Update spotify.py 2023-02-28 09:38:23 -05:00
Alok Saboo
c73ecb89d3 Update spotify.py 2023-02-28 09:36:16 -05:00
J0J0 Todos
93fa19f493 Fix albumtypes plugin and its tests
The new database type DelimitedString does list to string and vice versa
conversions itself.
2023-02-27 13:43:03 +01:00
Mark Trolley
55255b0087
Deprecate absubmit and update acousticbrainz plugins
Fixes #4627.

AcousticBrainz is shutting down as of early 2023. Deprecate the absubmit
plugin and update the acousticbrainz plugin to require configuration of
an AcousticBrainz server instance.
2023-02-20 17:42:07 -05:00
Benedikt
22ca6eff82
Merge pull request #4374 from wisp3rwind/pr_drop_old_python
Drop Python 3.6, some Python 2 + Python <= 3.6 cleanup
2023-02-19 10:19:36 +01:00
Mark Trolley
13ce920fd1
Fix cover art archive fetching
PR #3748 changed the way cover art is fetched from the cover art
archive, but the manual addition of a `-` to the width suffix that was
needed when the image URI was being constructed manually was not
removed. Because of this the plugin would try to look up the property
under `thumbnails` that didn't exist (for example `-1200` instead of
`1200`), which would fail.
2023-02-17 19:01:20 -05:00
wisp3rwind
12173d30a8 permissions: Move syspath conversion to the actual API boundary 2023-02-12 14:04:24 +01:00
night199uk
23598df155 Avoid calling chmod in some scenarios.
This guards the os.chmod calls so it's only called IF the
permissions need changing. This guards against an exception in
certain complex library setups.
2023-02-11 19:28:52 -08:00
J0J0 Todos
527052e13d
Merge branch 'master' into splupdate_dry_run 2023-01-31 07:07:09 +01:00
ghbrown
a99eb77337 Improve where an how data added to tracks of album 2023-01-20 22:15:50 -06:00
ghbrown
cbb1b21408 Use tracks field in item_candidates; add more info to tracks of AlbumInfo 2023-01-20 21:07:15 -06:00
ghbrown
2df41b9e16 Limit number of returned track candidates 2023-01-16 18:43:26 -06:00
ghbrown
2e916404f9 early exit; add data_source 2023-01-12 19:41:04 -06:00
ghbrown
2db0796fad Implement item_candidates for Discogs 2023-01-11 13:20:54 -06:00
Adrian Sampson
6989bce6ca
Merge pull request #4515 from JOJ0/fix_discogs_multi_artist
Handle "join keyword" in `MetadataSourcePlugin.get_artist()`
2023-01-06 10:30:23 -08:00
Adrian Sampson
5383d55076
Merge pull request #4616 from jackwilsdon/remove-musixmatch-default
Remove Musixmatch from default enabled sources
2023-01-02 15:29:12 -08:00
J0J0 Todos
29ed4abb52 Use join_key arg in Discogs source plugin
Fixes #4401
2023-01-02 13:47:31 +01:00
J0J0 Todos
6fb6f59c40 fromfilename: Use logging magic from inherited BeetsPlugin
and change log level to INFO.
2023-01-02 13:29:21 +01:00
J0J0 T
c1abcf3310 fromfilename: Add debug log messages
that inform when the plugin replaced bad artist, title or tracknumber metadata.
2023-01-02 13:29:21 +01:00
J0J0 Todos
5461ddf9f2 fromfilename: Move <title> regex to the very end
since it's the least significant as discussed in the PR's thread.
2023-01-02 13:29:21 +01:00
J0J0 Todos
2839302d53 fromfilename: Swap regex lines as suggested in #4561 2023-01-02 13:29:21 +01:00
Jack Wilsdon
dad9d2393d Remove Musixmatch from default enabled sources
Musixmatch are currently blocking all requests with the beets user
agent. See #4585.
2022-12-31 14:34:07 +00:00
wisp3rwind
d24cf69269 remove old Python: remove util.text_string
This was a helper for situations when Python 2 and 3 APIs returned bytes
and unicode, respectively. In these situation, we should nowadays know
which of the two we receive, so there's no need to wrap & hide the
`bytes.decode()` anymore (when it is still required).

Detailed justification:

beets/ui/__init__.py:
- command line options are always parsed to str

beets/ui/commands.py:
- confuse's config.dump always returns str
- open(...) defaults to text mode, read()ing str

beetsplug/keyfinder.py:
- ...

beetsplug/web/__init__.py:
- internally, paths are always bytestrings
- additionally, I took the liberty to slighlty re-arrange the code: it
  makes sense to split off the basename first, since we're only
  interested in the unicode conversion of that part.

test/helper.py:
- capture_stdout() gives a StringIO, which yields str

test/test_ui.py:
- self.io, from _common.TestCase, ultimately contains a
  _common.DummyOut, which appears to be dealing with str (cf.
  DummyOut.get)
2022-12-24 13:09:26 +01:00
wisp3rwind
3510e6311d web: slight refactor to make path handling more readable
(at least, more readable to me)
2022-12-24 13:09:26 +01:00
wisp3rwind
22826c6d36 drop old Python: remove obsolete custom string formatter in hooks plugin 2022-12-24 13:09:26 +01:00
wisp3rwind
67f0c73eec drop old Python: don't handle obsolte exception in keyfinder plugin 2022-12-24 13:09:26 +01:00
wisp3rwind
bd09cc90b6 drop Python 3.6: docs, a few safe simplifications 2022-12-18 09:20:04 +01:00
J0J0 Todos
87ed0f12ea Add --pretend option to splupdate command 2022-12-06 07:03:02 +01:00
Luke Harder
f155d3ba75 bug 4406 fix v5 (tests pass again) 2022-11-22 20:40:13 -05:00
Luke Harder
4a1f25e1b1 bug 4406 fix v4 (added configurable threshold) 2022-11-22 13:25:09 -05:00
Luke Harder
252121f537 bug 4406 fix 2022-11-10 12:54:45 -05:00
Aidan Epstein
c906e55ba9 Fix recent bug that would not transcode when format was wrong
Bug introduced in c6d623241b, should_transcode would return False even when the format was different.

Also fix up tests and documentation.
2022-10-19 08:55:51 -07:00
Adrian Sampson
407b1fd013
Merge pull request #4510 from KucharczykL/KucharczykL-remove-duplicate-triphop
Remove duplicate "Trip-hop" genre
2022-10-03 11:13:06 -07:00
Adrian Sampson
1ebcbf6944
Merge branch 'master' into fix_max_bitrate_default 2022-10-03 11:02:07 -07:00
Lukáš Kucharczyk
a41a9b7aa1
Remove duplicate "Trip-hop" genre 2022-10-03 19:58:23 +02:00
Jordi Ortolá Ankum
95e0161876
Merge branch 'master' into fix_max_bitrate_default 2022-10-03 10:49:51 +02:00
Adrian Sampson
82d41446a2
Use fsdecode for template substitution
The idea in this PR is to converge on Python's `fsdecode` and `fsencode`
for argument manipulation. This seems to match up with the Python
standard library's assumptions: namely, on Windows, we use `fsdecode` to
get back to Unicode strings:
54bbb5e336/Lib/subprocess.py (L561)

So let's start by dropping this utility and going straight for
`fsdecode` here to match.
2022-10-01 16:37:47 -07:00
Adrian Sampson
675dd7b9a9
Add logging for command output on errors 2022-10-01 16:08:32 -07:00
Adrian Sampson
9803939a1c
replaygain: Fix error handling for parallel runs
The parallelism strategy in #3478, in retrospect, used a pretty funky
way to deal with exceptions in the asynchronous work---since
`apply_async` has an `error_callback` parameter that's meant for exactly
this. The problem is that the wrapped function would correctly log the
exception *and then return `None`*, confusing any downstream code.
Instead of just adding `None`-awareness to the callback, let's just
avoid running the callback altogether in the case of an error.
2022-10-01 15:47:41 -07:00
Jordi
c6d623241b Fix beets#4472 - set 'max_bitrate' default param to none 2022-10-01 01:20:30 +02:00
Alok Saboo
4692199166 Add dateype back 2022-09-17 21:05:16 -04:00
Alok Saboo
e4063b5880 remove datetype 2022-09-17 20:56:48 -04:00
Alok Saboo
85b500e41a Fix spotify_updated bug 2022-09-17 20:25:36 -04:00
Alok Saboo
d267f9a8a9 Remove f-string 2022-08-24 09:32:39 -04:00
Alok Saboo
9d8ce14e9a Cleanup mbsubmit 2022-08-24 09:24:33 -04:00
Alok Saboo
c48aef3f33 Update mbsubmit.py 2022-08-24 09:16:20 -04:00
Alok Saboo
2168292455 Update mbsubmit.py 2022-08-24 09:11:45 -04:00
Adrian Sampson
8cb314350c
Avoid BeautifulSoup deprecation warning
The `text` parameter to `SoupStrainer` was renamed to `string` in 2015
(4.4.0) and started producing a warning this year (4.11.0).
https://bazaar.launchpad.net/%7Eleonardr/beautifulsoup/bs4/view/head:/CHANGELOG
2022-08-21 09:50:53 -07:00
vicholp
fde2ad3f65 fix get item file of web plugin 2022-08-03 01:22:35 -04:00
Alok Saboo
c03537c12b Address comments 2022-08-01 08:06:42 -04:00
Alok Saboo
a8434f6c38 Add last_update 2022-07-31 10:33:16 -04:00
Adrian Sampson
c5e68f5643
Adapt to pycodestyle changes 2022-07-30 19:54:24 -04:00
Aidan Epstein
ac5634d592
Fix old alias
It looks like the convert option for wma used to be called windows media.  We could just remove this alias, but might be good to keep for backwards compatibility.
2022-07-30 16:10:58 +00:00
Alok Saboo
06825e0729 Return an empty sequence 2022-07-15 09:22:23 -04:00
Alok Saboo
28614d94dc lint 2022-07-12 10:32:55 -04:00
Alok Saboo
85e58d48a2 Update spotify.py 2022-07-12 09:30:07 -04:00
Alok Saboo
4e63c8893b refactor handle_reponse 2022-07-12 09:28:23 -04:00
Alok Saboo
e1153f7772 revert 2022-07-11 11:42:24 -04:00
Alok Saboo
d82362df3e Update spotify.py 2022-07-11 11:40:32 -04:00
Alok Saboo
525e5eafd5 revert 2022-07-11 11:36:52 -04:00
Alok Saboo
7b94bbd764 Update spotify.py 2022-07-11 11:36:08 -04:00
Alok Saboo
c2ad2b3d4c Update spotify.py 2022-07-10 13:23:10 -04:00
Alok Saboo
2bd61a7c48 Update spotify.py 2022-07-10 13:15:25 -04:00
Alok Saboo
a28f8835cb Update spotify.py 2022-07-10 13:12:38 -04:00
Alok Saboo
b64cefb0d0 Add params to debug 2022-07-10 13:11:27 -04:00
Alok Saboo
2a18ab062e Remove extra pass statement 2022-07-09 15:00:29 -04:00
Alok Saboo
82e12c6b4b Add missing whitespaces 2022-07-08 17:08:04 -04:00
Alok Saboo
27c37465e4 Merge branch 'spotify_error' into spotify_track 2022-07-08 15:00:34 -04:00
Alok Saboo
a4baa742d5 Update error code 2022-07-07 14:14:11 -04:00
Alok Saboo
5fb35128d2 Merge remote-tracking branch 'upstream/master' into spotify_track 2022-07-06 10:38:02 -04:00
Alok Saboo
e0d5de4714 Add album information to spotify tracks
update

Update spotify.py

Update spotify.py

Update spotify.py

Update spotify.py

Update spotify.py

Update spotify.py

Update spotify.py

Update spotify.py

Update spotify.py

Update hooks.py

Update hooks.py

Update spotify.py

Update spotify.py

Update spotify.py

Update spotify.py

Update spotify.py

Update spotify.py

Update hooks.py

Update spotify.py

Update spotify.py

Cleanup

more cleanup
2022-07-06 10:36:08 -04:00
Alok Saboo
c7f465f968 Address comments 2022-07-05 20:46:14 -04:00
Alok Saboo
ca4b5bcec4 lint 2022-07-04 14:34:32 -04:00
Alok Saboo
12d9b1bd22 Update exception 2022-07-04 14:31:28 -04:00
Alok Saboo
95243019e9 Update exception 2022-07-04 14:29:27 -04:00
Alok Saboo
85e124bcd0 lint errors 2022-07-04 14:15:08 -04:00
Alok Saboo
1d241b0d52 Update error handling 2022-07-04 14:12:22 -04:00
Alok Saboo
016526f30e Lint 2022-07-01 10:29:20 -04:00
Alok Saboo
6a131d2108 Address comments 2022-07-01 10:26:08 -04:00
Mark Trolley
bfe008ed24
Fix typo in Acousticbrainz warning log
Add missing space in Acousticbrainz plugin warning log.
2022-06-30 14:19:58 -04:00
Alok Saboo
decdb16a15 lint 2022-06-29 20:13:48 -04:00
Alok Saboo
54af411b62 Address comments 2022-06-29 19:54:12 -04:00
Alok Saboo
9bde98c440
Update beetsplug/spotify.py
Co-authored-by: Adrian Sampson <adrian@radbox.org>
2022-06-29 19:47:21 -04:00
toaru_yousei
91c2cd2ee5 Fix importadded plugin with reflink 2022-06-29 08:06:26 +09:00
Alok Saboo
086de854d1 Update spotify.py 2022-06-26 11:56:13 -04:00
Alok Saboo
276c551059 Update spotify.py 2022-06-26 11:46:42 -04:00
Alok Saboo
8102bd2e35 Add import 2022-06-20 16:59:03 -04:00
Alok Saboo
fc8d3fceeb Define item_types for spotify attributes 2022-06-20 16:52:05 -04:00
Alok Saboo
abe4f203b1 Changed log to debug 2022-06-18 11:23:22 -04:00
Alok Saboo
1cd78ad3c5 Change log to info 2022-06-16 09:28:07 -04:00
Alok Saboo
4d826168a4 Remove sleep 2022-06-16 09:00:17 -04:00
Alok Saboo
3c68f717e9 Added an extra second (based on other libraries) 2022-06-13 10:16:10 -04:00
Alok Saboo
8ba2c015ab Sorted imports using iSort 2022-06-13 09:57:07 -04:00
Alok Saboo
c9f9ed3b64 lint 2022-06-13 09:31:19 -04:00
Alok Saboo
a2e6680e2f Address comments 2022-06-13 09:26:15 -04:00
Alok Saboo
4bb8862b6f lint 2022-06-12 19:28:47 -04:00
Alok Saboo
c4dec04dcf Fix lint 2022-06-12 19:27:15 -04:00
Alok Saboo
71be6d5138 Add 429 API error handling 2022-06-12 19:21:38 -04:00
Alok Saboo
9a392f3157 Address try/except comment 2022-06-12 13:58:08 -04:00
Alok Saboo
3d917edd67 Update spotify.py 2022-06-12 13:31:40 -04:00
Alok Saboo
3cd6fd64ca Added comment about sleep 2022-06-12 13:30:23 -04:00
Alok Saboo
f77a146f17 remove force config option 2022-05-17 20:52:30 -04:00
Alok Saboo
b2a90bf089 Changed spotify labels based on comment 2022-05-17 15:43:16 -04:00
Alok Saboo
9420cf4c6c Address comments 2022-05-17 15:04:45 -04:00
Alok Saboo
39600bcbbb
Update beetsplug/spotify.py
Co-authored-by: Adrian Sampson <adrian@radbox.org>
2022-05-17 14:50:34 -04:00
Alok Saboo
d313da2765
Update beetsplug/spotify.py
Co-authored-by: Adrian Sampson <adrian@radbox.org>
2022-05-17 14:50:27 -04:00
Alok Saboo
c66225708e
Update beetsplug/spotify.py
Co-authored-by: Adrian Sampson <adrian@radbox.org>
2022-05-17 14:50:14 -04:00
Alok Saboo
72e037f1ed Update spotify.py 2022-05-13 10:13:15 -04:00
Alok Saboo
80843d7720 Update spotify.py 2022-05-13 10:08:56 -04:00
Alok Saboo
f6c0bdac75 revert 2022-05-13 10:03:08 -04:00
Alok Saboo
4eb83e8d97 Save track popularity during the import to save an API call 2022-05-13 09:58:12 -04:00
Alok Saboo
d465471308 Add force option in config 2022-05-13 08:42:17 -04:00
Alok Saboo
4c4cafbf04 Update spotify.py 2022-05-12 20:42:13 -04:00
Alok Saboo
9c9f52b7e5 remove logging 2022-05-12 20:40:03 -04:00
Alok Saboo
db1c77fb25 Update spotify.py 2022-05-12 20:38:01 -04:00
Alok Saboo
ba3a582483 Update spotify.py 2022-05-12 20:36:04 -04:00
Alok Saboo
e8de749eaf Clean up docstrings 2022-05-12 20:24:40 -04:00