spotifywebapiPython 1.0.48__py3-none-any.whl → 1.0.50__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 (24) hide show
  1. {spotifywebapiPython-1.0.48.dist-info → spotifywebapiPython-1.0.50.dist-info}/METADATA +1 -1
  2. {spotifywebapiPython-1.0.48.dist-info → spotifywebapiPython-1.0.50.dist-info}/RECORD +24 -24
  3. spotifywebapipython/const.py +1 -1
  4. spotifywebapipython/docs/__init__.html +20 -2
  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 +319 -3
  14. spotifywebapipython/docs/spotifywebapiPython/spotifydiscovery.html +20 -61
  15. spotifywebapipython/docs/spotifywebapiPython/spotifywebapiauthenticationerror.html +2 -2
  16. spotifywebapipython/docs/spotifywebapiPython/spotifywebapierror.html +2 -2
  17. spotifywebapipython/models/userprofile.py +24 -0
  18. spotifywebapipython/spotifyclient.py +505 -8
  19. spotifywebapipython/spotifydiscovery.py +32 -80
  20. spotifywebapipython/zeroconfapi/zeroconfconnect.py +10 -0
  21. spotifywebapipython/zeroconfapi/zeroconfgetinfo.py +21 -3
  22. {spotifywebapiPython-1.0.48.dist-info → spotifywebapiPython-1.0.50.dist-info}/LICENSE +0 -0
  23. {spotifywebapiPython-1.0.48.dist-info → spotifywebapiPython-1.0.50.dist-info}/WHEEL +0 -0
  24. {spotifywebapiPython-1.0.48.dist-info → spotifywebapiPython-1.0.50.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.48" -->
12
+ <!-- build env - Package Version = "1.0.50" -->
13
13
  <!-- pdoc module.modulename = "spotifywebapipython.spotifyclient" -->
14
14
  <!-- pdoc module.is_package = "False" -->
15
15
  <!-- pdoc root_module_name = "None" -->
@@ -78,6 +78,9 @@
78
78
  <li>
79
79
  <a class="variable" href="#SpotifyClient.UserProfile">UserProfile</a>
80
80
  </li>
81
+ <li>
82
+ <a class="variable" href="#SpotifyClient.ZeroconfClient">ZeroconfClient</a>
83
+ </li>
81
84
  <li>
82
85
  <a class="function" href="#SpotifyClient.MakeRequest">MakeRequest</a>
83
86
  </li>
@@ -225,6 +228,9 @@
225
228
  <li>
226
229
  <a class="function" href="#SpotifyClient.GetPlayerDevice">GetPlayerDevice</a>
227
230
  </li>
231
+ <li>
232
+ <a class="function" href="#SpotifyClient.PlayerActivateDevices">PlayerActivateDevices</a>
233
+ </li>
228
234
  <li>
229
235
  <a class="function" href="#SpotifyClient.PlayerConvertDeviceNameToId">PlayerConvertDeviceNameToId</a>
230
236
  </li>
@@ -303,6 +309,9 @@
303
309
  <li>
304
310
  <a class="function" href="#SpotifyClient.GetUsersTopTracks">GetUsersTopTracks</a>
305
311
  </li>
312
+ <li>
313
+ <a class="function" href="#SpotifyClient.IsDeviceId">IsDeviceId</a>
314
+ </li>
306
315
  <li>
307
316
  <a class="function" href="#SpotifyClient.PlayerMediaPause">PlayerMediaPause</a>
308
317
  </li>
@@ -327,6 +336,9 @@
327
336
  <li>
328
337
  <a class="function" href="#SpotifyClient.PlayerMediaSkipPrevious">PlayerMediaSkipPrevious</a>
329
338
  </li>
339
+ <li>
340
+ <a class="function" href="#SpotifyClient.PlayerResolveDeviceId">PlayerResolveDeviceId</a>
341
+ </li>
330
342
  <li>
331
343
  <a class="function" href="#SpotifyClient.PlayerSetRepeatMode">PlayerSetRepeatMode</a>
332
344
  </li>
@@ -437,7 +449,7 @@
437
449
 
438
450
  <footer class="footertext">
439
451
  spotifywebapiPython</br>
440
- Version 1.0.48</br>
452
+ Version 1.0.50</br>
441
453
  <a href="https://developer.spotify.com/documentation/web-api" target="_blank">
442
454
  <img src="../spotifywebapipython.ico" alt="brand icon" style="width:32px; height:32px; padding:4px;"/>
443
455
  A Spotify Web Api Client
@@ -481,7 +493,7 @@ Spotify music service.</p>
481
493
  <div id="SpotifyClient.__init__" class="classattr">
482
494
  <div class="attr function">
483
495
 
484
- <span class="name">SpotifyClient</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">manager</span><span class="p">:</span> <span class="n">urllib3</span><span class="o">.</span><span class="n">poolmanager</span><span class="o">.</span><span class="n">PoolManager</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">tokenStorageDir</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">tokenUpdater</span><span class="p">:</span> <span class="n">Callable</span> <span class="o">=</span> <span class="kc">None</span></span>)</span>
496
+ <span class="name">SpotifyClient</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="n">manager</span><span class="p">:</span> <span class="n">urllib3</span><span class="o">.</span><span class="n">poolmanager</span><span class="o">.</span><span class="n">PoolManager</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">tokenStorageDir</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">tokenUpdater</span><span class="p">:</span> <span class="n">Callable</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">zeroconfClient</span><span class="p">:</span> <span class="n">zeroconf</span><span class="o">.</span><span class="n">_core</span><span class="o">.</span><span class="n">Zeroconf</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">spotifyConnectUsername</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">spotifyConnectPassword</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="kc">None</span>,</span><span class="param"> <span class="n">spotifyConnectDiscoveryTimeout</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">2.0</span></span>)</span>
485
497
 
