plex-api-client 0.33.1__tar.gz → 0.34.0__tar.gz

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 (383) hide show
  1. plex_api_client-0.34.0/PKG-INFO +1123 -0
  2. plex_api_client-0.34.0/README-PYPI.md +1103 -0
  3. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/pyproject.toml +3 -3
  4. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/_version.py +3 -3
  5. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/authentication.py +2 -2
  6. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/basesdk.py +20 -6
  7. plex_api_client-0.34.0/src/plex_api_client/models/__init__.py +23 -0
  8. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/__init__.py +20 -39
  9. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/channel.py +35 -1
  10. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/channelmapping.py +26 -1
  11. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/composite.py +32 -1
  12. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/device.py +40 -1
  13. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/directory.py +61 -2
  14. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/dvrrequesthandler_slash_get_responses_200.py +84 -1
  15. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/filter_.py +62 -2
  16. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/get_responses_200.py +74 -1
  17. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/historyall_get_responses_200.py +78 -1
  18. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/hub.py +44 -2
  19. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/image.py +18 -1
  20. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/items.py +98 -2
  21. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/librarysection.py +61 -1
  22. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/librarysections.py +116 -1
  23. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/lineup.py +24 -1
  24. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/media.py +69 -5
  25. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediacontainer.py +24 -1
  26. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediacontainerwithartwork.py +63 -2
  27. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediacontainerwithdecision.py +356 -26
  28. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediacontainerwithdevice.py +80 -1
  29. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediacontainerwithdirectory.py +46 -1
  30. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediacontainerwithhubs.py +44 -1
  31. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediacontainerwithlineup.py +46 -1
  32. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediacontainerwithmetadata.py +44 -1
  33. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediacontainerwithnestedmetadata.py +140 -2
  34. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediacontainerwithplaylistmetadata.py +141 -2
  35. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediacontainerwithsettings.py +44 -1
  36. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediacontainerwithsubscription.py +46 -1
  37. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediagraboperation.py +38 -1
  38. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediaquery.py +18 -1
  39. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediasubscription.py +43 -1
  40. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/metadata.py +97 -2
  41. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/part.py +42 -2
  42. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/player.py +42 -1
  43. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/plexdevice.py +12 -24
  44. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/post_responses_200.py +60 -2
  45. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/security.py +18 -1
  46. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/session.py +18 -1
  47. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/setting.py +37 -1
  48. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/slash_get_responses_200.py +61 -1
  49. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/sort.py +65 -2
  50. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/stream.py +95 -23
  51. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/tag.py +36 -1
  52. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/transcodesession.py +41 -1
  53. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/user.py +18 -1
  54. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/userplexaccount.py +113 -144
  55. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/userprofile.py +42 -37
  56. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/errors/__init__.py +8 -37
  57. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/errors/get_server_resources.py +18 -1
  58. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/errors/get_users.py +34 -1
  59. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/errors/gettokendetails.py +34 -1
  60. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/errors/post_users_sign_in_data.py +34 -1
  61. plex_api_client-0.34.0/src/plex_api_client/models/internal/__init__.py +25 -0
  62. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/internal/globals.py +32 -1
  63. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/__init__.py +8 -37
  64. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/addcollectionitems.py +78 -1
  65. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/adddevice.py +79 -1
  66. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/adddevicetodvr.py +160 -1
  67. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/adddownloadqueueitems.py +164 -1
  68. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/addextras.py +64 -1
  69. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/addlineup.py +160 -1
  70. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/addplaylistitems.py +80 -1
  71. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/addprovider.py +62 -1
  72. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/addsection.py +84 -1
  73. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/addsubtitles.py +69 -1
  74. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/addtoplayqueue.py +81 -1
  75. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/analyzemetadata.py +64 -1
  76. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/applyupdates.py +64 -1
  77. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/autocomplete.py +81 -1
  78. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/cancelactivity.py +62 -1
  79. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/cancelgrab.py +62 -1
  80. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/cancelrefresh.py +62 -1
  81. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/checkupdates.py +63 -1
  82. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/clearplaylistitems.py +78 -1
  83. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/clearplayqueue.py +78 -1
  84. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/computechannelmap.py +144 -1
  85. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/connectwebsocket.py +79 -1
  86. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/createcollection.py +82 -1
  87. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/createcustomhub.py +65 -1
  88. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/createdownloadqueue.py +82 -1
  89. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/createdvr.py +81 -1
  90. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/createmarker.py +138 -2
  91. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/createplaylist.py +80 -1
  92. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/createplayqueue.py +145 -1
  93. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/createsubscription.py +128 -1
  94. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletecollection.py +62 -1
  95. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletecollectionitem.py +78 -1
  96. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletecustomhub.py +62 -1
  97. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletedvr.py +62 -1
  98. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletehistory.py +78 -1
  99. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deleteindexes.py +62 -1
  100. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deleteintros.py +62 -1
  101. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletelibrarysection.py +63 -1
  102. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletelineup.py +160 -1
  103. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletemarker.py +62 -1
  104. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletemediaitem.py +63 -1
  105. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletemediaprovider.py +62 -1
  106. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletemetadataitem.py +63 -1
  107. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deleteplaylist.py +62 -1
  108. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deleteplaylistitem.py +78 -1
  109. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deleteplayqueueitem.py +78 -1
  110. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletestream.py +62 -1
  111. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletesubscription.py +62 -1
  112. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/detectads.py +62 -1
  113. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/detectcredits.py +64 -1
  114. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/detectintros.py +64 -1
  115. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/detectvoiceactivity.py +64 -1
  116. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/discoverdevices.py +18 -1
  117. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/editmarker.py +80 -1
  118. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/editmetadataitem.py +63 -1
  119. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/editsection.py +68 -1
  120. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/editsubscriptionpreferences.py +79 -1
  121. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/emptytrash.py +62 -1
  122. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/enablepapertrail.py +63 -1
  123. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/generatethumbs.py +63 -1
  124. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/get_server_resources.py +58 -1
  125. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/get_users.py +166 -41
  126. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getalbums.py +78 -1
  127. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getallhubs.py +123 -1
  128. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getallitemleaves.py +78 -1
  129. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getalllanguages.py +76 -1
  130. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getallleaves.py +78 -1
  131. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getallpreferences.py +18 -1
  132. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getallsubscriptions.py +80 -1
  133. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getarts.py +78 -1
  134. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getaugmentationstatus.py +63 -1
  135. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getavailablegrabbers.py +139 -1
  136. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getavailablesorts.py +122 -1
  137. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getbackgroundtasks.py +96 -1
  138. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getcategories.py +78 -1
  139. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getchannels.py +120 -1
  140. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getchapterimage.py +78 -1
  141. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getcluster.py +78 -1
  142. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getcollectionimage.py +79 -1
  143. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getcollectionitems.py +78 -1
  144. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getcollections.py +79 -1
  145. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getcolors.py +143 -1
  146. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getcommon.py +80 -1
  147. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getcontinuewatching.py +121 -1
  148. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getcountries.py +91 -1
  149. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getcountrieslineups.py +79 -1
  150. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getcountryregions.py +136 -1
  151. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getdevicedetails.py +78 -1
  152. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getdeviceschannels.py +153 -1
  153. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getdownloadqueue.py +142 -1
  154. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getdownloadqueueitems.py +185 -1
  155. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getdownloadqueuemedia.py +62 -1
  156. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getdvr.py +160 -1
  157. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getextras.py +78 -1
  158. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getfile.py +81 -1
  159. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getfirstcharacters.py +141 -1
  160. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getfolders.py +142 -1
  161. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/gethistoryitem.py +78 -1
  162. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/gethubitems.py +101 -1
  163. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getidentity.py +60 -1
  164. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getimage.py +85 -1
  165. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getimagefrombif.py +78 -1
  166. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getitemartwork.py +80 -1
  167. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getitemdecision.py +78 -1
  168. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getitemtree.py +78 -1
  169. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getlibrarydetails.py +138 -1
  170. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getlibraryitems.py +79 -1
  171. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getlibrarymatches.py +92 -1
  172. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getlineup.py +62 -1
  173. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getlineupchannels.py +142 -1
  174. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getlivetvsession.py +78 -1
  175. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getmediapart.py +63 -1
  176. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getmetadatahubs.py +80 -1
  177. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getmetadataitem.py +86 -1
  178. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getnotifications.py +79 -1
  179. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getpartindex.py +79 -1
  180. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getperson.py +122 -1
  181. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getplaylist.py +78 -1
  182. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getplaylistgenerator.py +277 -1
  183. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getplaylistgeneratoritems.py +215 -2
  184. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getplaylistgenerators.py +144 -1
  185. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getplaylistitems.py +79 -1
  186. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getplayqueue.py +83 -1
  187. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getpostplayhubs.py +80 -1
  188. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getpreference.py +79 -1
  189. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getpromotedhubs.py +121 -1
  190. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getrandomartwork.py +79 -1
  191. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getrelatedhubs.py +80 -1
  192. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getrelateditems.py +120 -1
  193. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getscheduledrecordings.py +62 -1
  194. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getsectionfilters.py +122 -1
  195. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getsectionhubs.py +122 -1
  196. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getsectionimage.py +64 -1
  197. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getsectionpreferences.py +79 -1
  198. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getsections.py +70 -1
  199. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getsectionsprefs.py +79 -1
  200. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getserverinfo.py +78 -1
  201. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getsessionplaylistindex.py +62 -1
  202. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getsessions.py +18 -1
  203. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getsessionsegment.py +62 -1
  204. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getsonicallysimilar.py +81 -1
  205. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getsonicpath.py +80 -1
  206. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getsourceconnectioninformation.py +157 -1
  207. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getstream.py +65 -1
  208. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getstreamlevels.py +139 -1
  209. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getstreamloudness.py +79 -1
  210. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getsubscription.py +80 -1
  211. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/gettags.py +143 -1
  212. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/gettasks.py +89 -1
  213. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/gettemplate.py +184 -1
  214. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getthumb.py +62 -1
  215. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/gettokendetails.py +78 -1
  216. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/gettransienttoken.py +120 -1
  217. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/getupdatesstatus.py +91 -1
  218. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/ingesttransientitem.py +82 -1
  219. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listactivities.py +92 -1
  220. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listcontent.py +83 -1
  221. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listdevices.py +18 -1
  222. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listdownloadqueueitems.py +185 -1
  223. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listdvrs.py +100 -1
  224. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listhubs.py +151 -1
  225. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listlineups.py +78 -1
  226. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listmatches.py +84 -1
  227. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listmoments.py +78 -1
  228. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listpersonmedia.py +78 -1
  229. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listplaybackhistory.py +159 -1
  230. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listplaylists.py +80 -1
  231. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listproviders.py +139 -1
  232. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listsessions.py +156 -2
  233. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listsimilar.py +79 -1
  234. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listsonicallysimilar.py +82 -1
  235. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/listtopusers.py +140 -1
  236. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/makedecision.py +108 -1
  237. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/markplayed.py +64 -1
  238. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/matchitem.py +65 -1
  239. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/mergeitems.py +63 -1
  240. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/modifydevice.py +123 -1
  241. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/modifyplaylistgenerator.py +137 -1
  242. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/movecollectionitem.py +79 -1
  243. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/movehub.py +79 -1
  244. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/moveplaylistitem.py +79 -1
  245. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/moveplayqueueitem.py +79 -1
  246. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/optimizedatabase.py +63 -1
  247. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/post_users_sign_in_data.py +244 -198
  248. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/refreshitemsmetadata.py +64 -1
  249. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/refreshplaylist.py +62 -1
  250. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/refreshsection.py +64 -1
  251. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/refreshsectionsmetadata.py +63 -1
  252. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/reloadguide.py +62 -1
  253. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/removedevice.py +122 -1
  254. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/removedevicefromdvr.py +160 -1
  255. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/removedownloadqueueitems.py +62 -1
  256. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/reordersubscription.py +79 -1
  257. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/report.py +229 -1
  258. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/resetplayqueue.py +78 -1
  259. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/resetsectiondefaults.py +62 -1
  260. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/restartprocessingdownloadqueueitems.py +62 -1
  261. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/scan.py +79 -1
  262. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/searchhubs.py +122 -1
  263. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/setchannelmap.py +81 -1
  264. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/setdevicepreferences.py +63 -1
  265. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/setdvrpreferences.py +161 -1
  266. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/setitemartwork.py +63 -1
  267. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/setitempreferences.py +63 -1
  268. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/setpreferences.py +62 -1
  269. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/setrating.py +63 -1
  270. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/setsectionpreferences.py +62 -1
  271. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/setstreamoffset.py +63 -1
  272. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/setstreamselection.py +65 -1
  273. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/shuffle.py +78 -1
  274. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/splititem.py +62 -1
  275. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/startanalysis.py +62 -1
  276. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/startbifgeneration.py +63 -1
  277. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/starttask.py +62 -1
  278. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/starttranscodesession.py +108 -1
  279. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/stopallrefreshes.py +18 -1
  280. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/stopdvrreload.py +62 -1
  281. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/stopscan.py +78 -1
  282. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/stoptask.py +62 -1
  283. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/terminatesession.py +63 -1
  284. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/transcodeimage.py +98 -1
  285. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/transcodesubtitles.py +92 -1
  286. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/triggerfallback.py +63 -1
  287. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/tunechannel.py +78 -1
  288. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/unmatch.py +62 -1
  289. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/unscrobble.py +64 -1
  290. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/unshuffle.py +78 -1
  291. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/updatehubvisibility.py +65 -1
  292. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/updateitemartwork.py +63 -1
  293. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/updateitems.py +75 -1
  294. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/updateplaylist.py +62 -1
  295. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/uploadplaylist.py +64 -1
  296. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/voicesearchhubs.py +122 -1
  297. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/writemessage.py +65 -1
  298. plex_api_client-0.34.0/src/plex_api_client/types/basemodel.py +77 -0
  299. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/__init__.py +17 -39
  300. plex_api_client-0.34.0/src/plex_api_client/utils/dynamic_imports.py +54 -0
  301. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/enums.py +60 -0
  302. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/eventstreaming.py +79 -47
  303. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/requestbodies.py +3 -3
  304. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/retries.py +2 -12
  305. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/security.py +2 -0
  306. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/serializers.py +0 -20
  307. plex_api_client-0.33.1/PKG-INFO +0 -1123
  308. plex_api_client-0.33.1/README-PYPI.md +0 -1103
  309. plex_api_client-0.33.1/src/plex_api_client/models/__init__.py +0 -3
  310. plex_api_client-0.33.1/src/plex_api_client/models/internal/__init__.py +0 -54
  311. plex_api_client-0.33.1/src/plex_api_client/types/basemodel.py +0 -39
  312. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/LICENSE.md +0 -0
  313. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/py.typed +0 -0
  314. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/__init__.py +0 -0
  315. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/_hooks/__init__.py +0 -0
  316. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/_hooks/registration.py +0 -0
  317. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/_hooks/sdkhooks.py +0 -0
  318. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/_hooks/types.py +0 -0
  319. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/activities.py +0 -0
  320. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/butler.py +0 -0
  321. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/collections.py +0 -0
  322. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/content.py +0 -0
  323. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/devices.py +0 -0
  324. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/download_queue.py +0 -0
  325. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/dvrs.py +0 -0
  326. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/epg.py +0 -0
  327. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/events.py +0 -0
  328. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/general.py +0 -0
  329. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/httpclient.py +0 -0
  330. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/hubs.py +0 -0
  331. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/library.py +0 -0
  332. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/library_collections.py +0 -0
  333. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/library_playlists.py +0 -0
  334. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/live_tv.py +0 -0
  335. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/log.py +0 -0
  336. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/accepts.py +0 -0
  337. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/advancedsubtitles.py +0 -0
  338. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/boolint.py +0 -0
  339. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/location.py +0 -0
  340. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediatype.py +0 -0
  341. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/mediatypestring.py +0 -0
  342. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/protocol.py +0 -0
  343. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/subtitles.py +0 -0
  344. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/components/transcodetype.py +0 -0
  345. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/errors/no_response_error.py +0 -0
  346. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/errors/plexapierror.py +0 -0
  347. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/errors/responsevalidationerror.py +0 -0
  348. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/errors/sdkerror.py +0 -0
  349. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/cleanbundles.py +0 -0
  350. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/deletecaches.py +0 -0
  351. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/processsubscriptions.py +0 -0
  352. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/refreshproviders.py +0 -0
  353. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/starttasks.py +0 -0
  354. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/stoptasks.py +0 -0
  355. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/models/operations/writelog.py +0 -0
  356. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/play_queue.py +0 -0
  357. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/playlist.py +0 -0
  358. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/plex.py +0 -0
  359. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/preferences.py +0 -0
  360. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/provider.py +0 -0
  361. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/py.typed +0 -0
  362. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/rate.py +0 -0
  363. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/sdk.py +1 -1
  364. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/sdkconfiguration.py +0 -0
  365. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/search.py +0 -0
  366. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/status.py +0 -0
  367. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/subscriptions.py +0 -0
  368. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/timeline.py +0 -0
  369. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/transcoder.py +0 -0
  370. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/types/__init__.py +0 -0
  371. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/ultrablur.py +0 -0
  372. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/updater.py +0 -0
  373. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/users.py +0 -0
  374. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/annotations.py +0 -0
  375. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/datetimes.py +0 -0
  376. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/forms.py +0 -0
  377. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/headers.py +0 -0
  378. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/logger.py +0 -0
  379. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/metadata.py +0 -0
  380. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/queryparams.py +0 -0
  381. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/unmarshal_json_response.py +0 -0
  382. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/url.py +0 -0
  383. {plex_api_client-0.33.1 → plex_api_client-0.34.0}/src/plex_api_client/utils/values.py +0 -0
