spotifywebapiPython 1.0.171__py3-none-any.whl → 1.0.173__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of spotifywebapiPython might be problematic. Click here for more details.

Files changed (22) hide show
  1. {spotifywebapiPython-1.0.171.dist-info → spotifywebapiPython-1.0.173.dist-info}/METADATA +1 -1
  2. {spotifywebapiPython-1.0.171.dist-info → spotifywebapiPython-1.0.173.dist-info}/RECORD +22 -22
  3. spotifywebapipython/const.py +1 -1
  4. spotifywebapipython/docs/__init__.html +16 -4
  5. spotifywebapipython/docs/index.html +2 -2
  6. spotifywebapipython/docs/search.js +1 -1
  7. spotifywebapipython/docs/spotifywebapipython/const.html +3 -3
  8. spotifywebapipython/docs/spotifywebapipython/saappmessages.html +2 -2
  9. spotifywebapipython/docs/spotifywebapipython/sautils.html +2 -2
  10. spotifywebapipython/docs/spotifywebapipython/spotifyapierror.html +2 -2
  11. spotifywebapipython/docs/spotifywebapipython/spotifyapimessage.html +2 -2
  12. spotifywebapipython/docs/spotifywebapipython/spotifyauthtoken.html +2 -2
  13. spotifywebapipython/docs/spotifywebapipython/spotifyclient.html +134 -38
  14. spotifywebapipython/docs/spotifywebapipython/spotifydiscovery.html +2 -2
  15. spotifywebapipython/docs/spotifywebapipython/spotifywebapiauthenticationerror.html +2 -2
  16. spotifywebapipython/docs/spotifywebapipython/spotifywebapierror.html +2 -2
  17. spotifywebapipython/docs/spotifywebapipython/spotifywebplayertoken.html +2 -2
  18. spotifywebapipython/spotifyclient.py +97 -33
  19. spotifywebapipython/spotifyconnect/spotifyconnectdirectorytask.py +11 -2
  20. {spotifywebapiPython-1.0.171.dist-info → spotifywebapiPython-1.0.173.dist-info}/LICENSE +0 -0
  21. {spotifywebapiPython-1.0.171.dist-info → spotifywebapiPython-1.0.173.dist-info}/WHEEL +0 -0
  22. {spotifywebapiPython-1.0.171.dist-info → spotifywebapiPython-1.0.173.dist-info}/top_level.txt +0 -0
@@ -9,7 +9,7 @@
9
9
  </title>
