beets
beets copied to clipboard
beatport plugin timeout on auth
Edit: Just realized this was discussed in #3862, #4477. Maybe we should remove the beatport plugin if it no longer works.
I just enabled the beatport plugin
Problem
Running this command in verbose (-vv
) mode:
$ beet -vv import ~/Music/import
Led to this problem:
(beet) benpage@Chicken-Joe ~ % beet -vv import ~/Music/import
user configuration: /Users/benpage/.config/beets/config.yaml
data directory: /Users/benpage/.config/beets
plugin paths:
Sending event: pluginload
library database: /Users/benpage/Music/beets/library.db
library directory: /Users/benpage/Music/library
Sending event: library_opened
Sending event: import_begin
Traceback (most recent call last):
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/beetsplug/beatport.py", line 309, in setup
with open(self._tokenfile()) as f:
^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/Users/benpage/.config/beets/beatport_token.json'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/urllib3/connection.py", line 198, in _new_conn
sock = connection.create_connection(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/urllib3/util/connection.py", line 85, in create_connection
raise err
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/urllib3/util/connection.py", line 73, in create_connection
sock.connect(sa)
TimeoutError: [Errno 60] Operation timed out
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/urllib3/connectionpool.py", line 793, in urlopen
response = self._make_request(
^^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/urllib3/connectionpool.py", line 491, in _make_request
raise new_e
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/urllib3/connectionpool.py", line 467, in _make_request
self._validate_conn(conn)
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/urllib3/connectionpool.py", line 1099, in _validate_conn
conn.connect()
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/urllib3/connection.py", line 616, in connect
self.sock = sock = self._new_conn()
^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/urllib3/connection.py", line 207, in _new_conn
raise ConnectTimeoutError(
urllib3.exceptions.ConnectTimeoutError: (<urllib3.connection.HTTPSConnection object at 0x102925b50>, 'Connection to oauth-api.beatport.com timed out. (connect timeout=None)')
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/requests/adapters.py", line 486, in send
resp = conn.urlopen(
^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/urllib3/connectionpool.py", line 847, in urlopen
retries = retries.increment(
^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/urllib3/util/retry.py", line 515, in increment
raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='oauth-api.beatport.com', port=443): Max retries exceeded with url: /identity/1/oauth/request-token (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x102925b50>, 'Connection to oauth-api.beatport.com timed out. (connect timeout=None)'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/opt/anaconda3/envs/beet/bin/beet", line 8, in <module>
sys.exit(main())
^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/beets/ui/__init__.py", line 1865, in main
_raw_main(args)
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/beets/ui/__init__.py", line 1852, in _raw_main
subcommand.func(lib, suboptions, subargs)
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/beets/ui/commands.py", line 1395, in import_func
import_files(lib, paths, query)
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/beets/ui/commands.py", line 1326, in import_files
session.run()
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/beets/importer.py", line 357, in run
plugins.send("import_begin", session=self)
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/beets/plugins.py", line 507, in send
result = handler(**arguments)
^^^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/beets/plugins.py", line 143, in wrapper
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/beetsplug/beatport.py", line 313, in setup
token, secret = self.authenticate(c_key, c_secret)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/beetsplug/beatport.py", line 324, in authenticate
url = auth_client.get_authorize_url()
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/beetsplug/beatport.py", line 97, in get_authorize_url
self.api.fetch_request_token(
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/requests_oauthlib/oauth1_session.py", line 282, in fetch_request_token
token = self._fetch_token(url, **request_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/requests_oauthlib/oauth1_session.py", line 360, in _fetch_token
r = self.post(url, **request_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/requests/sessions.py", line 637, in post
return self.request("POST", url, data=data, json=json, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/requests/sessions.py", line 589, in request
resp = self.send(prep, **send_kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/requests/sessions.py", line 703, in send
r = adapter.send(request, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/beet/lib/python3.11/site-packages/requests/adapters.py", line 507, in send
raise ConnectTimeout(e, request=request)
requests.exceptions.ConnectTimeout: HTTPSConnectionPool(host='oauth-api.beatport.com', port=443): Max retries exceeded with url: /identity/1/oauth/request-token (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x102925b50>, 'Connection to oauth-api.beatport.com timed out. (connect timeout=None)'))
(beet) benpage@Chicken-Joe ~ %
Setup
- OS: MacOS 14.1.2 (23B92)
- Python version: Python 3.11.8 (running in anaconda)
- beets version: 1.6.1
- Turning off plugins made problem go away (yes/no): no
My configuration (output of beet config
) is:
# --------------- Main ---------------
directory: ~/Music/library
library: ~/Music/beets/library.db
# --------------- Plugins ---------------
plugins: chroma mbsync info duplicates wlg unimported beatport
# chroma mbsync info duplicates wlg unimported beatport fetchart embedart
acoustid:
apikey: TbI8rOPhgz
duplicates:
tiebreak:
items: [bitrate]
wlg:
auto: no
force: no
count: 7
separator: ', '
whitelist: /Users/benpage/Music/wlg/genres.txt
embedart:
remove_art_file: yes
unimported:
ignore_extensions: DS_Store
beatport:
source_weight: 0.8
source_weight: 0.0
# --------------- Import ---------------
import:
# common options
write: yes
copy: no
move: yes
timid: no
quiet: no
log: ~/Music/beets/logs/beets.log
# other options
default_action: apply
quiet_fallback: skip
none_rec_action: ask
# rare options
incremental: yes
resume: ask
from_scratch: no
autotag: yes
singletons: no
detail: yes
group_albums: no
duplicate_keys:
album: albumartist album
item: artist title
set_fields: {}
bell: yes
# --------------- Paths ---------------
asciify_paths: true
# --------------- Tagging ---------------
original_date: yes
paths:
default: $albumtype/$albumartist/$album%aunique{}/$track $title
singleton: non-album/$albumartist/$year/$title
comp: $albumtype/$albumartist/$album%aunique{}/$track $title
edit_type: edits/$edit_type/$artist/$title
# --------------- Performance ---------------
threaded: yes
timeout: 5.0
# --------------- Search ---------------
format_item: $artist - $album - $title
format_album: $albumartist - $album
time_format: '%Y-%m-%d %H:%M:%S'
format_raw_length: no
sort_album: albumartist+ album+
sort_item: artist+ album+ disc+ track+
sort_case_insensitive: yes
# --------------- Autotagger ---------------
musicbrainz:
enabled: yes
host: musicbrainz.org
https: no
ratelimit: 1
ratelimit_interval: 1.0
searchlimit: 6
extra_tags: []
genres: yes
external_ids:
discogs: no
bandcamp: no
spotify: no
deezer: no
beatport: yes
tidal: no
match:
strong_rec_thresh: 0.04
medium_rec_thresh: 0.25
rec_gap_thresh: 0.25
max_rec:
missing_tracks: strong
unmatched_tracks: medium
track_title: medium
track_length: medium
distance_weights:
source: 2.0
artist: 3.0
album: 3.0
media: 1.0
mediums: 1.0
year: 1.0
country: 0.5
label: 0.0
catalognum: 0.5
albumdisambig: 0.0
album_id: 5.0
tracks: 2.0
missing_tracks: 0.0
unmatched_tracks: 0.0
track_title: 3.0
track_artist: 2.0
track_index: 1.0
track_length: 2.0
track_id: 5.0
preferred:
original_year: yes
media: ['Digital Media', 'CD']
country: ['XW', 'None', 'US', 'CA']
albumtype: ['album']
ignored: []
required: [year]
ignored_media: []
track_length_grace: 3
track_length_max: 10