486
498
 
487
499
  </div>
@@ -498,8 +510,30 @@ A null value will default to the platform specific storage location: <br />
498
510
  Example for Windows OS = <code>C:\ProgramData\SpotifyWebApiPython</code></li>
499
511
  <li><strong>tokenUpdater (Callable):</strong> A method to call when a token needs to be refreshed by an external provider. <br />
500
512
  The defined method is called with no parameters, and should return a token dictionary. <br />
513
+ Default is null. </li>
514
+ <li>zeroconfClient (Zeroconf)
515
+ A Zeroconf client instance that will be used to discover Spotify Connect devices,
516
+ or null to create a new instance of Zeroconf.
501
517
  Default is null.</li>
518
+ <li><strong>spotifyConnectUsername (str):</strong> Spotify Connect user name used to login to a Spotify Connect device.
519
+ This MUST match the account name (or one of them) that was used to configure Spotify Connect
520
+ on a manufacturer device. </li>
521
+ <li><strong>spotifyConnectPassword (str):</strong> Spotify Connect password used to login to a Spotify Connect device.
522
+ This value is required if a non-null value was specified for the <code>spotifyConnectUsername</code> argument.</li>
523
+ <li><strong>spotifyConnectDiscoveryTimeout (float):</strong> Maximum amount of time to wait (in seconds) for the Spotify Connect discovery to complete. <br />
524
+ Default is 2 seconds.</li>
502
525
  </ul>
526
+
527
+ <p>The <code>spotifyConnectUsername</code> and <code>spotifyConnectPassword</code> arguments are only used when a
528
+ Spotify Connect account switch is performed on a selected player device. Note that these credentials
529
+ are NOT used to access the Spotify Web API (the Spotify Web API token is used for that).
530
+ Please see the <code><a href="#SpotifyClient.PlayerResolveDeviceId">PlayerResolveDeviceId</a></code> method for more details.</p>
531
+
532
+ <p>Note that if you don't have a password setup for your Spotify account (e.g. you utilize the "Continue with Google"
533
+ or other non-password methods for login), then you will need to define a "device password" in order to use the
534
+ ZeroConf Connect service; use the <a href="https://www.spotify.com/uk/account/set-device-password/">Spotify Set Device Password</a>
535
+ page to define a device password. You will then use your Spotify username and the device password as your
536
+ Spotify Connect credentials.</p>
503
537
  </div>