10
10
  <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20role%3D%22img%22%20aria-label%3D%22pdoc%20logo%22%20width%3D%22300%22%20height%3D%22150%22%20viewBox%3D%22-1%200%2060%2030%22%3E%3Ctitle%3Epdoc%3C/title%3E%3Cpath%20d%3D%22M29.621%2021.293c-.011-.273-.214-.475-.511-.481a.5.5%200%200%200-.489.503l-.044%201.393c-.097.551-.695%201.215-1.566%201.704-.577.428-1.306.486-2.193.182-1.426-.617-2.467-1.654-3.304-2.487l-.173-.172a3.43%203.43%200%200%200-.365-.306.49.49%200%200%200-.286-.196c-1.718-1.06-4.931-1.47-7.353.191l-.219.15c-1.707%201.187-3.413%202.131-4.328%201.03-.02-.027-.49-.685-.141-1.763.233-.721.546-2.408.772-4.076.042-.09.067-.187.046-.288.166-1.347.277-2.625.241-3.351%201.378-1.008%202.271-2.586%202.271-4.362%200-.976-.272-1.935-.788-2.774-.057-.094-.122-.18-.184-.268.033-.167.052-.339.052-.516%200-1.477-1.202-2.679-2.679-2.679-.791%200-1.496.352-1.987.9a6.3%206.3%200%200%200-1.001.029c-.492-.564-1.207-.929-2.012-.929-1.477%200-2.679%201.202-2.679%202.679A2.65%202.65%200%200%200%20.97%206.554c-.383.747-.595%201.572-.595%202.41%200%202.311%201.507%204.29%203.635%205.107-.037.699-.147%202.27-.423%203.294l-.137.461c-.622%202.042-2.515%208.257%201.727%2010.643%201.614.908%203.06%201.248%204.317%201.248%202.665%200%204.492-1.524%205.322-2.401%201.476-1.559%202.886-1.854%206.491.82%201.877%201.393%203.514%201.753%204.861%201.068%202.223-1.713%202.811-3.867%203.399-6.374.077-.846.056-1.469.054-1.537zm-4.835%204.313c-.054.305-.156.586-.242.629-.034-.007-.131-.022-.307-.157-.145-.111-.314-.478-.456-.908.221.121.432.25.675.355.115.039.219.051.33.081zm-2.251-1.238c-.05.33-.158.648-.252.694-.022.001-.125-.018-.307-.157-.217-.166-.488-.906-.639-1.573.358.344.754.693%201.198%201.036zm-3.887-2.337c-.006-.116-.018-.231-.041-.342.635.145%201.189.368%201.599.625.097.231.166.481.174.642-.03.049-.055.101-.067.158-.046.013-.128.026-.298.004-.278-.037-.901-.57-1.367-1.087zm-1.127-.497c.116.306.176.625.12.71-.019.014-.117.045-.345.016-.206-.027-.604-.332-.986-.695.41-.051.816-.056%201.211-.031zm-4.535%201.535c.209.22.379.47.358.598-.006.041-.088.138-.351.234-.144.055-.539-.063-.979-.259a11.66%2011.66%200%200%200%20.972-.573zm.983-.664c.359-.237.738-.418%201.126-.554.25.237.479.548.457.694-.006.042-.087.138-.351.235-.174.064-.694-.105-1.232-.375zm-3.381%201.794c-.022.145-.061.29-.149.401-.133.166-.358.248-.69.251h-.002c-.133%200-.306-.26-.45-.621.417.091.854.07%201.291-.031zm-2.066-8.077a4.78%204.78%200%200%201-.775-.584c.172-.115.505-.254.88-.378l-.105.962zm-.331%202.302a10.32%2010.32%200%200%201-.828-.502c.202-.143.576-.328.984-.49l-.156.992zm-.45%202.157l-.701-.403c.214-.115.536-.249.891-.376a11.57%2011.57%200%200%201-.19.779zm-.181%201.716c.064.398.194.702.298.893-.194-.051-.435-.162-.736-.398.061-.119.224-.3.438-.495zM8.87%204.141c0%20.152-.123.276-.276.276s-.275-.124-.275-.276.123-.276.276-.276.275.124.275.276zm-.735-.389a1.15%201.15%200%200%200-.314.783%201.16%201.16%200%200%200%201.162%201.162c.457%200%20.842-.27%201.032-.653.026.117.042.238.042.362a1.68%201.68%200%200%201-1.679%201.679%201.68%201.68%200%200%201-1.679-1.679c0-.843.626-1.535%201.436-1.654zM5.059%205.406A1.68%201.68%200%200%201%203.38%207.085a1.68%201.68%200%200%201-1.679-1.679c0-.037.009-.072.011-.109.21.3.541.508.935.508a1.16%201.16%200%200%200%201.162-1.162%201.14%201.14%200%200%200-.474-.912c.015%200%20.03-.005.045-.005.926.001%201.679.754%201.679%201.68zM3.198%204.141c0%20.152-.123.276-.276.276s-.275-.124-.275-.276.123-.276.276-.276.275.124.275.276zM1.375%208.964c0-.52.103-1.035.288-1.52.466.394%201.06.64%201.717.64%201.144%200%202.116-.725%202.499-1.738.383%201.012%201.355%201.738%202.499%201.738.867%200%201.631-.421%202.121-1.062.307.605.478%201.267.478%201.942%200%202.486-2.153%204.51-4.801%204.51s-4.801-2.023-4.801-4.51zm24.342%2019.349c-.985.498-2.267.168-3.813-.979-3.073-2.281-5.453-3.199-7.813-.705-1.315%201.391-4.163%203.365-8.423.97-3.174-1.786-2.239-6.266-1.261-9.479l.146-.492c.276-1.02.395-2.457.444-3.268a6.11%206.11%200%200%200%201.18.115%206.01%206.01%200%200%200%202.536-.562l-.006.175c-.802.215-1.848.612-2.021%201.25-.079.295.021.601.274.837.219.203.415.364.598.501-.667.304-1.243.698-1.311%201.179-.02.144-.022.507.393.787.213.144.395.26.564.365-1.285.521-1.361.96-1.381%201.126-.018.142-.011.496.427.746l.854.489c-.473.389-.971.914-.999%201.429-.018.278.095.532.316.713.675.556%201.231.721%201.653.721.059%200%20.104-.014.158-.02.207.707.641%201.64%201.513%201.64h.013c.8-.008%201.236-.345%201.462-.626.173-.216.268-.457.325-.692.424.195.93.374%201.372.374.151%200%20.294-.021.423-.068.732-.27.944-.704.993-1.021.009-.061.003-.119.002-.179.266.086.538.147.789.147.15%200%20.294-.021.423-.069.542-.2.797-.489.914-.754.237.147.478.258.704.288.106.014.205.021.296.021.356%200%20.595-.101.767-.229.438.435%201.094.992%201.656%201.067.106.014.205.021.296.021a1.56%201.56%200%200%200%20.323-.035c.17.575.453%201.289.866%201.605.358.273.665.362.914.362a.99.99%200%200%200%20.421-.093%201.03%201.03%200%200%200%20.245-.164c.168.428.39.846.68%201.068.358.273.665.362.913.362a.99.99%200%200%200%20.421-.093c.317-.148.512-.448.639-.762.251.157.495.257.726.257.127%200%20.25-.024.37-.071.427-.17.706-.617.841-1.314.022-.015.047-.022.068-.038.067-.051.133-.104.196-.159-.443%201.486-1.107%202.761-2.086%203.257zM8.66%209.925a.5.5%200%201%200-1%200c0%20.653-.818%201.205-1.787%201.205s-1.787-.552-1.787-1.205a.5.5%200%201%200-1%200c0%201.216%201.25%202.205%202.787%202.205s2.787-.989%202.787-2.205zm4.4%2015.965l-.208.097c-2.661%201.258-4.708%201.436-6.086.527-1.542-1.017-1.88-3.19-1.844-4.198a.4.4%200%200%200-.385-.414c-.242-.029-.406.164-.414.385-.046%201.249.367%203.686%202.202%204.896.708.467%201.547.7%202.51.7%201.248%200%202.706-.392%204.362-1.174l.185-.086a.4.4%200%200%200%20.205-.527c-.089-.204-.326-.291-.527-.206zM9.547%202.292c.093.077.205.114.317.114a.5.5%200%200%200%20.318-.886L8.817.397a.5.5%200%200%200-.703.068.5.5%200%200%200%20.069.703l1.364%201.124zm-7.661-.065c.086%200%20.173-.022.253-.068l1.523-.893a.5.5%200%200%200-.506-.863l-1.523.892a.5.5%200%200%200-.179.685c.094.158.261.247.432.247z%22%20transform%3D%22matrix%28-1%200%200%201%2058%200%29%22%20fill%3D%22%233bb300%22/%3E%3Cpath%20d%3D%22M.3%2021.86V10.18q0-.46.02-.68.04-.22.18-.5.28-.54%201.34-.54%201.06%200%201.42.28.38.26.44.78.76-1.04%202.38-1.04%201.64%200%203.1%201.54%201.46%201.54%201.46%203.58%200%202.04-1.46%203.58-1.44%201.54-3.08%201.54-1.64%200-2.38-.92v4.04q0%20.46-.04.68-.02.22-.18.5-.14.3-.5.42-.36.12-.98.12-.62%200-1-.12-.36-.12-.52-.4-.14-.28-.18-.5-.02-.22-.02-.68zm3.96-9.42q-.46.54-.46%201.18%200%20.64.46%201.18.48.52%201.2.52.74%200%201.24-.52.52-.52.52-1.18%200-.66-.48-1.18-.48-.54-1.26-.54-.76%200-1.22.54zm14.741-8.36q.16-.3.54-.42.38-.12%201-.12.64%200%201.02.12.38.12.52.42.16.3.18.54.04.22.04.68v11.94q0%20.46-.04.7-.02.22-.18.5-.3.54-1.7.54-1.38%200-1.54-.98-.84.96-2.34.96-1.8%200-3.28-1.56-1.48-1.58-1.48-3.66%200-2.1%201.48-3.68%201.5-1.58%203.28-1.58%201.48%200%202.3%201v-4.2q0-.46.02-.68.04-.24.18-.52zm-3.24%2010.86q.52.54%201.26.54.74%200%201.22-.54.5-.54.5-1.18%200-.66-.48-1.22-.46-.56-1.26-.56-.8%200-1.28.56-.48.54-.48%201.2%200%20.66.52%201.2zm7.833-1.2q0-2.4%201.68-3.96%201.68-1.56%203.84-1.56%202.16%200%203.82%201.56%201.66%201.54%201.66%203.94%200%201.66-.86%202.96-.86%201.28-2.1%201.9-1.22.6-2.54.6-1.32%200-2.56-.64-1.24-.66-2.1-1.92-.84-1.28-.84-2.88zm4.18%201.44q.64.48%201.3.48.66%200%201.32-.5.66-.5.66-1.48%200-.98-.62-1.46-.62-.48-1.34-.48-.72%200-1.34.5-.62.5-.62%201.48%200%20.96.64%201.46zm11.412-1.44q0%20.84.56%201.32.56.46%201.18.46.64%200%201.18-.36.56-.38.9-.38.6%200%201.46%201.06.46.58.46%201.04%200%20.76-1.1%201.42-1.14.8-2.8.8-1.86%200-3.58-1.34-.82-.64-1.34-1.7-.52-1.08-.52-2.36%200-1.3.52-2.34.52-1.06%201.34-1.7%201.66-1.32%203.54-1.32.76%200%201.48.22.72.2%201.06.4l.32.2q.36.24.56.38.52.4.52.92%200%20.5-.42%201.14-.72%201.1-1.38%201.1-.38%200-1.08-.44-.36-.34-1.04-.34-.66%200-1.24.48-.58.48-.58%201.34z%22%20fill%3D%22green%22/%3E%3C/svg%3E"/>
