spotifywebapiPython 1.0.294__py3-none-any.whl → 1.0.295__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 +8 -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 +2 -2
  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 +2 -2
  17. spotifywebapipython/docs/spotifywebapipython/spotifywebplayertoken.html +2 -2
  18. spotifywebapipython/spotifyclient.py +1 -1
  19. spotifywebapipython/spotifyconnect/spotifyconnectdirectorytask.py +116 -103
  20. {spotifywebapipython-1.0.294.dist-info → spotifywebapipython-1.0.295.dist-info}/METADATA +1 -1
  21. {spotifywebapipython-1.0.294.dist-info → spotifywebapipython-1.0.295.dist-info}/RECORD +24 -24
  22. {spotifywebapipython-1.0.294.dist-info → spotifywebapipython-1.0.295.dist-info}/LICENSE +0 -0
  23. {spotifywebapipython-1.0.294.dist-info → spotifywebapipython-1.0.295.dist-info}/WHEEL +0 -0
  24. {spotifywebapipython-1.0.294.dist-info → spotifywebapipython-1.0.295.dist-info}/top_level.txt +0 -0
@@ -692,6 +692,7 @@ class SpotifyConnectDirectoryTask(threading.Thread):
692
692
  transferPlayback:bool=False,
693
693
  timeoutActivation:float=15.0,
694
694
  timeoutTransfer:float=10.0,
695
+ activateAppMediaReceiverOnGroupMembers:bool=False,
695
696
  ) -> str:
