spotifywebapiPython 1.0.47__py3-none-any.whl → 1.0.49__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.47.dist-info → spotifywebapiPython-1.0.49.dist-info}/METADATA +1 -1
  2. {spotifywebapiPython-1.0.47.dist-info → spotifywebapiPython-1.0.49.dist-info}/RECORD +24 -24
  3. spotifywebapipython/const.py +1 -1
  4. spotifywebapipython/docs/__init__.html +19 -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 +303 -3
  14. spotifywebapipython/docs/spotifywebapiPython/spotifydiscovery.html +15 -72
  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 +497 -8
  19. spotifywebapipython/spotifydiscovery.py +27 -83
  20. spotifywebapipython/zeroconfapi/zeroconfconnect.py +10 -0
  21. spotifywebapipython/zeroconfapi/zeroconfgetinfo.py +21 -3
  22. {spotifywebapiPython-1.0.47.dist-info → spotifywebapiPython-1.0.49.dist-info}/LICENSE +0 -0
  23. {spotifywebapiPython-1.0.47.dist-info → spotifywebapiPython-1.0.49.dist-info}/WHEEL +0 -0
  24. {spotifywebapiPython-1.0.47.dist-info → spotifywebapiPython-1.0.49.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.47" -->
12
+ <!-- build env - Package Version = "1.0.49" -->
13
13
  <!-- pdoc module.modulename = "spotifywebapipython.spotifyclient" -->
14
14
  <!-- pdoc module.is_package = "False" -->
15
15
  <!-- pdoc root_module_name = "None" -->
@@ -225,6 +225,9 @@
225
225
  <li>
226
226
  <a class="function" href="#SpotifyClient.GetPlayerDevice">GetPlayerDevice</a>
227
227
  </li>
228
+ <li>
229
+ <a class="function" href="#SpotifyClient.PlayerActivateDevices">PlayerActivateDevices</a>
230
+ </li>
228
231
  <li>
229
232
  <a class="function" href="#SpotifyClient.PlayerConvertDeviceNameToId">PlayerConvertDeviceNameToId</a>
230
233
  </li>
@@ -303,6 +306,9 @@
303
306
  <li>
304
307
  <a class="function" href="#SpotifyClient.GetUsersTopTracks">GetUsersTopTracks</a>
305
308
  </li>
309
+ <li>
310
+ <a class="function" href="#SpotifyClient.IsDeviceId">IsDeviceId</a>
311
+ </li>
306
312
  <li>
307
313
  <a class="function" href="#SpotifyClient.PlayerMediaPause">PlayerMediaPause</a>
308
314
  </li>
@@ -327,6 +333,9 @@
327
333
  <li>
328
334
  <a class="function" href="#SpotifyClient.PlayerMediaSkipPrevious">PlayerMediaSkipPrevious</a>
329
335
  </li>
336
+ <li>
337
+ <a class="function" href="#SpotifyClient.PlayerResolveDeviceId">PlayerResolveDeviceId</a>
338
+ </li>
330
339
  <li>
331
340
  <a class="function" href="#SpotifyClient.PlayerSetRepeatMode">PlayerSetRepeatMode</a>
332
341
  </li>
@@ -437,7 +446,7 @@
437
446
 
438
447
  <footer class="footertext">
439
448
  spotifywebapiPython</br>
440
- Version 1.0.47</br>
449
+ Version 1.0.49</br>
441
450
  <a href="https://developer.spotify.com/documentation/web-api" target="_blank">
442
451
  <img src="../spotifywebapipython.ico" alt="brand icon" style="width:32px; height:32px; padding:4px;"/>
443
452
  A Spotify Web Api Client
@@ -481,7 +490,7 @@ Spotify music service.</p>
481
490
  <div id="SpotifyClient.__init__" class="classattr">
482
491
  <div class="attr function">
483
492
 
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>
493
+ <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
494
 
486
495
 
487
496
  </div>
@@ -498,8 +507,30 @@ A null value will default to the platform specific storage location: <br />
498
507
  Example for Windows OS = <code>C:\ProgramData\SpotifyWebApiPython</code></li>
499
508
  <li><strong>tokenUpdater (Callable):</strong> A method to call when a token needs to be refreshed by an external provider. <br />
500
509
  The defined method is called with no parameters, and should return a token dictionary. <br />
510
+ Default is null. </li>
511
+ <li>zeroconfClient (Zeroconf)
512
+ A Zeroconf client instance that will be used to discover Spotify Connect devices,
513
+ or null to create a new instance of Zeroconf.
501
514
  Default is null.</li>
515
+ <li><strong>spotifyConnectUsername (str):</strong> Spotify Connect user name used to login to a Spotify Connect device.
516
+ This MUST match the account name (or one of them) that was used to configure Spotify Connect
517
+ on a manufacturer device. </li>
518
+ <li><strong>spotifyConnectPassword (str):</strong> Spotify Connect password used to login to a Spotify Connect device.
519
+ This value is required if a non-null value was specified for the <code>spotifyConnectUsername</code> argument.</li>
520
+ <li><strong>spotifyConnectDiscoveryTimeout (float):</strong> Maximum amount of time to wait (in seconds) for the Spotify Connect discovery to complete. <br />
521
+ Default is 2 seconds.</li>
502
522
  </ul>
523
+
524
+ <p>The <code>spotifyConnectUsername</code> and <code>spotifyConnectPassword</code> arguments are only used when a
525
+ Spotify Connect account switch is performed on a selected player device. Note that these credentials
526
+ are NOT used to access the Spotify Web API (the Spotify Web API token is used for that).
527
+ Please see the <code><a href="#SpotifyClient.PlayerResolveDeviceId">PlayerResolveDeviceId</a></code> method for more details.</p>
528
+
529
+ <p>Note that if you don't have a password setup for your Spotify account (e.g. you utilize the "Continue with Google"
530
+ or other non-password methods for login), then you will need to define a "device password" in order to use the
531
+ ZeroConf Connect service; use the <a href="https://www.spotify.com/uk/account/set-device-password/">Spotify Set Device Password</a>
532
+ page to define a device password. You will then use your Spotify username and the device password as your
533
+ Spotify Connect credentials.</p>
503
534
  </div>
