beetbox / beetbox/beets

BPSync fails to authenticate

Open
#5,112 3 comments 1 reaction 0 assignees View on GitHub
bpsync
Dominant language
Python
Stars
15.7k
Forks
2.1k
Avg merge
4d 21h
Merged PRs (30d)
31

Description

### Problem

Running this command in verbose (`-vv`) mode:

```sh
$ beet -vv bpsync
```

Led to this problem:

```
user configuration: C:\Users\campf\AppData\Roaming\beets\config.yaml
data directory: C:\Users\campf\AppData\Roaming\beets
plugin paths:
Traceback (most recent call last):
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\beetsplug\beatport.py", line 290, in setup
with open(self._tokenfile()) as f:
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\campf\\AppData\\Roaming\\beets\\beatport_token.json'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\urllib3\connection.py", line 175, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\urllib3\util\connection.py", line 95, in create_connection
raise err
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\urllib3\util\connection.py", line 85, in create_connection
sock.connect(sa)
TimeoutError: [WinError 10060] Une tentative de connexion a échoué car le parti connecté n’a pas répondu convenablement au-delà d’une certaine durée ou une connexion établie a échoué car l’hôte de connexion n’a pas répondu

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\urllib3\connectionpool.py", line 722, in urlopen
chunked=chunked,
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\urllib3\connectionpool.py", line 404, in _make_request
self._validate_conn(conn)
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\urllib3\connectionpool.py", line 1058, in _validate_conn
conn.connect()
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\urllib3\connection.py", line 363, in connect
self.sock = conn = self._new_conn()
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\urllib3\connection.py", line 187, in _new_conn
self, "Failed to establish a new connection: %s" % e
urllib3.exceptions.NewConnectionError: : Failed to establish a new connection: [WinError 10060] Une tentative de connexion a échoué car le parti connecté n’a pas répondu convenablement au-delà d’une certaine durée ou une connexion établie a échoué car l’hôte de connexion n’a pas répondu

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\requests\adapters.py", line 450, in send
timeout=timeout
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\urllib3\connectionpool.py", line 800, in urlopen
method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\urllib3\util\retry.py", line 592, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='oauth-api.beatport.com', port=443): Max retries exceeded with url: /identity/1/oauth/request-token (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10060] Une tentative de connexion a échoué car le parti connecté n’a pas répondu convenablement au-delà d’une certaine durée ou une connexion établie a échoué car l’hôte de connexion n’a pas répondu',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "C:\Users\campf\AppData\Local\Programs\Python\Python36\Scripts\beet-script.py", line 11, in
load_entry_point('beets==1.6.0', 'console_scripts', 'beet')()
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\beets\ui\__init__.py", line 1285, in main
_raw_main(args)
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\beets\ui\__init__.py", line 1268, in _raw_main
subcommands, plugins, lib = _setup(options, lib)
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\beets\ui\__init__.py", line 1148, in _setup
plugin_types_album = plugins.types(library.Album)
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\beets\plugins.py", line 337, in types
for plugin in find_plugins():
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\beets\plugins.py", line 307, in find_plugins
_instances[cls] = cls()
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\beetsplug\bpsync.py", line 28, in __init__
self.beatport_plugin.setup()
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\beetsplug\beatport.py", line 294, in setup
token, secret = self.authenticate(c_key, c_secret)
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\beetsplug\beatport.py", line 305, in authenticate
url = auth_client.get_authorize_url()
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\beetsplug\beatport.py", line 94, in get_authorize_url
self._make_url('/identity/1/oauth/request-token'))
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\requests_oauthlib\oauth1_session.py", line 287, in fetch_request_token
token = self._fetch_token(url, **request_kwargs)
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\requests_oauthlib\oauth1_session.py", line 365, in _fetch_token
r = self.post(url, **request_kwargs)
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\requests\sessions.py", line 577, in post
return self.request('POST', url, data=data, json=json, **kwargs)
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\requests\sessions.py", line 529, in request
resp = self.send(prep, **send_kwargs)
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\requests\sessions.py", line 645, in send
r = adapter.send(request, **kwargs)
File "c:\users\campf\appdata\local\programs\python\python36\lib\site-packages\requests\adapters.py", line 519, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='oauth-api.beatport.com', port=443): Max retries exceeded with url: /identity/1/oauth/request-token (Caused by NewConnectionError(': Failed to establish a new connection: [WinError 10060] Une tentative de connexion a échoué car le parti connecté n’a pas répondu convenablement au-delà d’une certaine durée ou une connexion établie a échoué car l’hôte de connexion n’a pas répondu',))
```

I believe Beatport changed their API endpoint at some point since checking their API documentation shows a different endpoint to use.
https://api.beatport.com/v4/docs/

### Setup

* OS: Windows 11 Pro 22H2
* Python version: 3.6.8
* beets version: 1.6.0
* Turning off plugins made problem go away (yes/no): yes

My configuration (output of `beet config`) is:

```yaml
plugins: web edit convert chroma fromfilename bpsync spotify lyrics fetchart lastgenre
directory: D:\Musique
library: D:\Musique.db

import:
write: yes
move: no
convert:
auto: yes
copy_album_art: yes
embed: yes
never_convert_lossy_files: yes
delete_originals: yes
format: aiff
formats:
aiff:
command: ffmpeg -i $source -write_id3v2 1 -c:v copy $dest
extension: aiff
fetchart:
quality: 100
high_resolution: yes
lastgenre:
count: 3
source: track
spotify:
show_failures: yes
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.