11
11
  <!-- build env - Package Name = "spotifywebapiPython" -->
12
- <!-- build env - Package Version = "1.0.171" -->
12
+ <!-- build env - Package Version = "1.0.173" -->
13
13
  <!-- pdoc module.modulename = "spotifywebapipython.spotifywebplayertoken" -->
14
14
  <!-- pdoc module.is_package = "False" -->
15
15
  <!-- pdoc root_module_name = "None" -->
@@ -89,7 +89,7 @@
89
89
 
90
90
  <footer class="footertext">
91
91
  spotifywebapiPython</br>
92
- Version 1.0.171</br>
92
+ Version 1.0.173</br>
93
93
  <a href="https://developer.spotify.com/documentation/web-api" target="_blank">
94
94
  <img src="../spotifywebapipython.ico" alt="brand icon" style="width:32px; height:32px; padding:4px;"/>
95
95
  A Spotify Web Api Client
@@ -803,12 +803,8 @@ class SpotifyClient:
803
803
  if (not self._HasSpotifyWebPlayerCredentials):
804
804
  return result
805
805
 
806
- # was the device resolved? if not, then don't bother!
807
- if (not isinstance(scDevice, SpotifyConnectDevice)):
808
- return result
809
-
810
- # is the device restricted or Sonos?
811
- if (scDevice.IsSonos or scDevice.IsRestricted):
806
+ # was a device argument passed? if not, then just create the token.
807
+ if (scDevice is None):
812
808
 
