Commit Graph

39 Commits

Author SHA1 Message Date
Stéphane Bruckert
b4c26eb9e4 Add documentation warnings to doc 2025-05-22 19:22:18 +01:00
Niko
3ec8a2312c
Improve logging (#1191)
* improve retry warning

* changelog

* fix lint issue
2025-03-26 07:41:07 +01:00
Niko
4f01f7187d
Avoid garbage collection for requests.Session (#1189)
* workaround for garbage collection

* add missing import

* linting issues (wrong import order)

* fix imports
2025-03-07 20:02:43 +01:00
508chris
1dbbbf65ec
Changed cache_handler.py to utilize Python's Context Management Protocol (#991) 2025-01-22 23:36:37 +00:00
Stéphane Bruckert
84f8b0a64b
Split test and lint workflows (#1183) 2025-01-18 15:21:51 +00:00
Niko
66ad716595
Print warnings when a rate/request limit is reached (#1134)
* create custom urllib3.Retry class for printing warnings on rate/request limits

* move import urllib3 from client.py to util.py

* Using Retry.increment instead of Retry.is_retry. Shows the Retry-After value in the warning as well

* Making sure that max column <= 99

* add types.TracebackType

* Change warning in request/rate limit warning

* adding all parameters, just to make sure

* fixing length of line

* making sure that response is not None
2024-06-25 09:26:19 +02:00
Dianna
8f003147f7
Added and revised function docstrings for util.py (#1130)
* Added and revised function docstrings for util.py

* added credentials to gitignore

* Addressed request changes by reverting/modifying function docstrings to match the format used in client.py
2024-06-18 10:30:04 +02:00
Hugo van Kemenade
85c9d74dc1
Drop support for EOL Python 3.7 (#1065)
* Add python_requires to help pip

* Update supported versions in tox.ini

* Upgrade Python syntax with pyupgrade --py37-plus

* Bump GitHub Actions

* Add Python 3.11 and 3.12 to CI

* Remove six dependency

* Remove redundant dependencies

* Remove redudant Python 3.5 code

* Drop support for EOL Python 3.7

* Upgrade Python syntax with pyupgrade --py38-plus

* Update CHANGELOG

* More f-strings

---------

Co-authored-by: Hugo van Kemenade <hugovk@users.noreply.github.com>
2024-05-21 18:32:01 +02:00
Bruno Alla
fa44fed76d
Fix a few typos in comments & strings (#866) 2022-10-29 14:23:43 +01:00
Omer Korner
e07dd64925
Allow the scope to be either a list or comma separated string (#650)
* Allow the scope to be either a list or comma separated string

* Move normalize scope to util file and make it a base method

Also adjust documentation to reflect the new scope parameter supporting a list

* Add change to CHANGELOG.md
2021-03-04 18:56:39 +01:00
Tony Jackson
9550c8fd86
Create CacheHandler to abstract caching tokens (#625)
* Refactor functions into static methods of AuthBase

Functions is_token_expired was a loose function that was added to
SpotifyClientCredentials, SpotifyPKCE, and SpotifyImplicitGrant classes
through a method on each class that passed the call to the loose
is_token_expired function. Function _is_scope_subset was duplicated on
SpotifyClientCredentials, SpotifyPKCE, and SpotifyImplicitGrant classes.

Refactoring is_token_expired and _is_scope_subset to be static methods
on SpotifyAuthBase means both are available for all derived classes and
require less boilerplate.

* Create CacheHandler to abstract caching tokens

Previous code only supported caching to and from json files in a given
directory. In addition, the get_cached_token method mixed getting and
getting the token in the same method.

This change creates a CacheHandler class to abstract out the caching
implementation and allow the user to cache tokens in any way they
see fit. For example, the user could create a MongoCache class to store
and retrieve tokens from a Mongo database and specify that
cache_handler=MongoCache in creating an auth_manager object.

To implement the CacheHandler abstraction, the following changes are
implemented:

The validation code in each get_cached_token method in SpotifyOAuth,
SpotifyPKCE, and SpotifyImplicitGrant is moved into a validate_token
method in each class.

The CacheHandler class is created with get_cached_token and
save_token_to_cache methods.

Previous instances of self.get_cached_token() are now replaced with
self.validate_token(self.cache_handler.get_cached_token()) to preserve
the getting and validation behaviour.

cache_handler is added as an argument to SpotifyOAuth, SpotifyPKCE, and
SpotifyImplicitGrant. Specifying a cache_handler now overrides any
specification of cache_path and/or username.

To preserve backwards compatibility in handling cache files, a
CacheFileHandler class extending CacheHandler is created. If no
cache_handler is specified, the cache_path and username arguments are
used to create an instance of CacheFileHandler. It may be worth
deprecating the cache_path and username fields in favour of using
CacheFileHandler.

Tests are also modified and extended to cover the new functionality. A
sample MemoryCache CacheHandler is created to test getting and saving to
a custom CacheHandler.

* Fix cache_handler subclass check for Python 2

* Split assert message to fix line over max length

* Split cache handlers into cache_handler.py

* flake8 and autopep fixes

* Fix init to allow importing CacheHandler

When spotipy is installed as a package, CacheHandler is not accessible
from a `from spotipy import CacheHandler` statement because the import
is not specified in the __init__.py file. This commit adds CacheHandler
and CacheFileHandler to the init file so the user can import them.

* flake8 fix
2020-12-21 11:31:21 +01:00
Stéphane Bruckert
d0ca977647
Made cache_path and username optional (#567)
* Made cache_path and username optional

* Update readme and example

* Lint

* Lint

* Feedback / add warning
2020-08-30 23:59:38 +01:00
IdmFoundInHim
38515689bc
Support Implicit Grant Authorization Flow (Fix #499) (#515)
* Add SpotifyImplicitGrant with get_access_token and get_cached_token (and minimum related functions)

* Add some overlooked necessary methods/values in SpotifyImplicitGrant

* Remove unsuppported functionality and make SpotifyImplicitGrant public

* Allow/Expose integration of SpotifyImplicitGrant in client

* Add Implicit Grant tests and decrease abilities of prompt_for_user_token

Remove Implicit Grant and state support from prompt_for_user_token

* Add documentation and changelog entry

* Touch up PEP8 compliance

* Ignore long line with link for flake8

* Correct changelog

* Restore compatibility with Python 2.7

* Correct help(SpotifyImplicitGrant.get_access_token)

* Remove as_dict from SpotifyImplicitGrant.get_access_token

* Combine status check functionality with implicit grant support

In oauth2.py:
* Add state checking to SpotifyImplicitGrant
* Add dedicated SpotifyStateError as subclass of SpotifyOauthError
* Moved `_get_user_input` from SpotifyOAuth to superclass SpotifyAuthBase
* Renamed `parse_oauth_response_url` to `parse_auth_response_url`
* Moved error handling into `parse_auth_response_url`

Made minor changes in tests and client.py accordingly

* Update changelog

* Trim down tests for SpotifyImplicitGrant

* Fix trailing whitespace
2020-06-25 21:39:51 +01:00
foobuzz
ed136d15df
Check the state (#509)
* - Verify that the state received alongside the authorization code is consistent with the one sent
- Refactor URL parsing for the local server way and the interactive way
- Add tests for interactive way

* Resurrect public methods parse_response_code and get_authorization_code

* Use new method parse_oatuh_response_url for parse_response_code implementation.
2020-06-20 21:48:19 +01:00
Stephane Bruckert
c7f2edf343 Deprecate util.prompt_for_user_token() 2020-06-14 18:01:14 +01:00
Jonas Camillus Jeppesen
d3bab0f054
Fix issue with hanging authorization process if no port is provided, fixes #471, fixes #474 (#477)
* Fixed issue where using rediret uri 'localhost' (without specifying a port) would cause the authorization process to hang (not asking the user to paste/enter the URL redirected to)

* Updated the documentation to match the changes to the authorization process - also kind of fixing issues #474 and #471

* Fixed Flake8 over-indentation remark
2020-04-19 22:39:03 +01:00
Stephane Bruckert
c6de8dc713 Fix no handler could be found for logger 2020-04-11 13:32:23 +01:00
Dj
b01adba826
Print -> Logging, fixes #84 (#461) 2020-04-03 23:03:09 +01:00
Zsolt Cserna
acdcfcecf8
oauth2.py: add local http server to serve redirects (#243)
When spotify redirects the browser to localhost, serve the page with a
simple http server implemented by HTTPServer. By this way, we can obtain
the tokens the oauth service want so provide us, and no need to input the
user the redirect URL.

This method only works when the application in spotify developer dashboard
is configured to redirect the requests to localhost.

To use this method it is required to specify the redirect_url pointing to
localhost with simple http, to a non-privilegized port (unless the script is
run as root).
2020-04-01 18:16:13 +01:00
JohannesPertl
04bdd27d85
Prompt option to always show a dialog when giving permissions to Spotify (#438)
* Add show_dialog option to prompt_for_user_token()

* Adjust test_get_authorize_url_shows_dialog_when_requested
2020-02-12 20:49:26 +00:00
Stefano
4515446a65 Auto-refresh AuthCode flow token. (#435)
* Auto-refresh AuthCode flow token.

* Reformatted.

* Reformatted.

* Removed invalid syntax.

* Removed abstract class SpotifyAuthManager.

* Fix typo on docstrings.

* Optionally try to fetch main input parameters from environment.

Implements the capability of trying to fetch the following parameters from the environment, when they're not directly passed to the authorization handler.
The affected parameters are: client_id, client_secret, redirect_uri.
An SpotifyOauthError is raised if no value gets found.

* Removed f-string for Python2 compatibility.

* Fix line-too-long.

* Remove useless import.

* Add username to docstring.

* Remove redundant return.

* Fix empty lines print statement for backward compatibility with Python2.

* Update simple4 example.

* Set optional 'as_dict' parameter on OAuth 'get_access_token'.

* Update changelog.

Co-authored-by: Stéphane Bruckert <stephane.bruckert@gmail.com>
2020-02-10 10:20:02 +00:00
Stephane Bruckert
26db832e24 Temporarily revert #428 2020-01-23 10:06:19 +00:00
Peter
87a72a060f Automatic refresh of Authorization Code Flow Tokens in long-running Applications (#428)
* auto-refresh user token

* example for a long-running user-request app

* wrap long lines

* combine duplicate code into _refresh_token_if_expired method

* add changelog entry
2020-01-22 20:01:30 +00:00
Stéphane Bruckert
f54830e272
Add linter, solves #348 (#415) 2020-01-12 13:19:40 +00:00
Harrison
d8d9f290fb remove unneccesary whitespaces, shorten some lines, and add name to contibutors 2020-01-11 19:56:00 +00:00
Sandeep Murthy
2ce270554a Update tests - make client credentials env. vars list a commonly accessible dictionary in spotipy/util.py 2020-01-11 19:54:20 +00:00
Sandeep Murthy
e9edf2a255 Miscellaneous fixes - clean up tests 2020-01-11 19:54:20 +00:00
Sandeep Murthy
e1ba4a9bbb Re-order imports and specify UTF-8 encoding header in all base modules and package initialiser (ref. https://www.python.org/dev/peps/pep-0008/#imports, https://www.python.org/dev/peps/pep-0008/#source-file-encoding) + add __all__ attribute 2020-01-11 19:54:20 +00:00
Paul Lamere
58029fbb84 Merge pull request #173 from shantanugoel/fix_headless_execution
Fix execution on headless systems where webbrowser module may not be available
2017-09-17 11:33:44 -04:00
Shantanu Goel
ab2f52e81a Fix execution on headless systems where webbrowser module may not be present 2017-03-21 18:38:39 +05:30
Jesse Jarzynka
403ab1cfa1 Add cache_path as an argument to prompt_for_user_token() 2017-03-08 00:51:39 -05:00
delucks
3587e107c0 Swap use of subprocess.call for webbrowser.open in util.py 2016-12-20 22:44:03 -08:00
Joona Hoikkala
1737a550d3 Fix for python 2 to use the safe raw_input() per default 2015-06-05 12:19:38 +03:00
Joona Hoikkala
d08f7a82dc Support print() as function in Python 2 2015-06-05 12:14:13 +03:00
Joona Hoikkala
1f833afa45 Initial run of 2to3 2015-06-05 12:07:28 +03:00
Paul Lamere
20870ea3ed Documentation improvements 2014-08-22 11:00:29 -04:00
Paul Lamere
080786654a Improved oauth docs 2014-08-22 09:23:06 -04:00
Paul Lamere
7601aaab58 refacord to support playlist editing 2014-08-20 14:08:49 -04:00
Paul Lamere
e35ef206d5 Moved util module into main package 2014-08-17 10:28:56 -04:00