504
538
 
505
539
 
@@ -684,6 +718,19 @@ properties that require specific scope.</p>
684
718
  </div>
685
719
 
686
720
 
721
+ </div>
722
+ <div id="SpotifyClient.ZeroconfClient" class="classattr">
723
+ <div class="attr variable">
724
+ <span class="name">ZeroconfClient</span><span class="annotation">: zeroconf._core.Zeroconf</span>
725
+
726
+
727
+ </div>
728
+ <a class="headerlink" href="#SpotifyClient.ZeroconfClient"></a>
729
+
730
+ <div class="docstring"><p>Zeroconf client instance that will be used to discover Spotify Connect devices.</p>
731
+ </div>
732
+
733
+
687
734
  </div>
688
735
  <div id="SpotifyClient.MakeRequest" class="classattr">
689
736
  <div class="attr function">
@@ -5681,6 +5728,108 @@ the spotify web api request. This results in better performance.</p>
5681
5728
  </code></pre>
5682
5729
  </div>
5683
5730
 
5731
+ <p></details></p>
5732
+ </div>
5733
+
5734
+
5735
+ </div>
5736
+ <div id="SpotifyClient.PlayerActivateDevices" class="classattr">
5737
+ <div class="attr function">
5738
+
5739
+ <span class="def">def</span>
5740
+ <span class="name">PlayerActivateDevices</span><span class="signature pdoc-code condensed">(<span class="param"><span class="bp">self</span>, </span><span class="param"><span class="n">verifyUserContext</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>, </span><span class="param"><span class="n">delay</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">0.5</span></span><span class="return-annotation">) -> <span class="kc">None</span>:</span></span>
5741
+
5742
+
5743
+ </div>
5744
+ <a class="headerlink" href="#SpotifyClient.PlayerActivateDevices"></a>
5745
+
5746
+ <div class="docstring"><p>Activates all Spotify Connect player devices, and (optionally) switches the active user
5747
+ context to the current user context.</p>
5748
+
5749
+ <h6 id="arguments">Arguments:</h6>
5750
+
5751
+ <ul>
5752
+ <li><strong>verifyUserContext (bool):</strong> If True, the active user context of the resolved device is checked to ensure it
5753
+ matches the user context specified on the class constructor.
5754
+ If False, the user context will not be checked.
5755
+ Default is False.</li>
5756
+ <li><strong>delay (float):</strong> Time delay (in seconds) to wait AFTER issuing the final Connect command (if necessary).
5757
+ This delay will give the spotify web api time to process the device list change before
5758
+ another command is issued. <br />
5759
+ Default is 0.50; value range is 0 - 10.</li>
5760
+ </ul>
5761
+
5762
+ <h6 id="raises">Raises:</h6>
5763
+
5764
+ <ul>
5765
+ <li><strong>SpotifyWebApiError:</strong> If the Spotify Web API request was for a non-authorization service
5766
+ and the response contains error information.</li>
5767
+ <li><strong>SpotifyZeroconfApiError:</strong> If any Spotify Zeroconf API request failed. <br />
5768
+ If the <code>spotifyConnectUsername</code> aregument was not specified for the class contructor.</li>
5769
+ <li><strong>SpotifApiError:</strong> If the method fails for any other reason.</li>
5770
+ </ul>
5771
+
5772
+ <p>A Zeroconf discovery process is initiated to search for all Spotify Connect devices connected
5773
+ to the local network. A Spotify Zeroconf API <code>getInfo</code> call is then issued for each device
5774
+ that was found to retrieve device information. A Spotify Zeroconf API <code>addUser</code> call is also
5775
+ issued for each device that does not have an active user context established, OR if the currently
5776
+ active user context does not match the <code>SpotifyConnectUsername</code> argument specified on the class constructor.</p>
5777
+
5778
+ <p>The user context switch is bypassed if the <code>verifyUserContext</code> argument is False. If the user context
5779
+ is to be switched, then a Disconnect will be issued if a user context is active on the device followed
5780
+ by a Connect to the user context specified on the class constructor.</p>
5781
+
5782
+ <p><details>
5783
+ <summary>Sample Code</summary></p>
5784
+
5785
+ <div class="pdoc-code codehilite">
5786
+ <pre><span></span><code><span class="kn">from</span> <span class="nn">spotifywebapipython</span> <span class="kn">import</span> <span class="o">*</span>
5787
+ <span class="kn">from</span> <span class="nn">spotifywebapipython.models</span> <span class="kn">import</span> <span class="o">*</span>
5788
+ <span class="kn">from</span> <span class="nn">spotifywebapipython.zeroconfapi</span> <span class="kn">import</span> <span class="n">ZeroconfConnect</span><span class="p">,</span> <span class="n">ZeroconfResponse</span>
5789
+
5790
+ <span class="k">try</span><span class="p">:</span>
5791
+
5792
+ <span class="c1"># this sample requires an authorization token, as it requires security scope to accesses user data.</span>
5793
+
5794
+ <span class="n">CLIENT_ID</span><span class="p">:</span><span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;your_client_id&#39;</span>
5795
+ <span class="n">SPOTIFY_SCOPES</span><span class="p">:</span><span class="nb">list</span> <span class="o">=</span> \
5796
+ <span class="p">[</span>
5797
+ <span class="s1">&#39;user-read-playback-state&#39;</span><span class="p">,</span>
5798
+ <span class="s1">&#39;user-read-email&#39;</span><span class="p">,</span>
5799
+ <span class="p">]</span>
5800
+
5801
+ <span class="c1"># create new spotify client instance, passing the Spotify Connect user context and discovery timeout.</span>
5802
+ <span class="n">spotify</span><span class="p">:</span><span class="n">SpotifyClient</span> <span class="o">=</span> <span class="n">SpotifyClient</span><span class="p">(</span>
5803
+ <span class="n">spotifyConnectUsername</span><span class="o">=</span><span class="s2">&quot;yourSpotifyConnectDeviceUsername&quot;</span><span class="p">,</span>
5804
+ <span class="n">spotifyConnectPassword</span><span class="o">=</span><span class="s2">&quot;yourSpotifyConnectDevicePassword&quot;</span><span class="p">,</span>
5805
+ <span class="n">spotifyConnectDiscoveryTimeout</span><span class="o">=</span><span class="mf">1.5</span>
5806
+ <span class="p">)</span>
5807
+
5808
+ <span class="c1"># generate a spotify authorization code with PKCE access token (with scope, private and public data use).</span>
5809
+ <span class="n">spotify</span><span class="o">.</span><span class="n">SetAuthTokenAuthorizationCodePKCE</span><span class="p">(</span><span class="n">CLIENT_ID</span><span class="p">,</span> <span class="n">SPOTIFY_SCOPES</span><span class="p">)</span>
5810
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Auth Token:</span><span class="se">\n</span><span class="s1"> Type=&quot;</span><span class="si">%s</span><span class="s1">&quot;</span><span class="se">\n</span><span class="s1"> Scope=&quot;</span><span class="si">%s</span><span class="s1">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">spotify</span><span class="o">.</span><span class="n">AuthToken</span><span class="o">.</span><span class="n">AuthorizationType</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">spotify</span><span class="o">.</span><span class="n">AuthToken</span><span class="o">.</span><span class="n">Scope</span><span class="p">)))</span>
5811
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">User:</span><span class="se">\n</span><span class="s1"> DisplayName=&quot;</span><span class="si">%s</span><span class="s1">&quot;</span><span class="se">\n</span><span class="s1"> EMail=&quot;</span><span class="si">%s</span><span class="s1">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">spotify</span><span class="o">.</span><span class="n">UserProfile</span><span class="o">.</span><span class="n">DisplayName</span><span class="p">,</span> <span class="n">spotify</span><span class="o">.</span><span class="n">UserProfile</span><span class="o">.</span><span class="n">EMail</span><span class="p">))</span>
5812
+
5813
+ <span class="c1"># activate all Spotify Connect player devices on the local network</span>
5814
+ <span class="c1"># without switching the device user context.</span>
5815
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Activating Spotify Connect player devices&#39;</span><span class="p">)</span>
5816
+ <span class="n">result</span><span class="p">:</span><span class="nb">str</span> <span class="o">=</span> <span class="n">spotify</span><span class="o">.</span><span class="n">PlayerActivateDevices</span><span class="p">(</span><span class="n">verifyUserContext</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
5817
+ <span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
5818
+
5819
+ <span class="c1"># activate all Spotify Connect player devices on the local network</span>
5820
+ <span class="c1"># and switch the device user context to our user context. this will</span>
5821
+ <span class="c1"># disconnect other users from all spotify connect player devices</span>
5822
+ <span class="c1"># defined to the local network.</span>
5823
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Activating Spotify Connect player devices for our user context&#39;</span><span class="p">)</span>
5824
+ <span class="n">result</span><span class="p">:</span><span class="nb">str</span> <span class="o">=</span> <span class="n">spotify</span><span class="o">.</span><span class="n">PlayerActivateDevices</span><span class="p">(</span><span class="n">verifyUserContext</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
5825
+ <span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
5826
+
5827
+ <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">ex</span><span class="p">:</span>
5828
+
5829
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;** Exception: </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">ex</span><span class="p">))</span>
5830
+ </code></pre>
5831
+ </div>
5832
+
5684
5833
  <p></details></p>
5685
5834
  </div>
5686
5835
 
@@ -8787,6 +8936,39 @@ and the response contains error information.</li>
8787
8936
  </div>
8788
8937
 
8789
8938
 
8939
+ </div>
8940
+ <div id="SpotifyClient.IsDeviceId" class="classattr">
8941
+ <div class="attr function">
8942
+ <div class="decorator">@staticmethod</div>
8943
+
8944
+ <span class="def">def</span>
8945
+ <span class="name">IsDeviceId</span><span class="signature pdoc-code condensed">(<span class="param"><span class="n">value</span><span class="p">:</span> <span class="nb">str</span></span><span class="return-annotation">) -> <span class="nb">bool</span>:</span></span>
8946
+
8947
+
8948
+ </div>
8949
+ <a class="headerlink" href="#SpotifyClient.IsDeviceId"></a>
8950
+
8951
+ <div class="docstring"><p>Get the assumed device value format.</p>
8952
+
8953
+ <h6 id="arguments">Arguments:</h6>
8954
+
8955
+ <ul>
8956
+ <li><strong>value (str):</strong> The id or name of a Spotify Connect device.
8957
+ Example: <code>0d1841b0976bae2a3a310dd74c0f3df354899bc8</code> <br />
8958
+ Example: <code>Web Player (Chrome)</code> </li>
8959
+ </ul>
8960
+
8961
+ <h6 id="returns">Returns:</h6>
8962
+
8963
+ <blockquote>
8964
+ <p>True if the specified value is a device id format;
8965
+ otherwise, False to indicate it is a device name format.</p>
8966
+ </blockquote>
8967
+
8968
+ <p>No exceptions are raised with this method.</p>
8969
+ </div>
8970
+
8971
+
8790
8972
  </div>
8791
8973
  <div id="SpotifyClient.PlayerMediaPause" class="classattr">
8792
8974
  <div class="attr function">
@@ -9663,6 +9845,140 @@ and the response contains error information.</li>
9663
9845
  </code></pre>
9664
9846
  </div>
9665
9847
 
9848
+ <p></details></p>
9849
+ </div>
9850
+
9851
+
9852
+ </div>
9853
+ <div id="SpotifyClient.PlayerResolveDeviceId" class="classattr">
9854
+ <div class="attr function">
9855
+
9856
+ <span class="def">def</span>
9857
+ <span class="name">PlayerResolveDeviceId</span><span class="signature pdoc-code multiline">(<span class="param"> <span class="bp">self</span>,</span><span class="param"> <span class="n">deviceValue</span><span class="p">:</span> <span class="nb">str</span>,</span><span class="param"> <span class="n">verifyUserContext</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">True</span>,</span><span class="param"> <span class="n">verifyTimeout</span><span class="p">:</span> <span class="nb">float</span> <span class="o">=</span> <span class="mf">5.0</span></span><span class="return-annotation">) -> <span class="nb">str</span>:</span></span>
9858
+
9859
+
9860
+ </div>
9861
+ <a class="headerlink" href="#SpotifyClient.PlayerResolveDeviceId"></a>
9862
+
9863
+ <div class="docstring"><p>Resolves a Spotify Connect device identifier from a specified device id, name, alias id,
9864
+ or alias name. This will ensure that the device id can be found on the network, as well
9865
+ as connect to the device if necessary with the current user context. </p>
9866
+
9867
+ <h6 id="arguments">Arguments:</h6>
9868
+
9869
+ <ul>
9870
+ <li><strong>deviceValue (str):</strong> The device id / name value to check.</li>
9871
+ <li><strong>verifyUserContext (bool):</strong> If True, the active user context of the resolved device is checked to ensure it
9872
+ matches the user context specified on the class constructor.
9873
+ If False, the user context will not be checked.
9874
+ Default is True.</li>
9875
+ <li><strong>verifyTimeout (float):</strong> Maximum time to wait (in seconds) for the device to become active in the Spotify
9876
+ Connect device list. This value is only used if a Connect command has to be
9877
+ issued to activate the device.
9878
+ Default is 5; value range is 0 - 10.</li>
9879
+ </ul>
9880
+
9881
+ <h6 id="returns">Returns:</h6>
9882
+
9883
+ <blockquote>
9884
+ <p>A device Id for the deviceValue if one could be resolved;
9885
+ otherwise, just the original deviceValue with the understanding that
9886
+ subsequent operations will probably fail since it's not in the device list. </p>
9887
+ </blockquote>
9888
+
9889
+ <h6 id="raises">Raises:</h6>
9890
+
9891
+ <ul>
9892
+ <li><strong>SpotifyWebApiError:</strong> If the Spotify Web API request was for a non-authorization service
9893
+ and the response contains error information.</li>
9894
+ <li><strong>SpotifyZeroconfApiError:</strong> If any Spotify Zeroconf API request failed.</li>
9895
+ <li><strong>SpotifApiError:</strong> If the method fails for any other reason.</li>
9896
+ </ul>
9897
+
9898
+ <p>A Zeroconf discovery process is initiated to search for all Spotify Connect devices connected
9899
+ to the local network. A Spotify Zeroconf API <code>getInfo</code> call is then issued for each device
9900
+ that was found, searching for a match on the <code>deviceValue</code> argument. Depending on the format
9901
+ of the <code>deviceValue</code>, the search will match on either a Device ID or RemoteName as well as any
9902
+ alias ID's or Names that are in use (for multi-room configurations). </p>
9903
+
9904
+ <p>The device ID value is returned if a match is found; otherwise, null is returned.</p>
9905
+
9906
+ <p>A user context switch will also be performed if a device id is resolved AND the active user of the
9907
+ device does not match the <code>SpotifyConnectUsername</code> argument specified on the class constructor.
9908
+ The user context switch is bypassed if the <code>verifyUserContext</code> argument is False, or if the
9909
+ <code>SpotifyConnectUsername</code> was not supplied on the class constructor. If the user context is to be
9910
+ switched, then a Disconnect will be issued if a user context is active on the device followed by
9911
+ a Connect to the user context specified on the class constructor.</p>
9912
+
9913
+ <p><details>
9914
+ <summary>Sample Code</summary></p>
9915
+
9916
+ <div class="pdoc-code codehilite">
9917
+ <pre><span></span><code><span class="kn">from</span> <span class="nn">spotifywebapipython</span> <span class="kn">import</span> <span class="o">*</span>
9918
+ <span class="kn">from</span> <span class="nn">spotifywebapipython.models</span> <span class="kn">import</span> <span class="o">*</span>
9919
+ <span class="kn">from</span> <span class="nn">spotifywebapipython.zeroconfapi</span> <span class="kn">import</span> <span class="n">ZeroconfConnect</span><span class="p">,</span> <span class="n">ZeroconfResponse</span>
9920
+
9921
+ <span class="k">try</span><span class="p">:</span>
9922
+
9923
+ <span class="c1"># this sample requires an authorization token, as it requires security scope to accesses user data.</span>
9924
+
9925
+ <span class="n">CLIENT_ID</span><span class="p">:</span><span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;your_client_id&#39;</span>
9926
+ <span class="n">SPOTIFY_SCOPES</span><span class="p">:</span><span class="nb">list</span> <span class="o">=</span> \
9927
+ <span class="p">[</span>
9928
+ <span class="s1">&#39;user-read-playback-state&#39;</span><span class="p">,</span>
9929
+ <span class="s1">&#39;user-read-email&#39;</span><span class="p">,</span>
9930
+ <span class="p">]</span>
9931
+
9932
+ <span class="c1"># create new spotify client instance, passing the Spotify Connect user context and discovery timeout.</span>
9933
+ <span class="n">spotify</span><span class="p">:</span><span class="n">SpotifyClient</span> <span class="o">=</span> <span class="n">SpotifyClient</span><span class="p">(</span>
9934
+ <span class="n">spotifyConnectUsername</span><span class="o">=</span><span class="s2">&quot;yourSpotifyConnectDeviceUsername&quot;</span><span class="p">,</span>
9935
+ <span class="n">spotifyConnectPassword</span><span class="o">=</span><span class="s2">&quot;yourSpotifyConnectDevicePassword&quot;</span><span class="p">,</span>
9936
+ <span class="n">spotifyConnectDiscoveryTimeout</span><span class="o">=</span><span class="mf">1.5</span>
9937
+ <span class="p">)</span>
9938
+
9939
+ <span class="c1"># generate a spotify authorization code with PKCE access token (with scope, private and public data use).</span>
9940
+ <span class="n">spotify</span><span class="o">.</span><span class="n">SetAuthTokenAuthorizationCodePKCE</span><span class="p">(</span><span class="n">CLIENT_ID</span><span class="p">,</span> <span class="n">SPOTIFY_SCOPES</span><span class="p">)</span>
9941
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Auth Token:</span><span class="se">\n</span><span class="s1"> Type=&quot;</span><span class="si">%s</span><span class="s1">&quot;</span><span class="se">\n</span><span class="s1"> Scope=&quot;</span><span class="si">%s</span><span class="s1">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">spotify</span><span class="o">.</span><span class="n">AuthToken</span><span class="o">.</span><span class="n">AuthorizationType</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">spotify</span><span class="o">.</span><span class="n">AuthToken</span><span class="o">.</span><span class="n">Scope</span><span class="p">)))</span>
9942
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">User:</span><span class="se">\n</span><span class="s1"> DisplayName=&quot;</span><span class="si">%s</span><span class="s1">&quot;</span><span class="se">\n</span><span class="s1"> EMail=&quot;</span><span class="si">%s</span><span class="s1">&quot;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">spotify</span><span class="o">.</span><span class="n">UserProfile</span><span class="o">.</span><span class="n">DisplayName</span><span class="p">,</span> <span class="n">spotify</span><span class="o">.</span><span class="n">UserProfile</span><span class="o">.</span><span class="n">EMail</span><span class="p">))</span>
9943
+
9944
+ <span class="c1"># resolve Spotify Connect player device by it&#39;s Id value.</span>
9945
+ <span class="n">deviceId</span><span class="p">:</span><span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;30fbc80e35598f3c242f2120413c943dfd9715fe&#39;</span>
9946
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Resolving Spotify Connect player device: </span><span class="se">\n</span><span class="s1">- ID = &quot;</span><span class="si">%s</span><span class="s1">&quot; ...&#39;</span> <span class="o">%</span> <span class="n">deviceId</span><span class="p">)</span>
9947
+ <span class="n">deviceResult</span><span class="p">:</span><span class="nb">str</span> <span class="o">=</span> <span class="n">spotify</span><span class="o">.</span><span class="n">PlayerResolveDeviceId</span><span class="p">(</span><span class="n">deviceId</span><span class="p">)</span>
9948
+
9949
+ <span class="k">if</span> <span class="n">deviceResult</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
9950
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;result &quot;</span><span class="si">%s</span><span class="s1">&quot;&#39;</span> <span class="o">%</span> <span class="n">deviceResult</span><span class="p">)</span>
9951
+ <span class="k">else</span><span class="p">:</span>
9952
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Device Id could not be resolved!&quot;</span><span class="p">)</span>
9953
+
9954
+ <span class="c1"># resolve Spotify Connect player device by it&#39;s Name value.</span>
9955
+ <span class="n">deviceName</span><span class="p">:</span><span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;Bose-ST10-2&#39;</span>
9956
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Resolving Spotify Connect player device: </span><span class="se">\n</span><span class="s1">- Name = &quot;</span><span class="si">%s</span><span class="s1">&quot; ...&#39;</span> <span class="o">%</span> <span class="n">deviceName</span><span class="p">)</span>
9957
+ <span class="n">deviceResult</span><span class="p">:</span><span class="nb">str</span> <span class="o">=</span> <span class="n">spotify</span><span class="o">.</span><span class="n">PlayerResolveDeviceId</span><span class="p">(</span><span class="n">deviceName</span><span class="p">)</span>
9958
+
9959
+ <span class="k">if</span> <span class="n">deviceResult</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
9960
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39; result &quot;</span><span class="si">%s</span><span class="s1">&quot;&#39;</span> <span class="o">%</span> <span class="n">deviceResult</span><span class="p">)</span>
9961
+ <span class="k">else</span><span class="p">:</span>
9962
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Device Name was not found in the list of devices&quot;</span><span class="p">)</span>
9963
+
9964
+ <span class="c1"># resolve Spotify Connect player device by it&#39;s Name value, using a Disconnected device.</span>
9965
+ <span class="n">zconn</span><span class="p">:</span><span class="n">ZeroconfConnect</span> <span class="o">=</span> <span class="n">ZeroconfConnect</span><span class="p">(</span><span class="s1">&#39;192.168.1.82&#39;</span><span class="p">,</span> <span class="mi">8200</span><span class="p">,</span> <span class="s1">&#39;/zc&#39;</span><span class="p">,</span> <span class="n">useSSL</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
9966
+ <span class="n">result</span><span class="p">:</span><span class="n">ZeroconfResponse</span> <span class="o">=</span> <span class="n">zconn</span><span class="o">.</span><span class="n">Disconnect</span><span class="p">()</span>
9967
+ <span class="n">deviceName</span><span class="p">:</span><span class="nb">str</span> <span class="o">=</span> <span class="s1">&#39;Bose-ST10-2&#39;</span>
9968
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Resolving Spotify Connect player device: </span><span class="se">\n</span><span class="s1">- Name = &quot;</span><span class="si">%s</span><span class="s1">&quot; ...&#39;</span> <span class="o">%</span> <span class="n">deviceName</span><span class="p">)</span>
9969
+ <span class="n">deviceResult</span><span class="p">:</span><span class="nb">str</span> <span class="o">=</span> <span class="n">spotify</span><span class="o">.</span><span class="n">PlayerResolveDeviceId</span><span class="p">(</span><span class="n">deviceName</span><span class="p">)</span>
9970
+
9971
+ <span class="k">if</span> <span class="n">deviceResult</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
9972
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39; result &quot;</span><span class="si">%s</span><span class="s1">&quot;&#39;</span> <span class="o">%</span> <span class="n">deviceResult</span><span class="p">)</span>
9973
+ <span class="k">else</span><span class="p">:</span>
9974
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Device Name was not found in the list of devices&quot;</span><span class="p">)</span>
9975
+
9976
+ <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">ex</span><span class="p">:</span>
9977
+
9978
+ <span class="nb">print</span><span class="p">(</span><span class="s2">&quot;** Exception: </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">ex</span><span class="p">))</span>
9979
+ </code></pre>
9980
+ </div>
9981
+
9666
9982
  <p></details></p>
9667
9983
  </div>
9668
9984