813
809
  # get spotify web player access token info from spotify web player cookie credentials.
814
810
  _logsi.LogVerbose("Converting Spotify Web Player cookie credentials to an access token for loginId \"%s\"" % (self._SpotifyConnectLoginId))
@@ -817,7 +813,25 @@ class SpotifyClient:
817
813
  tokenStorageFile=self._TokenStorageFile)
818
814
  if tokenWP is not None:
819
815
  result = tokenWP.HeaderValue
820
- _logsi.LogVerbose("Playback will be started using Spotify Web Player authorization access token for device: %s" % (scDevice.Title))
816
+ _logsi.LogVerbose("Spotify Web Player authorization access token will be used")
817
+
818
+ else:
819
+
820
+ # was the device resolved? if not, then don't bother!
821
+ if (not isinstance(scDevice, SpotifyConnectDevice)):
822
+ return result
823
+
824
+ # is the device restricted or Sonos?
825
+ if (scDevice.IsSonos or scDevice.IsRestricted):
826
+
827
+ # get spotify web player access token info from spotify web player cookie credentials.
828
+ _logsi.LogVerbose("Converting Spotify Web Player cookie credentials to an access token for loginId \"%s\"" % (self._SpotifyConnectLoginId))
829
+ tokenWP = SpotifyWebPlayerToken(profileId=self._SpotifyConnectLoginId,
830
+ tokenStorageDir=self._TokenStorageDir,
831
+ tokenStorageFile=self._TokenStorageFile)
832
+ if tokenWP is not None:
833
+ result = tokenWP.HeaderValue
834
+ _logsi.LogVerbose("Playback will be started using Spotify Web Player authorization access token for device: %s" % (scDevice.Title))
821
835
 
822
836
  # return result to caller.
823
837
  return result
@@ -4340,7 +4354,8 @@ class SpotifyClient:
4340
4354
  ) -> list[Artist]:
4341
4355
  """
4342
4356
  <span class="deprecated">
4343
- DEPRECATED - api endpoint no longer supported by Spotify as of 2024/11/27.
4357
+ DEPRECATED - api endpoint no longer supported by Spotify as of 2024/11/27 for unauthorized Spotify Developer Applications.
4358
+ The api endpoint IS still supported by Spotify for authorized Spotify Developer Applications.
4344
4359
  More information about the deprecated functionality can be found on the
4345
4360
  <a href="https://developer.spotify.com/blog/2024-11-27-changes-to-the-web-api" target="_blank">Spotify Developer Forum Blog</a>
4346
4361
  page.
@@ -4389,8 +4404,14 @@ class SpotifyClient:
4389
4404
  apiMethodParms.AppendKeyValue("sortResult", sortResult)
4390
4405
  _logsi.LogMethodParmList(SILevel.Verbose, "Get Spotify catalog information about artists similar to a given artist", apiMethodParms)
4391
4406
 
4392
- # api endpoint no longer supported by Spotify as of 2024/11/27.
4393
- raise SpotifyApiError(SAAppMessages.MSG_SPOTIFY_DEPRECATED_ENDPOINT % apiMethodName)
4407
+ # are spotify web player credentials configured? if so, then we will use them to create
4408
+ # an elevated authorization access token for the Spotify Web API endpoint call.
4409
+ accessTokenHeaderValue:str = self._GetSpotifyWebPlayerTokenHeaderValue()
4410
+
4411
+ # if spotify web player credentials not configured then we are done; the Spotify Web API
4412
+ # endpoint is no longer supported by unauthorized Spotify Developer Applications as of 2024/11/27.
4413
+ if (accessTokenHeaderValue is None):
4414
+ raise SpotifyApiError(SAAppMessages.MSG_SPOTIFY_DEPRECATED_ENDPOINT % apiMethodName)
4394
4415
 
4395
4416
  # validations.
4396
4417
  if sortResult is None:
@@ -4406,7 +4427,7 @@ class SpotifyClient:
4406
4427
 
4407
4428
  # execute spotify web api request.
4408
4429
  msg:SpotifyApiMessage = SpotifyApiMessage(apiMethodName, '/artists/{id}/related-artists'.format(id=artistId))
4409
- msg.RequestHeaders[self.AuthToken.HeaderKey] = self.AuthToken.HeaderValue
4430
+ msg.RequestHeaders[self.AuthToken.HeaderKey] = accessTokenHeaderValue or self.AuthToken.HeaderValue
4410
4431
  self.MakeRequest('GET', msg)
4411
4432
 
4412
4433
  # process results.
@@ -5744,7 +5765,8 @@ class SpotifyClient:
5744
5765
  ) -> Tuple[PlaylistPageSimplified, str]:
5745
5766
  """