696
697
  """
697
698
  Activates the Spotify Cast Application on the specified Chromecast device.
@@ -712,18 +713,22 @@ class SpotifyConnectDirectoryTask(threading.Thread):
712
713
 
713
714
  Args:
714
715
  deviceName (str):
715
- Chromecast device friendly name (or device id) to activate.
716
+ Chromecast device friendly name (or device id) to activate.
716
717
  transferPlayback (bool):
717
718
  True to transfer playback to the device; otherwise, False to just activate
718
- the Spotify Cast App on the device.
719
+ the Spotify Cast App on the device.
719
720
  timeoutActivation (float):
720
721
  Amount of time to wait (in seconds) for the Spotify Cast App to be fully activated,
721
722
  the user logged in, and ready for transfer of playback.
722
- Default is 15 seconds.
723
+ Default is 15 seconds.
723
724
  timeoutTransfer (float):
724
725
  If `transferPlayback` argument is True, the amount of time to wait (in seconds)
725
726
  for the transfer to complete; otherwise, argument is ignored.
726
- Default is 10 seconds.
727
+ Default is 10 seconds.
728
+ activateAppMediaReceiverOnGroupMembers (bool):
729
+ True to force start the APP_MEDIA_RECEIVER on each group member cast device prior
730
+ to activating the Spotify Cast App; otherwise, False (default) to not start the
731
+ APP_MEDIA_RECEIVER on any group devices.
727
732
 
728
733
  Returns:
729
734
  The deviceId that was activated.
@@ -739,6 +744,7 @@ class SpotifyConnectDirectoryTask(threading.Thread):
739
744
  apiMethodParms.AppendKeyValue("transferPlayback", transferPlayback)
740
745
  apiMethodParms.AppendKeyValue("timeoutActivation", timeoutActivation)
741
746
  apiMethodParms.AppendKeyValue("timeoutTransfer", timeoutTransfer)
747
+ apiMethodParms.AppendKeyValue("activateAppMediaReceiverOnGroupMembers", activateAppMediaReceiverOnGroupMembers)
742
748
  _logsi.LogMethodParmList(SILevel.Verbose, "Activating Spotify App on Chromecast device: \"%s\"" % (deviceName), apiMethodParms)
743
749
 
744
750
  # validations.
@@ -829,13 +835,13 @@ class SpotifyConnectDirectoryTask(threading.Thread):
829
835
 
830
836
  # for groups, the SpotifyAppTask must be activated on the group leader (e.g. coordinator).
831
837
  # the cast zeroconf info may not contain the group leader host info, as it is constantly
832
- # being updated as devices are added / removed from the group. this can lead to the
833
- # SpotifyAppTask being started on a member of the group that is not the leader, which will
834
- # cause other devices in the group not to play.
835
- #
836
- # to combat this, we will call the `get_multizone_status` function that gives us the
837
- # current group leader host info for each group. we will then create a cast device to
838
- # the group leader host address, and start the SpotifyCastApp on that specific host.
838
+ # being updated as devices are added / removed from the group. the resolution of the group
839
+ # leader should have been handled by the `_VerifyMultizoneGroupLeader` call above.
840
+ #
841
+ # if this the the second attempt at activating the Spotify Cast App, then we will try
842
+ # starting the APP_MEDIA_RECEIVER on each group member device, as well as calling the
843
+ # `get_multizone_status` function again to verify the status of the zone before trying to
844
+ # start the Spotify Cast App.
839
845
 
840
846
  # trace.
841
847
  if (_logsi.IsOn(SILevel.Verbose)):
@@ -845,102 +851,109 @@ class SpotifyConnectDirectoryTask(threading.Thread):
845
851
  groupHost:str = scDevice.DiscoveryResult.HostIpAddress
846
852
  groupPort:int = scDevice.DiscoveryResult.HostIpPort
847
853
 
848
- try:
854
+ # are we starting the APP_MEDIA_RECEIVER on each group member?
855
+ if (activateAppMediaReceiverOnGroupMembers != True):
849
856
 
850
- # request a multizone group member update.
851
- # note that this will just send a request to the cast group device for its
852
- # status, which will then update the members list via event listener callbacks.
853
- castMultizoneController:MultizoneController = self._CastMultiZoneControllers.get(str(castInfo.uuid), None)
854
- if (castMultizoneController) and (castMultizoneController._socket_client):
855
- castMultizoneController.update_members()
856
- time.sleep(2.0) # give controller some time to update member list.
857
-
858
- # activate media receiver app for each member in the group.
859
- # process all device members in the group / zone.
860
- for zone_member_uuid in castMultizoneController.members:
861
-
862
- # get castInfo instance so we can connect to the device.
863
- zone_member_castInfo = self._CastBrowser.devices.get(UUID(zone_member_uuid))
864
- if zone_member_castInfo is not None:
865
-
866
- # get cast device instance.
867
- zone_member_castDevice = get_chromecast_from_cast_info(
868
- cast_info=zone_member_castInfo,
869
- zconf=self._ZeroconfInstance,
870
- tries=2,
871
- retry_wait=0.5,
872
- timeout=5)
873
-
874
- # wait for the cast device to provide an initial status.
875
- zone_member_castDevice.wait(10)
876
-
877
- # formulate title for trace messages.
878
- trc_zone_member_title:str = "\"%s\" [ip=%s:%s]" % (zone_member_castDevice.cast_info.friendly_name, zone_member_castDevice.socket_client.host, zone_member_castDevice.socket_client.port)
879
-
880
- # trace.
881
- _logsi.LogObject(SILevel.Verbose, "%s - Cast group \"%s\" member Chromecast device status: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), zone_member_castDevice.status, colorValue=SIColors.Coral)
882
-
883
- # if current app is APP_SPOTIFY, then stop the app before starting the media receiver.
884
- if (zone_member_castDevice.status) and (zone_member_castDevice.status.app_id == APP_SPOTIFY):
885
- _logsi.LogVerbose("%s - Issuing quit_app (APP_SPOTIFY) for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
886
- zone_member_castDevice.quit_app(timeout=5.0)
887
- elif (zone_member_castDevice.status) and (zone_member_castDevice.status.app_id == APP_SPOTIFY_CONNECT):
888
- _logsi.LogVerbose("%s - Issuing quit_app (APP_SPOTIFY_CONNECT) for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
889
- zone_member_castDevice.quit_app(timeout=5.0)
890
-
891
- # start the media receiver app.
892
- # this will stabilize routing for the group using the Default Media Receiver.
893
- _logsi.LogVerbose("%s - Starting Chromecast default APP_MEDIA_RECEIVER for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
894
- zone_member_castDevice.start_app(APP_MEDIA_RECEIVER, force_launch=True, timeout=10.0)
895
-
896
- # start the connection worker thread, if needed.
897
- # failure to do this will result in the following exception being thrown when
898
- # the `launch_app()` method is called:
899
- # - `pychromecast.error.NotConnected: Chromecast unknown:8009 is connecting...`
900
- if (zone_member_castDevice.is_idle):
901
- if (zone_member_castDevice.socket_client is not None) and (zone_member_castDevice.socket_client.first_connection):
902
- _logsi.LogVerbose("%s - Starting Chromecast default APP_MEDIA_RECEIVER connection worker thread for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
903
- zone_member_castDevice.start()
904
- zone_member_castDevice.wait(timeout=5.0)
905
-
906
- # media receiver app needs time to start.
907
- time.sleep(2.0)
857
+ _logsi.LogVerbose("Bypassing start of APP_MEDIA_RECEIVER for group: %s" % (scDevice.Title), colorValue=SIColors.Coral)
908
858
 
909
- except Exception as ex:
859
+ else:
860
+
861
+ try:
862
+
863
+ # request a multizone group member update.
864
+ # note that this will just send a request to the cast group device for its
865
+ # status, which will then update the members list via event listener callbacks.
866
+ castMultizoneController:MultizoneController = self._CastMultiZoneControllers.get(str(castInfo.uuid), None)
867
+ if (castMultizoneController) and (castMultizoneController._socket_client):
868
+ castMultizoneController.update_members()
869
+ time.sleep(2.0) # give controller some time to update member list.
870
+
871
+ # activate media receiver app for each member in the group.
872
+ # process all device members in the group / zone.
873
+ for zone_member_uuid in castMultizoneController.members:
874
+
875
+ # get castInfo instance so we can connect to the device.
876
+ zone_member_castInfo = self._CastBrowser.devices.get(UUID(zone_member_uuid))
877
+ if zone_member_castInfo is not None:
878
+
879
+ # get cast device instance.
880
+ zone_member_castDevice = get_chromecast_from_cast_info(
881
+ cast_info=zone_member_castInfo,
882
+ zconf=self._ZeroconfInstance,
883
+ tries=2,
884
+ retry_wait=0.5,
885
+ timeout=5)
886
+
887
+ # wait for the cast device to provide an initial status.
888
+ zone_member_castDevice.wait(10)
889
+
890
+ # formulate title for trace messages.
891
+ trc_zone_member_title:str = "\"%s\" [ip=%s:%s]" % (zone_member_castDevice.cast_info.friendly_name, zone_member_castDevice.socket_client.host, zone_member_castDevice.socket_client.port)
892
+
893
+ # trace.
894
+ _logsi.LogObject(SILevel.Verbose, "%s - Cast group \"%s\" member Chromecast device status: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), zone_member_castDevice.status, colorValue=SIColors.Coral)
895
+
896
+ # if current app is APP_SPOTIFY, then stop the app before starting the media receiver.
897
+ if (zone_member_castDevice.status) and (zone_member_castDevice.status.app_id == APP_SPOTIFY):
898
+ _logsi.LogVerbose("%s - Issuing quit_app (APP_SPOTIFY) for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
899
+ zone_member_castDevice.quit_app(timeout=5.0)
900
+ elif (zone_member_castDevice.status) and (zone_member_castDevice.status.app_id == APP_SPOTIFY_CONNECT):
901
+ _logsi.LogVerbose("%s - Issuing quit_app (APP_SPOTIFY_CONNECT) for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
902
+ zone_member_castDevice.quit_app(timeout=5.0)
903
+
904
+ # start the media receiver app.
905
+ # this will stabilize routing for the group using the Default Media Receiver.
906
+ _logsi.LogVerbose("%s - Starting Chromecast default APP_MEDIA_RECEIVER for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
907
+ zone_member_castDevice.start_app(APP_MEDIA_RECEIVER, force_launch=True, timeout=10.0)
908
+
909
+ # start the connection worker thread, if needed.
910
+ # failure to do this will result in the following exception being thrown when
911
+ # the `launch_app()` method is called:
912
+ # - `pychromecast.error.NotConnected: Chromecast unknown:8009 is connecting...`
913
+ if (zone_member_castDevice.is_idle):
914
+ if (zone_member_castDevice.socket_client is not None) and (zone_member_castDevice.socket_client.first_connection):
915
+ _logsi.LogVerbose("%s - Starting Chromecast default APP_MEDIA_RECEIVER connection worker thread for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
916
+ zone_member_castDevice.start()
917
+ zone_member_castDevice.wait(timeout=5.0)
918
+
919
+ # media receiver app needs time to start.
920
+ time.sleep(2.0)
921
+
922
+ except Exception as ex:
910
923
 
911
- # trace.
912
- _logsi.LogException("Chromecast Multizone group update_members exception: %s" % (str(ex)), ex, logToSystemLogger=False)
913
- # ignore exception, as nothing can be done about it.
914
-
915
- # get current multizone status for all groups.
916
- castMultiZoneStatus:MultizoneStatus = get_multizone_status(castInfo.host, castInfo.services, self.ZeroconfInstance, 5)
917
- _logsi.LogObject(SILevel.Verbose, "%s - Chromecast group multizone status for device: %s [ip=%s:%s]" % (self.name, scDevice.Title, castInfo.host, castInfo.port), castMultiZoneStatus, colorValue=SIColors.Coral)
918
-
919
- # ensure group device is still on the network;
920
- # if group device dropped off the network, then we can't query it!
921
- if (castMultiZoneStatus is not None):
922
-
923
- # find the group coordinator for the selected device.
924
- zoneInfo:MultizoneInfo = None
925
- for zoneInfo in castMultiZoneStatus.groups:
926
-
927
- # is this our group?
928
- if (str(zoneInfo.uuid) == scDevice.DiscoveryResult.Key):
929
-
930
- # yes - get host info to use for the device.
931
- # we will use the device discovery result HostIpAddress instead of the zoneInfo.host
932
- # value here, as the zoneInfo MAY contain an IPV6 formatted address, which was causing
933
- # issues if the device was originally activated using an IPV4 address!
934
- groupHost = scDevice.DiscoveryResult.HostIpAddress
935
- groupPort = scDevice.DiscoveryResult.HostIpPort
936
- break
924
+ # trace.
925
+ _logsi.LogException("Chromecast Multizone group update_members exception: %s" % (str(ex)), ex, logToSystemLogger=False)
926
+ # ignore exception, as nothing can be done about it.
927
+
928
+ # get current multizone status for all groups.
929
+ castMultiZoneStatus:MultizoneStatus = get_multizone_status(castInfo.host, castInfo.services, self.ZeroconfInstance, 5)
930
+ _logsi.LogObject(SILevel.Verbose, "%s - Chromecast group multizone status for device: %s [ip=%s:%s]" % (self.name, scDevice.Title, castInfo.host, castInfo.port), castMultiZoneStatus, colorValue=SIColors.Coral)
931
+
932
+ # ensure group device is still on the network;
933
+ # if group device dropped off the network, then we can't query it!
934
+ if (castMultiZoneStatus is not None):
935
+
936
+ # find the group coordinator for the selected device.
937
+ zoneInfo:MultizoneInfo = None
938
+ for zoneInfo in castMultiZoneStatus.groups:
939
+
940
+ # is this our group?
941
+ if (str(zoneInfo.uuid) == scDevice.DiscoveryResult.Key):
942
+
943
+ # yes - get host info to use for the device.
944
+ # we will use the device discovery result HostIpAddress instead of the zoneInfo.host
945
+ # value here, as the zoneInfo MAY contain an IPV6 formatted address, which was causing
946
+ # issues if the device was originally activated using an IPV4 address!
947
+ groupHost = scDevice.DiscoveryResult.HostIpAddress
948
+ groupPort = scDevice.DiscoveryResult.HostIpPort
949
+ break
937
950
 
938
- # connect to the device and build a Chromecast instance from group coordinator host info.
939
- castDevice = get_chromecast_from_host(
940
- host=(groupHost, groupPort, castInfo.uuid, castInfo.model_name, castInfo.friendly_name),
941
- tries=2,
942
- retry_wait=0.5,
943
- timeout=10)
951
+ # connect to the device and build a Chromecast instance from group coordinator host info.
952
+ castDevice = get_chromecast_from_host(
953
+ host=(groupHost, groupPort, castInfo.uuid, castInfo.model_name, castInfo.friendly_name),
954
+ tries=2,
955
+ retry_wait=0.5,
956
+ timeout=10)
944
957
 
945
958
  # trace.
946
959
  _logsi.LogVerbose("%s - Waiting %d seconds max for Chromecast group multizone device to activate: %s [ip=%s:%s]" % (self.name, deviceWaitTimeoutSecs, scDevice.Title, groupHost, groupPort), colorValue=SIColors.Coral)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: spotifywebapipython
3
- Version: 1.0.294
3
+ Version: 1.0.295
4
4
  Summary: Spotify Web API Python3 Library
5
5
  Author: Todd Lucas
6
6
  Author-email: <thlucas@yahoo.com>
@@ -1,36 +1,36 @@
1
1
  spotifywebapipython/__init__.py,sha256=ka7F2AsT-UU7KSYKBnfgl5Trojcep5aQspLutg8D-2k,1306
2
- spotifywebapipython/const.py,sha256=oj5dY2U2uxxMLiZWij3jeY2VwZzmbqSiHdm1twX9ATw,4100
2
+ spotifywebapipython/const.py,sha256=awwGnBPDFSGllzyJBb4laq5lTNlvhYMR-RLzqNUgkJs,4100
3
3
  spotifywebapipython/saappmessages.py,sha256=mVprjpd5CdD8kYeAkLzRvMvIQPmaYtH4UCP5my3QhSk,5065
4
4
  spotifywebapipython/sautils.py,sha256=LZF3UvxaBK35WIg1hO37nbW8j1y-M-oOxRbi1dPR39w,8746
5
5
  spotifywebapipython/spotifyapierror.py,sha256=23_CYlxWN0BceYYCLpBpunl55vEwPr_wFf34l74xzeA,1855
6
6
  spotifywebapipython/spotifyapimessage.py,sha256=wCnW8jYMLS3x9kjyXPgXXZqaf1HeMTTXzU8u_Dm5pfA,8447
7
7
  spotifywebapipython/spotifyauthtoken.py,sha256=iVg2Pa5mfMqYe4qgc5H8td6JzJlaDqk4vMEhH5LmtfI,9289
8
- spotifywebapipython/spotifyclient.py,sha256=jkC2ewbsamh_YNfc0rhWLDk3Z1eaw9rmspVkxmdhH_Y,928610
8
+ spotifywebapipython/spotifyclient.py,sha256=hya2_fpOpP9Qyg6_wuWlUmlPwquTT_8-KcDF3Eiwx08,928655
9
9
  spotifywebapipython/spotifydiscovery.py,sha256=cyysxl8PQj9yGHVbaqhSF3SStlrp-NvfGAudM-dDmg0,20290
10
10
  spotifywebapipython/spotifymediatypes.py,sha256=hMjkxhbfTtks0_P8BKmY7qg3EmB2zhH3RT0DbEpb_2s,1628
11
11
  spotifywebapipython/spotifytypeprefixes.py,sha256=3yfpxKF7jF694qBuo-PbKYvm70YwwdBoGj9enOpWsAg,1375
12
12
  spotifywebapipython/spotifywebapiauthenticationerror.py,sha256=5A0MKvYo3Ypv0ZeSSfLHuFLwzoUUu044bBoUgMfNXNw,3940
13
13
  spotifywebapipython/spotifywebapierror.py,sha256=ctYFvkBPlFFEoM_geP6hzwTyC2mPcrYR_zCCNvsmpwc,3870
14
14
  spotifywebapipython/spotifywebplayertoken.py,sha256=axj1j1lM7COiiZfpElkJRdnk4AmE6bAQcjKshUIz1Nk,35813
15
- spotifywebapipython/docs/__init__.html,sha256=FsnO64WP9HsImXs-AonCUUmUWEOlBajpYqhBYVcjNiE,199713
15
+ spotifywebapipython/docs/__init__.html,sha256=JtSr-guXMle9X_Yv7kIPic3UObDEZ0reL41CFY-uGFY,200309
16
16
  spotifywebapipython/docs/codecopy.js,sha256=ryuoZwLIL03YitjjFzn49UO5ta7-OBos6LNA3qHhFzs,3120
17
- spotifywebapipython/docs/index.html,sha256=rNcPZUg3v7qJZSaXOcuFERqwC5CEm260Kc91BEbXoSg,48779
18
- spotifywebapipython/docs/search.js,sha256=xdiBYN4bciyd6hIKcrC6l9ySbFg0NjJ3bl6aAFns-7E,9277464
17
+ spotifywebapipython/docs/index.html,sha256=xJf0VHpztJSkA6VsSVGzNaw-iv6GnrSBqxmM3uBchIQ,48779
18
+ spotifywebapipython/docs/search.js,sha256=RSwQD5rqeW2euLnQBBqZOvma_XUuDLr7rDlfpOyojak,9282696
19
19
  spotifywebapipython/docs/spotifywebapipython.ico,sha256=YImj39fqqSPSuB2-sMDlUYDd6YwRfQeJRtq4FjwWglg,16410
20
20
  spotifywebapipython/docs/spotifywebapipython_OLD.ico,sha256=YIv5LjcD4bTIJQSOr8jjwbWaeB3QkElRwkTOePiGbZo,14904
21
- spotifywebapipython/docs/spotifywebapipython/const.html,sha256=IsLvA9DVCXJm0ahAFiFqH5fCP_LDErWOknP4_-fIP0w,60537
22
- spotifywebapipython/docs/spotifywebapipython/saappmessages.html,sha256=5Q_EVCeeIak4bjbiBmzJt2f1P2u6dpRNq_mKWu9JEIs,62358
23
- spotifywebapipython/docs/spotifywebapipython/sautils.html,sha256=-yv1l4IM__IVWHIIbzRUjCUC7rQJeR2OmDHQY64fH6U,62031
24
- spotifywebapipython/docs/spotifywebapipython/spotifyapierror.html,sha256=S_mHY212fy_lMKx_xakhFaNaOAI8nJclAnPpKnbSGLM,48054
25
- spotifywebapipython/docs/spotifywebapipython/spotifyapimessage.html,sha256=eiFt3S4N5FtErC-lEnU39m3sA_ISEMr2YOU6EIDahTA,59210
26
- spotifywebapipython/docs/spotifywebapipython/spotifyauthtoken.html,sha256=ALxUxbPz9EUt6GxF3C1wghH3iKj-OCvOi1y5cdasaeE,59256
27
- spotifywebapipython/docs/spotifywebapipython/spotifyclient.html,sha256=bKgbh_ERKgTKypnQH6Gk-M-YTZgk0ihitAhPJpZkaeo,1677607
28
- spotifywebapipython/docs/spotifywebapipython/spotifydiscovery.html,sha256=Nj2t95BtEXLAoVyzI-unE22CgqbPVzfhu3LEGrnJ5ug,57662
29
- spotifywebapipython/docs/spotifywebapipython/spotifymediatypes.html,sha256=_Ntks24sCD3968HJtNHkN8IEnpgYW64hH69bY0EN7h0,51532
30
- spotifywebapipython/docs/spotifywebapipython/spotifytypeprefixes.html,sha256=VccKsPzaqeN00S8Oz91yTetc4VKCfrAxHdm0C3T4ozg,52401
31
- spotifywebapipython/docs/spotifywebapipython/spotifywebapiauthenticationerror.html,sha256=Z6TRDfiZ2ylfCkKaOGDEk5yoAE8-sc7OaX-GPIjeATM,52174
32
- spotifywebapipython/docs/spotifywebapipython/spotifywebapierror.html,sha256=z16KGA-IX21EQBfVLw4woYLCMjJe837_mD3jRyYkwkE,51484
33
- spotifywebapipython/docs/spotifywebapipython/spotifywebplayertoken.html,sha256=RtDWlyO3C3FlR7us4euXW29Spc99HRAw_JTLhJ52axc,62204
21
+ spotifywebapipython/docs/spotifywebapipython/const.html,sha256=Tcjsi9LYXEZFbmWBtiJk4Egtc_lVqH5jiZAR1Zfa1h0,60537
22
+ spotifywebapipython/docs/spotifywebapipython/saappmessages.html,sha256=eUZomQzvDBFfzQu6BHHVU4SCFNqQCawM4l3JKMgvKSA,62358
23
+ spotifywebapipython/docs/spotifywebapipython/sautils.html,sha256=Vj48R6km9ByQBr1qDt7xMEksJd5q1yq9YBn7LGEsxOM,62031
24
+ spotifywebapipython/docs/spotifywebapipython/spotifyapierror.html,sha256=CdmqoIrUTTrEmn2xMQ6C4Oh8Tm-80yttRQGtiF8AgT8,48054
25
+ spotifywebapipython/docs/spotifywebapipython/spotifyapimessage.html,sha256=wIbRXwpQdYU2oIBRrXaoxUyxLz8sDAjd2knsLZ7b6MM,59210
26
+ spotifywebapipython/docs/spotifywebapipython/spotifyauthtoken.html,sha256=zW9L_cJxE39QeZZwJJIRWuCveFcySx7Hl_Eglc85mow,59256
27
+ spotifywebapipython/docs/spotifywebapipython/spotifyclient.html,sha256=Tx848XwTYWY9K2voFP9D1KOYZRU0j0jYQ2_pAzhvbm0,1677607
28
+ spotifywebapipython/docs/spotifywebapipython/spotifydiscovery.html,sha256=Ea2qpQXcoCxtM_NmB2c8msBEuVFCSXubSwgquIgDvSQ,57662
29
+ spotifywebapipython/docs/spotifywebapipython/spotifymediatypes.html,sha256=z3s07Z6db-lyaLNvFAcD6mOu-CGV5yPgF-Ed9JOZn9o,51532
30
+ spotifywebapipython/docs/spotifywebapipython/spotifytypeprefixes.html,sha256=Kvr6wXoKKlsGOy3ohIoGwFNzeKBfQrZTzjHzWTKyqhc,52401
31
+ spotifywebapipython/docs/spotifywebapipython/spotifywebapiauthenticationerror.html,sha256=ywrmX7lWwDOAavLQoszQX55VEr3qrZrlvXQ5JsTYMRA,52174
32
+ spotifywebapipython/docs/spotifywebapipython/spotifywebapierror.html,sha256=2T6uabOieMRSKs9Bws3cDj2mgK4VncUWgQO_rCR-69o,51484
33
+ spotifywebapipython/docs/spotifywebapipython/spotifywebplayertoken.html,sha256=Ww5M-8vude2OKReShl-_qdnFbxZWIxeSRcgoZBzPsaI,62204
34
34
  spotifywebapipython/models/__init__.py,sha256=RwRQhUX-6EUs8XvStVFpR8EPwoqIAz9K6ref-28qHKI,4423
35
35
  spotifywebapipython/models/album.py,sha256=U3Pdw0-EL33LdkeiN31fjZ23rlLk6DNGV8jRmZU7EyQ,5170
36
36
  spotifywebapipython/models/albumpagesaved.py,sha256=SBYMhkh5ZsMrRAXl-cm9zsxMDh8gO190ENq6Py2TyGY,2417
@@ -110,7 +110,7 @@ spotifywebapipython/oauthcli/__init__.py,sha256=K37XTxYAKT0n8otCNzWbjgJ10fAPN4WL
110
110
  spotifywebapipython/oauthcli/authclient.py,sha256=qGKa4FLBHHZQyP5ho1sIM_mNmyshQd720YwKcUFQJAw,56207
111
111
  spotifywebapipython/spotifyconnect/__init__.py,sha256=9Xl5KiJFvWLbsdb4YQ0xmF67i36ybpXCCXrWeNsKEvc,1108
112
112
  spotifywebapipython/spotifyconnect/spotifyconnectdeviceeventargs.py,sha256=35hKa0FAaPgy7W8D6MFXmga667pjwXITo8jSj1TDfE8,1988
113
- spotifywebapipython/spotifyconnect/spotifyconnectdirectorytask.py,sha256=Ha5Ht0PDaXNQJQxCcZEbu5SpDvETHcPgqbkr9l8WfhE,168043
113
+ spotifywebapipython/spotifyconnect/spotifyconnectdirectorytask.py,sha256=P_nm-1qRcbu_VMtLatS21WzQEZ4muq3BIo-623mYlE4,169114
114
114
  spotifywebapipython/spotifyconnect/spotifyconnectzeroconfcastapptask.py,sha256=jArxsjAGntTcQD9L9yVuey1L8pw0KvshlNXIBA7PqiI,23367
115
115
  spotifywebapipython/spotifyconnect/spotifyconnectzeroconfcastcontroller.py,sha256=e2wLmFq4393IdVa51w8X5UQl4KfnHRh34DMlxZfl9-g,34218
116
116
  spotifywebapipython/spotifyconnect/spotifyconnectzeroconfcastlistener.py,sha256=e7vKob2xim8H3BkxbgPj-eymftKvWgT71tzpskd0sn0,16720
@@ -137,8 +137,8 @@ spotifywebapipython/zeroconfapi/zeroconfgetinfo.py,sha256=gTr3J3iVDR_ueP1tg-WHuC
137
137
  spotifywebapipython/zeroconfapi/zeroconfgetinfoalias.py,sha256=FZJM23HIPJSfhXIC3-EuS1XhawheoG5maSp7__k4yBo,2932
138
138
  spotifywebapipython/zeroconfapi/zeroconfgetinfodrmmediaformat.py,sha256=c5uk8ljsIuBK3w2jahHKQuoWvm245LOjUBitetXx5Mo,2347
139
139
  spotifywebapipython/zeroconfapi/zeroconfresponse.py,sha256=mAPIDj5MG53x8peiScrp7OJblwy_o_Sto4wqE0rGujU,6445
140
- spotifywebapipython-1.0.294.dist-info/LICENSE,sha256=KGcc9g0zwqNLcWnSn_ezv1UtKyhMENFhvtixpxUPNsE,1177
141
- spotifywebapipython-1.0.294.dist-info/METADATA,sha256=aNEmx_UG_r6U79DD-SDB6Fnswiu-1OQll8IW_BGmr6c,11644
142
- spotifywebapipython-1.0.294.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
143
- spotifywebapipython-1.0.294.dist-info/top_level.txt,sha256=jTBLFlijKTesYh2dteAz4vb17qjaqWKeDjpnnwTcrjs,20
144
- spotifywebapipython-1.0.294.dist-info/RECORD,,
140
+ spotifywebapipython-1.0.295.dist-info/LICENSE,sha256=KGcc9g0zwqNLcWnSn_ezv1UtKyhMENFhvtixpxUPNsE,1177
141
+ spotifywebapipython-1.0.295.dist-info/METADATA,sha256=QOA7tWLDzhM7r2og8dqoGT9aAPj8ll9gPKj1wD9TAxc,11644
142
+ spotifywebapipython-1.0.295.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
143
+ spotifywebapipython-1.0.295.dist-info/top_level.txt,sha256=jTBLFlijKTesYh2dteAz4vb17qjaqWKeDjpnnwTcrjs,20
144
+ spotifywebapipython-1.0.295.dist-info/RECORD,,