beetbox / beets

music library manager and MusicBrainz tagger
http://beets.io/
MIT License
12.79k stars 1.82k forks source link

beatport plugin timeout on auth #5197

Open benpage2 opened 5 months ago

benpage2 commented 5 months ago

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

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
tdefise commented 1 week ago

Same issue here