5746
5767
  <span class="deprecated">
5747
- DEPRECATED - api endpoint no longer supported by Spotify as of 2024/11/27.
5768
+ DEPRECATED - api endpoint no longer supported by Spotify as of 2024/11/27 for unauthorized Spotify Developer Applications.
5769
+ The api endpoint IS still supported by Spotify for authorized Spotify Developer Applications.
5748
5770
  More information about the deprecated functionality can be found on the
5749
5771
  <a href="https://developer.spotify.com/blog/2024-11-27-changes-to-the-web-api" target="_blank">Spotify Developer Forum Blog</a>
5750
5772
  page.
@@ -5831,8 +5853,14 @@ class SpotifyClient:
5831
5853
  apiMethodParms.AppendKeyValue("sortResult", sortResult)
5832
5854
  _logsi.LogMethodParmList(SILevel.Verbose, "Get a list of Spotify playlists tagged with a particular category", apiMethodParms)
5833
5855
 
5834
- # api endpoint no longer supported by Spotify as of 2024/11/27.
5835
- raise SpotifyApiError(SAAppMessages.MSG_SPOTIFY_DEPRECATED_ENDPOINT % apiMethodName)
5856
+ # are spotify web player credentials configured? if so, then we will use them to create
5857
+ # an elevated authorization access token for the Spotify Web API endpoint call.
5858
+ accessTokenHeaderValue:str = self._GetSpotifyWebPlayerTokenHeaderValue()
5859
+
5860
+ # if spotify web player credentials not configured then we are done; the Spotify Web API
5861
+ # endpoint is no longer supported by unauthorized Spotify Developer Applications as of 2024/11/27.
5862
+ if (accessTokenHeaderValue is None):
5863
+ raise SpotifyApiError(SAAppMessages.MSG_SPOTIFY_DEPRECATED_ENDPOINT % apiMethodName)
5836
5864
 
5837
5865
  # validations.
5838
5866
  if limit is None:
@@ -5866,7 +5894,7 @@ class SpotifyClient:
5866
5894
 
5867
5895
  # execute spotify web api request.
5868
5896
  msg:SpotifyApiMessage = SpotifyApiMessage(apiMethodName, '/browse/categories/{category_id}/playlists'.format(category_id=categoryId))
5869
- msg.RequestHeaders[self.AuthToken.HeaderKey] = self.AuthToken.HeaderValue
5897
+ msg.RequestHeaders[self.AuthToken.HeaderKey] = accessTokenHeaderValue or self.AuthToken.HeaderValue
5870
5898
  msg.UrlParameters = urlParms
5871
5899
  self.MakeRequest('GET', msg)
5872
5900
 
@@ -6732,7 +6760,8 @@ class SpotifyClient:
6732
6760
  ) -> Tuple[PlaylistPageSimplified, str]:
6733
6761
  """
6734
6762
  <span class="deprecated">
6735
- DEPRECATED - api endpoint no longer supported by Spotify as of 2024/11/27.
6763
+ DEPRECATED - api endpoint no longer supported by Spotify as of 2024/11/27 for unauthorized Spotify Developer Applications.
6764
+ The api endpoint IS still supported by Spotify for authorized Spotify Developer Applications.
6736
6765
  More information about the deprecated functionality can be found on the
6737
6766
  <a href="https://developer.spotify.com/blog/2024-11-27-changes-to-the-web-api" target="_blank">Spotify Developer Forum Blog</a>
6738
6767
  page.
@@ -6826,8 +6855,14 @@ class SpotifyClient:
6826
6855
  apiMethodParms.AppendKeyValue("sortResult", sortResult)
6827
6856
  _logsi.LogMethodParmList(SILevel.Verbose, "Get a list of Spotify featured playlists", apiMethodParms)
6828
6857
 
6829
- # api endpoint no longer supported by Spotify as of 2024/11/27.
6830
- raise SpotifyApiError(SAAppMessages.MSG_SPOTIFY_DEPRECATED_ENDPOINT % apiMethodName)
6858
+ # are spotify web player credentials configured? if so, then we will use them to create
6859
+ # an elevated authorization access token for the Spotify Web API endpoint call.
6860
+ accessTokenHeaderValue:str = self._GetSpotifyWebPlayerTokenHeaderValue()
6861
+
6862
+ # if spotify web player credentials not configured then we are done; the Spotify Web API
6863
+ # endpoint is no longer supported by unauthorized Spotify Developer Applications as of 2024/11/27.
6864
+ if (accessTokenHeaderValue is None):
6865
+ raise SpotifyApiError(SAAppMessages.MSG_SPOTIFY_DEPRECATED_ENDPOINT % apiMethodName)
6831
6866
 
6832
6867
  # validations.
6833
6868
  if limit is None:
@@ -6864,7 +6899,7 @@ class SpotifyClient:
6864
6899
 
6865
6900
  # execute spotify web api request.
6866
6901
  msg:SpotifyApiMessage = SpotifyApiMessage(apiMethodName, '/browse/featured-playlists')
6867
- msg.RequestHeaders[self.AuthToken.HeaderKey] = self.AuthToken.HeaderValue
6902
+ msg.RequestHeaders[self.AuthToken.HeaderKey] = accessTokenHeaderValue or self.AuthToken.HeaderValue
6868
6903
  msg.UrlParameters = urlParms
6869
6904
  self.MakeRequest('GET', msg)
6870
6905
 
@@ -6931,7 +6966,8 @@ class SpotifyClient:
6931
6966
  ) -> list[str]:
6932
6967
  """
6933
6968
  <span class="deprecated">
6934
- DEPRECATED - api endpoint no longer supported by Spotify as of 2024/11/27.
6969
+ DEPRECATED - api endpoint no longer supported by Spotify as of 2024/11/27 for unauthorized Spotify Developer Applications.
6970
+ The api endpoint IS still supported by Spotify for authorized Spotify Developer Applications.
6935
6971
  More information about the deprecated functionality can be found on the
6936
6972
  <a href="https://developer.spotify.com/blog/2024-11-27-changes-to-the-web-api" target="_blank">Spotify Developer Forum Blog</a>
6937
6973
  page.
@@ -6975,8 +7011,14 @@ class SpotifyClient:
6975
7011
  _logsi.EnterMethod(SILevel.Debug, apiMethodName)
6976
7012
  _logsi.LogVerbose("Get a sorted list of available genres")
6977
7013
 
6978
- # api endpoint no longer supported by Spotify as of 2024/11/27.
6979
- raise SpotifyApiError(SAAppMessages.MSG_SPOTIFY_DEPRECATED_ENDPOINT % apiMethodName)
7014
+ # are spotify web player credentials configured? if so, then we will use them to create
7015
+ # an elevated authorization access token for the Spotify Web API endpoint call.
7016
+ accessTokenHeaderValue:str = self._GetSpotifyWebPlayerTokenHeaderValue()
7017
+
7018
+ # if spotify web player credentials not configured then we are done; the Spotify Web API
7019
+ # endpoint is no longer supported by unauthorized Spotify Developer Applications as of 2024/11/27.
7020
+ if (accessTokenHeaderValue is None):
7021
+ raise SpotifyApiError(SAAppMessages.MSG_SPOTIFY_DEPRECATED_ENDPOINT % apiMethodName)
6980
7022
 
6981
7023
  # validations.
6982
7024
  if (refresh is None):
@@ -6992,7 +7034,7 @@ class SpotifyClient:
6992
7034
 
6993
7035
  # execute spotify web api request.
6994
7036
  msg:SpotifyApiMessage = SpotifyApiMessage(apiMethodName, '/recommendations/available-genre-seeds')
6995
- msg.RequestHeaders[self.AuthToken.HeaderKey] = self.AuthToken.HeaderValue
7037
+ msg.RequestHeaders[self.AuthToken.HeaderKey] = accessTokenHeaderValue or self.AuthToken.HeaderValue
6996
7038
  self.MakeRequest('GET', msg)
6997
7039
 
6998
7040
  # process results.
@@ -8448,6 +8490,10 @@ class SpotifyClient:
8448
8490
  apiMethodParms.AppendKeyValue("additionalTypes", additionalTypes)
8449
8491
  _logsi.LogMethodParmList(SILevel.Verbose, "Get a playlist owned by a Spotify user", apiMethodParms)
8450
8492
 
8493
+ # are spotify web player credentials configured? if so, then we will use them to create
8494
+ # an elevated authorization access token for the Spotify Web API endpoint call.
8495
+ accessTokenHeaderValue:str = self._GetSpotifyWebPlayerTokenHeaderValue()
8496
+
8451
8497
  # ensure market was either supplied or implied; default if neither.
8452
8498
  market = self._ValidateMarket(market)
8453
8499
 
@@ -8491,7 +8537,7 @@ class SpotifyClient:
8491
8537
 
8492
8538
  # execute spotify web api request.
8493
8539
  msg:SpotifyApiMessage = SpotifyApiMessage(apiMethodName, '/playlists/{id}'.format(id=playlistId))