504
535
 
505
536
 
@@ -5681,6 +5712,108 @@ the spotify web api request. This results in better performance.</p>
5681
5712
  </code></pre>
5682
5713
  </div>
5683
5714
 
5715
+ <p></details></p>
5716
+ </div>
5717
+
5718
+
5719
+ </div>
5720
+ <div id="SpotifyClient.PlayerActivateDevices" class="classattr">
5721
+ <div class="attr function">
5722
+
5723
+ <span class="def">def</span>
5724
+ <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>
5725
+
5726
+
5727
+ </div>
5728
+ <a class="headerlink" href="#SpotifyClient.PlayerActivateDevices"></a>
5729
+
5730
+ <div class="docstring"><p>Activates all Spotify Connect player devices, and (optionally) switches the active user
5731
+ context to the current user context.</p>
5732
+
5733
+ <h6 id="arguments">Arguments:</h6>
5734
+
5735
+ <ul>
5736
+ <li><strong>verifyUserContext (bool):</strong> If True, the active user context of the resolved device is checked to ensure it
5737
+ matches the user context specified on the class constructor.
5738
+ If False, the user context will not be checked.
5739
+ Default is False.</li>
5740
+ <li><strong>delay (float):</strong> Time delay (in seconds) to wait AFTER issuing the final Connect command (if necessary).
5741
+ This delay will give the spotify web api time to process the device list change before
5742
+ another command is issued. <br />
5743
+ Default is 0.50; value range is 0 - 10.</li>
5744
+ </ul>
5745
+
5746
+ <h6 id="raises">Raises:</h6>
5747
+
5748
+ <ul>
5749
+ <li><strong>SpotifyWebApiError:</strong> If the Spotify Web API request was for a non-authorization service
5750
+ and the response contains error information.</li>
5751
+ <li><strong>SpotifyZeroconfApiError:</strong> If any Spotify Zeroconf API request failed. <br />
5752
+ If the <code>spotifyConnectUsername</code> aregument was not specified for the class contructor.</li>
5753
+ <li><strong>SpotifApiError:</strong> If the method fails for any other reason.</li>
5754
+ </ul>
5755
+
5756
+ <p>A Zeroconf discovery process is initiated to search for all Spotify Connect devices connected
5757
+ to the local network. A Spotify Zeroconf API <code>getInfo</code> call is then issued for each device
5758
+ that was found to retrieve device information. A Spotify Zeroconf API <code>addUser</code> call is also
5759
+ issued for each device that does not have an active user context established, OR if the currently
5760
+ active user context does not match the <code>SpotifyConnectUsername</code> argument specified on the class constructor.</p>
5761
+
5762
+ <p>The user context switch is bypassed if the <code>verifyUserContext</code> argument is False. If the user context
5763
+ is to be switched, then a Disconnect will be issued if a user context is active on the device followed
5764
+ by a Connect to the user context specified on the class constructor.</p>
5765
+
5766
+ <p><details>
5767
+ <summary>Sample Code</summary></p>
5768
+
5769
+ <div class="pdoc-code codehilite">
5770
+ <pre><span></span><code><span class="kn">from</span> <span class="nn">spotifywebapipython</span> <span class="kn">import</span> <span class="o">*</span>
5771
+ <span class="kn">from</span> <span class="nn">spotifywebapipython.models</span> <span class="kn">import</span> <span class="o">*</span>
5772
+ <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>
5773
+
5774
+ <span class="k">try</span><span class="p">:</span>
5775
+
5776
+ <span class="c1"># this sample requires an authorization token, as it requires security scope to accesses user data.</span>
5777
+
5778
+ <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>
5779
+ <span class="n">SPOTIFY_SCOPES</span><span class="p">:</span><span class="nb">list</span> <span class="o">=</span> \
5780
+ <span class="p">[</span>
5781
+ <span class="s1">&#39;user-read-playback-state&#39;</span><span class="p">,</span>
5782
+ <span class="s1">&#39;user-read-email&#39;</span><span class="p">,</span>
5783
+ <span class="p">]</span>
5784
+
5785
+ <span class="c1"># create new spotify client instance, passing the Spotify Connect user context and discovery timeout.</span>
5786
+ <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>
5787
+ <span class="n">spotifyConnectUsername</span><span class="o">=</span><span class="s2">&quot;yourSpotifyConnectDeviceUsername&quot;</span><span class="p">,</span>
5788
+ <span class="n">spotifyConnectPassword</span><span class="o">=</span><span class="s2">&quot;yourSpotifyConnectDevicePassword&quot;</span><span class="p">,</span>
5789
+ <span class="n">spotifyConnectDiscoveryTimeout</span><span class="o">=</span><span class="mf">1.5</span>
5790
+ <span class="p">)</span>
5791
+
5792
+ <span class="c1"># generate a spotify authorization code with PKCE access token (with scope, private and public data use).</span>
5793
+ <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>
5794
+ <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>
5795
+ <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>
5796
+
5797
+ <span class="c1"># activate all Spotify Connect player devices on the local network</span>
5798
+ <span class="c1"># without switching the device user context.</span>
5799
+ <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>
5800
+ <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>
5801
+ <span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
5802
+
5803
+ <span class="c1"># activate all Spotify Connect player devices on the local network</span>
5804
+ <span class="c1"># and switch the device user context to our user context. this will</span>
5805
+ <span class="c1"># disconnect other users from all spotify connect player devices</span>
5806
+ <span class="c1"># defined to the local network.</span>
5807
+ <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>
5808
+ <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>
5809
+ <span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
5810
+
5811
+ <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">ex</span><span class="p">:</span>
5812
+
5813
+ <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>
5814
+ </code></pre>
5815
+ </div>
5816
+
5684
5817
  <p></details></p>