@@ -0,0 +1,1123 @@
1
+ Metadata-Version: 2.4
2
+ Name: plex-api-client
3
+ Version: 0.34.0
4
+ Summary: Python Client SDK Generated by Speakeasy
5
+ License-File: LICENSE.md
6
+ Author: Speakeasy
7
+ Requires-Python: >=3.10
8
+ Classifier: Programming Language :: Python :: 3
9
+ Classifier: Programming Language :: Python :: 3.10
10
+ Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: Programming Language :: Python :: 3.12
12
+ Classifier: Programming Language :: Python :: 3.13
13
+ Classifier: Programming Language :: Python :: 3.14
14
+ Requires-Dist: httpcore (>=1.0.9)
15
+ Requires-Dist: httpx (>=0.28.1)
16
+ Requires-Dist: pydantic (>=2.11.2)
17
+ Project-URL: Repository, https://github.com/LukasParke/plexpy.git
18
+ Description-Content-Type: text/markdown
19
+
20
+ # plexpy
21
+
22
+ <div align="left">
23
+ <a href="https://speakeasyapi.dev/"><img src="https://custom-icon-badges.demolab.com/badge/-Built%20By%20Speakeasy-212015?style=for-the-badge&logoColor=FBE331&logo=speakeasy&labelColor=545454" /></a>
24
+ <a href="https://opensource.org/licenses/MIT">
25
+ <img src="https://img.shields.io/badge/License-MIT-blue.svg" style="width: 100px; height: 28px;" />
26
+ </a>
27
+ </div>
28
+
29
+ <!-- Start Summary [summary] -->
30
+ ## Summary
31
+
32
+
33
+ <!-- End Summary [summary] -->
34
+
35
+ <!-- Start Table of Contents [toc] -->
36
+ ## Table of Contents
37
+ <!-- $toc-max-depth=2 -->
38
+ * [plexpy](https://github.com/LukasParke/plexpy/blob/master/./#plexpy)
39
+ * [SDK Installation](https://github.com/LukasParke/plexpy/blob/master/./#sdk-installation)
40
+ * [IDE Support](https://github.com/LukasParke/plexpy/blob/master/./#ide-support)
41
+ * [SDK Example Usage](https://github.com/LukasParke/plexpy/blob/master/./#sdk-example-usage)
42
+ * [Available Resources and Operations](https://github.com/LukasParke/plexpy/blob/master/./#available-resources-and-operations)
43
+ * [File uploads](https://github.com/LukasParke/plexpy/blob/master/./#file-uploads)
44
+ * [Retries](https://github.com/LukasParke/plexpy/blob/master/./#retries)
45
+ * [Error Handling](https://github.com/LukasParke/plexpy/blob/master/./#error-handling)
46
+ * [Server Selection](https://github.com/LukasParke/plexpy/blob/master/./#server-selection)
47
+ * [Custom HTTP Client](https://github.com/LukasParke/plexpy/blob/master/./#custom-http-client)
48
+ * [Authentication](https://github.com/LukasParke/plexpy/blob/master/./#authentication)
49
+ * [Resource Management](https://github.com/LukasParke/plexpy/blob/master/./#resource-management)
50
+ * [Debugging](https://github.com/LukasParke/plexpy/blob/master/./#debugging)
51
+ * [Development](https://github.com/LukasParke/plexpy/blob/master/./#development)
52
+ * [Maturity](https://github.com/LukasParke/plexpy/blob/master/./#maturity)
53
+ * [Contributions](https://github.com/LukasParke/plexpy/blob/master/./#contributions)
54
+
55
+ <!-- End Table of Contents [toc] -->
56
+
57
+ <!-- Start SDK Installation [installation] -->
58
+ ## SDK Installation
59
+
60
+ > [!NOTE]
61
+ > **Python version upgrade policy**
62
+ >
63
+ > Once a Python version reaches its [official end of life date](https://devguide.python.org/versions/), a 3-month grace period is provided for users to upgrade. Following this grace period, the minimum python version supported in the SDK will be updated.
64
+
65
+ The SDK can be installed with *uv*, *pip*, or *poetry* package managers.
66
+
67
+ ### uv
68
+
69
+ *uv* is a fast Python package installer and resolver, designed as a drop-in replacement for pip and pip-tools. It's recommended for its speed and modern Python tooling capabilities.
70
+
71
+ ```bash
72
+ uv add plex-api-client
73
+ ```
74
+
75
+ ### PIP
76
+
77
+ *PIP* is the default package installer for Python, enabling easy installation and management of packages from PyPI via the command line.
78
+
79
+ ```bash
80
+ pip install plex-api-client
81
+ ```
82
+
83
+ ### Poetry
84
+
85
+ *Poetry* is a modern tool that simplifies dependency management and package publishing by using a single `pyproject.toml` file to handle project metadata and dependencies.
86
+
87
+ ```bash
88
+ poetry add plex-api-client
89
+ ```
90
+
91
+ ### Shell and script usage with `uv`
92
+
93
+ You can use this SDK in a Python shell with [uv](https://docs.astral.sh/uv/) and the `uvx` command that comes with it like so:
94
+
95
+ ```shell
96
+ uvx --from plex-api-client python
97
+ ```
98
+
99
+ It's also possible to write a standalone Python script without needing to set up a whole project like so:
100
+
101
+ ```python
102
+ #!/usr/bin/env -S uv run --script
103
+ # /// script
104
+ # requires-python = ">=3.10"
105
+ # dependencies = [
106
+ # "plex-api-client",
107
+ # ]
108
+ # ///
109
+
110
+ from plex_api_client import PlexAPI
111
+
112
+ sdk = PlexAPI(
113
+ # SDK arguments
114
+ )
115
+
116
+ # Rest of script here...
117
+ ```
118
+
119
+ Once that is saved to a file, you can run it with `uv run script.py` where
120
+ `script.py` can be replaced with the actual file name.
121
+ <!-- End SDK Installation [installation] -->
122
+
123
+ <!-- Start IDE Support [idesupport] -->
124
+ ## IDE Support
125
+
126
+ ### PyCharm
127
+
128
+ Generally, the SDK will work well with most IDEs out of the box. However, when using PyCharm, you can enjoy much better integration with Pydantic by installing an additional plugin.
129
+
130
+ - [PyCharm Pydantic Plugin](https://docs.pydantic.dev/latest/integrations/pycharm/)
131
+ <!-- End IDE Support [idesupport] -->
132
+
133
+ <!-- Start SDK Example Usage [usage] -->
134
+ ## SDK Example Usage
135
+
136
+ ### Example
137
+
138
+ ```python
139
+ # Synchronous Example
140
+ from plex_api_client import PlexAPI
141
+ from plex_api_client.models import components, operations
142
+
143
+
144
+ with PlexAPI(
145
+ accepts=components.Accepts.APPLICATION_XML,
146
+ client_identifier="abc123",
147
+ product="Plex for Roku",
148
+ version="2.4.1",
149
+ platform="Roku",
150
+ platform_version="4.3 build 1057",
151
+ device="Roku 3",
152
+ model="4200X",
153
+ device_vendor="Roku",
154
+ device_name="Living Room TV",
155
+ marketplace="googlePlay",
156
+ token="<YOUR_API_KEY_HERE>",
157
+ ) as plex_api:
158
+
159
+ res = plex_api.transcoder.start_transcode_session(request=operations.StartTranscodeSessionRequest(
160
+ transcode_type=components.TranscodeType.MUSIC,
161
+ extension=operations.Extension.MPD,
162
+ advanced_subtitles=components.AdvancedSubtitles.BURN,
163
+ audio_boost=50,
164
+ audio_channel_count=5,
165
+ auto_adjust_quality=components.BoolInt.TRUE,
166
+ auto_adjust_subtitle=components.BoolInt.TRUE,
167
+ direct_play=components.BoolInt.TRUE,
168
+ direct_stream=components.BoolInt.TRUE,
169
+ direct_stream_audio=components.BoolInt.TRUE,
170
+ disable_resolution_rotation=components.BoolInt.TRUE,
171
+ has_mde=components.BoolInt.TRUE,
172
+ location=operations.StartTranscodeSessionQueryParamLocation.WAN,
173
+ media_buffer_size=102400,
174
+ media_index=0,
175
+ music_bitrate=5000,
176
+ offset=90.5,
177
+ part_index=0,
178
+ path="/library/metadata/151671",
179
+ peak_bitrate=12000,
180
+ photo_resolution="1080x1080",
181
+ protocol=operations.StartTranscodeSessionQueryParamProtocol.DASH,
182
+ seconds_per_segment=5,
183
+ subtitle_size=50,
184
+ video_bitrate=12000,
185
+ video_quality=50,
186
+ video_resolution="1080x1080",
187
+ x_plex_client_profile_extra="add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash)",
188
+ x_plex_client_profile_name="generic",
189
+ ))
190
+
191
+ assert res.response_stream is not None
192
+
193
+ # Handle response
194
+ print(res.response_stream)
195
+ ```
196
+
197
+ </br>
198
+
199
+ The same SDK client can also be used to make asynchronous requests by importing asyncio.
200
+
201
+ ```python
202
+ # Asynchronous Example
203
+ import asyncio
204
+ from plex_api_client import PlexAPI
205
+ from plex_api_client.models import components, operations
206
+
207
+ async def main():
208
+
209
+ async with PlexAPI(
210
+ accepts=components.Accepts.APPLICATION_XML,
211
+ client_identifier="abc123",
212
+ product="Plex for Roku",
213
+ version="2.4.1",
214
+ platform="Roku",
215
+ platform_version="4.3 build 1057",
216
+ device="Roku 3",
217
+ model="4200X",
218
+ device_vendor="Roku",
219
+ device_name="Living Room TV",
220
+ marketplace="googlePlay",
221
+ token="<YOUR_API_KEY_HERE>",
222
+ ) as plex_api:
223
+
224
+ res = await plex_api.transcoder.start_transcode_session_async(request=operations.StartTranscodeSessionRequest(
225
+ transcode_type=components.TranscodeType.MUSIC,
226
+ extension=operations.Extension.MPD,
227
+ advanced_subtitles=components.AdvancedSubtitles.BURN,
228
+ audio_boost=50,
229
+ audio_channel_count=5,
230
+ auto_adjust_quality=components.BoolInt.TRUE,
231
+ auto_adjust_subtitle=components.BoolInt.TRUE,
232
+ direct_play=components.BoolInt.TRUE,
233
+ direct_stream=components.BoolInt.TRUE,
234
+ direct_stream_audio=components.BoolInt.TRUE,
235
+ disable_resolution_rotation=components.BoolInt.TRUE,
236
+ has_mde=components.BoolInt.TRUE,
237
+ location=operations.StartTranscodeSessionQueryParamLocation.WAN,
238
+ media_buffer_size=102400,
239
+ media_index=0,
240
+ music_bitrate=5000,
241
+ offset=90.5,
242
+ part_index=0,
243
+ path="/library/metadata/151671",
244
+ peak_bitrate=12000,
245
+ photo_resolution="1080x1080",
246
+ protocol=operations.StartTranscodeSessionQueryParamProtocol.DASH,
247
+ seconds_per_segment=5,
248
+ subtitle_size=50,
249
+ video_bitrate=12000,
250
+ video_quality=50,
251
+ video_resolution="1080x1080",
252
+ x_plex_client_profile_extra="add-limitation(scope=videoCodec&scopeName=*&type=upperBound&name=video.frameRate&value=60&replace=true)+append-transcode-target-codec(type=videoProfile&context=streaming&videoCodec=h264%2Chevc&audioCodec=aac&protocol=dash)",
253
+ x_plex_client_profile_name="generic",
254
+ ))
255
+
256
+ assert res.response_stream is not None
257
+
258
+ # Handle response
259
+ print(res.response_stream)
260
+
261
+ asyncio.run(main())
262
+ ```
263
+ <!-- End SDK Example Usage [usage] -->
264
+
265
+ <!-- Start Available Resources and Operations [operations] -->
266
+ ## Available Resources and Operations
267
+
268
+ <details open>
269
+ <summary>Available methods</summary>
270
+
271
+ ### [Activities](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/activities/README.md)
272
+
273
+ * [list_activities](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/activities/README.md#list_activities) - Get all activities
274
+ * [cancel_activity](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/activities/README.md#cancel_activity) - Cancel a running activity
275
+
276
+ ### [Authentication](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/authentication/README.md)
277
+
278
+ * [get_token_details](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/authentication/README.md#get_token_details) - Get Token Details
279
+ * [post_users_sign_in_data](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/authentication/README.md#post_users_sign_in_data) - Get User Sign In Data
280
+
281
+ ### [Butler](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/butler/README.md)
282
+
283
+ * [stop_tasks](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/butler/README.md#stop_tasks) - Stop all Butler tasks
284
+ * [get_tasks](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/butler/README.md#get_tasks) - Get all Butler tasks
285
+ * [start_tasks](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/butler/README.md#start_tasks) - Start all Butler tasks
286
+ * [stop_task](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/butler/README.md#stop_task) - Stop a single Butler task
287
+ * [start_task](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/butler/README.md#start_task) - Start a single Butler task
288
+
289
+ ### [Collections](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/collections/README.md)
290
+
291
+ * [create_collection](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/collections/README.md#create_collection) - Create collection
292
+
293
+ ### [Content](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md)
294
+
295
+ * [get_collection_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md#get_collection_items) - Get items in a collection
296
+ * [get_metadata_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md#get_metadata_item) - Get a metadata item
297
+ * [get_albums](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md#get_albums) - Set section albums
298
+ * [list_content](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md#list_content) - Get items in the section
299
+ * [get_all_leaves](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md#get_all_leaves) - Set section leaves
300
+ * [get_arts](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md#get_arts) - Set section artwork
301
+ * [get_categories](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md#get_categories) - Set section categories
302
+ * [get_cluster](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md#get_cluster) - Set section clusters
303
+ * [get_sonic_path](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md#get_sonic_path) - Similar tracks to transition from one to another
304
+ * [get_folders](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md#get_folders) - Get all folder locations
305
+ * [list_moments](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md#list_moments) - Set section moments
306
+ * [get_sonically_similar](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md#get_sonically_similar) - The nearest audio tracks
307
+ * [get_collection_image](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/content/README.md#get_collection_image) - Get a collection's image
308
+
309
+ ### [Devices](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md)
310
+
311
+ * [get_available_grabbers](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md#get_available_grabbers) - Get available grabbers
312
+ * [list_devices](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md#list_devices) - Get all devices
313
+ * [add_device](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md#add_device) - Add a device
314
+ * [discover_devices](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md#discover_devices) - Tell grabbers to discover devices
315
+ * [remove_device](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md#remove_device) - Remove a device
316
+ * [get_device_details](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md#get_device_details) - Get device details
317
+ * [modify_device](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md#modify_device) - Enable or disable a device
318
+ * [set_channelmap](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md#set_channelmap) - Set a device's channel mapping
319
+ * [get_devices_channels](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md#get_devices_channels) - Get a device's channels
320
+ * [set_device_preferences](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md#set_device_preferences) - Set device preferences
321
+ * [stop_scan](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md#stop_scan) - Tell a device to stop scanning for channels
322
+ * [scan](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md#scan) - Tell a device to scan for channels
323
+ * [get_thumb](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/devices/README.md#get_thumb) - Get device thumb
324
+
325
+ ### [DownloadQueue](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/downloadqueue/README.md)
326
+
327
+ * [create_download_queue](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/downloadqueue/README.md#create_download_queue) - Create download queue
328
+ * [get_download_queue](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/downloadqueue/README.md#get_download_queue) - Get a download queue
329
+ * [add_download_queue_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/downloadqueue/README.md#add_download_queue_items) - Add to download queue
330
+ * [list_download_queue_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/downloadqueue/README.md#list_download_queue_items) - Get download queue items
331
+ * [get_item_decision](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/downloadqueue/README.md#get_item_decision) - Grab download queue item decision
332
+ * [get_download_queue_media](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/downloadqueue/README.md#get_download_queue_media) - Grab download queue media
333
+ * [remove_download_queue_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/downloadqueue/README.md#remove_download_queue_items) - Delete download queue items
334
+ * [get_download_queue_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/downloadqueue/README.md#get_download_queue_items) - Get download queue items
335
+ * [restart_processing_download_queue_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/downloadqueue/README.md#restart_processing_download_queue_items) - Restart processing of items from the decision
336
+
337
+ ### [DVRs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/dvrs/README.md)
338
+
339
+ * [list_dv_rs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/dvrs/README.md#list_dv_rs) - Get DVRs
340
+ * [create_dvr](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/dvrs/README.md#create_dvr) - Create a DVR
341
+ * [delete_dvr](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/dvrs/README.md#delete_dvr) - Delete a single DVR
342
+ * [get_dvr](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/dvrs/README.md#get_dvr) - Get a single DVR
343
+ * [delete_lineup](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/dvrs/README.md#delete_lineup) - Delete a DVR Lineup
344
+ * [add_lineup](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/dvrs/README.md#add_lineup) - Add a DVR Lineup
345
+ * [set_dvr_preferences](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/dvrs/README.md#set_dvr_preferences) - Set DVR preferences
346
+ * [stop_dvr_reload](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/dvrs/README.md#stop_dvr_reload) - Tell a DVR to stop reloading program guide
347
+ * [reload_guide](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/dvrs/README.md#reload_guide) - Tell a DVR to reload program guide
348
+ * [tune_channel](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/dvrs/README.md#tune_channel) - Tune a channel on a DVR
349
+ * [remove_device_from_dvr](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/dvrs/README.md#remove_device_from_dvr) - Remove a device from an existing DVR
350
+ * [add_device_to_dvr](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/dvrs/README.md#add_device_to_dvr) - Add a device to an existing DVR
351
+
352
+ ### [Epg](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/epg/README.md)
353
+
354
+ * [compute_channel_map](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/epg/README.md#compute_channel_map) - Compute the best channel map
355
+ * [get_channels](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/epg/README.md#get_channels) - Get channels for a lineup
356
+ * [get_countries](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/epg/README.md#get_countries) - Get all countries
357
+ * [get_all_languages](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/epg/README.md#get_all_languages) - Get all languages
358
+ * [get_lineup](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/epg/README.md#get_lineup) - Compute the best lineup
359
+ * [get_lineup_channels](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/epg/README.md#get_lineup_channels) - Get the channels for mulitple lineups
360
+ * [get_countries_lineups](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/epg/README.md#get_countries_lineups) - Get lineups for a country via postal code
361
+ * [get_country_regions](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/epg/README.md#get_country_regions) - Get regions for a country
362
+ * [list_lineups](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/epg/README.md#list_lineups) - Get lineups for a region
363
+
364
+ ### [Events](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/events/README.md)
365
+
366
+ * [get_notifications](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/events/README.md#get_notifications) - Connect to Eventsource
367
+ * [connect_web_socket](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/events/README.md#connect_web_socket) - Connect to WebSocket
368
+
369
+ ### [General](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/general/README.md)
370
+
371
+ * [get_server_info](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/general/README.md#get_server_info) - Get PMS info
372
+ * [get_identity](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/general/README.md#get_identity) - Get PMS identity
373
+ * [get_source_connection_information](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/general/README.md#get_source_connection_information) - Get Source Connection Information
374
+ * [get_transient_token](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/general/README.md#get_transient_token) - Get Transient Tokens
375
+
376
+ ### [Hubs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md)
377
+
378
+ * [get_all_hubs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#get_all_hubs) - Get global hubs
379
+ * [get_continue_watching](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#get_continue_watching) - Get the continue watching hub
380
+ * [get_hub_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#get_hub_items) - Get a hub's items
381
+ * [get_promoted_hubs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#get_promoted_hubs) - Get the hubs which are promoted
382
+ * [get_metadata_hubs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#get_metadata_hubs) - Get hubs for section by metadata item
383
+ * [get_postplay_hubs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#get_postplay_hubs) - Get postplay hubs
384
+ * [get_related_hubs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#get_related_hubs) - Get related hubs
385
+ * [get_section_hubs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#get_section_hubs) - Get section hubs
386
+ * [reset_section_defaults](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#reset_section_defaults) - Reset hubs to defaults
387
+ * [list_hubs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#list_hubs) - Get hubs
388
+ * [create_custom_hub](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#create_custom_hub) - Create a custom hub
389
+ * [move_hub](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#move_hub) - Move Hub
390
+ * [delete_custom_hub](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#delete_custom_hub) - Delete a custom hub
391
+ * [update_hub_visibility](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/hubs/README.md#update_hub_visibility) - Change hub visibility
392
+
393
+ ### [Library](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md)
394
+
395
+ * [get_library_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_library_items) - Get all items in library
396
+ * [delete_caches](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#delete_caches) - Delete library caches
397
+ * [clean_bundles](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#clean_bundles) - Clean bundles
398
+ * [ingest_transient_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#ingest_transient_item) - Ingest a transient item
399
+ * [get_library_matches](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_library_matches) - Get library matches
400
+ * [optimize_database](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#optimize_database) - Optimize the Database
401
+ * [get_random_artwork](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_random_artwork) - Get random artwork
402
+ * [get_sections](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_sections) - Get library sections (main Media Provider Only)
403
+ * [add_section](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#add_section) - Add a library section
404
+ * [stop_all_refreshes](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#stop_all_refreshes) - Stop refresh
405
+ * [get_sections_prefs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_sections_prefs) - Get section prefs
406
+ * [refresh_sections_metadata](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#refresh_sections_metadata) - Refresh all sections
407
+ * [get_tags](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_tags) - Get all library tags of a type
408
+ * [delete_metadata_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#delete_metadata_item) - Delete a metadata item
409
+ * [edit_metadata_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#edit_metadata_item) - Edit a metadata item
410
+ * [detect_ads](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#detect_ads) - Ad-detect an item
411
+ * [get_all_item_leaves](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_all_item_leaves) - Get the leaves of an item
412
+ * [analyze_metadata](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#analyze_metadata) - Analyze an item
413
+ * [generate_thumbs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#generate_thumbs) - Generate thumbs of chapters for an item
414
+ * [detect_credits](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#detect_credits) - Credit detect a metadata item
415
+ * [get_extras](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_extras) - Get an item's extras
416
+ * [add_extras](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#add_extras) - Add to an item's extras
417
+ * [get_file](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_file) - Get a file from a metadata or media bundle
418
+ * [start_bif_generation](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#start_bif_generation) - Start BIF generation of an item
419
+ * [detect_intros](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#detect_intros) - Intro detect an item
420
+ * [create_marker](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#create_marker) - Create a marker
421
+ * [match_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#match_item) - Match a metadata item
422
+ * [list_matches](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#list_matches) - Get metadata matches for an item
423
+ * [merge_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#merge_items) - Merge a metadata item
424
+ * [list_sonically_similar](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#list_sonically_similar) - Get nearest tracks to metadata item
425
+ * [set_item_preferences](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#set_item_preferences) - Set metadata preferences
426
+ * [refresh_items_metadata](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#refresh_items_metadata) - Refresh a metadata item
427
+ * [get_related_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_related_items) - Get related items
428
+ * [list_similar](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#list_similar) - Get similar items
429
+ * [split_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#split_item) - Split a metadata item
430
+ * [add_subtitles](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#add_subtitles) - Add subtitles
431
+ * [get_item_tree](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_item_tree) - Get metadata items as a tree
432
+ * [unmatch](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#unmatch) - Unmatch a metadata item
433
+ * [list_top_users](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#list_top_users) - Get metadata top users
434
+ * [detect_voice_activity](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#detect_voice_activity) - Detect voice activity
435
+ * [get_augmentation_status](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_augmentation_status) - Get augmentation status
436
+ * [set_stream_selection](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#set_stream_selection) - Set stream selection
437
+ * [get_person](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_person) - Get person details
438
+ * [list_person_media](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#list_person_media) - Get media for a person
439
+ * [delete_library_section](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#delete_library_section) - Delete a library section
440
+ * [get_library_details](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_library_details) - Get a library section by id
441
+ * [edit_section](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#edit_section) - Edit a library section
442
+ * [update_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#update_items) - Set the fields of the filtered items
443
+ * [start_analysis](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#start_analysis) - Analyze a section
444
+ * [autocomplete](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#autocomplete) - Get autocompletions for search
445
+ * [get_collections](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_collections) - Get collections in a section
446
+ * [get_common](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_common) - Get common fields for items
447
+ * [empty_trash](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#empty_trash) - Empty section trash
448
+ * [get_section_filters](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_section_filters) - Get section filters
449
+ * [get_first_characters](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_first_characters) - Get list of first characters
450
+ * [delete_indexes](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#delete_indexes) - Delete section indexes
451
+ * [delete_intros](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#delete_intros) - Delete section intro markers
452
+ * [get_section_preferences](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_section_preferences) - Get section prefs
453
+ * [set_section_preferences](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#set_section_preferences) - Set section prefs
454
+ * [cancel_refresh](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#cancel_refresh) - Cancel section refresh
455
+ * [refresh_section](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#refresh_section) - Refresh section
456
+ * [get_available_sorts](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_available_sorts) - Get a section sorts
457
+ * [get_stream_levels](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_stream_levels) - Get loudness about a stream in json
458
+ * [get_stream_loudness](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_stream_loudness) - Get loudness about a stream
459
+ * [get_chapter_image](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_chapter_image) - Get a chapter image
460
+ * [set_item_artwork](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#set_item_artwork) - Set an item's artwork, theme, etc
461
+ * [update_item_artwork](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#update_item_artwork) - Set an item's artwork, theme, etc
462
+ * [delete_marker](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#delete_marker) - Delete a marker
463
+ * [edit_marker](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#edit_marker) - Edit a marker
464
+ * [delete_media_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#delete_media_item) - Delete a media item
465
+ * [get_part_index](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_part_index) - Get BIF index for a part
466
+ * [delete_collection](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#delete_collection) - Delete a collection
467
+ * [get_section_image](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_section_image) - Get a section composite image
468
+ * [delete_stream](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#delete_stream) - Delete a stream
469
+ * [get_stream](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_stream) - Get a stream
470
+ * [set_stream_offset](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#set_stream_offset) - Set a stream offset
471
+ * [get_item_artwork](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_item_artwork) - Get an item's artwork, theme, etc
472
+ * [get_media_part](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_media_part) - Get a media part
473
+ * [get_image_from_bif](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/library/README.md#get_image_from_bif) - Get an image from part BIF
474
+
475
+ ### [LibraryCollections](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/librarycollections/README.md)
476
+
477
+ * [add_collection_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/librarycollections/README.md#add_collection_items) - Add items to a collection
478
+ * [delete_collection_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/librarycollections/README.md#delete_collection_item) - Delete an item from a collection
479
+ * [move_collection_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/librarycollections/README.md#move_collection_item) - Reorder an item in the collection
480
+
481
+ ### [LibraryPlaylists](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md)
482
+
483
+ * [create_playlist](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md#create_playlist) - Create a Playlist
484
+ * [upload_playlist](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md#upload_playlist) - Upload
485
+ * [delete_playlist](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md#delete_playlist) - Delete a Playlist
486
+ * [update_playlist](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md#update_playlist) - Editing a Playlist
487
+ * [get_playlist_generators](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md#get_playlist_generators) - Get a playlist's generators
488
+ * [clear_playlist_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md#clear_playlist_items) - Clearing a playlist
489
+ * [add_playlist_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md#add_playlist_items) - Adding to a Playlist
490
+ * [delete_playlist_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md#delete_playlist_item) - Delete a Generator
491
+ * [get_playlist_generator](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md#get_playlist_generator) - Get a playlist generator
492
+ * [modify_playlist_generator](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md#modify_playlist_generator) - Modify a Generator
493
+ * [get_playlist_generator_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md#get_playlist_generator_items) - Get a playlist generator's items
494
+ * [move_playlist_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md#move_playlist_item) - Moving items in a playlist
495
+ * [refresh_playlist](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/libraryplaylists/README.md#refresh_playlist) - Reprocess a generator
496
+
497
+ ### [LiveTV](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/livetv/README.md)
498
+
499
+ * [get_sessions](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/livetv/README.md#get_sessions) - Get all sessions
500
+ * [get_live_tv_session](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/livetv/README.md#get_live_tv_session) - Get a single session
501
+ * [get_session_playlist_index](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/livetv/README.md#get_session_playlist_index) - Get a session playlist index
502
+ * [get_session_segment](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/livetv/README.md#get_session_segment) - Get a single session segment
503
+
504
+ ### [Log](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/log/README.md)
505
+
506
+ * [write_log](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/log/README.md#write_log) - Logging a multi-line message to the Plex Media Server log
507
+ * [write_message](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/log/README.md#write_message) - Logging a single-line message to the Plex Media Server log
508
+ * [enable_papertrail](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/log/README.md#enable_papertrail) - Enabling Papertrail
509
+
510
+ ### [PlayQueue](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playqueue/README.md)
511
+
512
+ * [create_play_queue](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playqueue/README.md#create_play_queue) - Create a play queue
513
+ * [get_play_queue](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playqueue/README.md#get_play_queue) - Retrieve a play queue
514
+ * [add_to_play_queue](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playqueue/README.md#add_to_play_queue) - Add a generator or playlist to a play queue
515
+ * [clear_play_queue](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playqueue/README.md#clear_play_queue) - Clear a play queue
516
+ * [reset_play_queue](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playqueue/README.md#reset_play_queue) - Reset a play queue
517
+ * [shuffle](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playqueue/README.md#shuffle) - Shuffle a play queue
518
+ * [unshuffle](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playqueue/README.md#unshuffle) - Unshuffle a play queue
519
+ * [delete_play_queue_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playqueue/README.md#delete_play_queue_item) - Delete an item from a play queue
520
+ * [move_play_queue_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playqueue/README.md#move_play_queue_item) - Move an item in a play queue
521
+
522
+ ### [Playlist](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playlist/README.md)
523
+
524
+ * [list_playlists](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playlist/README.md#list_playlists) - List playlists
525
+ * [get_playlist](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playlist/README.md#get_playlist) - Retrieve Playlist
526
+ * [get_playlist_items](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/playlist/README.md#get_playlist_items) - Retrieve Playlist Contents
527
+
528
+ ### [Plex](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/plex/README.md)
529
+
530
+ * [get_server_resources](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/plex/README.md#get_server_resources) - Get Server Resources
531
+
532
+ ### [Preferences](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/preferences/README.md)
533
+
534
+ * [get_all_preferences](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/preferences/README.md#get_all_preferences) - Get all preferences
535
+ * [set_preferences](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/preferences/README.md#set_preferences) - Set preferences
536
+ * [get_preference](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/preferences/README.md#get_preference) - Get a preferences
537
+
538
+ ### [Provider](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/provider/README.md)
539
+
540
+ * [list_providers](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/provider/README.md#list_providers) - Get the list of available media providers
541
+ * [add_provider](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/provider/README.md#add_provider) - Add a media provider
542
+ * [refresh_providers](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/provider/README.md#refresh_providers) - Refresh media providers
543
+ * [delete_media_provider](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/provider/README.md#delete_media_provider) - Delete a media provider
544
+
545
+ ### [Rate](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/rate/README.md)
546
+
547
+ * [set_rating](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/rate/README.md#set_rating) - Rate an item
548
+
549
+ ### [Search](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/search/README.md)
550
+
551
+ * [search_hubs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/search/README.md#search_hubs) - Search Hub
552
+ * [voice_search_hubs](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/search/README.md#voice_search_hubs) - Voice Search Hub
553
+
554
+ ### [Status](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/status/README.md)
555
+
556
+ * [list_sessions](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/status/README.md#list_sessions) - List Sessions
557
+ * [get_background_tasks](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/status/README.md#get_background_tasks) - Get background tasks
558
+ * [list_playback_history](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/status/README.md#list_playback_history) - List Playback History
559
+ * [terminate_session](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/status/README.md#terminate_session) - Terminate a session
560
+ * [delete_history](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/status/README.md#delete_history) - Delete Single History Item
561
+ * [get_history_item](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/status/README.md#get_history_item) - Get Single History Item
562
+
563
+ ### [Subscriptions](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/subscriptions/README.md)
564
+
565
+ * [get_all_subscriptions](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/subscriptions/README.md#get_all_subscriptions) - Get all subscriptions
566
+ * [create_subscription](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/subscriptions/README.md#create_subscription) - Create a subscription
567
+ * [process_subscriptions](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/subscriptions/README.md#process_subscriptions) - Process all subscriptions
568
+ * [get_scheduled_recordings](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/subscriptions/README.md#get_scheduled_recordings) - Get all scheduled recordings
569
+ * [get_template](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/subscriptions/README.md#get_template) - Get the subscription template
570
+ * [cancel_grab](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/subscriptions/README.md#cancel_grab) - Cancel an existing grab
571
+ * [delete_subscription](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/subscriptions/README.md#delete_subscription) - Delete a subscription
572
+ * [get_subscription](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/subscriptions/README.md#get_subscription) - Get a single subscription
573
+ * [edit_subscription_preferences](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/subscriptions/README.md#edit_subscription_preferences) - Edit a subscription
574
+ * [reorder_subscription](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/subscriptions/README.md#reorder_subscription) - Re-order a subscription
575
+
576
+ ### [Timeline](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/timeline/README.md)
577
+
578
+ * [mark_played](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/timeline/README.md#mark_played) - Mark an item as played
579
+ * [report](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/timeline/README.md#report) - Report media timeline
580
+ * [unscrobble](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/timeline/README.md#unscrobble) - Mark an item as unplayed
581
+
582
+ ### [Transcoder](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/transcoder/README.md)
583
+
584
+ * [transcode_image](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/transcoder/README.md#transcode_image) - Transcode an image
585
+ * [make_decision](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/transcoder/README.md#make_decision) - Make a decision on media playback
586
+ * [trigger_fallback](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/transcoder/README.md#trigger_fallback) - Manually trigger a transcoder fallback
587
+ * [transcode_subtitles](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/transcoder/README.md#transcode_subtitles) - Transcode subtitles
588
+ * [start_transcode_session](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/transcoder/README.md#start_transcode_session) - Start A Transcoding Session
589
+
590
+ ### [UltraBlur](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/ultrablur/README.md)
591
+
592
+ * [get_colors](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/ultrablur/README.md#get_colors) - Get UltraBlur Colors
593
+ * [get_image](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/ultrablur/README.md#get_image) - Get UltraBlur Image
594
+
595
+ ### [Updater](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/updater/README.md)
596
+
597
+ * [apply_updates](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/updater/README.md#apply_updates) - Applying updates
598
+ * [check_updates](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/updater/README.md#check_updates) - Checking for updates
599
+ * [get_updates_status](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/updater/README.md#get_updates_status) - Querying status of updates
600
+
601
+ ### [Users](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/users/README.md)
602
+
603
+ * [get_users](https://github.com/LukasParke/plexpy/blob/master/./docs/sdks/users/README.md#get_users) - Get list of all connected users
604
+
605
+ </details>
606
+ <!-- End Available Resources and Operations [operations] -->
607
+
608
+ <!-- Start File uploads [file-upload] -->
609
+ ## File uploads
610
+
611
+ Certain SDK methods accept file objects as part of a request body or multi-part request. It is possible and typically recommended to upload files as a stream rather than reading the entire contents into memory. This avoids excessive memory consumption and potentially crashing with out-of-memory errors when working with very large files. The following example demonstrates how to attach a file stream to a request.
612
+
613
+ > [!TIP]
614
+ >
615
+ > For endpoints that handle file uploads bytes arrays can also be used. However, using streams is recommended for large files.
616
+ >
617
+
618
+ ```python
619
+ from plex_api_client import PlexAPI
620
+
621
+
622
+ with PlexAPI(
623
+ token="<YOUR_API_KEY_HERE>",
624
+ ) as plex_api:
625
+
626
+ res = plex_api.log.write_log(request=open("example.file", "rb"))
627
+
628
+ assert res is not None
629
+
630
+ # Handle response
631
+ print(res)
632
+
633
+ ```
634
+ <!-- End File uploads [file-upload] -->
635
+
636
+ <!-- Start Retries [retries] -->
637
+ ## Retries
638
+
639
+ Some of the endpoints in this SDK support retries. If you use the SDK without any configuration, it will fall back to the default retry strategy provided by the API. However, the default retry strategy can be overridden on a per-operation basis, or across the entire SDK.
640
+
641
+ To change the default retry strategy for a single API call, simply provide a `RetryConfig` object to the call:
642
+ ```python
643
+ from plex_api_client import PlexAPI
644
+ from plex_api_client.models import components
645
+ from plex_api_client.utils import BackoffStrategy, RetryConfig
646
+
647
+
648
+ with PlexAPI(
649
+ accepts=components.Accepts.APPLICATION_XML,
650
+ client_identifier="abc123",
651
+ product="Plex for Roku",
652
+ version="2.4.1",
653
+ platform="Roku",
654
+ platform_version="4.3 build 1057",
655
+ device="Roku 3",
656
+ model="4200X",
657
+ device_vendor="Roku",
658
+ device_name="Living Room TV",
659
+ marketplace="googlePlay",
660
+ token="<YOUR_API_KEY_HERE>",
661
+ ) as plex_api:
662
+
663
+ res = plex_api.general.get_server_info(request={},
664
+ RetryConfig("backoff", BackoffStrategy(1, 50, 1.1, 100), False))
665
+
666
+ assert res.media_container_with_directory is not None
667
+
668
+ # Handle response
669
+ print(res.media_container_with_directory)
670
+
671
+ ```
672
+
673
+ If you'd like to override the default retry strategy for all operations that support retries, you can use the `retry_config` optional parameter when initializing the SDK:
674
+ ```python
675
+ from plex_api_client import PlexAPI
676
+ from plex_api_client.models import components
677
+ from plex_api_client.utils import BackoffStrategy, RetryConfig
678
+
679
+
680
+ with PlexAPI(
681
+ retry_config=RetryConfig("backoff", BackoffStrategy(1, 50, 1.1, 100), False),
682
+ accepts=components.Accepts.APPLICATION_XML,
683
+ client_identifier="abc123",
684
+ product="Plex for Roku",
685
+ version="2.4.1",
686
+ platform="Roku",
687
+ platform_version="4.3 build 1057",
688
+ device="Roku 3",
689
+ model="4200X",
690
+ device_vendor="Roku",
691
+ device_name="Living Room TV",
692
+ marketplace="googlePlay",
693
+ token="<YOUR_API_KEY_HERE>",
694
+ ) as plex_api:
695
+
696
+ res = plex_api.general.get_server_info(request={})
697
+
698
+ assert res.media_container_with_directory is not None
699
+
700
+ # Handle response
701
+ print(res.media_container_with_directory)
702
+
703
+ ```
704
+ <!-- End Retries [retries] -->
705
+
706
+ <!-- Start Error Handling [errors] -->
707
+ ## Error Handling
708
+
709
+ [`PlexAPIError`](https://github.com/LukasParke/plexpy/blob/master/././src/plex_api_client/models/errors/plexapierror.py) is the base class for all HTTP error responses. It has the following properties:
710
+
711
+ | Property | Type | Description |
712
+ | ------------------ | ---------------- | --------------------------------------------------------------------------------------- |
713
+ | `err.message` | `str` | Error message |
714
+ | `err.status_code` | `int` | HTTP response status code eg `404` |
715
+ | `err.headers` | `httpx.Headers` | HTTP response headers |
716
+ | `err.body` | `str` | HTTP body. Can be empty string if no body is returned. |
717
+ | `err.raw_response` | `httpx.Response` | Raw HTTP response |
718
+ | `err.data` | | Optional. Some errors may contain structured data. [See Error Classes](https://github.com/LukasParke/plexpy/blob/master/./#error-classes). |
719
+
720
+ ### Example
721
+ ```python
722
+ from plex_api_client import PlexAPI
723
+ from plex_api_client.models import components, errors
724
+
725
+
726
+ with PlexAPI(
727
+ accepts=components.Accepts.APPLICATION_XML,
728
+ client_identifier="abc123",
729
+ product="Plex for Roku",
730
+ version="2.4.1",
731
+ platform="Roku",
732
+ platform_version="4.3 build 1057",
733
+ device="Roku 3",
734
+ model="4200X",
735
+ device_vendor="Roku",
736
+ device_name="Living Room TV",
737
+ marketplace="googlePlay",
738
+ token="<YOUR_API_KEY_HERE>",
739
+ ) as plex_api:
740
+ res = None
741
+ try:
742
+
743
+ res = plex_api.authentication.get_token_details(request={})
744
+
745
+ assert res.user_plex_account is not None
746
+
747
+ # Handle response
748
+ print(res.user_plex_account)
749
+
750
+
751
+ except errors.PlexAPIError as e:
752
+ # The base class for HTTP error responses
753
+ print(e.message)
754
+ print(e.status_code)
755
+ print(e.body)
756
+ print(e.headers)
757
+ print(e.raw_response)
758
+
759
+ # Depending on the method different errors may be thrown
760
+ if isinstance(e, errors.GetTokenDetailsBadRequest):
761
+ print(e.data.errors) # Optional[List[errors.Errors]]
762
+ print(e.data.raw_response) # Optional[httpx.Response]
763
+ ```
764
+
765
+ ### Error Classes
766
+ **Primary error:**
767
+ * [`PlexAPIError`](https://github.com/LukasParke/plexpy/blob/master/././src/plex_api_client/models/errors/plexapierror.py): The base class for HTTP error responses.
768
+
769
+ <details><summary>Less common errors (12)</summary>
770
+
771
+ <br />
772
+
773
+ **Network errors:**
774
+ * [`httpx.RequestError`](https://www.python-httpx.org/exceptions/#httpx.RequestError): Base class for request errors.
775
+ * [`httpx.ConnectError`](https://www.python-httpx.org/exceptions/#httpx.ConnectError): HTTP client was unable to make a request to a server.
776
+ * [`httpx.TimeoutException`](https://www.python-httpx.org/exceptions/#httpx.TimeoutException): HTTP request timed out.
777
+
778
+
779
+ **Inherit from [`PlexAPIError`](https://github.com/LukasParke/plexpy/blob/master/././src/plex_api_client/models/errors/plexapierror.py)**:
780
+ * [`GetTokenDetailsBadRequest`](https://github.com/LukasParke/plexpy/blob/master/././src/plex_api_client/models/errors/gettokendetailsbadrequest.py): Bad Request - A parameter was not specified, or was specified incorrectly. Status code `400`. Applicable to 1 of 241 methods.*
781
+ * [`PostUsersSignInDataBadRequest`](https://github.com/LukasParke/plexpy/blob/master/././src/plex_api_client/models/errors/postuserssignindatabadrequest.py): Bad Request - A parameter was not specified, or was specified incorrectly. Status code `400`. Applicable to 1 of 241 methods.*
782
+ * [`GetUsersBadRequest`](https://github.com/LukasParke/plexpy/blob/master/././src/plex_api_client/models/errors/getusersbadrequest.py): Bad Request - A parameter was not specified, or was specified incorrectly. Status code `400`. Applicable to 1 of 241 methods.*
783
+ * [`GetTokenDetailsUnauthorized`](https://github.com/LukasParke/plexpy/blob/master/././src/plex_api_client/models/errors/gettokendetailsunauthorized.py): Unauthorized - Returned if the X-Plex-Token is missing from the header or query. Status code `401`. Applicable to 1 of 241 methods.*
784
+ * [`PostUsersSignInDataUnauthorized`](https://github.com/LukasParke/plexpy/blob/master/././src/plex_api_client/models/errors/postuserssignindataunauthorized.py): Unauthorized - Returned if the X-Plex-Token is missing from the header or query. Status code `401`. Applicable to 1 of 241 methods.*
785
+ * [`GetUsersUnauthorized`](https://github.com/LukasParke/plexpy/blob/master/././src/plex_api_client/models/errors/getusersunauthorized.py): Unauthorized - Returned if the X-Plex-Token is missing from the header or query. Status code `401`. Applicable to 1 of 241 methods.*
786
+ * [`GetServerResourcesUnauthorized`](https://github.com/LukasParke/plexpy/blob/master/././src/plex_api_client/models/errors/getserverresourcesunauthorized.py): Unauthorized - Returned if the X-Plex-Token is missing from the header or query. Status code `401`. Applicable to 1 of 241 methods.*
787
+ * [`ResponseValidationError`](https://github.com/LukasParke/plexpy/blob/master/././src/plex_api_client/models/errors/responsevalidationerror.py): Type mismatch between the response data and the expected Pydantic model. Provides access to the Pydantic validation error via the `cause` attribute.
788
+
789
+ </details>
790
+
791
+ \* Check [the method documentation](https://github.com/LukasParke/plexpy/blob/master/./#available-resources-and-operations) to see if the error is applicable.
792
+ <!-- End Error Handling [errors] -->
793
+
794
+ <!-- Start Server Selection [server] -->
795
+ ## Server Selection
796
+
797
+ ### Select Server by Index
798
+
799
+ You can override the default server globally by passing a server index to the `server_idx: int` optional parameter when initializing the SDK client instance. The selected server will then be used as the default on the operations that use it. This table lists the indexes associated with the available servers:
800
+
801
+ | # | Server | Variables | Description |
802
+ | --- | ---------------------------------------------------------- | -------------------------------------------- | ----------- |
803
+ | 0 | `https://{IP-description}.{identifier}.plex.direct:{port}` | `identifier`<br/>`IP-description`<br/>`port` | |
804
+ | 1 | `{protocol}://{host}:{port}` | `protocol`<br/>`host`<br/>`port` | |
805
+ | 2 | `https://{full_server_url}` | `full_server_url` | |
806
+
807
+ If the selected server has variables, you may override its default values through the additional parameters made available in the SDK constructor:
808
+
809
+ | Variable | Parameter | Default | Description |
810
+ | ----------------- | ---------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
811
+ | `identifier` | `identifier: str` | `"0123456789abcdef0123456789abcdef"` | The unique identifier of this particular PMS |
812
+ | `IP-description` | `ip_description: str` | `"1-2-3-4"` | A `-` separated string of the IPv4 or IPv6 address components |
813
+ | `port` | `port: str` | `"32400"` | The Port number configured on the PMS. Typically (`32400`). <br/>If using a reverse proxy, this would be the port number configured on the proxy.<br/> |
814
+ | `protocol` | `protocol: str` | `"http"` | The network protocol to use. Typically (`http` or `https`) |
815
+ | `host` | `host: str` | `"localhost"` | The Host of the PMS.<br/>If using on a local network, this is the internal IP address of the server hosting the PMS.<br/>If using on an external network, this is the external IP address for your network, and requires port forwarding.<br/>If using a reverse proxy, this would be the external DNS domain for your network, and requires the proxy handle port forwarding. <br/> |
816
+ | `full_server_url` | `full_server_url: str` | `"http://localhost:32400"` | The full manual URL to access the PMS |
817
+
818
+ #### Example
819
+
820
+ ```python
821
+ from plex_api_client import PlexAPI
822
+ from plex_api_client.models import components
823
+
824
+
825
+ with PlexAPI(
826
+ server_idx=0,
827
+ identifier="0123456789abcdef0123456789abcdef",
828
+ ip_description="1-2-3-4",
829
+ port="32400",
830
+ accepts=components.Accepts.APPLICATION_XML,
831
+ client_identifier="abc123",
832
+ product="Plex for Roku",
833
+ version="2.4.1",
834
+ platform="Roku",
835
+ platform_version="4.3 build 1057",
836
+ device="Roku 3",
837
+ model="4200X",
838
+ device_vendor="Roku",
839
+ device_name="Living Room TV",
840
+ marketplace="googlePlay",
841
+ token="<YOUR_API_KEY_HERE>",
842
+ ) as plex_api:
843
+
844
+ res = plex_api.general.get_server_info(request={})
845
+
846
+ assert res.media_container_with_directory is not None
847
+
848
+ # Handle response
849
+ print(res.media_container_with_directory)
850
+
851
+ ```
852
+
853
+ ### Override Server URL Per-Client
854
+
855
+ The default server can also be overridden globally by passing a URL to the `server_url: str` optional parameter when initializing the SDK client instance. For example:
856
+ ```python
857
+ from plex_api_client import PlexAPI
858
+ from plex_api_client.models import components
859
+
860
+
861
+ with PlexAPI(
862
+ server_url="https://http://localhost:32400",
863
+ accepts=components.Accepts.APPLICATION_XML,
864
+ client_identifier="abc123",
865
+ product="Plex for Roku",
866
+ version="2.4.1",
867
+ platform="Roku",
868
+ platform_version="4.3 build 1057",
869
+ device="Roku 3",
870
+ model="4200X",
871
+ device_vendor="Roku",
872
+ device_name="Living Room TV",
873
+ marketplace="googlePlay",
874
+ token="<YOUR_API_KEY_HERE>",
875
+ ) as plex_api:
876
+
877
+ res = plex_api.general.get_server_info(request={})
878
+
879
+ assert res.media_container_with_directory is not None
880
+
881
+ # Handle response
882
+ print(res.media_container_with_directory)
883
+
884
+ ```
885
+
886
+ ### Override Server URL Per-Operation
887
+
888
+ The server URL can also be overridden on a per-operation basis, provided a server list was specified for the operation. For example:
889
+ ```python
890
+ from plex_api_client import PlexAPI
891
+ from plex_api_client.models import components
892
+
893
+
894
+ with PlexAPI(
895
+ accepts=components.Accepts.APPLICATION_XML,
896
+ client_identifier="abc123",
897
+ product="Plex for Roku",
898
+ version="2.4.1",
899
+ platform="Roku",
900
+ platform_version="4.3 build 1057",
901
+ device="Roku 3",
902
+ model="4200X",
903
+ device_vendor="Roku",
904
+ device_name="Living Room TV",
905
+ marketplace="googlePlay",
906
+ token="<YOUR_API_KEY_HERE>",
907
+ ) as plex_api:
908
+
909
+ res = plex_api.authentication.get_token_details(request={}, server_url="https://plex.tv/api/v2")
910
+
911
+ assert res.user_plex_account is not None
912
+
913
+ # Handle response
914
+ print(res.user_plex_account)
915
+
916
+ ```
917
+ <!-- End Server Selection [server] -->
918
+
919
+ <!-- Start Custom HTTP Client [http-client] -->
920
+ ## Custom HTTP Client
921
+
922
+ The Python SDK makes API calls using the [httpx](https://www.python-httpx.org/) HTTP library. In order to provide a convenient way to configure timeouts, cookies, proxies, custom headers, and other low-level configuration, you can initialize the SDK client with your own HTTP client instance.
923
+ Depending on whether you are using the sync or async version of the SDK, you can pass an instance of `HttpClient` or `AsyncHttpClient` respectively, which are Protocol's ensuring that the client has the necessary methods to make API calls.
924
+ This allows you to wrap the client with your own custom logic, such as adding custom headers, logging, or error handling, or you can just pass an instance of `httpx.Client` or `httpx.AsyncClient` directly.
925
+
926
+ For example, you could specify a header for every request that this sdk makes as follows:
927
+ ```python
928
+ from plex_api_client import PlexAPI
929
+ import httpx
930
+
931
+ http_client = httpx.Client(headers={"x-custom-header": "someValue"})
932
+ s = PlexAPI(client=http_client)
933
+ ```
934
+
935
+ or you could wrap the client with your own custom logic:
936
+ ```python
937
+ from plex_api_client import PlexAPI
938
+ from plex_api_client.httpclient import AsyncHttpClient
939
+ import httpx
940
+
941
+ class CustomClient(AsyncHttpClient):
942
+ client: AsyncHttpClient
943
+
944
+ def __init__(self, client: AsyncHttpClient):
945
+ self.client = client
946
+
947
+ async def send(
948
+ self,
949
+ request: httpx.Request,
950
+ *,
951
+ stream: bool = False,
952
+ auth: Union[
953
+ httpx._types.AuthTypes, httpx._client.UseClientDefault, None
954
+ ] = httpx.USE_CLIENT_DEFAULT,
955
+ follow_redirects: Union[
956
+ bool, httpx._client.UseClientDefault
957
+ ] = httpx.USE_CLIENT_DEFAULT,
958
+ ) -> httpx.Response:
959
+ request.headers["Client-Level-Header"] = "added by client"
960
+
961
+ return await self.client.send(
962
+ request, stream=stream, auth=auth, follow_redirects=follow_redirects
963
+ )
964
+
965
+ def build_request(
966
+ self,
967
+ method: str,
968
+ url: httpx._types.URLTypes,
969
+ *,
970
+ content: Optional[httpx._types.RequestContent] = None,
971
+ data: Optional[httpx._types.RequestData] = None,
972
+ files: Optional[httpx._types.RequestFiles] = None,
973
+ json: Optional[Any] = None,
974
+ params: Optional[httpx._types.QueryParamTypes] = None,
975
+ headers: Optional[httpx._types.HeaderTypes] = None,
976
+ cookies: Optional[httpx._types.CookieTypes] = None,
977
+ timeout: Union[
978
+ httpx._types.TimeoutTypes, httpx._client.UseClientDefault
979
+ ] = httpx.USE_CLIENT_DEFAULT,
980
+ extensions: Optional[httpx._types.RequestExtensions] = None,
981
+ ) -> httpx.Request:
982
+ return self.client.build_request(
983
+ method,
984
+ url,
985
+ content=content,
986
+ data=data,
987
+ files=files,
988
+ json=json,
989
+ params=params,
990
+ headers=headers,
991
+ cookies=cookies,
992
+ timeout=timeout,
993
+ extensions=extensions,
994
+ )
995
+
996
+ s = PlexAPI(async_client=CustomClient(httpx.AsyncClient()))
997
+ ```
998
+ <!-- End Custom HTTP Client [http-client] -->
999
+
1000
+ <!-- Start Authentication [security] -->
1001
+ ## Authentication
1002
+
1003
+ ### Per-Client Security Schemes
1004
+
1005
+ This SDK supports the following security scheme globally:
1006
+
1007
+ | Name | Type | Scheme |
1008
+ | ------- | ------ | ------- |
1009
+ | `token` | apiKey | API key |
1010
+
1011
+ To authenticate with the API the `token` parameter must be set when initializing the SDK client instance. For example:
1012
+ ```python
1013
+ from plex_api_client import PlexAPI
1014
+ from plex_api_client.models import components
1015
+
1016
+
1017
+ with PlexAPI(
1018
+ token="<YOUR_API_KEY_HERE>",
1019
+ accepts=components.Accepts.APPLICATION_XML,
1020
+ client_identifier="abc123",
1021
+ product="Plex for Roku",
1022
+ version="2.4.1",
1023
+ platform="Roku",
1024
+ platform_version="4.3 build 1057",
1025
+ device="Roku 3",
1026
+ model="4200X",
1027
+ device_vendor="Roku",
1028
+ device_name="Living Room TV",
1029
+ marketplace="googlePlay",
1030
+ ) as plex_api:
1031
+
1032
+ res = plex_api.general.get_server_info(request={})
1033
+
1034
+ assert res.media_container_with_directory is not None
1035
+
1036
+ # Handle response
1037
+ print(res.media_container_with_directory)
1038
+
1039
+ ```
1040
+ <!-- End Authentication [security] -->
1041
+
1042
+ <!-- Start Resource Management [resource-management] -->
1043
+ ## Resource Management
1044
+
1045
+ The `PlexAPI` class implements the context manager protocol and registers a finalizer function to close the underlying sync and async HTTPX clients it uses under the hood. This will close HTTP connections, release memory and free up other resources held by the SDK. In short-lived Python programs and notebooks that make a few SDK method calls, resource management may not be a concern. However, in longer-lived programs, it is beneficial to create a single SDK instance via a [context manager][context-manager] and reuse it across the application.
1046
+
1047
+ [context-manager]: https://docs.python.org/3/reference/datamodel.html#context-managers
1048
+
1049
+ ```python
1050
+ from plex_api_client import PlexAPI
1051
+ from plex_api_client.models import components
1052
+ def main():
1053
+
1054
+ with PlexAPI(
1055
+ accepts=components.Accepts.APPLICATION_XML,
1056
+ client_identifier="abc123",
1057
+ product="Plex for Roku",
1058
+ version="2.4.1",
1059
+ platform="Roku",
1060
+ platform_version="4.3 build 1057",
1061
+ device="Roku 3",
1062
+ model="4200X",
1063
+ device_vendor="Roku",
1064
+ device_name="Living Room TV",
1065
+ marketplace="googlePlay",
1066
+ token="<YOUR_API_KEY_HERE>",
1067
+ ) as plex_api:
1068
+ # Rest of application here...
1069
+
1070
+
1071
+ # Or when using async:
1072
+ async def amain():
1073
+
1074
+ async with PlexAPI(
1075
+ accepts=components.Accepts.APPLICATION_XML,
1076
+ client_identifier="abc123",
1077
+ product="Plex for Roku",
1078
+ version="2.4.1",
1079
+ platform="Roku",
1080
+ platform_version="4.3 build 1057",
1081
+ device="Roku 3",
1082
+ model="4200X",
1083
+ device_vendor="Roku",
1084
+ device_name="Living Room TV",
1085
+ marketplace="googlePlay",
1086
+ token="<YOUR_API_KEY_HERE>",
1087
+ ) as plex_api:
1088
+ # Rest of application here...
1089
+ ```
1090
+ <!-- End Resource Management [resource-management] -->
1091
+
1092
+ <!-- Start Debugging [debug] -->
1093
+ ## Debugging
1094
+
1095
+ You can setup your SDK to emit debug logs for SDK requests and responses.
1096
+
1097
+ You can pass your own logger class directly into your SDK.
1098
+ ```python
1099
+ from plex_api_client import PlexAPI
1100
+ import logging
1101
+
1102
+ logging.basicConfig(level=logging.DEBUG)
1103
+ s = PlexAPI(debug_logger=logging.getLogger("plex_api_client"))
1104
+ ```
1105
+ <!-- End Debugging [debug] -->
1106
+
1107
+ <!-- Placeholder for Future Speakeasy SDK Sections -->
1108
+
1109
+ # Development
1110
+
1111
+ ## Maturity
1112
+
1113
+ This SDK is in beta, and there may be breaking changes between versions without a major version update. Therefore, we recommend pinning usage
1114
+ to a specific package version. This way, you can install the same version each time without breaking changes unless you are intentionally
1115
+ looking for the latest version.
1116
+
1117
+ ## Contributions
1118
+
1119
+ While we value open-source contributions to this SDK, this library is generated programmatically.
1120
+ Feel free to open a PR or a Github issue as a proof of concept and we'll do our best to include it in a future release!
1121
+
1122
+ ### SDK Created by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks)
1123
+