8494
- msg.RequestHeaders[self.AuthToken.HeaderKey] = self.AuthToken.HeaderValue
8540
+ msg.RequestHeaders[self.AuthToken.HeaderKey] = accessTokenHeaderValue or self.AuthToken.HeaderValue
8495
8541
  msg.UrlParameters = urlParms
8496
8542
  self.MakeRequest('GET', msg)
8497
8543
 
@@ -8879,6 +8925,10 @@ class SpotifyClient:
8879
8925
  apiMethodParms.AppendKeyValue("sortResult", sortResult)
8880
8926
  _logsi.LogMethodParmList(SILevel.Verbose, "Get a list of the users playlist favorites", apiMethodParms)
8881
8927
 
8928
+ # are spotify web player credentials configured? if so, then we will use them to create
8929
+ # an elevated authorization access token for the Spotify Web API endpoint call.
8930
+ accessTokenHeaderValue:str = self._GetSpotifyWebPlayerTokenHeaderValue()
8931
+
8882
8932
  # validations.
8883
8933
  if limit is None:
8884
8934
  limit = 20
@@ -8908,7 +8958,7 @@ class SpotifyClient:
8908
8958
 
8909
8959
  # execute spotify web api request.
8910
8960
  msg:SpotifyApiMessage = SpotifyApiMessage(apiMethodName, '/me/playlists')
8911
- msg.RequestHeaders[self.AuthToken.HeaderKey] = self.AuthToken.HeaderValue
8961
+ msg.RequestHeaders[self.AuthToken.HeaderKey] = accessTokenHeaderValue or self.AuthToken.HeaderValue
8912
8962
  msg.UrlParameters = urlParms
8913
8963
  self.MakeRequest('GET', msg)
8914
8964
 
@@ -10161,7 +10211,8 @@ class SpotifyClient:
10161
10211
  ) -> AudioFeatures:
10162
10212
  """
10163
10213
  <span class="deprecated">
10164
- DEPRECATED - api endpoint no longer supported by Spotify as of 2024/11/27.
10214
+ DEPRECATED - api endpoint no longer supported by Spotify as of 2024/11/27 for unauthorized Spotify Developer Applications.
10215
+ The api endpoint IS still supported by Spotify for authorized Spotify Developer Applications.
10165
10216
  More information about the deprecated functionality can be found on the
10166
10217
  <a href="https://developer.spotify.com/blog/2024-11-27-changes-to-the-web-api" target="_blank">Spotify Developer Forum Blog</a>
10167
10218
  page.
@@ -10204,8 +10255,14 @@ class SpotifyClient:
10204
10255
  apiMethodParms.AppendKeyValue("trackId", trackId)
10205
10256
  _logsi.LogMethodParmList(SILevel.Verbose, "Get audio feature information for a single track", apiMethodParms)
10206
10257
 
10207
- # api endpoint no longer supported by Spotify as of 2024/11/27.
10208
- raise SpotifyApiError(SAAppMessages.MSG_SPOTIFY_DEPRECATED_ENDPOINT % apiMethodName)
10258
+ # are spotify web player credentials configured? if so, then we will use them to create
10259
+ # an elevated authorization access token for the Spotify Web API endpoint call.
10260
+ accessTokenHeaderValue:str = self._GetSpotifyWebPlayerTokenHeaderValue()
10261
+
10262
+ # if spotify web player credentials not configured then we are done; the Spotify Web API
10263
+ # endpoint is no longer supported by unauthorized Spotify Developer Applications as of 2024/11/27.
10264
+ if (accessTokenHeaderValue is None):
10265
+ raise SpotifyApiError(SAAppMessages.MSG_SPOTIFY_DEPRECATED_ENDPOINT % apiMethodName)
10209
10266
 
10210
10267
  # if trackId not specified, then return currently playing track id value.
10211
10268
  if (trackId is None) or (len(trackId.strip()) == 0):
@@ -10217,7 +10274,7 @@ class SpotifyClient:
10217
10274
 
10218
10275
  # execute spotify web api request.
10219
10276
  msg:SpotifyApiMessage = SpotifyApiMessage(apiMethodName, '/audio-features/{id}'.format(id=trackId))
10220
- msg.RequestHeaders[self.AuthToken.HeaderKey] = self.AuthToken.HeaderValue
10277
+ msg.RequestHeaders[self.AuthToken.HeaderKey] = accessTokenHeaderValue or self.AuthToken.HeaderValue
10221
10278
  self.MakeRequest('GET', msg)
10222
10279
 
10223
10280
  # process results.
@@ -10609,7 +10666,8 @@ class SpotifyClient:
10609
10666
  ) -> TrackRecommendations:
10610
10667
  """
10611
10668
  <span class="deprecated">
10612
- DEPRECATED - api endpoint no longer supported by Spotify as of 2024/11/27.
10669
+ DEPRECATED - api endpoint no longer supported by Spotify as of 2024/11/27 for unauthorized Spotify Developer Applications.
10670
+ The api endpoint IS still supported by Spotify for authorized Spotify Developer Applications.
10613
10671
  More information about the deprecated functionality can be found on the