5685
5818
  </div>
5686
5819
 
@@ -8787,6 +8920,39 @@ and the response contains error information.</li>
8787
8920
  </div>
8788
8921
 
8789
8922
 
8923
+ </div>
8924
+ <div id="SpotifyClient.IsDeviceId" class="classattr">
8925
+ <div class="attr function">
8926
+ <div class="decorator">@staticmethod</div>
8927
+
8928
+ <span class="def">def</span>
8929
+ <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>
8930
+
8931
+
8932
+ </div>
8933
+ <a class="headerlink" href="#SpotifyClient.IsDeviceId"></a>
8934
+
8935
+ <div class="docstring"><p>Get the assumed device value format.</p>
8936
+
8937
+ <h6 id="arguments">Arguments:</h6>
8938
+
8939
+ <ul>
8940
+ <li><strong>value (str):</strong> The id or name of a Spotify Connect device.
8941
+ Example: <code>0d1841b0976bae2a3a310dd74c0f3df354899bc8</code> <br />
8942
+ Example: <code>Web Player (Chrome)</code> </li>
8943
+ </ul>
8944
+
8945
+ <h6 id="returns">Returns:</h6>
8946
+
8947
+ <blockquote>
8948
+ <p>True if the specified value is a device id format;
8949
+ otherwise, False to indicate it is a device name format.</p>
8950
+ </blockquote>
8951
+
8952
+ <p>No exceptions are raised with this method.</p>
8953
+ </div>
8954
+
8955
+
8790
8956
  </div>
