spotifywebapiPython 1.0.286__py3-none-any.whl → 1.0.288__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.
Files changed (24) hide show
  1. spotifywebapipython/const.py +1 -1
  2. spotifywebapipython/docs/__init__.html +15 -2
  3. spotifywebapipython/docs/index.html +2 -2
  4. spotifywebapipython/docs/search.js +1 -1
  5. spotifywebapipython/docs/spotifywebapipython/const.html +3 -3
  6. spotifywebapipython/docs/spotifywebapipython/saappmessages.html +2 -2
  7. spotifywebapipython/docs/spotifywebapipython/sautils.html +2 -2
  8. spotifywebapipython/docs/spotifywebapipython/spotifyapierror.html +2 -2
  9. spotifywebapipython/docs/spotifywebapipython/spotifyapimessage.html +2 -2
  10. spotifywebapipython/docs/spotifywebapipython/spotifyauthtoken.html +2 -2
  11. spotifywebapipython/docs/spotifywebapipython/spotifyclient.html +70 -7
  12. spotifywebapipython/docs/spotifywebapipython/spotifydiscovery.html +2 -2
  13. spotifywebapipython/docs/spotifywebapipython/spotifymediatypes.html +2 -2
  14. spotifywebapipython/docs/spotifywebapipython/spotifytypeprefixes.html +2 -2
  15. spotifywebapipython/docs/spotifywebapipython/spotifywebapiauthenticationerror.html +2 -2
  16. spotifywebapipython/docs/spotifywebapipython/spotifywebapierror.html +24 -2
  17. spotifywebapipython/docs/spotifywebapipython/spotifywebplayertoken.html +2 -2
  18. spotifywebapipython/spotifyclient.py +199 -8
  19. spotifywebapipython/spotifywebapierror.py +24 -0
  20. {spotifywebapipython-1.0.286.dist-info → spotifywebapipython-1.0.288.dist-info}/METADATA +1 -1
  21. {spotifywebapipython-1.0.286.dist-info → spotifywebapipython-1.0.288.dist-info}/RECORD +24 -24
  22. {spotifywebapipython-1.0.286.dist-info → spotifywebapipython-1.0.288.dist-info}/LICENSE +0 -0
  23. {spotifywebapipython-1.0.286.dist-info → spotifywebapipython-1.0.288.dist-info}/WHEEL +0 -0
  24. {spotifywebapipython-1.0.286.dist-info → spotifywebapipython-1.0.288.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.286" -->
12
+ <!-- build env - Package Version = "1.0.288" -->
13
13
  <!-- pdoc module.modulename = "spotifywebapipython.spotifywebapiauthenticationerror" -->
14
14
  <!-- pdoc module.is_package = "False" -->
15
15
  <!-- pdoc root_module_name = "None" -->
@@ -74,7 +74,7 @@
74
74
 
75
75
  <footer class="footertext">
76
76
  spotifywebapipython</br>
77
- Version 1.0.286</br>
77
+ Version 1.0.288</br>
78
78
  <a href="https://developer.spotify.com/documentation/web-api" target="_blank">
79
79
  <img src="../spotifywebapipython.ico" alt="brand icon" style="width:32px; height:32px; padding:4px;"/>
80
80
  A Spotify Web Api Client
@@ -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.286" -->
12
+ <!-- build env - Package Version = "1.0.288" -->
13
13
  <!-- pdoc module.modulename = "spotifywebapipython.spotifywebapierror" -->
14
14
  <!-- pdoc module.is_package = "False" -->
15
15
  <!-- pdoc root_module_name = "None" -->
@@ -60,6 +60,9 @@
60
60
  <li>
61
61
  <a class="variable" href="#SpotifyWebApiError.Status">Status</a>
62
62
  </li>
63
+ <li>
64
+ <a class="variable" href="#SpotifyWebApiError.RetryAfter">RetryAfter</a>
65
+ </li>
63
66
  <li>
64
67
  <a class="function" href="#SpotifyWebApiError.ToString">ToString</a>
65
68
  </li>
@@ -71,7 +74,7 @@
71
74
 
72
75
  <footer class="footertext">
73
76
  spotifywebapipython</br>
74
- Version 1.0.286</br>
77
+ Version 1.0.288</br>
75
78
  <a href="https://developer.spotify.com/documentation/web-api" target="_blank">
76
79
  <img src="../spotifywebapipython.ico" alt="brand icon" style="width:32px; height:32px; padding:4px;"/>
77
80
  A Spotify Web Api Client
@@ -197,6 +200,25 @@ For further information, see Response Status Codes.</p>
197
200
  </div>
198
201
 
199
202
 
203
+ </div>
204
+ <div id="SpotifyWebApiError.RetryAfter" class="classattr">
205
+ <div class="attr variable">
206
+ <span class="name">RetryAfter</span><span class="annotation">: int</span>
207
+
208
+
209
+ </div>
210
+ <a class="headerlink" href="#SpotifyWebApiError.RetryAfter"></a>
211
+
212
+ <div class="docstring"><p>The number of seconds to wait before retrying a method call that resulted in
213
+ an HTTP status of 429 (rate-limit exceeded).</p>
214
+
215
+ <p>This value is only valid if the HTTP response headers contained a <code>retry-after</code> key.
216
+ This usually only happens when HTTP status code = 429.</p>
217
+
218
+ <p>Example: <code>21</code></p>
219
+ </div>
220
+
221
+
200
222
  </div>
201
223
  <div id="SpotifyWebApiError.ToString" class="classattr">
202
224
  <div class="attr function">
@@ -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.286" -->
12
+ <!-- build env - Package Version = "1.0.288" -->
13
13
  <!-- pdoc module.modulename = "spotifywebapipython.spotifywebplayertoken" -->
14
14
  <!-- pdoc module.is_package = "False" -->
15
15
  <!-- pdoc root_module_name = "None" -->
@@ -101,7 +101,7 @@
101
101
 
102
102
  <footer class="footertext">
103
103
  spotifywebapipython</br>
104
- Version 1.0.286</br>
104
+ Version 1.0.288</br>
105
105
  <a href="https://developer.spotify.com/documentation/web-api" target="_blank">
106
106
  <img src="../spotifywebapipython.ico" alt="brand icon" style="width:32px; height:32px; padding:4px;"/>
107
107
  A Spotify Web Api Client
@@ -15,7 +15,7 @@ from soco.plugins.sharelink import ShareLinkPlugin
15
15
  import time
16
16
  import threading
17
17
  from typing import Tuple, Callable, Union
18
- from urllib3 import PoolManager, Timeout, HTTPResponse
18
+ from urllib3 import PoolManager, Timeout, HTTPResponse, Retry
19
19
  from urllib.parse import urlencode
20
20
  import urllib.parse
21
21
  from lxml.etree import fromstring, Element
@@ -252,16 +252,29 @@ class SpotifyClient:
252
252
  # "WARNING:urllib3.connectionpool:Connection pool is full, discarding connection: x.x.x.x. Connection pool size: 1"
253
253
  if (manager is None) or (not isinstance(manager,PoolManager)):
254
254
 
255
+ # setup retry details for each request made to the Spotify Web API.
256
+ # this allows the urllib3 PoolManager to automatically retry requests that fail due to
257
+ # connection and read related scenarios (e.g. temporary connection issues, redirects, etc);
258
+ # it allows our library to manually handle other types of retry scenarios (e.g. temporary
259
+ # Spotify Web API backend server, unauthorized / forbidden requests, etc).
260
+ retry = Retry(
261
+ total=3, # total number of retries to allow (takes precedence over other counts)
262
+ connect=2, # number of times to retry on connection-related errors (errors raised before request is sent to server)
263
+ read=2, # number of times to retry on read errors (errors raised after request was sent to server)
264
+ status=0, # number of times to retry on bad status codes (0=never retry; let us handle them manually and ignore `status_forcelist`)
265
+ respect_retry_after_header=False, # whether to respect Retry-After header on status codes
266
+ )
267
+
255
268
  # create new pool manager with specified timeouts and limits.
256
269
  timeout = Timeout(connect=float(30), read=None)
257
- self._Manager = PoolManager(headers={'User-Agent': 'SpotifyApiPython/1.0.0'},
270
+ self._Manager = PoolManager(headers={'User-Agent': 'SpotifyWebApiPython/1.0.0'},
258
271
  timeout=timeout,
259
272
  num_pools=10, # number of connection pools to allocate.
260
273
  maxsize=30, # maximum number of connections to keep in the pool.
261
- block=True # limit number of connections to the device.
274
+ block=True, # limit number of connections to the device.
275
+ retries=retry, # specific way to handle retry on errors.
262
276
  )
263
277
 
264
-
265
278
  # verify token storage directory exists.
266
279
  if tokenStorageDir is None:
267
280
  tokenStorageDir = platformdirs.site_config_dir('SpotifyWebApiPython', ensure_exists=True, appauthor=False)
@@ -706,6 +719,7 @@ class SpotifyClient:
706
719
  responseData:dict = None
707
720
  responseUTF8:str = None
708
721
  contentType:str = None
722
+ retryAfterSeconds:int|None = None
709
723
 
710
724
  try:
711
725
 
@@ -740,9 +754,17 @@ class SpotifyClient:
740
754
  # do response headers contain a content-type value?
741
755
  # if so, we will use it to determine how to convert the response data.
742
756
  if response.headers:
757
+
743
758
  if 'content-type' in response.headers:
744
759
  contentType = response.headers['content-type']
745
760
 
761
+ # Spotify normally returns a seconds value for `retry-after`, but it could change to a date.
762
+ if 'retry-after' in response.headers:
763
+ try:
764
+ retryAfterSeconds = int(response.headers.get('retry-after', 0))
765
+ except Exception as ex:
766
+ retryAfterSeconds = None
767
+
746
768
  # do we have response data?
747
769
  if len(response.data) == 0:
748
770
 
@@ -839,9 +861,16 @@ class SpotifyClient:
839
861
 
840
862
  if errCode is None:
841
863
  errCode = response.status
864
+
865
+ # if "retry-after" response header, then append the amount to the message.
866
+ if (retryAfterSeconds is not None):
867
+ errMessage += " (retry-after: %s seconds)" % retryAfterSeconds
842
868
 
843
869
  if (not msg.IgnoreResponseErrors):
844
- raise SpotifyWebApiError(errCode, errMessage, msg.MethodName, response.reason, _logsi)
870
+ exObj = SpotifyWebApiError(errCode, errMessage, msg.MethodName, response.reason, _logsi)
871
+ if (retryAfterSeconds is not None):
872
+ exObj.RetryAfter = retryAfterSeconds
873
+ raise exObj
845
874
 
846
875
  elif isinstance(errObj, str):
847
876
 
@@ -1565,6 +1594,18 @@ class SpotifyClient:
1565
1594
  _logsi.LogDictionary(SILevel.Verbose, "SpotifyClient http request: '%s' (no body)" % (url), msg.RequestData, prettyPrint=True)
1566
1595
  response = self._Manager.request(method, url, headers=msg.RequestHeaders)
1567
1596
 
1597
+ # TEST TODO - simulate http response for testing purposes.
1598
+ # _logsi.LogWarning("SpotifyClient MakeRequest forced HTTPResponse for testing!", colorValue=SIColors.Red)
1599
+ # response = HTTPResponse(
1600
+ # status=429,
1601
+ # reason="Too Many Requests (TEST)",
1602
+ # body=b'{"error":{"status":429,"message":"API rate limit exceeded"}}',
1603
+ # headers={
1604
+ # "Content-Type": "application/json",
1605
+ # "Retry-After": "41",
1606
+ # },
1607
+ # )
1608
+
1568
1609
  # TEST TODO - for testing retry logic.
1569
1610
  # if (response.status_code == 200) and (loopTotalDelay <= 0.200):
1570
1611
  # _logsi.LogWarning("TEST TODO - Testing Spotify Web API 504 status (Gateway timeout) condition ...", colorValue=SIColors.Red)
@@ -1577,7 +1618,7 @@ class SpotifyClient:
1577
1618
 
1578
1619
  # check for errors that are temporary in nature; for these errors, we will retry the
1579
1620
  # request for a specified number of tries with a small wait period in between.
1580
- if (response.status == 504):
1621
+ if (response.status in [503,504]):
1581
1622
 
1582
1623
  # only retry so many times before we give up;
1583
1624
  if (loopTotalDelay >= LOOP_TIMEOUT):
@@ -3722,6 +3763,11 @@ class SpotifyClient:
3722
3763
  SpotifyApiError:
3723
3764
  If the method fails for any other reason.
3724
3765
 
3766
+ Filter criteria is applied after data (up to the limit) has been retrieved.
3767
+ This is important, in that if you set the limit too low it will not find any matching entries because
3768
+ it could not retrieve them all. If filtering, ensure that you set higher a limit value to that ALL data
3769
+ is considered by the filter.
3770
+
3725
3771
  <details>
3726
3772
  <summary>Sample Code - Manual Paging</summary>
3727
3773
  ```python
@@ -3925,6 +3971,11 @@ class SpotifyClient:
3925
3971
  SpotifyApiError:
3926
3972
  If the method fails for any other reason.
3927
3973
 
3974
+ Filter criteria is applied after data (up to the limit) has been retrieved.
3975
+ This is important, in that if you set the limit too low it will not find any matching entries because
3976
+ it could not retrieve them all. If filtering, ensure that you set higher a limit value to that ALL data
3977
+ is considered by the filter.
3978
+
3928
3979
  <details>
3929
3980
  <summary>Sample Code - Manual Paging</summary>
3930
3981
  ```python
@@ -5191,8 +5242,8 @@ class SpotifyClient:
5191
5242
  were returned in by the Spotify Web API.
5192
5243
  Default: True
5193
5244
  filterCriteria (str):
5194
- Filter returned entries by a audiobook name or uri value.
5195
- Value can be a full name (e.g. "My AudioBook Name"), or a partial name (e.g. "My").
5245
+ Filter returned entries by an artist name or uri value.
5246
+ Value can be a full name (e.g. "My Artist Name"), or a partial name (e.g. "My").
5196
5247
 
5197
5248
  Returns:
5198
5249
  An `ArtistPage` object of matching results.
@@ -5204,6 +5255,11 @@ class SpotifyClient:
5204
5255
  SpotifyApiError:
5205
5256
  If the method fails for any other reason.
5206
5257
 
5258
+ Filter criteria is applied after data (up to the limit) has been retrieved.
5259
+ This is important, in that if you set the limit too low it will not find any matching entries because
5260
+ it could not retrieve them all. If filtering, ensure that you set higher a limit value to that ALL data
5261
+ is considered by the filter.
5262
+
5207
5263
  <details>
5208
5264
  <summary>Sample Code - Manual Paging</summary>
5209
5265
  ```python
@@ -5352,6 +5408,7 @@ class SpotifyClient:
5352
5408
  artistId:str=None,
5353
5409
  market:str=None,
5354
5410
  sortResult:bool=True,
5411
+ filterCriteria:str|None=None,
5355
5412
  ) -> list[Track]:
5356
5413
  """
5357
5414
  <span class="deprecated">
@@ -5801,6 +5858,11 @@ class SpotifyClient:
5801
5858
  SpotifyApiError:
5802
5859
  If the method fails for any other reason.
5803
5860
 
5861
+ Filter criteria is applied after data (up to the limit) has been retrieved.
5862
+ This is important, in that if you set the limit too low it will not find any matching entries because
5863
+ it could not retrieve them all. If filtering, ensure that you set higher a limit value to that ALL data
5864
+ is considered by the filter.
5865
+
5804
5866
  <details>
5805
5867
  <summary>Sample Code - Manual Paging</summary>
5806
5868
  ```python
@@ -7311,6 +7373,11 @@ class SpotifyClient:
7311
7373
  SpotifyApiError:
7312
7374
  If the method fails for any other reason.
7313
7375
 
7376
+ Filter criteria is applied after data (up to the limit) has been retrieved.
7377
+ This is important, in that if you set the limit too low it will not find any matching entries because
7378
+ it could not retrieve them all. If filtering, ensure that you set higher a limit value to that ALL data
7379
+ is considered by the filter.
7380
+
7314
7381
  <details>
7315
7382
  <summary>Sample Code - Manual Paging</summary>
7316
7383
  ```python
@@ -9396,6 +9463,11 @@ class SpotifyClient:
9396
9463
  If both `after` and `before` arguments are null (or zero), then a `before` value
9397
9464
  is generated that will retrieve the last 50 recently played tracks.
9398
9465
 
9466
+ Filter criteria is applied after data (up to the limit) has been retrieved.
9467
+ This is important, in that if you set the limit too low it will not find any matching entries because
9468
+ it could not retrieve them all. If filtering, ensure that you set higher a limit value to that ALL data
9469
+ is considered by the filter.
9470
+
9399
9471
  Returns:
9400
9472
  A `PlayHistoryPage` object that contains the recently played items.
9401
9473
 
@@ -10090,6 +10162,11 @@ class SpotifyClient:
10090
10162
  target="_blank">Spotify Developer Forum Blog</a> page.
10091
10163
  <span>
10092
10164
 
10165
+ Filter criteria is applied after data (up to the limit) has been retrieved.
10166
+ This is important, in that if you set the limit too low it will not find any matching entries because
10167
+ it could not retrieve them all. If filtering, ensure that you set higher a limit value to that ALL data
10168
+ is considered by the filter.
10169
+
10093
10170
  <details>
10094
10171
  <summary>Sample Code - Manual Paging</summary>
10095
10172
  ```python
@@ -10741,6 +10818,11 @@ class SpotifyClient:
10741
10818
  The reasoning for that is unclear, but the `excludeAudiobooks` argument allows you to
10742
10819
  only return podcast shows in the results if desired.
10743
10820
 
10821
+ Filter criteria is applied after data (up to the limit) has been retrieved.
10822
+ This is important, in that if you set the limit too low it will not find any matching entries because
10823
+ it could not retrieve them all. If filtering, ensure that you set higher a limit value to that ALL data
10824
+ is considered by the filter.
10825
+
10744
10826
  <details>
10745
10827
  <summary>Sample Code - Manual Paging</summary>
10746
10828
  ```python
@@ -11731,6 +11813,11 @@ class SpotifyClient:
11731
11813
  SpotifyApiError:
11732
11814
  If the method fails for any other reason.
11733
11815
 
11816
+ Filter criteria is applied after data (up to the limit) has been retrieved.
11817
+ This is important, in that if you set the limit too low it will not find any matching entries because
11818
+ it could not retrieve them all. If filtering, ensure that you set higher a limit value to that ALL data
11819
+ is considered by the filter.
11820
+
11734
11821
  <details>
11735
11822
  <summary>Sample Code - Manual Paging</summary>
11736
11823
  ```python
@@ -12762,6 +12849,7 @@ class SpotifyClient:
12762
12849
  offset:int=0,
12763
12850
  limitTotal:int=None,
12764
12851
  sortResult:bool=True,
12852
+ filterCriteria:str|None=None,
12765
12853
  ) -> ArtistPage:
12766
12854
  """
12767
12855
  Get the current user's top artists based on calculated affinity.
@@ -12793,6 +12881,9 @@ class SpotifyClient:
12793
12881
  True to sort the items by name; otherwise, False to leave the items in the same order they
12794
12882
  were returned in by the Spotify Web API.
12795
12883
  Default: True
12884
+ filterCriteria (str):
12885
+ Filter returned entries by a artist name or uri value.
12886
+ Value can be a full name (e.g. "My Artist Name"), or a partial name (e.g. "My").
12796
12887
 
12797
12888
  Returns:
12798
12889
  An `ArtistPage` object of matching results.
@@ -12804,6 +12895,11 @@ class SpotifyClient:
12804
12895
  SpotifyApiError:
12805
12896
  If the method fails for any other reason.
12806
12897
 
12898
+ Filter criteria is applied after data (up to the limit) has been retrieved.
12899
+ This is important, in that if you set the limit too low it will not find any matching entries because
12900
+ it could not retrieve them all. If filtering, ensure that you set higher a limit value to that ALL data
12901
+ is considered by the filter.
12902
+
12807
12903
  <details>
12808
12904
  <summary>Sample Code - Manual Paging</summary>
12809
12905
  ```python
@@ -12830,6 +12926,7 @@ class SpotifyClient:
12830
12926
  apiMethodParms.AppendKeyValue("offset", offset)
12831
12927
  apiMethodParms.AppendKeyValue("limitTotal", limitTotal)
12832
12928
  apiMethodParms.AppendKeyValue("sortResult", sortResult)
12929
+ apiMethodParms.AppendKeyValue("filterCriteria", filterCriteria)
12833
12930
  _logsi.LogMethodParmList(SILevel.Verbose, "Get the current user's top artists", apiMethodParms)
12834
12931
 
12835
12932
  # validations.
@@ -12906,6 +13003,23 @@ class SpotifyClient:
12906
13003
  if (sortResult is True):
12907
13004
  result.Items.sort(key=lambda x: (x.Name or "").lower(), reverse=False)
12908
13005
 
13006
+ # apply filter criteria (if specified).
13007
+ if (filterCriteria is not None):
13008
+ _logsi.LogVerbose("Applying filter criteria to results list: \"%s\"" % (filterCriteria))
13009
+ filterCriteriaCompare:str = (filterCriteria or "").lower()
13010
+ isFilterUri:bool = SpotifyClient.IsSpotifyUri(filterCriteriaCompare)
13011
+ # process list in reverse order since we are removing items.
13012
+ for idx in reversed(range(len(result.Items))):
13013
+ item:Artist = result.Items[idx]
13014
+ itemFound:bool = False
13015
+ if (isFilterUri):
13016
+ if ((item.Uri or "").lower() == filterCriteriaCompare):
13017
+ itemFound = True
13018
+ elif ((item.Name or "").lower().find(filterCriteriaCompare) > -1):
13019
+ itemFound = True
13020
+ if (not itemFound):
13021
+ result.Items.pop(idx)
13022
+
12909
13023
  # trace.
12910
13024
  _logsi.LogObject(SILevel.Verbose, (TRACE_METHOD_RESULT_TYPE + result.PagingInfo) % (apiMethodName, type(result).__name__), result, excludeNonPublic=True)
12911
13025
  return result
@@ -12931,6 +13045,9 @@ class SpotifyClient:
12931
13045
  offset:int=0,
12932
13046
  limitTotal:int=None,
12933
13047
  sortResult:bool=True,
13048
+ filterArtist:str|None=None,
13049
+ filterAlbum:str|None=None,
13050
+ filterCriteria:str|None=None,
12934
13051
  ) -> TrackPage:
12935
13052
  """
12936
13053
  Get the current user's top tracks based on calculated affinity.
@@ -12962,6 +13079,15 @@ class SpotifyClient:
12962
13079
  True to sort the items by name; otherwise, False to leave the items in the same order they
12963
13080
  were returned in by the Spotify Web API.
12964
13081
  Default: True
13082
+ filterArtist (str):
13083
+ Filter returned entries by an artist name or uri value.
13084
+ Value can be the full name of the artist (e.g. "Jeremy Camp"), or a partial name (e.g. "Camp").
13085
+ filterAlbum (str):
13086
+ Filter returned entries by an album name or uri value.
13087
+ Value can be the full name of the album (e.g. "Carried Me"), or a partial name (e.g. "Carried").
13088
+ filterCriteria (str):
13089
+ Filter returned entries by a track name or uri value.
13090
+ Value can be a full name (e.g. "My Track Name"), or a partial name (e.g. "My").
12965
13091
 
12966
13092
  Returns:
12967
13093
  An `TrackPage` object of matching results.
@@ -12973,6 +13099,11 @@ class SpotifyClient:
12973
13099
  SpotifyApiError:
12974
13100
  If the method fails for any other reason.
12975
13101
 
13102
+ Filter criteria is applied after data (up to the limit) has been retrieved.
13103
+ This is important, in that if you set the limit too low it will not find any matching entries because
13104
+ it could not retrieve them all. If filtering, ensure that you set higher a limit value to that ALL data
13105
+ is considered by the filter.
13106
+
12976
13107
  <details>
12977
13108
  <summary>Sample Code - Manual Paging</summary>
12978
13109
  ```python
@@ -12999,6 +13130,9 @@ class SpotifyClient:
12999
13130
  apiMethodParms.AppendKeyValue("offset", offset)
13000
13131
  apiMethodParms.AppendKeyValue("limitTotal", limitTotal)
13001
13132
  apiMethodParms.AppendKeyValue("sortResult", sortResult)
13133
+ apiMethodParms.AppendKeyValue("filterArtist", filterArtist)
13134
+ apiMethodParms.AppendKeyValue("filterAlbum", filterAlbum)
13135
+ apiMethodParms.AppendKeyValue("filterCriteria", filterCriteria)
13002
13136
  _logsi.LogMethodParmList(SILevel.Verbose, "Get the current user's top tracks", apiMethodParms)
13003
13137
 
13004
13138
  # validations.
@@ -13075,6 +13209,63 @@ class SpotifyClient:
13075
13209
  if (sortResult is True):
13076
13210
  result.Items.sort(key=lambda x: (x.Name or "").lower(), reverse=False)
13077
13211
 
13212
+ # apply artist filter criteria.
13213
+ if (filterArtist is not None):
13214
+ _logsi.LogVerbose("Applying filter criteria to results list: %s=\"%s\"" % ("artist", filterArtist))
13215
+ filterArtistCompare:str = (filterArtist or "").lower()
13216
+ isFilterUri:bool = SpotifyClient.IsSpotifyUri(filterArtistCompare)
13217
+ # process list in reverse order since we are removing items.
13218
+ for idx in reversed(range(len(result.Items))):
13219
+ track:Track = result.Items[idx]
13220
+ artistFound:bool = False
13221
+ artist:ArtistSimplified = None
13222
+ for artist in track.Artists:
13223
+ if (isFilterUri):
13224
+ if ((artist.Uri or "").lower() == filterArtistCompare):
13225
+ artistFound = True
13226
+ break
13227
+ elif ((artist.Name or "").lower().find(filterArtistCompare) > -1):
13228
+ artistFound = True
13229
+ break
13230
+ if (not artistFound):
13231
+ result.Items.pop(idx)
13232
+
13233
+ # apply album filter criteria.
13234
+ if (filterAlbum is not None):
13235
+ _logsi.LogVerbose("Applying filter criteria to results list: %s=\"%s\"" % ("album", filterAlbum))
13236
+ filterAlbumCompare:str = (filterAlbum or "").lower()
13237
+ isFilterUri:bool = SpotifyClient.IsSpotifyUri(filterAlbumCompare)
13238
+ # process list in reverse order since we are removing items.
13239
+ for idx in reversed(range(len(result.Items))):
13240
+ track:Track = result.Items[idx]
13241
+ albumFound:bool = False
13242
+ album:Album = track.Album
13243
+ if (album is not None):
13244
+ if (isFilterUri):
13245
+ if ((album.Uri or "").lower() == filterAlbumCompare):
13246
+ albumFound = True
13247
+ elif ((album.Name or "").lower().find(filterAlbumCompare) > -1):
13248
+ albumFound = True
13249
+ if (not albumFound):
13250
+ result.Items.pop(idx)
13251
+
13252
+ # apply filter criteria (if specified).
13253
+ if (filterCriteria is not None):
13254
+ _logsi.LogVerbose("Applying filter criteria to results list: \"%s\"" % (filterCriteria))
13255
+ filterCriteriaCompare:str = (filterCriteria or "").lower()
13256
+ isFilterUri:bool = SpotifyClient.IsSpotifyUri(filterCriteriaCompare)
13257
+ # process list in reverse order since we are removing items.
13258
+ for idx in reversed(range(len(result.Items))):
13259
+ item:Track = result.Items[idx]
13260
+ itemFound:bool = False
13261
+ if (isFilterUri):
13262
+ if ((item.Uri or "").lower() == filterCriteriaCompare):
13263
+ itemFound = True
13264
+ elif ((item.Name or "").lower().find(filterCriteriaCompare) > -1):
13265
+ itemFound = True
13266
+ if (not itemFound):
13267
+ result.Items.pop(idx)
13268
+
13078
13269
  # trace.
13079
13270
  _logsi.LogObject(SILevel.Verbose, (TRACE_METHOD_RESULT_TYPE + result.PagingInfo) % (apiMethodName, type(result).__name__), result, excludeNonPublic=True)
13080
13271
  return result
@@ -39,6 +39,7 @@ class SpotifyWebApiError(Exception):
39
39
  self._Message:str = message
40
40
  self._MethodName:str = methodName
41
41
  self._Status:int = status
42
+ self._RetryAfter:int = 0
42
43
 
43
44
  # trace.
44
45
  if logsi is not None:
@@ -95,6 +96,29 @@ class SpotifyWebApiError(Exception):
95
96
  return self._Status
96
97
 
97
98
 
99
+ @property
100
+ def RetryAfter(self) -> int:
101
+ """
102
+ The number of seconds to wait before retrying a method call that resulted in
103
+ an HTTP status of 429 (rate-limit exceeded).
104
+
105
+ This value is only valid if the HTTP response headers contained a `retry-after` key.
106
+ This usually only happens when HTTP status code = 429.
107
+
108
+ Example: `21`
109
+ """
110
+ return self._RetryAfter
111
+
112
+ @RetryAfter.setter
113
+ def RetryAfter(self, value:int):
114
+ """
115
+ Sets the RetryAfter property value.
116
+ """
117
+ if isinstance(value, int):
118
+ if (value > 0):
119
+ self._RetryAfter = value
120
+
121
+
98
122
  def ToString(self) -> str:
99
123
  """
100
124
  Returns a UI-friendly string representation of the class.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spotifywebapipython
3
- Version: 1.0.286
3
+ Version: 1.0.288
4
4
  Summary: Spotify Web API Python3 Library
5
5
  Author: Todd Lucas
6
6
  Author-email: <thlucas@yahoo.com>