10614
10672
  <a href="https://developer.spotify.com/blog/2024-11-27-changes-to-the-web-api" target="_blank">Spotify Developer Forum Blog</a>
10615
10673
  page.
@@ -10853,8 +10911,14 @@ class SpotifyClient:
10853
10911
  apiMethodParms.AppendKeyValue("targetValence", targetValence)
10854
10912
  _logsi.LogMethodParmList(SILevel.Verbose, "Get track recommendations for specified criteria", apiMethodParms)
10855
10913
 
10856
- # api endpoint no longer supported by Spotify as of 2024/11/27.
10857
- raise SpotifyApiError(SAAppMessages.MSG_SPOTIFY_DEPRECATED_ENDPOINT % apiMethodName)
10914
+ # are spotify web player credentials configured? if so, then we will use them to create
10915
+ # an elevated authorization access token for the Spotify Web API endpoint call.
10916
+ accessTokenHeaderValue:str = self._GetSpotifyWebPlayerTokenHeaderValue()
10917
+
10918
+ # if spotify web player credentials not configured then we are done; the Spotify Web API
10919
+ # endpoint is no longer supported by unauthorized Spotify Developer Applications as of 2024/11/27.
10920
+ if (accessTokenHeaderValue is None):
10921
+ raise SpotifyApiError(SAAppMessages.MSG_SPOTIFY_DEPRECATED_ENDPOINT % apiMethodName)
10858
10922
 
10859
10923
  # ensure market was either supplied or implied; default if neither.
10860
10924
  market = self._ValidateMarket(market)
@@ -10974,7 +11038,7 @@ class SpotifyClient:
10974
11038
 
10975
11039
  # execute spotify web api request.
10976
11040
  msg:SpotifyApiMessage = SpotifyApiMessage(apiMethodName, '/recommendations')
10977
- msg.RequestHeaders[self.AuthToken.HeaderKey] = self.AuthToken.HeaderValue
11041
+ msg.RequestHeaders[self.AuthToken.HeaderKey] = accessTokenHeaderValue or self.AuthToken.HeaderValue
10978
11042
  msg.UrlParameters = urlParms
10979
11043
  self.MakeRequest('GET', msg)
10980
11044
 
@@ -1051,15 +1051,24 @@ class SpotifyConnectDirectoryTask(threading.Thread):
1051
1051
  # does caller want the group coordinator?
1052
1052
  if (returnCoordinator):
1053
1053
 
1054
+ # TEST TODO - use to test Sonos coordinator functionality.
1055
+ # _logsi.LogObject(SILevel.Verbose, "Sonos Controller instance for device: %s" % (device.Title), sonosPlayer, colorValue=SIColors.Red)
1056
+ # sonosPlayer._is_coordinator = False
1057
+
1054
1058
  # if Sonos Controller instance is the group coordinator then we are done.
1055
1059
  if (sonosPlayer.is_coordinator):
1056
1060
  _logsi.LogVerbose("Sonos Controller instance is a group coordinator for device: %s" % (device.Title))
1061
+ _logsi.LogObject(SILevel.Verbose, "Sonos Controller instance for device: %s" % (device.Title), sonosPlayer)
1062
+ _logsi.LogDictionary(SILevel.Verbose, "Sonos Controller instance for device: %s (speaker_info)" % (device.Title), sonosPlayer.speaker_info)
1063
+ _logsi.LogObject(SILevel.Verbose, "Sonos Controller instance for device: %s (group)" % (device.Title), sonosPlayer.group)
1064
+ _logsi.LogObject(SILevel.Verbose, "Sonos Controller instance for device: %s (zone_group_state)" % (device.Title), sonosPlayer.zone_group_state)
1057
1065
  return sonosPlayer
1058
1066
 
1059
1067
  # trace.
1060
1068
  _logsi.LogObject(SILevel.Verbose, "Sonos Controller instance for device: %s" % (device.Title), sonosPlayer)
1061
- if (sonosPlayer.zone_group_state is not None):
1062
- _logsi.LogObject(SILevel.Verbose, "Sonos Controller instance for device: %s (zone_group_state)" % (device.Title), sonosPlayer.zone_group_state)
1069
+ _logsi.LogDictionary(SILevel.Verbose, "Sonos Controller instance for device: %s (speaker_info)" % (device.Title), sonosPlayer.speaker_info)
1070
+ _logsi.LogObject(SILevel.Verbose, "Sonos Controller instance for device: %s (group)" % (device.Title), sonosPlayer.group)
1071
+ _logsi.LogObject(SILevel.Verbose, "Sonos Controller instance for device: %s (zone_group_state)" % (device.Title), sonosPlayer.zone_group_state)
1063
1072
 
1064
1073
  # is the device part of a group? if so, then use the group coordinator.
1065
1074
  if (sonosPlayer.group is not None):