8791
8957
  <div id="SpotifyClient.PlayerMediaPause" class="classattr">
8792
8958
  <div class="attr function">
@@ -9663,6 +9829,140 @@ and the response contains error information.</li>
9663
9829
  </code></pre>
9664
9830
  </div>
9665
9831
 
9832
+ <p></details></p>
9833
+ </div>
9834
+
9835
+
9836
+ </div>
9837
+ <div id="SpotifyClient.PlayerResolveDeviceId" class="classattr">
9838
+ <div class="attr function">
9839
+
9840
+ <span class="def">def</span>
9841
+ <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>
9842
+
9843
+
9844
+ </div>
9845
+ <a class="headerlink" href="#SpotifyClient.PlayerResolveDeviceId"></a>
9846
+
9847
+ <div class="docstring"><p>Resolves a Spotify Connect device identifier from a specified device id, name, alias id,
9848
+ or alias name. This will ensure that the device id can be found on the network, as well
9849
+ as connect to the device if necessary with the current user context. </p>
9850
+
9851
+ <h6 id="arguments">Arguments:</h6>
9852
+
9853
+ <ul>
9854
+ <li><strong>deviceValue (str):</strong> The device id / name value to check.</li>
9855
+ <li><strong>verifyUserContext (bool):</strong> If True, the active user context of the resolved device is checked to ensure it
9856
+ matches the user context specified on the class constructor.
9857
+ If False, the user context will not be checked.
9858
+ Default is True.</li>
9859
+ <li><strong>verifyTimeout (float):</strong> Maximum time to wait (in seconds) for the device to become active in the Spotify
9860
+ Connect device list. This value is only used if a Connect command has to be
9861
+ issued to activate the device.
9862
+ Default is 5; value range is 0 - 10.</li>
9863
+ </ul>
9864
+
9865
+ <h6 id="returns">Returns:</h6>
9866
+
9867
+ <blockquote>
9868
+ <p>A device Id for the deviceValue if one could be resolved;
9869
+ otherwise, just the original deviceValue with the understanding that
9870
+ subsequent operations will probably fail since it's not in the device list. </p>
9871
+ </blockquote>
9872
+
9873
+ <h6 id="raises">Raises:</h6>
9874
+
9875
+ <ul>
9876
+ <li><strong>SpotifyWebApiError:</strong> If the Spotify Web API request was for a non-authorization service
9877
+ and the response contains error information.</li>
9878
+ <li><strong>SpotifyZeroconfApiError:</strong> If any Spotify Zeroconf API request failed.</li>
9879
+ <li><strong>SpotifApiError:</strong> If the method fails for any other reason.</li>
9880
+ </ul>
9881
+
9882
+ <p>A Zeroconf discovery process is initiated to search for all Spotify Connect devices connected
9883
+ to the local network. A Spotify Zeroconf API <code>getInfo</code> call is then issued for each device
9884
+ that was found, searching for a match on the <code>deviceValue</code> argument. Depending on the format
9885
+ of the <code>deviceValue</code>, the search will match on either a Device ID or RemoteName as well as any
9886
+ alias ID's or Names that are in use (for multi-room configurations). </p>
9887
+
9888
+ <p>The device ID value is returned if a match is found; otherwise, null is returned.</p>
9889
+
9890
+ <p>A user context switch will also be performed if a device id is resolved AND the active user of the
9891
+ device does not match the <code>SpotifyConnectUsername</code> argument specified on the class constructor.
9892
+ The user context switch is bypassed if the <code>verifyUserContext</code> argument is False, or if the
9893
+ <code>SpotifyConnectUsername</code> was not supplied on the class constructor. If the user context is to be
9894
+ switched, then a Disconnect will be issued if a user context is active on the device followed by
9895
+ a Connect to the user context specified on the class constructor.</p>
9896
+
9897
+ <p><details>
9898
+ <summary>Sample Code</summary></p>
9899
+
9900
+ <div class="pdoc-code codehilite">
9901
+ <pre><span></span><code><span class="kn">from</span> <span class="nn">spotifywebapipython</span> <span class="kn">import</span> <span class="o">*</span>
9902
+ <span class="kn">from</span> <span class="nn">spotifywebapipython.models</span> <span class="kn">import</span> <span class="o">*</span>
9903
+ <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>
9904
+
9905
+ <span class="k">try</span><span class="p">:</span>
9906
+
9907
+ <span class="c1"># this sample requires an authorization token, as it requires security scope to accesses user data.</span>
9908
+
9909
+ <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>
9910
+ <span class="n">SPOTIFY_SCOPES</span><span class="p">:</span><span class="nb">list</span> <span class="o">=</span> \
9911
+ <span class="p">[</span>
9912
+ <span class="s1">&#39;user-read-playback-state&#39;</span><span class="p">,</span>
9913
+ <span class="s1">&#39;user-read-email&#39;</span><span class="p">,</span>
9914
+ <span class="p">]</span>
9915
+
9916
+ <span class="c1"># create new spotify client instance, passing the Spotify Connect user context and discovery timeout.</span>
9917
+ <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>
9918
+ <span class="n">spotifyConnectUsername</span><span class="o">=</span><span class="s2">&quot;yourSpotifyConnectDeviceUsername&quot;</span><span class="p">,</span>
9919
+ <span class="n">spotifyConnectPassword</span><span class="o">=</span><span class="s2">&quot;yourSpotifyConnectDevicePassword&quot;</span><span class="p">,</span>
9920
+ <span class="n">spotifyConnectDiscoveryTimeout</span><span class="o">=</span><span class="mf">1.5</span>
9921
+ <span class="p">)</span>
9922
+
9923
+ <span class="c1"># generate a spotify authorization code with PKCE access token (with scope, private and public data use).</span>
9924
+ <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>
9925
+ <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>
9926
+ <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>
9927
+
9928
+ <span class="c1"># resolve Spotify Connect player device by it&#39;s Id value.</span>
9929
+ <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>
9930
+ <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>
9931
+ <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>
9932
+
9933
+ <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>
9934
+ <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>
9935
+ <span class="k">else</span><span class="p">:</span>
9936
+ <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>
9937
+
9938
+ <span class="c1"># resolve Spotify Connect player device by it&#39;s Name value.</span>
9939
+ <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>
9940
+ <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>
9941
+ <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>
9942
+
9943
+ <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>
9944
+ <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>
9945
+ <span class="k">else</span><span class="p">:</span>
9946
+ <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>
9947
+
9948
+ <span class="c1"># resolve Spotify Connect player device by it&#39;s Name value, using a Disconnected device.</span>
9949
+ <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>
9950
+ <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>
9951
+ <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>
9952
+ <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>
9953
+ <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>
9954
+
9955
+ <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>
9956
+ <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>
9957
+ <span class="k">else</span><span class="p">:</span>
9958
+ <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>
9959
+
9960
+ <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">ex</span><span class="p">:</span>
9961
+
9962
+ <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>
9963
+ </code></pre>
9964
+ </div>
9965
+
9666
9966
  <p></details></p>
9667
9967
  </div>
9668
9968