From 4318bd5e0fcb7764469168206b9588f4997c62f4 Mon Sep 17 00:00:00 2001 From: speakeasybot Date: Thu, 1 Feb 2024 01:15:48 +0000 Subject: [PATCH] ci: regenerated with OpenAPI Doc 0.0.3, Speakeasy CLI 1.161.0 --- .gitattributes | 2 + .gitignore | 6 + .speakeasy/gen.lock | 579 +++++++++++ README.md | 324 +++++++ RELEASES.md | 11 + USAGE.md | 16 + docs/models/components/security.md | 8 + .../errors/addplaylistcontentserrors.md | 10 + .../errors/addplaylistcontentsresponsebody.md | 11 + docs/models/errors/applyupdateserrors.md | 10 + .../models/errors/applyupdatesresponsebody.md | 11 + .../errors/cancelserveractivitieserrors.md | 10 + .../cancelserveractivitiesresponsebody.md | 11 + docs/models/errors/checkforupdateserrors.md | 10 + .../errors/checkforupdatesresponsebody.md | 11 + .../errors/clearplaylistcontentserrors.md | 10 + .../clearplaylistcontentsresponsebody.md | 11 + docs/models/errors/createplaylisterrors.md | 10 + .../errors/createplaylistresponsebody.md | 11 + docs/models/errors/deletelibraryerrors.md | 10 + .../errors/deletelibraryresponsebody.md | 11 + docs/models/errors/deleteplaylisterrors.md | 10 + .../errors/deleteplaylistresponsebody.md | 11 + docs/models/errors/enablepapertrailerrors.md | 10 + .../errors/enablepapertrailresponsebody.md | 11 + docs/models/errors/errors.md | 10 + .../errors/getavailableclientserrors.md | 10 + .../errors/getavailableclientsresponsebody.md | 11 + docs/models/errors/getbutlertaskserrors.md | 10 + .../errors/getbutlertasksresponsebody.md | 11 + docs/models/errors/getdeviceserrors.md | 10 + docs/models/errors/getdevicesresponsebody.md | 11 + docs/models/errors/getfilehasherrors.md | 10 + docs/models/errors/getfilehashresponsebody.md | 11 + docs/models/errors/getglobalhubserrors.md | 10 + .../errors/getglobalhubsresponsebody.md | 11 + docs/models/errors/getlibrarieserrors.md | 10 + .../models/errors/getlibrariesresponsebody.md | 11 + docs/models/errors/getlibraryerrors.md | 10 + docs/models/errors/getlibraryhubserrors.md | 10 + .../errors/getlibraryhubsresponsebody.md | 11 + docs/models/errors/getlibraryresponsebody.md | 11 + .../errors/getmetadatachildrenerrors.md | 10 + .../errors/getmetadatachildrenresponsebody.md | 11 + docs/models/errors/getmetadataerrors.md | 10 + docs/models/errors/getmetadataresponsebody.md | 11 + docs/models/errors/getmyplexaccounterrors.md | 10 + .../errors/getmyplexaccountresponsebody.md | 11 + docs/models/errors/getondeckerrors.md | 10 + docs/models/errors/getondeckresponsebody.md | 11 + docs/models/errors/getpinerrors.md | 10 + docs/models/errors/getpinresponsebody.md | 11 + .../errors/getplaylistcontentserrors.md | 10 + .../errors/getplaylistcontentsresponsebody.md | 11 + docs/models/errors/getplaylisterrors.md | 10 + docs/models/errors/getplaylistresponsebody.md | 11 + docs/models/errors/getplaylistserrors.md | 10 + .../models/errors/getplaylistsresponsebody.md | 11 + docs/models/errors/getrecentlyaddederrors.md | 10 + .../errors/getrecentlyaddedresponsebody.md | 11 + docs/models/errors/getresizedphotoerrors.md | 10 + .../errors/getresizedphotoresponsebody.md | 11 + docs/models/errors/getsearchresultserrors.md | 10 + .../errors/getsearchresultsresponsebody.md | 11 + .../errors/getserveractivitieserrors.md | 10 + .../errors/getserveractivitiesresponsebody.md | 11 + .../getservercapabilitiesresponsebody.md | 11 + docs/models/errors/getserveridentityerrors.md | 10 + .../errors/getserveridentityresponsebody.md | 11 + docs/models/errors/getserverlisterrors.md | 10 + .../errors/getserverlistresponsebody.md | 11 + .../errors/getserverpreferenceserrors.md | 10 + .../getserverpreferencesresponsebody.md | 11 + docs/models/errors/getsessionhistoryerrors.md | 10 + .../errors/getsessionhistoryresponsebody.md | 11 + docs/models/errors/getsessionserrors.md | 10 + docs/models/errors/getsessionsresponsebody.md | 11 + .../getsourceconnectioninformationerrors.md | 10 + ...sourceconnectioninformationresponsebody.md | 11 + docs/models/errors/gettimelineerrors.md | 10 + docs/models/errors/gettimelineresponsebody.md | 11 + docs/models/errors/gettokenerrors.md | 10 + docs/models/errors/gettokenresponsebody.md | 11 + .../errors/gettranscodesessionserrors.md | 10 + .../gettranscodesessionsresponsebody.md | 11 + docs/models/errors/gettransienttokenerrors.md | 10 + .../errors/gettransienttokenresponsebody.md | 11 + docs/models/errors/getupdatestatuserrors.md | 10 + .../errors/getupdatestatusresponsebody.md | 11 + docs/models/errors/loglineerrors.md | 10 + docs/models/errors/loglineresponsebody.md | 11 + docs/models/errors/logmultilineerrors.md | 10 + .../models/errors/logmultilineresponsebody.md | 11 + docs/models/errors/markplayederrors.md | 10 + docs/models/errors/markplayedresponsebody.md | 11 + docs/models/errors/markunplayederrors.md | 10 + .../models/errors/markunplayedresponsebody.md | 11 + docs/models/errors/performsearcherrors.md | 10 + .../errors/performsearchresponsebody.md | 11 + .../models/errors/performvoicesearcherrors.md | 10 + .../errors/performvoicesearchresponsebody.md | 11 + docs/models/errors/refreshlibraryerrors.md | 10 + .../errors/refreshlibraryresponsebody.md | 11 + docs/models/errors/startalltaskserrors.md | 10 + .../errors/startalltasksresponsebody.md | 11 + docs/models/errors/starttaskerrors.md | 10 + docs/models/errors/starttaskresponsebody.md | 11 + .../errors/startuniversaltranscodeerrors.md | 10 + .../startuniversaltranscoderesponsebody.md | 11 + docs/models/errors/stopalltaskserrors.md | 10 + .../models/errors/stopalltasksresponsebody.md | 11 + docs/models/errors/stoptaskerrors.md | 10 + docs/models/errors/stoptaskresponsebody.md | 11 + .../errors/stoptranscodesessionerrors.md | 10 + .../stoptranscodesessionresponsebody.md | 11 + docs/models/errors/updateplaylisterrors.md | 10 + .../errors/updateplaylistresponsebody.md | 11 + .../models/errors/updateplayprogresserrors.md | 10 + .../errors/updateplayprogressresponsebody.md | 11 + docs/models/errors/uploadplaylisterrors.md | 10 + .../errors/uploadplaylistresponsebody.md | 11 + docs/models/operations/activity.md | 15 + .../addplaylistcontentsmediacontainer.md | 11 + .../operations/addplaylistcontentsmetadata.md | 20 + .../operations/addplaylistcontentsrequest.md | 10 + .../operations/addplaylistcontentsresponse.md | 11 + .../addplaylistcontentsresponsebody.md | 10 + docs/models/operations/applyupdatesrequest.md | 9 + .../models/operations/applyupdatesresponse.md | 10 + docs/models/operations/butlertask.md | 13 + docs/models/operations/butlertasks.md | 8 + .../cancelserveractivitiesrequest.md | 8 + .../cancelserveractivitiesresponse.md | 10 + .../operations/checkforupdatesrequest.md | 8 + .../operations/checkforupdatesresponse.md | 10 + .../clearplaylistcontentsrequest.md | 8 + .../clearplaylistcontentsresponse.md | 10 + docs/models/operations/context.md | 8 + docs/models/operations/country.md | 8 + .../createplaylistmediacontainer.md | 9 + .../operations/createplaylistmetadata.md | 23 + .../operations/createplaylistrequest.md | 12 + .../operations/createplaylistresponse.md | 11 + .../operations/createplaylistresponsebody.md | 10 + .../models/operations/deletelibraryrequest.md | 8 + .../operations/deletelibraryresponse.md | 10 + .../operations/deleteplaylistrequest.md | 8 + .../operations/deleteplaylistresponse.md | 10 + docs/models/operations/device.md | 12 + docs/models/operations/director.md | 8 + docs/models/operations/directory.md | 10 + docs/models/operations/download.md | 11 + .../operations/enablepapertrailresponse.md | 10 + docs/models/operations/field.md | 11 + docs/models/operations/fieldtype.md | 9 + docs/models/operations/filter_.md | 12 + docs/models/operations/force.md | 15 + docs/models/operations/genre.md | 8 + .../getavailableclientsmediacontainer.md | 9 + .../operations/getavailableclientsresponse.md | 11 + .../getavailableclientsresponsebody.md | 10 + .../operations/getbutlertasksresponse.md | 11 + .../operations/getbutlertasksresponsebody.md | 10 + .../operations/getdevicesmediacontainer.md | 10 + docs/models/operations/getdevicesresponse.md | 11 + .../operations/getdevicesresponsebody.md | 10 + docs/models/operations/getfilehashrequest.md | 9 + docs/models/operations/getfilehashresponse.md | 10 + .../operations/getglobalhubsmediacontainer.md | 11 + .../operations/getglobalhubsmetadata.md | 24 + .../models/operations/getglobalhubsrequest.md | 9 + .../operations/getglobalhubsresponse.md | 11 + .../operations/getglobalhubsresponsebody.md | 10 + .../operations/getlibrariesdirectory.md | 28 + .../models/operations/getlibrarieslocation.md | 9 + .../operations/getlibrariesmediacontainer.md | 11 + .../models/operations/getlibrariesresponse.md | 11 + .../operations/getlibrariesresponsebody.md | 10 + docs/models/operations/getlibrarydirectory.md | 12 + .../operations/getlibraryhubscountry.md | 8 + .../operations/getlibraryhubsdirector.md | 8 + docs/models/operations/getlibraryhubsgenre.md | 8 + docs/models/operations/getlibraryhubshub.md | 19 + docs/models/operations/getlibraryhubsmedia.md | 24 + .../getlibraryhubsmediacontainer.md | 14 + .../operations/getlibraryhubsmetadata.md | 41 + docs/models/operations/getlibraryhubspart.md | 17 + .../operations/getlibraryhubsrequest.md | 10 + .../operations/getlibraryhubsresponse.md | 11 + .../operations/getlibraryhubsresponsebody.md | 10 + docs/models/operations/getlibraryhubsrole.md | 8 + .../models/operations/getlibraryhubswriter.md | 8 + .../operations/getlibraryitemscountry.md | 8 + .../operations/getlibraryitemsdirector.md | 8 + .../models/operations/getlibraryitemsgenre.md | 8 + .../models/operations/getlibraryitemsmedia.md | 21 + .../getlibraryitemsmediacontainer.md | 23 + .../operations/getlibraryitemsmetadata.md | 64 ++ docs/models/operations/getlibraryitemspart.md | 14 + .../operations/getlibraryitemsrequest.md | 9 + .../operations/getlibraryitemsresponse.md | 11 + .../operations/getlibraryitemsresponsebody.md | 10 + docs/models/operations/getlibraryitemsrole.md | 8 + .../operations/getlibraryitemswriter.md | 8 + .../operations/getlibrarymediacontainer.md | 22 + docs/models/operations/getlibraryrequest.md | 9 + docs/models/operations/getlibraryresponse.md | 11 + .../operations/getlibraryresponsebody.md | 10 + docs/models/operations/getlibrarytype.md | 14 + .../getmetadatachildrendirectory.md | 12 + .../getmetadatachildrenmediacontainer.md | 30 + .../operations/getmetadatachildrenmetadata.md | 34 + .../operations/getmetadatachildrenrequest.md | 8 + .../operations/getmetadatachildrenresponse.md | 11 + .../getmetadatachildrenresponsebody.md | 10 + docs/models/operations/getmetadatacountry.md | 10 + docs/models/operations/getmetadatadirector.md | 12 + docs/models/operations/getmetadatagenre.md | 10 + docs/models/operations/getmetadatamedia.md | 24 + .../operations/getmetadatamediacontainer.md | 16 + docs/models/operations/getmetadatametadata.md | 40 + docs/models/operations/getmetadatapart.md | 18 + docs/models/operations/getmetadatarequest.md | 8 + docs/models/operations/getmetadataresponse.md | 11 + .../operations/getmetadataresponsebody.md | 10 + docs/models/operations/getmetadatarole.md | 13 + docs/models/operations/getmetadatawriter.md | 12 + .../operations/getmyplexaccountresponse.md | 11 + .../getmyplexaccountresponsebody.md | 10 + docs/models/operations/getondeckguids.md | 8 + docs/models/operations/getondeckmedia.md | 22 + .../operations/getondeckmediacontainer.md | 14 + docs/models/operations/getondeckmetadata.md | 43 + docs/models/operations/getondeckpart.md | 16 + docs/models/operations/getondeckresponse.md | 11 + .../operations/getondeckresponsebody.md | 10 + docs/models/operations/getondeckstream.md | 30 + docs/models/operations/getpinrequest.md | 9 + docs/models/operations/getpinresponse.md | 11 + docs/models/operations/getpinresponsebody.md | 21 + .../operations/getplaylistcontentscountry.md | 8 + .../operations/getplaylistcontentsdirector.md | 8 + .../operations/getplaylistcontentsgenre.md | 8 + .../operations/getplaylistcontentsmedia.md | 24 + .../getplaylistcontentsmediacontainer.md | 16 + .../operations/getplaylistcontentsmetadata.md | 39 + .../operations/getplaylistcontentspart.md | 17 + .../operations/getplaylistcontentsrequest.md | 9 + .../operations/getplaylistcontentsresponse.md | 11 + .../getplaylistcontentsresponsebody.md | 10 + .../operations/getplaylistcontentsrole.md | 8 + .../operations/getplaylistcontentswriter.md | 8 + .../operations/getplaylistmediacontainer.md | 9 + docs/models/operations/getplaylistmetadata.md | 22 + docs/models/operations/getplaylistrequest.md | 8 + docs/models/operations/getplaylistresponse.md | 11 + .../operations/getplaylistresponsebody.md | 10 + .../operations/getplaylistsmediacontainer.md | 9 + .../models/operations/getplaylistsmetadata.md | 23 + docs/models/operations/getplaylistsrequest.md | 9 + .../models/operations/getplaylistsresponse.md | 11 + .../operations/getplaylistsresponsebody.md | 10 + .../getrecentlyaddedmediacontainer.md | 14 + .../operations/getrecentlyaddedresponse.md | 11 + .../getrecentlyaddedresponsebody.md | 10 + .../operations/getresizedphotorequest.md | 14 + .../operations/getresizedphotoresponse.md | 10 + .../operations/getsearchresultscountry.md | 8 + .../operations/getsearchresultsdirector.md | 8 + .../operations/getsearchresultsgenre.md | 8 + .../operations/getsearchresultsmedia.md | 22 + .../getsearchresultsmediacontainer.md | 13 + .../operations/getsearchresultsmetadata.md | 41 + .../models/operations/getsearchresultspart.md | 15 + .../operations/getsearchresultsrequest.md | 8 + .../operations/getsearchresultsresponse.md | 11 + .../getsearchresultsresponsebody.md | 10 + .../models/operations/getsearchresultsrole.md | 8 + .../operations/getsearchresultswriter.md | 8 + .../getserveractivitiesmediacontainer.md | 9 + .../operations/getserveractivitiesresponse.md | 11 + .../getserveractivitiesresponsebody.md | 10 + .../getservercapabilitiesresponse.md | 11 + .../getservercapabilitiesresponsebody.md | 10 + .../getserveridentitymediacontainer.md | 11 + .../operations/getserveridentityresponse.md | 11 + .../getserveridentityresponsebody.md | 10 + .../operations/getserverlistmediacontainer.md | 9 + .../operations/getserverlistresponse.md | 11 + .../operations/getserverlistresponsebody.md | 10 + docs/models/operations/getserverlistserver.md | 13 + .../getserverpreferencesmediacontainer.md | 9 + .../getserverpreferencesresponse.md | 11 + .../getserverpreferencesresponsebody.md | 10 + .../getsessionhistorymediacontainer.md | 9 + .../operations/getsessionhistorymetadata.md | 26 + .../operations/getsessionhistoryresponse.md | 11 + .../getsessionhistoryresponsebody.md | 10 + docs/models/operations/getsessionsmedia.md | 15 + .../operations/getsessionsmediacontainer.md | 9 + docs/models/operations/getsessionsmetadata.md | 44 + docs/models/operations/getsessionspart.md | 17 + docs/models/operations/getsessionsresponse.md | 11 + .../operations/getsessionsresponsebody.md | 10 + docs/models/operations/getsessionsstream.md | 27 + .../getsourceconnectioninformationrequest.md | 8 + .../getsourceconnectioninformationresponse.md | 10 + docs/models/operations/gettimelinerequest.md | 17 + docs/models/operations/gettimelineresponse.md | 10 + docs/models/operations/gettokenrequest.md | 9 + docs/models/operations/gettokenresponse.md | 10 + .../gettranscodesessionsmediacontainer.md | 9 + .../gettranscodesessionsresponse.md | 11 + .../gettranscodesessionsresponsebody.md | 10 + .../gettransienttokenqueryparamtype.md | 10 + .../operations/gettransienttokenrequest.md | 9 + .../operations/gettransienttokenresponse.md | 10 + .../getupdatestatusmediacontainer.md | 13 + .../operations/getupdatestatusresponse.md | 11 + .../operations/getupdatestatusresponsebody.md | 10 + docs/models/operations/guids.md | 8 + docs/models/operations/hub.md | 18 + docs/models/operations/includedetails.md | 13 + docs/models/operations/level.md | 20 + docs/models/operations/location.md | 17 + docs/models/operations/loglinerequest.md | 10 + docs/models/operations/loglineresponse.md | 10 + .../models/operations/logmultilineresponse.md | 10 + docs/models/operations/markplayedrequest.md | 8 + docs/models/operations/markplayedresponse.md | 10 + docs/models/operations/markunplayedrequest.md | 8 + .../models/operations/markunplayedresponse.md | 10 + docs/models/operations/media.md | 23 + docs/models/operations/mediacontainer.md | 58 ++ docs/models/operations/metadata.md | 39 + docs/models/operations/minsize.md | 11 + docs/models/operations/myplex.md | 19 + docs/models/operations/one.md | 16 + docs/models/operations/onlytransient.md | 11 + docs/models/operations/operator.md | 9 + docs/models/operations/part.md | 17 + docs/models/operations/pathparamtaskname.md | 23 + .../models/operations/performsearchrequest.md | 10 + .../operations/performsearchresponse.md | 10 + .../operations/performvoicesearchrequest.md | 10 + .../operations/performvoicesearchresponse.md | 10 + docs/models/operations/player.md | 22 + docs/models/operations/playlisttype.md | 12 + docs/models/operations/producer.md | 12 + docs/models/operations/provider.md | 10 + .../operations/queryparamonlytransient.md | 11 + docs/models/operations/queryparamsmart.md | 11 + docs/models/operations/queryparamtype.md | 12 + docs/models/operations/ratings.md | 10 + .../operations/refreshlibraryrequest.md | 8 + .../operations/refreshlibraryresponse.md | 10 + docs/models/operations/release.md | 13 + docs/models/operations/role.md | 8 + docs/models/operations/scope.md | 10 + .../operations/searchlibrarymediacontainer.md | 20 + .../operations/searchlibrarymetadata.md | 27 + .../models/operations/searchlibraryrequest.md | 9 + .../operations/searchlibraryresponse.md | 11 + .../operations/searchlibraryresponsebody.md | 10 + docs/models/operations/server.md | 18 + docs/models/operations/session.md | 10 + docs/models/operations/setting.md | 17 + docs/models/operations/skip.md | 11 + docs/models/operations/smart.md | 11 + docs/models/operations/sort.md | 13 + .../operations/startalltasksresponse.md | 10 + docs/models/operations/starttaskrequest.md | 8 + docs/models/operations/starttaskresponse.md | 10 + .../startuniversaltranscoderequest.md | 23 + .../startuniversaltranscoderesponse.md | 10 + docs/models/operations/state.md | 12 + .../models/operations/stopalltasksresponse.md | 10 + docs/models/operations/stoptaskrequest.md | 8 + docs/models/operations/stoptaskresponse.md | 10 + .../operations/stoptranscodesessionrequest.md | 8 + .../stoptranscodesessionresponse.md | 10 + docs/models/operations/stream.md | 39 + docs/models/operations/tag.md | 28 + docs/models/operations/taskname.md | 23 + docs/models/operations/tonight.md | 11 + docs/models/operations/transcodesession.md | 31 + docs/models/operations/two.md | 17 + docs/models/operations/type.md | 13 + .../operations/updateplaylistrequest.md | 10 + .../operations/updateplaylistresponse.md | 10 + .../operations/updateplayprogressrequest.md | 10 + .../operations/updateplayprogressresponse.md | 10 + .../operations/uploadplaylistrequest.md | 9 + .../operations/uploadplaylistresponse.md | 10 + docs/models/operations/upscale.md | 11 + docs/models/operations/user.md | 10 + docs/models/operations/writer.md | 8 + docs/sdks/activities/README.md | 89 ++ docs/sdks/butler/README.md | 201 ++++ docs/sdks/hubs/README.md | 94 ++ docs/sdks/library/README.md | 519 ++++++++++ docs/sdks/log/README.md | 150 +++ docs/sdks/media/README.md | 133 +++ docs/sdks/playlists/README.md | 401 ++++++++ docs/sdks/plex/README.md | 5 + docs/sdks/plexapi/README.md | 9 + docs/sdks/search/README.md | 150 +++ docs/sdks/security/README.md | 94 ++ docs/sdks/server/README.md | 291 ++++++ docs/sdks/sessions/README.md | 149 +++ docs/sdks/tv/README.md | 89 ++ docs/sdks/updater/README.md | 126 +++ docs/sdks/video/README.md | 109 +++ pylintrc | 647 +++++++++++++ setup.py | 41 + src/plex_api/__init__.py | 4 + src/plex_api/activities.py | 104 ++ src/plex_api/butler.py | 220 +++++ src/plex_api/hubs.py | 110 +++ src/plex_api/library.py | 558 +++++++++++ src/plex_api/log.py | 157 +++ src/plex_api/media.py | 142 +++ src/plex_api/models/__init__.py | 4 + src/plex_api/models/components/__init__.py | 5 + src/plex_api/models/components/security.py | 11 + src/plex_api/models/errors/__init__.py | 62 ++ .../models/errors/addplaylistcontents.py | 32 + src/plex_api/models/errors/applyupdates.py | 32 + .../models/errors/cancelserveractivities.py | 32 + src/plex_api/models/errors/checkforupdates.py | 32 + .../models/errors/clearplaylistcontents.py | 32 + src/plex_api/models/errors/createplaylist.py | 32 + src/plex_api/models/errors/deletelibrary.py | 32 + src/plex_api/models/errors/deleteplaylist.py | 32 + .../models/errors/enablepapertrail.py | 32 + .../models/errors/getavailableclients.py | 32 + src/plex_api/models/errors/getbutlertasks.py | 32 + src/plex_api/models/errors/getdevices.py | 32 + src/plex_api/models/errors/getfilehash.py | 32 + src/plex_api/models/errors/getglobalhubs.py | 32 + src/plex_api/models/errors/getlibraries.py | 32 + src/plex_api/models/errors/getlibrary.py | 32 + src/plex_api/models/errors/getlibraryhubs.py | 32 + src/plex_api/models/errors/getmetadata.py | 32 + .../models/errors/getmetadatachildren.py | 32 + .../models/errors/getmyplexaccount.py | 32 + src/plex_api/models/errors/getondeck.py | 32 + src/plex_api/models/errors/getpin.py | 32 + src/plex_api/models/errors/getplaylist.py | 32 + .../models/errors/getplaylistcontents.py | 32 + src/plex_api/models/errors/getplaylists.py | 32 + .../models/errors/getrecentlyadded.py | 32 + src/plex_api/models/errors/getresizedphoto.py | 32 + .../models/errors/getsearchresults.py | 32 + .../models/errors/getserveractivities.py | 32 + .../models/errors/getservercapabilities.py | 32 + .../models/errors/getserveridentity.py | 32 + src/plex_api/models/errors/getserverlist.py | 32 + .../models/errors/getserverpreferences.py | 32 + .../models/errors/getsessionhistory.py | 32 + src/plex_api/models/errors/getsessions.py | 32 + .../errors/getsourceconnectioninformation.py | 32 + src/plex_api/models/errors/gettimeline.py | 32 + src/plex_api/models/errors/gettoken.py | 32 + .../models/errors/gettranscodesessions.py | 32 + .../models/errors/gettransienttoken.py | 32 + src/plex_api/models/errors/getupdatestatus.py | 32 + src/plex_api/models/errors/logline.py | 32 + src/plex_api/models/errors/logmultiline.py | 32 + src/plex_api/models/errors/markplayed.py | 32 + src/plex_api/models/errors/markunplayed.py | 32 + src/plex_api/models/errors/performsearch.py | 32 + .../models/errors/performvoicesearch.py | 32 + src/plex_api/models/errors/refreshlibrary.py | 32 + src/plex_api/models/errors/sdkerror.py | 24 + src/plex_api/models/errors/startalltasks.py | 32 + src/plex_api/models/errors/starttask.py | 32 + .../models/errors/startuniversaltranscode.py | 32 + src/plex_api/models/errors/stopalltasks.py | 32 + src/plex_api/models/errors/stoptask.py | 32 + .../models/errors/stoptranscodesession.py | 32 + src/plex_api/models/errors/updateplaylist.py | 32 + .../models/errors/updateplayprogress.py | 32 + src/plex_api/models/errors/uploadplaylist.py | 32 + src/plex_api/models/operations/__init__.py | 63 ++ .../models/operations/addplaylistcontents.py | 74 ++ .../models/operations/applyupdates.py | 39 + .../operations/cancelserveractivities.py | 25 + .../models/operations/checkforupdates.py | 32 + .../operations/clearplaylistcontents.py | 25 + .../models/operations/createplaylist.py | 91 ++ .../models/operations/deletelibrary.py | 25 + .../models/operations/deleteplaylist.py | 25 + .../models/operations/enablepapertrail.py | 17 + .../models/operations/getavailableclients.py | 58 ++ .../models/operations/getbutlertasks.py | 52 + src/plex_api/models/operations/getdevices.py | 53 ++ src/plex_api/models/operations/getfilehash.py | 28 + .../models/operations/getglobalhubs.py | 100 ++ .../models/operations/getlibraries.py | 79 ++ src/plex_api/models/operations/getlibrary.py | 153 +++ .../models/operations/getlibraryhubs.py | 205 ++++ .../models/operations/getlibraryitems.py | 227 +++++ src/plex_api/models/operations/getmetadata.py | 264 ++++++ .../models/operations/getmetadatachildren.py | 115 +++ .../models/operations/getmyplexaccount.py | 50 + src/plex_api/models/operations/getondeck.py | 166 ++++ src/plex_api/models/operations/getpin.py | 83 ++ src/plex_api/models/operations/getplaylist.py | 70 ++ .../models/operations/getplaylistcontents.py | 178 ++++ .../models/operations/getplaylists.py | 85 ++ .../models/operations/getrecentlyadded.py | 166 ++++ .../models/operations/getresizedphoto.py | 48 + .../models/operations/getsearchresults.py | 182 ++++ .../models/operations/getserveractivities.py | 63 ++ .../operations/getservercapabilities.py | 99 ++ .../models/operations/getserveridentity.py | 42 + .../models/operations/getserverlist.py | 53 ++ .../models/operations/getserverpreferences.py | 73 ++ .../models/operations/getsessionhistory.py | 67 ++ src/plex_api/models/operations/getsessions.py | 185 ++++ .../getsourceconnectioninformation.py | 25 + src/plex_api/models/operations/gettimeline.py | 50 + src/plex_api/models/operations/gettoken.py | 31 + .../models/operations/gettranscodesessions.py | 71 ++ .../models/operations/gettransienttoken.py | 36 + .../models/operations/getupdatestatus.py | 57 ++ src/plex_api/models/operations/logline.py | 50 + .../models/operations/logmultiline.py | 17 + src/plex_api/models/operations/markplayed.py | 25 + .../models/operations/markunplayed.py | 25 + .../models/operations/performsearch.py | 30 + .../models/operations/performvoicesearch.py | 30 + .../models/operations/refreshlibrary.py | 25 + .../models/operations/searchlibrary.py | 96 ++ .../models/operations/startalltasks.py | 17 + src/plex_api/models/operations/starttask.py | 43 + .../operations/startuniversaltranscode.py | 56 ++ .../models/operations/stopalltasks.py | 17 + src/plex_api/models/operations/stoptask.py | 43 + .../models/operations/stoptranscodesession.py | 25 + .../models/operations/updateplaylist.py | 30 + .../models/operations/updateplayprogress.py | 29 + .../models/operations/uploadplaylist.py | 47 + src/plex_api/playlists.py | 424 +++++++++ src/plex_api/plex.py | 17 + src/plex_api/sdk.py | 141 +++ src/plex_api/sdkconfiguration.py | 44 + src/plex_api/search.py | 163 ++++ src/plex_api/security.py | 100 ++ src/plex_api/server.py | 340 +++++++ src/plex_api/sessions.py | 179 ++++ src/plex_api/tv.py | 109 +++ src/plex_api/updater.py | 143 +++ src/plex_api/utils/__init__.py | 4 + src/plex_api/utils/retries.py | 120 +++ src/plex_api/utils/utils.py | 897 ++++++++++++++++++ src/plex_api/video.py | 90 ++ tests/helpers.py | 61 ++ 559 files changed, 19414 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100755 .speakeasy/gen.lock create mode 100644 README.md create mode 100644 RELEASES.md create mode 100644 USAGE.md create mode 100644 docs/models/components/security.md create mode 100644 docs/models/errors/addplaylistcontentserrors.md create mode 100644 docs/models/errors/addplaylistcontentsresponsebody.md create mode 100644 docs/models/errors/applyupdateserrors.md create mode 100644 docs/models/errors/applyupdatesresponsebody.md create mode 100644 docs/models/errors/cancelserveractivitieserrors.md create mode 100644 docs/models/errors/cancelserveractivitiesresponsebody.md create mode 100644 docs/models/errors/checkforupdateserrors.md create mode 100644 docs/models/errors/checkforupdatesresponsebody.md create mode 100644 docs/models/errors/clearplaylistcontentserrors.md create mode 100644 docs/models/errors/clearplaylistcontentsresponsebody.md create mode 100644 docs/models/errors/createplaylisterrors.md create mode 100644 docs/models/errors/createplaylistresponsebody.md create mode 100644 docs/models/errors/deletelibraryerrors.md create mode 100644 docs/models/errors/deletelibraryresponsebody.md create mode 100644 docs/models/errors/deleteplaylisterrors.md create mode 100644 docs/models/errors/deleteplaylistresponsebody.md create mode 100644 docs/models/errors/enablepapertrailerrors.md create mode 100644 docs/models/errors/enablepapertrailresponsebody.md create mode 100644 docs/models/errors/errors.md create mode 100644 docs/models/errors/getavailableclientserrors.md create mode 100644 docs/models/errors/getavailableclientsresponsebody.md create mode 100644 docs/models/errors/getbutlertaskserrors.md create mode 100644 docs/models/errors/getbutlertasksresponsebody.md create mode 100644 docs/models/errors/getdeviceserrors.md create mode 100644 docs/models/errors/getdevicesresponsebody.md create mode 100644 docs/models/errors/getfilehasherrors.md create mode 100644 docs/models/errors/getfilehashresponsebody.md create mode 100644 docs/models/errors/getglobalhubserrors.md create mode 100644 docs/models/errors/getglobalhubsresponsebody.md create mode 100644 docs/models/errors/getlibrarieserrors.md create mode 100644 docs/models/errors/getlibrariesresponsebody.md create mode 100644 docs/models/errors/getlibraryerrors.md create mode 100644 docs/models/errors/getlibraryhubserrors.md create mode 100644 docs/models/errors/getlibraryhubsresponsebody.md create mode 100644 docs/models/errors/getlibraryresponsebody.md create mode 100644 docs/models/errors/getmetadatachildrenerrors.md create mode 100644 docs/models/errors/getmetadatachildrenresponsebody.md create mode 100644 docs/models/errors/getmetadataerrors.md create mode 100644 docs/models/errors/getmetadataresponsebody.md create mode 100644 docs/models/errors/getmyplexaccounterrors.md create mode 100644 docs/models/errors/getmyplexaccountresponsebody.md create mode 100644 docs/models/errors/getondeckerrors.md create mode 100644 docs/models/errors/getondeckresponsebody.md create mode 100644 docs/models/errors/getpinerrors.md create mode 100644 docs/models/errors/getpinresponsebody.md create mode 100644 docs/models/errors/getplaylistcontentserrors.md create mode 100644 docs/models/errors/getplaylistcontentsresponsebody.md create mode 100644 docs/models/errors/getplaylisterrors.md create mode 100644 docs/models/errors/getplaylistresponsebody.md create mode 100644 docs/models/errors/getplaylistserrors.md create mode 100644 docs/models/errors/getplaylistsresponsebody.md create mode 100644 docs/models/errors/getrecentlyaddederrors.md create mode 100644 docs/models/errors/getrecentlyaddedresponsebody.md create mode 100644 docs/models/errors/getresizedphotoerrors.md create mode 100644 docs/models/errors/getresizedphotoresponsebody.md create mode 100644 docs/models/errors/getsearchresultserrors.md create mode 100644 docs/models/errors/getsearchresultsresponsebody.md create mode 100644 docs/models/errors/getserveractivitieserrors.md create mode 100644 docs/models/errors/getserveractivitiesresponsebody.md create mode 100644 docs/models/errors/getservercapabilitiesresponsebody.md create mode 100644 docs/models/errors/getserveridentityerrors.md create mode 100644 docs/models/errors/getserveridentityresponsebody.md create mode 100644 docs/models/errors/getserverlisterrors.md create mode 100644 docs/models/errors/getserverlistresponsebody.md create mode 100644 docs/models/errors/getserverpreferenceserrors.md create mode 100644 docs/models/errors/getserverpreferencesresponsebody.md create mode 100644 docs/models/errors/getsessionhistoryerrors.md create mode 100644 docs/models/errors/getsessionhistoryresponsebody.md create mode 100644 docs/models/errors/getsessionserrors.md create mode 100644 docs/models/errors/getsessionsresponsebody.md create mode 100644 docs/models/errors/getsourceconnectioninformationerrors.md create mode 100644 docs/models/errors/getsourceconnectioninformationresponsebody.md create mode 100644 docs/models/errors/gettimelineerrors.md create mode 100644 docs/models/errors/gettimelineresponsebody.md create mode 100644 docs/models/errors/gettokenerrors.md create mode 100644 docs/models/errors/gettokenresponsebody.md create mode 100644 docs/models/errors/gettranscodesessionserrors.md create mode 100644 docs/models/errors/gettranscodesessionsresponsebody.md create mode 100644 docs/models/errors/gettransienttokenerrors.md create mode 100644 docs/models/errors/gettransienttokenresponsebody.md create mode 100644 docs/models/errors/getupdatestatuserrors.md create mode 100644 docs/models/errors/getupdatestatusresponsebody.md create mode 100644 docs/models/errors/loglineerrors.md create mode 100644 docs/models/errors/loglineresponsebody.md create mode 100644 docs/models/errors/logmultilineerrors.md create mode 100644 docs/models/errors/logmultilineresponsebody.md create mode 100644 docs/models/errors/markplayederrors.md create mode 100644 docs/models/errors/markplayedresponsebody.md create mode 100644 docs/models/errors/markunplayederrors.md create mode 100644 docs/models/errors/markunplayedresponsebody.md create mode 100644 docs/models/errors/performsearcherrors.md create mode 100644 docs/models/errors/performsearchresponsebody.md create mode 100644 docs/models/errors/performvoicesearcherrors.md create mode 100644 docs/models/errors/performvoicesearchresponsebody.md create mode 100644 docs/models/errors/refreshlibraryerrors.md create mode 100644 docs/models/errors/refreshlibraryresponsebody.md create mode 100644 docs/models/errors/startalltaskserrors.md create mode 100644 docs/models/errors/startalltasksresponsebody.md create mode 100644 docs/models/errors/starttaskerrors.md create mode 100644 docs/models/errors/starttaskresponsebody.md create mode 100644 docs/models/errors/startuniversaltranscodeerrors.md create mode 100644 docs/models/errors/startuniversaltranscoderesponsebody.md create mode 100644 docs/models/errors/stopalltaskserrors.md create mode 100644 docs/models/errors/stopalltasksresponsebody.md create mode 100644 docs/models/errors/stoptaskerrors.md create mode 100644 docs/models/errors/stoptaskresponsebody.md create mode 100644 docs/models/errors/stoptranscodesessionerrors.md create mode 100644 docs/models/errors/stoptranscodesessionresponsebody.md create mode 100644 docs/models/errors/updateplaylisterrors.md create mode 100644 docs/models/errors/updateplaylistresponsebody.md create mode 100644 docs/models/errors/updateplayprogresserrors.md create mode 100644 docs/models/errors/updateplayprogressresponsebody.md create mode 100644 docs/models/errors/uploadplaylisterrors.md create mode 100644 docs/models/errors/uploadplaylistresponsebody.md create mode 100644 docs/models/operations/activity.md create mode 100644 docs/models/operations/addplaylistcontentsmediacontainer.md create mode 100644 docs/models/operations/addplaylistcontentsmetadata.md create mode 100644 docs/models/operations/addplaylistcontentsrequest.md create mode 100644 docs/models/operations/addplaylistcontentsresponse.md create mode 100644 docs/models/operations/addplaylistcontentsresponsebody.md create mode 100644 docs/models/operations/applyupdatesrequest.md create mode 100644 docs/models/operations/applyupdatesresponse.md create mode 100644 docs/models/operations/butlertask.md create mode 100644 docs/models/operations/butlertasks.md create mode 100644 docs/models/operations/cancelserveractivitiesrequest.md create mode 100644 docs/models/operations/cancelserveractivitiesresponse.md create mode 100644 docs/models/operations/checkforupdatesrequest.md create mode 100644 docs/models/operations/checkforupdatesresponse.md create mode 100644 docs/models/operations/clearplaylistcontentsrequest.md create mode 100644 docs/models/operations/clearplaylistcontentsresponse.md create mode 100644 docs/models/operations/context.md create mode 100644 docs/models/operations/country.md create mode 100644 docs/models/operations/createplaylistmediacontainer.md create mode 100644 docs/models/operations/createplaylistmetadata.md create mode 100644 docs/models/operations/createplaylistrequest.md create mode 100644 docs/models/operations/createplaylistresponse.md create mode 100644 docs/models/operations/createplaylistresponsebody.md create mode 100644 docs/models/operations/deletelibraryrequest.md create mode 100644 docs/models/operations/deletelibraryresponse.md create mode 100644 docs/models/operations/deleteplaylistrequest.md create mode 100644 docs/models/operations/deleteplaylistresponse.md create mode 100644 docs/models/operations/device.md create mode 100644 docs/models/operations/director.md create mode 100644 docs/models/operations/directory.md create mode 100644 docs/models/operations/download.md create mode 100644 docs/models/operations/enablepapertrailresponse.md create mode 100644 docs/models/operations/field.md create mode 100644 docs/models/operations/fieldtype.md create mode 100644 docs/models/operations/filter_.md create mode 100644 docs/models/operations/force.md create mode 100644 docs/models/operations/genre.md create mode 100644 docs/models/operations/getavailableclientsmediacontainer.md create mode 100644 docs/models/operations/getavailableclientsresponse.md create mode 100644 docs/models/operations/getavailableclientsresponsebody.md create mode 100644 docs/models/operations/getbutlertasksresponse.md create mode 100644 docs/models/operations/getbutlertasksresponsebody.md create mode 100644 docs/models/operations/getdevicesmediacontainer.md create mode 100644 docs/models/operations/getdevicesresponse.md create mode 100644 docs/models/operations/getdevicesresponsebody.md create mode 100644 docs/models/operations/getfilehashrequest.md create mode 100644 docs/models/operations/getfilehashresponse.md create mode 100644 docs/models/operations/getglobalhubsmediacontainer.md create mode 100644 docs/models/operations/getglobalhubsmetadata.md create mode 100644 docs/models/operations/getglobalhubsrequest.md create mode 100644 docs/models/operations/getglobalhubsresponse.md create mode 100644 docs/models/operations/getglobalhubsresponsebody.md create mode 100644 docs/models/operations/getlibrariesdirectory.md create mode 100644 docs/models/operations/getlibrarieslocation.md create mode 100644 docs/models/operations/getlibrariesmediacontainer.md create mode 100644 docs/models/operations/getlibrariesresponse.md create mode 100644 docs/models/operations/getlibrariesresponsebody.md create mode 100644 docs/models/operations/getlibrarydirectory.md create mode 100644 docs/models/operations/getlibraryhubscountry.md create mode 100644 docs/models/operations/getlibraryhubsdirector.md create mode 100644 docs/models/operations/getlibraryhubsgenre.md create mode 100644 docs/models/operations/getlibraryhubshub.md create mode 100644 docs/models/operations/getlibraryhubsmedia.md create mode 100644 docs/models/operations/getlibraryhubsmediacontainer.md create mode 100644 docs/models/operations/getlibraryhubsmetadata.md create mode 100644 docs/models/operations/getlibraryhubspart.md create mode 100644 docs/models/operations/getlibraryhubsrequest.md create mode 100644 docs/models/operations/getlibraryhubsresponse.md create mode 100644 docs/models/operations/getlibraryhubsresponsebody.md create mode 100644 docs/models/operations/getlibraryhubsrole.md create mode 100644 docs/models/operations/getlibraryhubswriter.md create mode 100644 docs/models/operations/getlibraryitemscountry.md create mode 100644 docs/models/operations/getlibraryitemsdirector.md create mode 100644 docs/models/operations/getlibraryitemsgenre.md create mode 100644 docs/models/operations/getlibraryitemsmedia.md create mode 100644 docs/models/operations/getlibraryitemsmediacontainer.md create mode 100644 docs/models/operations/getlibraryitemsmetadata.md create mode 100644 docs/models/operations/getlibraryitemspart.md create mode 100644 docs/models/operations/getlibraryitemsrequest.md create mode 100644 docs/models/operations/getlibraryitemsresponse.md create mode 100644 docs/models/operations/getlibraryitemsresponsebody.md create mode 100644 docs/models/operations/getlibraryitemsrole.md create mode 100644 docs/models/operations/getlibraryitemswriter.md create mode 100644 docs/models/operations/getlibrarymediacontainer.md create mode 100644 docs/models/operations/getlibraryrequest.md create mode 100644 docs/models/operations/getlibraryresponse.md create mode 100644 docs/models/operations/getlibraryresponsebody.md create mode 100644 docs/models/operations/getlibrarytype.md create mode 100644 docs/models/operations/getmetadatachildrendirectory.md create mode 100644 docs/models/operations/getmetadatachildrenmediacontainer.md create mode 100644 docs/models/operations/getmetadatachildrenmetadata.md create mode 100644 docs/models/operations/getmetadatachildrenrequest.md create mode 100644 docs/models/operations/getmetadatachildrenresponse.md create mode 100644 docs/models/operations/getmetadatachildrenresponsebody.md create mode 100644 docs/models/operations/getmetadatacountry.md create mode 100644 docs/models/operations/getmetadatadirector.md create mode 100644 docs/models/operations/getmetadatagenre.md create mode 100644 docs/models/operations/getmetadatamedia.md create mode 100644 docs/models/operations/getmetadatamediacontainer.md create mode 100644 docs/models/operations/getmetadatametadata.md create mode 100644 docs/models/operations/getmetadatapart.md create mode 100644 docs/models/operations/getmetadatarequest.md create mode 100644 docs/models/operations/getmetadataresponse.md create mode 100644 docs/models/operations/getmetadataresponsebody.md create mode 100644 docs/models/operations/getmetadatarole.md create mode 100644 docs/models/operations/getmetadatawriter.md create mode 100644 docs/models/operations/getmyplexaccountresponse.md create mode 100644 docs/models/operations/getmyplexaccountresponsebody.md create mode 100644 docs/models/operations/getondeckguids.md create mode 100644 docs/models/operations/getondeckmedia.md create mode 100644 docs/models/operations/getondeckmediacontainer.md create mode 100644 docs/models/operations/getondeckmetadata.md create mode 100644 docs/models/operations/getondeckpart.md create mode 100644 docs/models/operations/getondeckresponse.md create mode 100644 docs/models/operations/getondeckresponsebody.md create mode 100644 docs/models/operations/getondeckstream.md create mode 100644 docs/models/operations/getpinrequest.md create mode 100644 docs/models/operations/getpinresponse.md create mode 100644 docs/models/operations/getpinresponsebody.md create mode 100644 docs/models/operations/getplaylistcontentscountry.md create mode 100644 docs/models/operations/getplaylistcontentsdirector.md create mode 100644 docs/models/operations/getplaylistcontentsgenre.md create mode 100644 docs/models/operations/getplaylistcontentsmedia.md create mode 100644 docs/models/operations/getplaylistcontentsmediacontainer.md create mode 100644 docs/models/operations/getplaylistcontentsmetadata.md create mode 100644 docs/models/operations/getplaylistcontentspart.md create mode 100644 docs/models/operations/getplaylistcontentsrequest.md create mode 100644 docs/models/operations/getplaylistcontentsresponse.md create mode 100644 docs/models/operations/getplaylistcontentsresponsebody.md create mode 100644 docs/models/operations/getplaylistcontentsrole.md create mode 100644 docs/models/operations/getplaylistcontentswriter.md create mode 100644 docs/models/operations/getplaylistmediacontainer.md create mode 100644 docs/models/operations/getplaylistmetadata.md create mode 100644 docs/models/operations/getplaylistrequest.md create mode 100644 docs/models/operations/getplaylistresponse.md create mode 100644 docs/models/operations/getplaylistresponsebody.md create mode 100644 docs/models/operations/getplaylistsmediacontainer.md create mode 100644 docs/models/operations/getplaylistsmetadata.md create mode 100644 docs/models/operations/getplaylistsrequest.md create mode 100644 docs/models/operations/getplaylistsresponse.md create mode 100644 docs/models/operations/getplaylistsresponsebody.md create mode 100644 docs/models/operations/getrecentlyaddedmediacontainer.md create mode 100644 docs/models/operations/getrecentlyaddedresponse.md create mode 100644 docs/models/operations/getrecentlyaddedresponsebody.md create mode 100644 docs/models/operations/getresizedphotorequest.md create mode 100644 docs/models/operations/getresizedphotoresponse.md create mode 100644 docs/models/operations/getsearchresultscountry.md create mode 100644 docs/models/operations/getsearchresultsdirector.md create mode 100644 docs/models/operations/getsearchresultsgenre.md create mode 100644 docs/models/operations/getsearchresultsmedia.md create mode 100644 docs/models/operations/getsearchresultsmediacontainer.md create mode 100644 docs/models/operations/getsearchresultsmetadata.md create mode 100644 docs/models/operations/getsearchresultspart.md create mode 100644 docs/models/operations/getsearchresultsrequest.md create mode 100644 docs/models/operations/getsearchresultsresponse.md create mode 100644 docs/models/operations/getsearchresultsresponsebody.md create mode 100644 docs/models/operations/getsearchresultsrole.md create mode 100644 docs/models/operations/getsearchresultswriter.md create mode 100644 docs/models/operations/getserveractivitiesmediacontainer.md create mode 100644 docs/models/operations/getserveractivitiesresponse.md create mode 100644 docs/models/operations/getserveractivitiesresponsebody.md create mode 100644 docs/models/operations/getservercapabilitiesresponse.md create mode 100644 docs/models/operations/getservercapabilitiesresponsebody.md create mode 100644 docs/models/operations/getserveridentitymediacontainer.md create mode 100644 docs/models/operations/getserveridentityresponse.md create mode 100644 docs/models/operations/getserveridentityresponsebody.md create mode 100644 docs/models/operations/getserverlistmediacontainer.md create mode 100644 docs/models/operations/getserverlistresponse.md create mode 100644 docs/models/operations/getserverlistresponsebody.md create mode 100644 docs/models/operations/getserverlistserver.md create mode 100644 docs/models/operations/getserverpreferencesmediacontainer.md create mode 100644 docs/models/operations/getserverpreferencesresponse.md create mode 100644 docs/models/operations/getserverpreferencesresponsebody.md create mode 100644 docs/models/operations/getsessionhistorymediacontainer.md create mode 100644 docs/models/operations/getsessionhistorymetadata.md create mode 100644 docs/models/operations/getsessionhistoryresponse.md create mode 100644 docs/models/operations/getsessionhistoryresponsebody.md create mode 100644 docs/models/operations/getsessionsmedia.md create mode 100644 docs/models/operations/getsessionsmediacontainer.md create mode 100644 docs/models/operations/getsessionsmetadata.md create mode 100644 docs/models/operations/getsessionspart.md create mode 100644 docs/models/operations/getsessionsresponse.md create mode 100644 docs/models/operations/getsessionsresponsebody.md create mode 100644 docs/models/operations/getsessionsstream.md create mode 100644 docs/models/operations/getsourceconnectioninformationrequest.md create mode 100644 docs/models/operations/getsourceconnectioninformationresponse.md create mode 100644 docs/models/operations/gettimelinerequest.md create mode 100644 docs/models/operations/gettimelineresponse.md create mode 100644 docs/models/operations/gettokenrequest.md create mode 100644 docs/models/operations/gettokenresponse.md create mode 100644 docs/models/operations/gettranscodesessionsmediacontainer.md create mode 100644 docs/models/operations/gettranscodesessionsresponse.md create mode 100644 docs/models/operations/gettranscodesessionsresponsebody.md create mode 100644 docs/models/operations/gettransienttokenqueryparamtype.md create mode 100644 docs/models/operations/gettransienttokenrequest.md create mode 100644 docs/models/operations/gettransienttokenresponse.md create mode 100644 docs/models/operations/getupdatestatusmediacontainer.md create mode 100644 docs/models/operations/getupdatestatusresponse.md create mode 100644 docs/models/operations/getupdatestatusresponsebody.md create mode 100644 docs/models/operations/guids.md create mode 100644 docs/models/operations/hub.md create mode 100644 docs/models/operations/includedetails.md create mode 100644 docs/models/operations/level.md create mode 100644 docs/models/operations/location.md create mode 100644 docs/models/operations/loglinerequest.md create mode 100644 docs/models/operations/loglineresponse.md create mode 100644 docs/models/operations/logmultilineresponse.md create mode 100644 docs/models/operations/markplayedrequest.md create mode 100644 docs/models/operations/markplayedresponse.md create mode 100644 docs/models/operations/markunplayedrequest.md create mode 100644 docs/models/operations/markunplayedresponse.md create mode 100644 docs/models/operations/media.md create mode 100644 docs/models/operations/mediacontainer.md create mode 100644 docs/models/operations/metadata.md create mode 100644 docs/models/operations/minsize.md create mode 100644 docs/models/operations/myplex.md create mode 100644 docs/models/operations/one.md create mode 100644 docs/models/operations/onlytransient.md create mode 100644 docs/models/operations/operator.md create mode 100644 docs/models/operations/part.md create mode 100644 docs/models/operations/pathparamtaskname.md create mode 100644 docs/models/operations/performsearchrequest.md create mode 100644 docs/models/operations/performsearchresponse.md create mode 100644 docs/models/operations/performvoicesearchrequest.md create mode 100644 docs/models/operations/performvoicesearchresponse.md create mode 100644 docs/models/operations/player.md create mode 100644 docs/models/operations/playlisttype.md create mode 100644 docs/models/operations/producer.md create mode 100644 docs/models/operations/provider.md create mode 100644 docs/models/operations/queryparamonlytransient.md create mode 100644 docs/models/operations/queryparamsmart.md create mode 100644 docs/models/operations/queryparamtype.md create mode 100644 docs/models/operations/ratings.md create mode 100644 docs/models/operations/refreshlibraryrequest.md create mode 100644 docs/models/operations/refreshlibraryresponse.md create mode 100644 docs/models/operations/release.md create mode 100644 docs/models/operations/role.md create mode 100644 docs/models/operations/scope.md create mode 100644 docs/models/operations/searchlibrarymediacontainer.md create mode 100644 docs/models/operations/searchlibrarymetadata.md create mode 100644 docs/models/operations/searchlibraryrequest.md create mode 100644 docs/models/operations/searchlibraryresponse.md create mode 100644 docs/models/operations/searchlibraryresponsebody.md create mode 100644 docs/models/operations/server.md create mode 100644 docs/models/operations/session.md create mode 100644 docs/models/operations/setting.md create mode 100644 docs/models/operations/skip.md create mode 100644 docs/models/operations/smart.md create mode 100644 docs/models/operations/sort.md create mode 100644 docs/models/operations/startalltasksresponse.md create mode 100644 docs/models/operations/starttaskrequest.md create mode 100644 docs/models/operations/starttaskresponse.md create mode 100644 docs/models/operations/startuniversaltranscoderequest.md create mode 100644 docs/models/operations/startuniversaltranscoderesponse.md create mode 100644 docs/models/operations/state.md create mode 100644 docs/models/operations/stopalltasksresponse.md create mode 100644 docs/models/operations/stoptaskrequest.md create mode 100644 docs/models/operations/stoptaskresponse.md create mode 100644 docs/models/operations/stoptranscodesessionrequest.md create mode 100644 docs/models/operations/stoptranscodesessionresponse.md create mode 100644 docs/models/operations/stream.md create mode 100644 docs/models/operations/tag.md create mode 100644 docs/models/operations/taskname.md create mode 100644 docs/models/operations/tonight.md create mode 100644 docs/models/operations/transcodesession.md create mode 100644 docs/models/operations/two.md create mode 100644 docs/models/operations/type.md create mode 100644 docs/models/operations/updateplaylistrequest.md create mode 100644 docs/models/operations/updateplaylistresponse.md create mode 100644 docs/models/operations/updateplayprogressrequest.md create mode 100644 docs/models/operations/updateplayprogressresponse.md create mode 100644 docs/models/operations/uploadplaylistrequest.md create mode 100644 docs/models/operations/uploadplaylistresponse.md create mode 100644 docs/models/operations/upscale.md create mode 100644 docs/models/operations/user.md create mode 100644 docs/models/operations/writer.md create mode 100644 docs/sdks/activities/README.md create mode 100644 docs/sdks/butler/README.md create mode 100644 docs/sdks/hubs/README.md create mode 100644 docs/sdks/library/README.md create mode 100644 docs/sdks/log/README.md create mode 100644 docs/sdks/media/README.md create mode 100644 docs/sdks/playlists/README.md create mode 100644 docs/sdks/plex/README.md create mode 100644 docs/sdks/plexapi/README.md create mode 100644 docs/sdks/search/README.md create mode 100644 docs/sdks/security/README.md create mode 100644 docs/sdks/server/README.md create mode 100644 docs/sdks/sessions/README.md create mode 100644 docs/sdks/tv/README.md create mode 100644 docs/sdks/updater/README.md create mode 100644 docs/sdks/video/README.md create mode 100644 pylintrc create mode 100644 setup.py create mode 100644 src/plex_api/__init__.py create mode 100644 src/plex_api/activities.py create mode 100644 src/plex_api/butler.py create mode 100644 src/plex_api/hubs.py create mode 100644 src/plex_api/library.py create mode 100644 src/plex_api/log.py create mode 100644 src/plex_api/media.py create mode 100644 src/plex_api/models/__init__.py create mode 100644 src/plex_api/models/components/__init__.py create mode 100644 src/plex_api/models/components/security.py create mode 100644 src/plex_api/models/errors/__init__.py create mode 100644 src/plex_api/models/errors/addplaylistcontents.py create mode 100644 src/plex_api/models/errors/applyupdates.py create mode 100644 src/plex_api/models/errors/cancelserveractivities.py create mode 100644 src/plex_api/models/errors/checkforupdates.py create mode 100644 src/plex_api/models/errors/clearplaylistcontents.py create mode 100644 src/plex_api/models/errors/createplaylist.py create mode 100644 src/plex_api/models/errors/deletelibrary.py create mode 100644 src/plex_api/models/errors/deleteplaylist.py create mode 100644 src/plex_api/models/errors/enablepapertrail.py create mode 100644 src/plex_api/models/errors/getavailableclients.py create mode 100644 src/plex_api/models/errors/getbutlertasks.py create mode 100644 src/plex_api/models/errors/getdevices.py create mode 100644 src/plex_api/models/errors/getfilehash.py create mode 100644 src/plex_api/models/errors/getglobalhubs.py create mode 100644 src/plex_api/models/errors/getlibraries.py create mode 100644 src/plex_api/models/errors/getlibrary.py create mode 100644 src/plex_api/models/errors/getlibraryhubs.py create mode 100644 src/plex_api/models/errors/getmetadata.py create mode 100644 src/plex_api/models/errors/getmetadatachildren.py create mode 100644 src/plex_api/models/errors/getmyplexaccount.py create mode 100644 src/plex_api/models/errors/getondeck.py create mode 100644 src/plex_api/models/errors/getpin.py create mode 100644 src/plex_api/models/errors/getplaylist.py create mode 100644 src/plex_api/models/errors/getplaylistcontents.py create mode 100644 src/plex_api/models/errors/getplaylists.py create mode 100644 src/plex_api/models/errors/getrecentlyadded.py create mode 100644 src/plex_api/models/errors/getresizedphoto.py create mode 100644 src/plex_api/models/errors/getsearchresults.py create mode 100644 src/plex_api/models/errors/getserveractivities.py create mode 100644 src/plex_api/models/errors/getservercapabilities.py create mode 100644 src/plex_api/models/errors/getserveridentity.py create mode 100644 src/plex_api/models/errors/getserverlist.py create mode 100644 src/plex_api/models/errors/getserverpreferences.py create mode 100644 src/plex_api/models/errors/getsessionhistory.py create mode 100644 src/plex_api/models/errors/getsessions.py create mode 100644 src/plex_api/models/errors/getsourceconnectioninformation.py create mode 100644 src/plex_api/models/errors/gettimeline.py create mode 100644 src/plex_api/models/errors/gettoken.py create mode 100644 src/plex_api/models/errors/gettranscodesessions.py create mode 100644 src/plex_api/models/errors/gettransienttoken.py create mode 100644 src/plex_api/models/errors/getupdatestatus.py create mode 100644 src/plex_api/models/errors/logline.py create mode 100644 src/plex_api/models/errors/logmultiline.py create mode 100644 src/plex_api/models/errors/markplayed.py create mode 100644 src/plex_api/models/errors/markunplayed.py create mode 100644 src/plex_api/models/errors/performsearch.py create mode 100644 src/plex_api/models/errors/performvoicesearch.py create mode 100644 src/plex_api/models/errors/refreshlibrary.py create mode 100644 src/plex_api/models/errors/sdkerror.py create mode 100644 src/plex_api/models/errors/startalltasks.py create mode 100644 src/plex_api/models/errors/starttask.py create mode 100644 src/plex_api/models/errors/startuniversaltranscode.py create mode 100644 src/plex_api/models/errors/stopalltasks.py create mode 100644 src/plex_api/models/errors/stoptask.py create mode 100644 src/plex_api/models/errors/stoptranscodesession.py create mode 100644 src/plex_api/models/errors/updateplaylist.py create mode 100644 src/plex_api/models/errors/updateplayprogress.py create mode 100644 src/plex_api/models/errors/uploadplaylist.py create mode 100644 src/plex_api/models/operations/__init__.py create mode 100644 src/plex_api/models/operations/addplaylistcontents.py create mode 100644 src/plex_api/models/operations/applyupdates.py create mode 100644 src/plex_api/models/operations/cancelserveractivities.py create mode 100644 src/plex_api/models/operations/checkforupdates.py create mode 100644 src/plex_api/models/operations/clearplaylistcontents.py create mode 100644 src/plex_api/models/operations/createplaylist.py create mode 100644 src/plex_api/models/operations/deletelibrary.py create mode 100644 src/plex_api/models/operations/deleteplaylist.py create mode 100644 src/plex_api/models/operations/enablepapertrail.py create mode 100644 src/plex_api/models/operations/getavailableclients.py create mode 100644 src/plex_api/models/operations/getbutlertasks.py create mode 100644 src/plex_api/models/operations/getdevices.py create mode 100644 src/plex_api/models/operations/getfilehash.py create mode 100644 src/plex_api/models/operations/getglobalhubs.py create mode 100644 src/plex_api/models/operations/getlibraries.py create mode 100644 src/plex_api/models/operations/getlibrary.py create mode 100644 src/plex_api/models/operations/getlibraryhubs.py create mode 100644 src/plex_api/models/operations/getlibraryitems.py create mode 100644 src/plex_api/models/operations/getmetadata.py create mode 100644 src/plex_api/models/operations/getmetadatachildren.py create mode 100644 src/plex_api/models/operations/getmyplexaccount.py create mode 100644 src/plex_api/models/operations/getondeck.py create mode 100644 src/plex_api/models/operations/getpin.py create mode 100644 src/plex_api/models/operations/getplaylist.py create mode 100644 src/plex_api/models/operations/getplaylistcontents.py create mode 100644 src/plex_api/models/operations/getplaylists.py create mode 100644 src/plex_api/models/operations/getrecentlyadded.py create mode 100644 src/plex_api/models/operations/getresizedphoto.py create mode 100644 src/plex_api/models/operations/getsearchresults.py create mode 100644 src/plex_api/models/operations/getserveractivities.py create mode 100644 src/plex_api/models/operations/getservercapabilities.py create mode 100644 src/plex_api/models/operations/getserveridentity.py create mode 100644 src/plex_api/models/operations/getserverlist.py create mode 100644 src/plex_api/models/operations/getserverpreferences.py create mode 100644 src/plex_api/models/operations/getsessionhistory.py create mode 100644 src/plex_api/models/operations/getsessions.py create mode 100644 src/plex_api/models/operations/getsourceconnectioninformation.py create mode 100644 src/plex_api/models/operations/gettimeline.py create mode 100644 src/plex_api/models/operations/gettoken.py create mode 100644 src/plex_api/models/operations/gettranscodesessions.py create mode 100644 src/plex_api/models/operations/gettransienttoken.py create mode 100644 src/plex_api/models/operations/getupdatestatus.py create mode 100644 src/plex_api/models/operations/logline.py create mode 100644 src/plex_api/models/operations/logmultiline.py create mode 100644 src/plex_api/models/operations/markplayed.py create mode 100644 src/plex_api/models/operations/markunplayed.py create mode 100644 src/plex_api/models/operations/performsearch.py create mode 100644 src/plex_api/models/operations/performvoicesearch.py create mode 100644 src/plex_api/models/operations/refreshlibrary.py create mode 100644 src/plex_api/models/operations/searchlibrary.py create mode 100644 src/plex_api/models/operations/startalltasks.py create mode 100644 src/plex_api/models/operations/starttask.py create mode 100644 src/plex_api/models/operations/startuniversaltranscode.py create mode 100644 src/plex_api/models/operations/stopalltasks.py create mode 100644 src/plex_api/models/operations/stoptask.py create mode 100644 src/plex_api/models/operations/stoptranscodesession.py create mode 100644 src/plex_api/models/operations/updateplaylist.py create mode 100644 src/plex_api/models/operations/updateplayprogress.py create mode 100644 src/plex_api/models/operations/uploadplaylist.py create mode 100644 src/plex_api/playlists.py create mode 100644 src/plex_api/plex.py create mode 100644 src/plex_api/sdk.py create mode 100644 src/plex_api/sdkconfiguration.py create mode 100644 src/plex_api/search.py create mode 100644 src/plex_api/security.py create mode 100644 src/plex_api/server.py create mode 100644 src/plex_api/sessions.py create mode 100644 src/plex_api/tv.py create mode 100644 src/plex_api/updater.py create mode 100644 src/plex_api/utils/__init__.py create mode 100644 src/plex_api/utils/retries.py create mode 100644 src/plex_api/utils/utils.py create mode 100644 src/plex_api/video.py create mode 100644 tests/helpers.py diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..4d75d59 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# This allows generated code to be indexed correctly +*.py linguist-generated=false \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3cdf338 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +venv/ +src/*.egg-info/ +__pycache__/ +.pytest_cache/ +.python-version +.DS_Store diff --git a/.speakeasy/gen.lock b/.speakeasy/gen.lock new file mode 100755 index 0000000..c614b2b --- /dev/null +++ b/.speakeasy/gen.lock @@ -0,0 +1,579 @@ +lockVersion: 2.0.0 +id: 3eeea668-4ef4-464e-a888-bdfa023bedf5 +management: + docChecksum: 94439465ae5d544f0e52b00719af05ee + docVersion: 0.0.3 + speakeasyVersion: internal + generationVersion: 2.245.1 + releaseVersion: 0.0.1 + configChecksum: f687023514121ee9745da4d16236cc9a + repoURL: https://github.com/LukeHagar/plexpy.git + repoSubDirectory: . + installationURL: https://github.com/LukeHagar/plexpy.git + published: true +features: + python: + constsAndDefaults: 0.1.2 + core: 4.4.3 + flattening: 2.81.1 + globalSecurity: 2.83.2 + globalServerURLs: 2.82.1 + methodServerURLs: 2.82.1 + nameOverrides: 2.81.1 + unions: 2.82.5 +generatedFiles: + - src/plex_api/sdkconfiguration.py + - src/plex_api/server.py + - src/plex_api/media.py + - src/plex_api/activities.py + - src/plex_api/butler.py + - src/plex_api/hubs.py + - src/plex_api/search.py + - src/plex_api/library.py + - src/plex_api/log.py + - src/plex_api/tv.py + - src/plex_api/plex.py + - src/plex_api/playlists.py + - src/plex_api/security.py + - src/plex_api/sessions.py + - src/plex_api/updater.py + - src/plex_api/video.py + - src/plex_api/sdk.py + - pylintrc + - setup.py + - src/plex_api/__init__.py + - src/plex_api/utils/__init__.py + - src/plex_api/utils/retries.py + - src/plex_api/utils/utils.py + - src/plex_api/models/errors/sdkerror.py + - tests/helpers.py + - src/plex_api/models/operations/getservercapabilities.py + - src/plex_api/models/operations/getserverpreferences.py + - src/plex_api/models/operations/getavailableclients.py + - src/plex_api/models/operations/getdevices.py + - src/plex_api/models/operations/getserveridentity.py + - src/plex_api/models/operations/getmyplexaccount.py + - src/plex_api/models/operations/getresizedphoto.py + - src/plex_api/models/operations/getserverlist.py + - src/plex_api/models/operations/markplayed.py + - src/plex_api/models/operations/markunplayed.py + - src/plex_api/models/operations/updateplayprogress.py + - src/plex_api/models/operations/getserveractivities.py + - src/plex_api/models/operations/cancelserveractivities.py + - src/plex_api/models/operations/getbutlertasks.py + - src/plex_api/models/operations/startalltasks.py + - src/plex_api/models/operations/stopalltasks.py + - src/plex_api/models/operations/starttask.py + - src/plex_api/models/operations/stoptask.py + - src/plex_api/models/operations/getglobalhubs.py + - src/plex_api/models/operations/getlibraryhubs.py + - src/plex_api/models/operations/performsearch.py + - src/plex_api/models/operations/performvoicesearch.py + - src/plex_api/models/operations/getsearchresults.py + - src/plex_api/models/operations/getfilehash.py + - src/plex_api/models/operations/getrecentlyadded.py + - src/plex_api/models/operations/getlibraries.py + - src/plex_api/models/operations/getlibrary.py + - src/plex_api/models/operations/deletelibrary.py + - src/plex_api/models/operations/getlibraryitems.py + - src/plex_api/models/operations/refreshlibrary.py + - src/plex_api/models/operations/searchlibrary.py + - src/plex_api/models/operations/getmetadata.py + - src/plex_api/models/operations/getmetadatachildren.py + - src/plex_api/models/operations/getondeck.py + - src/plex_api/models/operations/logline.py + - src/plex_api/models/operations/logmultiline.py + - src/plex_api/models/operations/enablepapertrail.py + - src/plex_api/models/operations/getpin.py + - src/plex_api/models/operations/gettoken.py + - src/plex_api/models/operations/createplaylist.py + - src/plex_api/models/operations/getplaylists.py + - src/plex_api/models/operations/getplaylist.py + - src/plex_api/models/operations/deleteplaylist.py + - src/plex_api/models/operations/updateplaylist.py + - src/plex_api/models/operations/getplaylistcontents.py + - src/plex_api/models/operations/clearplaylistcontents.py + - src/plex_api/models/operations/addplaylistcontents.py + - src/plex_api/models/operations/uploadplaylist.py + - src/plex_api/models/operations/gettransienttoken.py + - src/plex_api/models/operations/getsourceconnectioninformation.py + - src/plex_api/models/operations/getsessions.py + - src/plex_api/models/operations/getsessionhistory.py + - src/plex_api/models/operations/gettranscodesessions.py + - src/plex_api/models/operations/stoptranscodesession.py + - src/plex_api/models/operations/getupdatestatus.py + - src/plex_api/models/operations/checkforupdates.py + - src/plex_api/models/operations/applyupdates.py + - src/plex_api/models/operations/startuniversaltranscode.py + - src/plex_api/models/operations/gettimeline.py + - src/plex_api/models/errors/getservercapabilities.py + - src/plex_api/models/errors/getserverpreferences.py + - src/plex_api/models/errors/getavailableclients.py + - src/plex_api/models/errors/getdevices.py + - src/plex_api/models/errors/getserveridentity.py + - src/plex_api/models/errors/getmyplexaccount.py + - src/plex_api/models/errors/getresizedphoto.py + - src/plex_api/models/errors/getserverlist.py + - src/plex_api/models/errors/markplayed.py + - src/plex_api/models/errors/markunplayed.py + - src/plex_api/models/errors/updateplayprogress.py + - src/plex_api/models/errors/getserveractivities.py + - src/plex_api/models/errors/cancelserveractivities.py + - src/plex_api/models/errors/getbutlertasks.py + - src/plex_api/models/errors/startalltasks.py + - src/plex_api/models/errors/stopalltasks.py + - src/plex_api/models/errors/starttask.py + - src/plex_api/models/errors/stoptask.py + - src/plex_api/models/errors/getglobalhubs.py + - src/plex_api/models/errors/getlibraryhubs.py + - src/plex_api/models/errors/performsearch.py + - src/plex_api/models/errors/performvoicesearch.py + - src/plex_api/models/errors/getsearchresults.py + - src/plex_api/models/errors/getfilehash.py + - src/plex_api/models/errors/getrecentlyadded.py + - src/plex_api/models/errors/getlibraries.py + - src/plex_api/models/errors/getlibrary.py + - src/plex_api/models/errors/deletelibrary.py + - src/plex_api/models/errors/refreshlibrary.py + - src/plex_api/models/errors/getmetadata.py + - src/plex_api/models/errors/getmetadatachildren.py + - src/plex_api/models/errors/getondeck.py + - src/plex_api/models/errors/logline.py + - src/plex_api/models/errors/logmultiline.py + - src/plex_api/models/errors/enablepapertrail.py + - src/plex_api/models/errors/getpin.py + - src/plex_api/models/errors/gettoken.py + - src/plex_api/models/errors/createplaylist.py + - src/plex_api/models/errors/getplaylists.py + - src/plex_api/models/errors/getplaylist.py + - src/plex_api/models/errors/deleteplaylist.py + - src/plex_api/models/errors/updateplaylist.py + - src/plex_api/models/errors/getplaylistcontents.py + - src/plex_api/models/errors/clearplaylistcontents.py + - src/plex_api/models/errors/addplaylistcontents.py + - src/plex_api/models/errors/uploadplaylist.py + - src/plex_api/models/errors/gettransienttoken.py + - src/plex_api/models/errors/getsourceconnectioninformation.py + - src/plex_api/models/errors/getsessions.py + - src/plex_api/models/errors/getsessionhistory.py + - src/plex_api/models/errors/gettranscodesessions.py + - src/plex_api/models/errors/stoptranscodesession.py + - src/plex_api/models/errors/getupdatestatus.py + - src/plex_api/models/errors/checkforupdates.py + - src/plex_api/models/errors/applyupdates.py + - src/plex_api/models/errors/startuniversaltranscode.py + - src/plex_api/models/errors/gettimeline.py + - src/plex_api/models/components/security.py + - src/plex_api/models/__init__.py + - src/plex_api/models/errors/__init__.py + - src/plex_api/models/operations/__init__.py + - src/plex_api/models/components/__init__.py + - docs/models/operations/directory.md + - docs/models/operations/mediacontainer.md + - docs/models/operations/getservercapabilitiesresponsebody.md + - docs/models/operations/getservercapabilitiesresponse.md + - docs/models/operations/two.md + - docs/models/operations/one.md + - docs/models/operations/setting.md + - docs/models/operations/getserverpreferencesmediacontainer.md + - docs/models/operations/getserverpreferencesresponsebody.md + - docs/models/operations/getserverpreferencesresponse.md + - docs/models/operations/server.md + - docs/models/operations/getavailableclientsmediacontainer.md + - docs/models/operations/getavailableclientsresponsebody.md + - docs/models/operations/getavailableclientsresponse.md + - docs/models/operations/device.md + - docs/models/operations/getdevicesmediacontainer.md + - docs/models/operations/getdevicesresponsebody.md + - docs/models/operations/getdevicesresponse.md + - docs/models/operations/getserveridentitymediacontainer.md + - docs/models/operations/getserveridentityresponsebody.md + - docs/models/operations/getserveridentityresponse.md + - docs/models/operations/myplex.md + - docs/models/operations/getmyplexaccountresponsebody.md + - docs/models/operations/getmyplexaccountresponse.md + - docs/models/operations/minsize.md + - docs/models/operations/upscale.md + - docs/models/operations/getresizedphotorequest.md + - docs/models/operations/getresizedphotoresponse.md + - docs/models/operations/getserverlistserver.md + - docs/models/operations/getserverlistmediacontainer.md + - docs/models/operations/getserverlistresponsebody.md + - docs/models/operations/getserverlistresponse.md + - docs/models/operations/markplayedrequest.md + - docs/models/operations/markplayedresponse.md + - docs/models/operations/markunplayedrequest.md + - docs/models/operations/markunplayedresponse.md + - docs/models/operations/updateplayprogressrequest.md + - docs/models/operations/updateplayprogressresponse.md + - docs/models/operations/context.md + - docs/models/operations/activity.md + - docs/models/operations/getserveractivitiesmediacontainer.md + - docs/models/operations/getserveractivitiesresponsebody.md + - docs/models/operations/getserveractivitiesresponse.md + - docs/models/operations/cancelserveractivitiesrequest.md + - docs/models/operations/cancelserveractivitiesresponse.md + - docs/models/operations/butlertask.md + - docs/models/operations/butlertasks.md + - docs/models/operations/getbutlertasksresponsebody.md + - docs/models/operations/getbutlertasksresponse.md + - docs/models/operations/startalltasksresponse.md + - docs/models/operations/stopalltasksresponse.md + - docs/models/operations/taskname.md + - docs/models/operations/starttaskrequest.md + - docs/models/operations/starttaskresponse.md + - docs/models/operations/pathparamtaskname.md + - docs/models/operations/stoptaskrequest.md + - docs/models/operations/stoptaskresponse.md + - docs/models/operations/onlytransient.md + - docs/models/operations/getglobalhubsrequest.md + - docs/models/operations/getglobalhubsmetadata.md + - docs/models/operations/hub.md + - docs/models/operations/getglobalhubsmediacontainer.md + - docs/models/operations/getglobalhubsresponsebody.md + - docs/models/operations/getglobalhubsresponse.md + - docs/models/operations/queryparamonlytransient.md + - docs/models/operations/getlibraryhubsrequest.md + - docs/models/operations/getlibraryhubspart.md + - docs/models/operations/getlibraryhubsmedia.md + - docs/models/operations/getlibraryhubsgenre.md + - docs/models/operations/getlibraryhubscountry.md + - docs/models/operations/getlibraryhubsdirector.md + - docs/models/operations/getlibraryhubsrole.md + - docs/models/operations/getlibraryhubswriter.md + - docs/models/operations/getlibraryhubsmetadata.md + - docs/models/operations/getlibraryhubshub.md + - docs/models/operations/getlibraryhubsmediacontainer.md + - docs/models/operations/getlibraryhubsresponsebody.md + - docs/models/operations/getlibraryhubsresponse.md + - docs/models/operations/performsearchrequest.md + - docs/models/operations/performsearchresponse.md + - docs/models/operations/performvoicesearchrequest.md + - docs/models/operations/performvoicesearchresponse.md + - docs/models/operations/getsearchresultsrequest.md + - docs/models/operations/getsearchresultspart.md + - docs/models/operations/getsearchresultsmedia.md + - docs/models/operations/getsearchresultsgenre.md + - docs/models/operations/getsearchresultsdirector.md + - docs/models/operations/getsearchresultswriter.md + - docs/models/operations/getsearchresultscountry.md + - docs/models/operations/getsearchresultsrole.md + - docs/models/operations/getsearchresultsmetadata.md + - docs/models/operations/provider.md + - docs/models/operations/getsearchresultsmediacontainer.md + - docs/models/operations/getsearchresultsresponsebody.md + - docs/models/operations/getsearchresultsresponse.md + - docs/models/operations/getfilehashrequest.md + - docs/models/operations/getfilehashresponse.md + - docs/models/operations/part.md + - docs/models/operations/media.md + - docs/models/operations/genre.md + - docs/models/operations/director.md + - docs/models/operations/writer.md + - docs/models/operations/country.md + - docs/models/operations/role.md + - docs/models/operations/metadata.md + - docs/models/operations/getrecentlyaddedmediacontainer.md + - docs/models/operations/getrecentlyaddedresponsebody.md + - docs/models/operations/getrecentlyaddedresponse.md + - docs/models/operations/getlibrarieslocation.md + - docs/models/operations/getlibrariesdirectory.md + - docs/models/operations/getlibrariesmediacontainer.md + - docs/models/operations/getlibrariesresponsebody.md + - docs/models/operations/getlibrariesresponse.md + - docs/models/operations/includedetails.md + - docs/models/operations/getlibraryrequest.md + - docs/models/operations/getlibrarydirectory.md + - docs/models/operations/filter_.md + - docs/models/operations/sort.md + - docs/models/operations/field.md + - docs/models/operations/getlibrarytype.md + - docs/models/operations/operator.md + - docs/models/operations/fieldtype.md + - docs/models/operations/getlibrarymediacontainer.md + - docs/models/operations/getlibraryresponsebody.md + - docs/models/operations/getlibraryresponse.md + - docs/models/operations/deletelibraryrequest.md + - docs/models/operations/deletelibraryresponse.md + - docs/models/operations/tag.md + - docs/models/operations/getlibraryitemsrequest.md + - docs/models/operations/getlibraryitemspart.md + - docs/models/operations/getlibraryitemsmedia.md + - docs/models/operations/getlibraryitemsgenre.md + - docs/models/operations/getlibraryitemscountry.md + - docs/models/operations/getlibraryitemsdirector.md + - docs/models/operations/getlibraryitemswriter.md + - docs/models/operations/getlibraryitemsrole.md + - docs/models/operations/getlibraryitemsmetadata.md + - docs/models/operations/getlibraryitemsmediacontainer.md + - docs/models/operations/getlibraryitemsresponsebody.md + - docs/models/operations/getlibraryitemsresponse.md + - docs/models/operations/refreshlibraryrequest.md + - docs/models/operations/refreshlibraryresponse.md + - docs/models/operations/type.md + - docs/models/operations/searchlibraryrequest.md + - docs/models/operations/searchlibrarymetadata.md + - docs/models/operations/searchlibrarymediacontainer.md + - docs/models/operations/searchlibraryresponsebody.md + - docs/models/operations/searchlibraryresponse.md + - docs/models/operations/getmetadatarequest.md + - docs/models/operations/stream.md + - docs/models/operations/getmetadatapart.md + - docs/models/operations/getmetadatamedia.md + - docs/models/operations/getmetadatagenre.md + - docs/models/operations/getmetadatacountry.md + - docs/models/operations/guids.md + - docs/models/operations/ratings.md + - docs/models/operations/getmetadatadirector.md + - docs/models/operations/getmetadatawriter.md + - docs/models/operations/getmetadatarole.md + - docs/models/operations/producer.md + - docs/models/operations/getmetadatametadata.md + - docs/models/operations/getmetadatamediacontainer.md + - docs/models/operations/getmetadataresponsebody.md + - docs/models/operations/getmetadataresponse.md + - docs/models/operations/getmetadatachildrenrequest.md + - docs/models/operations/getmetadatachildrendirectory.md + - docs/models/operations/getmetadatachildrenmetadata.md + - docs/models/operations/getmetadatachildrenmediacontainer.md + - docs/models/operations/getmetadatachildrenresponsebody.md + - docs/models/operations/getmetadatachildrenresponse.md + - docs/models/operations/getondeckstream.md + - docs/models/operations/getondeckpart.md + - docs/models/operations/getondeckmedia.md + - docs/models/operations/getondeckguids.md + - docs/models/operations/getondeckmetadata.md + - docs/models/operations/getondeckmediacontainer.md + - docs/models/operations/getondeckresponsebody.md + - docs/models/operations/getondeckresponse.md + - docs/models/operations/level.md + - docs/models/operations/loglinerequest.md + - docs/models/operations/loglineresponse.md + - docs/models/operations/logmultilineresponse.md + - docs/models/operations/enablepapertrailresponse.md + - docs/models/operations/getpinrequest.md + - docs/models/operations/location.md + - docs/models/operations/getpinresponsebody.md + - docs/models/operations/getpinresponse.md + - docs/models/operations/gettokenrequest.md + - docs/models/operations/gettokenresponse.md + - docs/models/operations/queryparamtype.md + - docs/models/operations/smart.md + - docs/models/operations/createplaylistrequest.md + - docs/models/operations/createplaylistmetadata.md + - docs/models/operations/createplaylistmediacontainer.md + - docs/models/operations/createplaylistresponsebody.md + - docs/models/operations/createplaylistresponse.md + - docs/models/operations/playlisttype.md + - docs/models/operations/queryparamsmart.md + - docs/models/operations/getplaylistsrequest.md + - docs/models/operations/getplaylistsmetadata.md + - docs/models/operations/getplaylistsmediacontainer.md + - docs/models/operations/getplaylistsresponsebody.md + - docs/models/operations/getplaylistsresponse.md + - docs/models/operations/getplaylistrequest.md + - docs/models/operations/getplaylistmetadata.md + - docs/models/operations/getplaylistmediacontainer.md + - docs/models/operations/getplaylistresponsebody.md + - docs/models/operations/getplaylistresponse.md + - docs/models/operations/deleteplaylistrequest.md + - docs/models/operations/deleteplaylistresponse.md + - docs/models/operations/updateplaylistrequest.md + - docs/models/operations/updateplaylistresponse.md + - docs/models/operations/getplaylistcontentsrequest.md + - docs/models/operations/getplaylistcontentspart.md + - docs/models/operations/getplaylistcontentsmedia.md + - docs/models/operations/getplaylistcontentsgenre.md + - docs/models/operations/getplaylistcontentscountry.md + - docs/models/operations/getplaylistcontentsdirector.md + - docs/models/operations/getplaylistcontentswriter.md + - docs/models/operations/getplaylistcontentsrole.md + - docs/models/operations/getplaylistcontentsmetadata.md + - docs/models/operations/getplaylistcontentsmediacontainer.md + - docs/models/operations/getplaylistcontentsresponsebody.md + - docs/models/operations/getplaylistcontentsresponse.md + - docs/models/operations/clearplaylistcontentsrequest.md + - docs/models/operations/clearplaylistcontentsresponse.md + - docs/models/operations/addplaylistcontentsrequest.md + - docs/models/operations/addplaylistcontentsmetadata.md + - docs/models/operations/addplaylistcontentsmediacontainer.md + - docs/models/operations/addplaylistcontentsresponsebody.md + - docs/models/operations/addplaylistcontentsresponse.md + - docs/models/operations/force.md + - docs/models/operations/uploadplaylistrequest.md + - docs/models/operations/uploadplaylistresponse.md + - docs/models/operations/gettransienttokenqueryparamtype.md + - docs/models/operations/scope.md + - docs/models/operations/gettransienttokenrequest.md + - docs/models/operations/gettransienttokenresponse.md + - docs/models/operations/getsourceconnectioninformationrequest.md + - docs/models/operations/getsourceconnectioninformationresponse.md + - docs/models/operations/getsessionsstream.md + - docs/models/operations/getsessionspart.md + - docs/models/operations/getsessionsmedia.md + - docs/models/operations/user.md + - docs/models/operations/player.md + - docs/models/operations/session.md + - docs/models/operations/getsessionsmetadata.md + - docs/models/operations/getsessionsmediacontainer.md + - docs/models/operations/getsessionsresponsebody.md + - docs/models/operations/getsessionsresponse.md + - docs/models/operations/getsessionhistorymetadata.md + - docs/models/operations/getsessionhistorymediacontainer.md + - docs/models/operations/getsessionhistoryresponsebody.md + - docs/models/operations/getsessionhistoryresponse.md + - docs/models/operations/transcodesession.md + - docs/models/operations/gettranscodesessionsmediacontainer.md + - docs/models/operations/gettranscodesessionsresponsebody.md + - docs/models/operations/gettranscodesessionsresponse.md + - docs/models/operations/stoptranscodesessionrequest.md + - docs/models/operations/stoptranscodesessionresponse.md + - docs/models/operations/release.md + - docs/models/operations/getupdatestatusmediacontainer.md + - docs/models/operations/getupdatestatusresponsebody.md + - docs/models/operations/getupdatestatusresponse.md + - docs/models/operations/download.md + - docs/models/operations/checkforupdatesrequest.md + - docs/models/operations/checkforupdatesresponse.md + - docs/models/operations/tonight.md + - docs/models/operations/skip.md + - docs/models/operations/applyupdatesrequest.md + - docs/models/operations/applyupdatesresponse.md + - docs/models/operations/startuniversaltranscoderequest.md + - docs/models/operations/startuniversaltranscoderesponse.md + - docs/models/operations/state.md + - docs/models/operations/gettimelinerequest.md + - docs/models/operations/gettimelineresponse.md + - docs/models/errors/errors.md + - docs/models/errors/getservercapabilitiesresponsebody.md + - docs/models/errors/getserverpreferenceserrors.md + - docs/models/errors/getserverpreferencesresponsebody.md + - docs/models/errors/getavailableclientserrors.md + - docs/models/errors/getavailableclientsresponsebody.md + - docs/models/errors/getdeviceserrors.md + - docs/models/errors/getdevicesresponsebody.md + - docs/models/errors/getserveridentityerrors.md + - docs/models/errors/getserveridentityresponsebody.md + - docs/models/errors/getmyplexaccounterrors.md + - docs/models/errors/getmyplexaccountresponsebody.md + - docs/models/errors/getresizedphotoerrors.md + - docs/models/errors/getresizedphotoresponsebody.md + - docs/models/errors/getserverlisterrors.md + - docs/models/errors/getserverlistresponsebody.md + - docs/models/errors/markplayederrors.md + - docs/models/errors/markplayedresponsebody.md + - docs/models/errors/markunplayederrors.md + - docs/models/errors/markunplayedresponsebody.md + - docs/models/errors/updateplayprogresserrors.md + - docs/models/errors/updateplayprogressresponsebody.md + - docs/models/errors/getserveractivitieserrors.md + - docs/models/errors/getserveractivitiesresponsebody.md + - docs/models/errors/cancelserveractivitieserrors.md + - docs/models/errors/cancelserveractivitiesresponsebody.md + - docs/models/errors/getbutlertaskserrors.md + - docs/models/errors/getbutlertasksresponsebody.md + - docs/models/errors/startalltaskserrors.md + - docs/models/errors/startalltasksresponsebody.md + - docs/models/errors/stopalltaskserrors.md + - docs/models/errors/stopalltasksresponsebody.md + - docs/models/errors/starttaskerrors.md + - docs/models/errors/starttaskresponsebody.md + - docs/models/errors/stoptaskerrors.md + - docs/models/errors/stoptaskresponsebody.md + - docs/models/errors/getglobalhubserrors.md + - docs/models/errors/getglobalhubsresponsebody.md + - docs/models/errors/getlibraryhubserrors.md + - docs/models/errors/getlibraryhubsresponsebody.md + - docs/models/errors/performsearcherrors.md + - docs/models/errors/performsearchresponsebody.md + - docs/models/errors/performvoicesearcherrors.md + - docs/models/errors/performvoicesearchresponsebody.md + - docs/models/errors/getsearchresultserrors.md + - docs/models/errors/getsearchresultsresponsebody.md + - docs/models/errors/getfilehasherrors.md + - docs/models/errors/getfilehashresponsebody.md + - docs/models/errors/getrecentlyaddederrors.md + - docs/models/errors/getrecentlyaddedresponsebody.md + - docs/models/errors/getlibrarieserrors.md + - docs/models/errors/getlibrariesresponsebody.md + - docs/models/errors/getlibraryerrors.md + - docs/models/errors/getlibraryresponsebody.md + - docs/models/errors/deletelibraryerrors.md + - docs/models/errors/deletelibraryresponsebody.md + - docs/models/errors/refreshlibraryerrors.md + - docs/models/errors/refreshlibraryresponsebody.md + - docs/models/errors/getmetadataerrors.md + - docs/models/errors/getmetadataresponsebody.md + - docs/models/errors/getmetadatachildrenerrors.md + - docs/models/errors/getmetadatachildrenresponsebody.md + - docs/models/errors/getondeckerrors.md + - docs/models/errors/getondeckresponsebody.md + - docs/models/errors/loglineerrors.md + - docs/models/errors/loglineresponsebody.md + - docs/models/errors/logmultilineerrors.md + - docs/models/errors/logmultilineresponsebody.md + - docs/models/errors/enablepapertrailerrors.md + - docs/models/errors/enablepapertrailresponsebody.md + - docs/models/errors/getpinerrors.md + - docs/models/errors/getpinresponsebody.md + - docs/models/errors/gettokenerrors.md + - docs/models/errors/gettokenresponsebody.md + - docs/models/errors/createplaylisterrors.md + - docs/models/errors/createplaylistresponsebody.md + - docs/models/errors/getplaylistserrors.md + - docs/models/errors/getplaylistsresponsebody.md + - docs/models/errors/getplaylisterrors.md + - docs/models/errors/getplaylistresponsebody.md + - docs/models/errors/deleteplaylisterrors.md + - docs/models/errors/deleteplaylistresponsebody.md + - docs/models/errors/updateplaylisterrors.md + - docs/models/errors/updateplaylistresponsebody.md + - docs/models/errors/getplaylistcontentserrors.md + - docs/models/errors/getplaylistcontentsresponsebody.md + - docs/models/errors/clearplaylistcontentserrors.md + - docs/models/errors/clearplaylistcontentsresponsebody.md + - docs/models/errors/addplaylistcontentserrors.md + - docs/models/errors/addplaylistcontentsresponsebody.md + - docs/models/errors/uploadplaylisterrors.md + - docs/models/errors/uploadplaylistresponsebody.md + - docs/models/errors/gettransienttokenerrors.md + - docs/models/errors/gettransienttokenresponsebody.md + - docs/models/errors/getsourceconnectioninformationerrors.md + - docs/models/errors/getsourceconnectioninformationresponsebody.md + - docs/models/errors/getsessionserrors.md + - docs/models/errors/getsessionsresponsebody.md + - docs/models/errors/getsessionhistoryerrors.md + - docs/models/errors/getsessionhistoryresponsebody.md + - docs/models/errors/gettranscodesessionserrors.md + - docs/models/errors/gettranscodesessionsresponsebody.md + - docs/models/errors/stoptranscodesessionerrors.md + - docs/models/errors/stoptranscodesessionresponsebody.md + - docs/models/errors/getupdatestatuserrors.md + - docs/models/errors/getupdatestatusresponsebody.md + - docs/models/errors/checkforupdateserrors.md + - docs/models/errors/checkforupdatesresponsebody.md + - docs/models/errors/applyupdateserrors.md + - docs/models/errors/applyupdatesresponsebody.md + - docs/models/errors/startuniversaltranscodeerrors.md + - docs/models/errors/startuniversaltranscoderesponsebody.md + - docs/models/errors/gettimelineerrors.md + - docs/models/errors/gettimelineresponsebody.md + - docs/models/components/security.md + - docs/sdks/plexapi/README.md + - docs/sdks/server/README.md + - docs/sdks/media/README.md + - docs/sdks/activities/README.md + - docs/sdks/butler/README.md + - docs/sdks/hubs/README.md + - docs/sdks/search/README.md + - docs/sdks/library/README.md + - docs/sdks/log/README.md + - docs/sdks/plex/README.md + - docs/sdks/tv/README.md + - docs/sdks/playlists/README.md + - docs/sdks/security/README.md + - docs/sdks/sessions/README.md + - docs/sdks/updater/README.md + - docs/sdks/video/README.md + - USAGE.md + - .gitattributes diff --git a/README.md b/README.md new file mode 100644 index 0000000..eda8a78 --- /dev/null +++ b/README.md @@ -0,0 +1,324 @@ +# plexpy + +
+ + + + +
+ + +## 🏗 **Welcome to your new SDK!** 🏗 + +It has been generated successfully based on your OpenAPI spec. However, it is not yet ready for production use. Here are some next steps: +- [ ] 🛠 Make your SDK feel handcrafted by [customizing it](https://www.speakeasyapi.dev/docs/customize-sdks) +- [ ] ♻️ Refine your SDK quickly by iterating locally with the [Speakeasy CLI](https://github.com/speakeasy-api/speakeasy) +- [ ] 🎁 Publish your SDK to package managers by [configuring automatic publishing](https://www.speakeasyapi.dev/docs/productionize-sdks/publish-sdks) +- [ ] ✨ When ready to productionize, delete this section from the README + + +## SDK Installation + +```bash +pip install plexpy +``` + + + +## SDK Example Usage + +### Example + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.server.get_server_capabilities() + +if res.object is not None: + # handle response + pass +``` + + + +## Available Resources and Operations + +### [server](docs/sdks/server/README.md) + +* [get_server_capabilities](docs/sdks/server/README.md#get_server_capabilities) - Server Capabilities +* [get_server_preferences](docs/sdks/server/README.md#get_server_preferences) - Get Server Preferences +* [get_available_clients](docs/sdks/server/README.md#get_available_clients) - Get Available Clients +* [get_devices](docs/sdks/server/README.md#get_devices) - Get Devices +* [get_server_identity](docs/sdks/server/README.md#get_server_identity) - Get Server Identity +* [get_my_plex_account](docs/sdks/server/README.md#get_my_plex_account) - Get MyPlex Account +* [get_resized_photo](docs/sdks/server/README.md#get_resized_photo) - Get a Resized Photo +* [get_server_list](docs/sdks/server/README.md#get_server_list) - Get Server List + +### [media](docs/sdks/media/README.md) + +* [mark_played](docs/sdks/media/README.md#mark_played) - Mark Media Played +* [mark_unplayed](docs/sdks/media/README.md#mark_unplayed) - Mark Media Unplayed +* [update_play_progress](docs/sdks/media/README.md#update_play_progress) - Update Media Play Progress + +### [activities](docs/sdks/activities/README.md) + +* [get_server_activities](docs/sdks/activities/README.md#get_server_activities) - Get Server Activities +* [cancel_server_activities](docs/sdks/activities/README.md#cancel_server_activities) - Cancel Server Activities + +### [butler](docs/sdks/butler/README.md) + +* [get_butler_tasks](docs/sdks/butler/README.md#get_butler_tasks) - Get Butler tasks +* [start_all_tasks](docs/sdks/butler/README.md#start_all_tasks) - Start all Butler tasks +* [stop_all_tasks](docs/sdks/butler/README.md#stop_all_tasks) - Stop all Butler tasks +* [start_task](docs/sdks/butler/README.md#start_task) - Start a single Butler task +* [stop_task](docs/sdks/butler/README.md#stop_task) - Stop a single Butler task + +### [hubs](docs/sdks/hubs/README.md) + +* [get_global_hubs](docs/sdks/hubs/README.md#get_global_hubs) - Get Global Hubs +* [get_library_hubs](docs/sdks/hubs/README.md#get_library_hubs) - Get library specific hubs + +### [search](docs/sdks/search/README.md) + +* [perform_search](docs/sdks/search/README.md#perform_search) - Perform a search +* [perform_voice_search](docs/sdks/search/README.md#perform_voice_search) - Perform a voice search +* [get_search_results](docs/sdks/search/README.md#get_search_results) - Get Search Results + +### [library](docs/sdks/library/README.md) + +* [get_file_hash](docs/sdks/library/README.md#get_file_hash) - Get Hash Value +* [get_recently_added](docs/sdks/library/README.md#get_recently_added) - Get Recently Added +* [get_libraries](docs/sdks/library/README.md#get_libraries) - Get All Libraries +* [get_library](docs/sdks/library/README.md#get_library) - Get Library Details +* [delete_library](docs/sdks/library/README.md#delete_library) - Delete Library Section +* [get_library_items](docs/sdks/library/README.md#get_library_items) - Get Library Items +* [refresh_library](docs/sdks/library/README.md#refresh_library) - Refresh Library +* [search_library](docs/sdks/library/README.md#search_library) - Search Library +* [get_metadata](docs/sdks/library/README.md#get_metadata) - Get Items Metadata +* [get_metadata_children](docs/sdks/library/README.md#get_metadata_children) - Get Items Children +* [get_on_deck](docs/sdks/library/README.md#get_on_deck) - Get On Deck + +### [log](docs/sdks/log/README.md) + +* [log_line](docs/sdks/log/README.md#log_line) - Logging a single line message. +* [log_multi_line](docs/sdks/log/README.md#log_multi_line) - Logging a multi-line message +* [enable_paper_trail](docs/sdks/log/README.md#enable_paper_trail) - Enabling Papertrail + + +### [plex.tv](docs/sdks/tv/README.md) + +* [get_pin](docs/sdks/tv/README.md#get_pin) - Get a Pin +* [get_token](docs/sdks/tv/README.md#get_token) - Get Access Token + +### [playlists](docs/sdks/playlists/README.md) + +* [create_playlist](docs/sdks/playlists/README.md#create_playlist) - Create a Playlist +* [get_playlists](docs/sdks/playlists/README.md#get_playlists) - Get All Playlists +* [get_playlist](docs/sdks/playlists/README.md#get_playlist) - Retrieve Playlist +* [delete_playlist](docs/sdks/playlists/README.md#delete_playlist) - Deletes a Playlist +* [update_playlist](docs/sdks/playlists/README.md#update_playlist) - Update a Playlist +* [get_playlist_contents](docs/sdks/playlists/README.md#get_playlist_contents) - Retrieve Playlist Contents +* [clear_playlist_contents](docs/sdks/playlists/README.md#clear_playlist_contents) - Delete Playlist Contents +* [add_playlist_contents](docs/sdks/playlists/README.md#add_playlist_contents) - Adding to a Playlist +* [upload_playlist](docs/sdks/playlists/README.md#upload_playlist) - Upload Playlist + +### [security](docs/sdks/security/README.md) + +* [get_transient_token](docs/sdks/security/README.md#get_transient_token) - Get a Transient Token. +* [get_source_connection_information](docs/sdks/security/README.md#get_source_connection_information) - Get Source Connection Information + +### [sessions](docs/sdks/sessions/README.md) + +* [get_sessions](docs/sdks/sessions/README.md#get_sessions) - Get Active Sessions +* [get_session_history](docs/sdks/sessions/README.md#get_session_history) - Get Session History +* [get_transcode_sessions](docs/sdks/sessions/README.md#get_transcode_sessions) - Get Transcode Sessions +* [stop_transcode_session](docs/sdks/sessions/README.md#stop_transcode_session) - Stop a Transcode Session + +### [updater](docs/sdks/updater/README.md) + +* [get_update_status](docs/sdks/updater/README.md#get_update_status) - Querying status of updates +* [check_for_updates](docs/sdks/updater/README.md#check_for_updates) - Checking for updates +* [apply_updates](docs/sdks/updater/README.md#apply_updates) - Apply Updates + +### [video](docs/sdks/video/README.md) + +* [start_universal_transcode](docs/sdks/video/README.md#start_universal_transcode) - Start Universal Transcode +* [get_timeline](docs/sdks/video/README.md#get_timeline) - Get the timeline for a media item + + + +## Error Handling + +Handling errors in this SDK should largely match your expectations. All operations return a response object or raise an error. If Error objects are specified in your OpenAPI Spec, the SDK will raise the appropriate Error type. + +| Error Object | Status Code | Content Type | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| errors.GetServerCapabilitiesResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +### Example + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = None +try: + res = s.server.get_server_capabilities() +except errors.GetServerCapabilitiesResponseBody as e: + print(e) # handle exception + raise(e) +except errors.SDKError as e: + print(e) # handle exception + raise(e) + +if res.object is not None: + # handle response + pass +``` + + + +## Server Selection + +### Select Server by Index + +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: + +| # | Server | Variables | +| - | ------ | --------- | +| 0 | `{protocol}://{ip}:{port}` | `protocol` (default is `http`), `ip` (default is `10.10.10.47`), `port` (default is `32400`) | + +#### Example + +```python +import plex_api + +s = plex_api.PlexAPI( + server_idx=0, + access_token="", +) + + +res = s.server.get_server_capabilities() + +if res.object is not None: + # handle response + pass +``` + +#### Variables + +Some of the server options above contain variables. If you want to set the values of those variables, the following optional parameters are available when initializing the SDK client instance: + * `protocol: models.ServerProtocol` + * `ip: str` + * `port: str` + +### Override Server URL Per-Client + +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: +```python +import plex_api + +s = plex_api.PlexAPI( + server_url="{protocol}://{ip}:{port}", + access_token="", +) + + +res = s.server.get_server_capabilities() + +if res.object is not None: + # handle response + pass +``` + +### Override Server URL Per-Operation + +The server URL can also be overridden on a per-operation basis, provided a server list was specified for the operation. For example: +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.plex.tv.get_pin(server_url="https://plex.tv/api/v2", x_plex_client_identifier='string', strong=False) + +if res.object is not None: + # handle response + pass +``` + + + +## Custom HTTP Client + +The Python SDK makes API calls using the [requests](https://pypi.org/project/requests/) 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 a custom `requests.Session` object. + +For example, you could specify a header for every request that this sdk makes as follows: +```python +import plex_api +import requests + +http_client = requests.Session() +http_client.headers.update({'x-custom-header': 'someValue'}) +s = plex_api.PlexAPI(client: http_client) +``` + + + +## Authentication + +### Per-Client Security Schemes + +This SDK supports the following security scheme globally: + +| Name | Type | Scheme | +| -------------- | -------------- | -------------- | +| `access_token` | apiKey | API key | + +To authenticate with the API the `access_token` parameter must be set when initializing the SDK client instance. For example: +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.server.get_server_capabilities() + +if res.object is not None: + # handle response + pass +``` + + + + +# Development + +## Maturity + +This SDK is in beta, and there may be breaking changes between versions without a major version update. Therefore, we recommend pinning usage +to a specific package version. This way, you can install the same version each time without breaking changes unless you are intentionally +looking for the latest version. + +## Contributions + +While we value open-source contributions to this SDK, this library is generated programmatically. +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! + +### SDK Created by [Speakeasy](https://docs.speakeasyapi.dev/docs/using-speakeasy/client-sdks) diff --git a/RELEASES.md b/RELEASES.md new file mode 100644 index 0000000..83bf370 --- /dev/null +++ b/RELEASES.md @@ -0,0 +1,11 @@ + + +## 2024-02-01 01:15:36 +### Changes +Based on: +- OpenAPI Doc 0.0.3 +- Speakeasy CLI 1.161.0 (2.245.1) https://github.com/speakeasy-api/speakeasy +### Generated +- [python v0.0.1] . +### Releases +- [PyPI v0.0.1] https://pypi.org/project/plexpy/0.0.1 - . \ No newline at end of file diff --git a/USAGE.md b/USAGE.md new file mode 100644 index 0000000..50ab126 --- /dev/null +++ b/USAGE.md @@ -0,0 +1,16 @@ + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.server.get_server_capabilities() + +if res.object is not None: + # handle response + pass +``` + \ No newline at end of file diff --git a/docs/models/components/security.md b/docs/models/components/security.md new file mode 100644 index 0000000..c999036 --- /dev/null +++ b/docs/models/components/security.md @@ -0,0 +1,8 @@ +# Security + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `access_token` | *str* | :heavy_check_mark: | N/A | \ No newline at end of file diff --git a/docs/models/errors/addplaylistcontentserrors.md b/docs/models/errors/addplaylistcontentserrors.md new file mode 100644 index 0000000..5d43136 --- /dev/null +++ b/docs/models/errors/addplaylistcontentserrors.md @@ -0,0 +1,10 @@ +# AddPlaylistContentsErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/addplaylistcontentsresponsebody.md b/docs/models/errors/addplaylistcontentsresponsebody.md new file mode 100644 index 0000000..fab2b49 --- /dev/null +++ b/docs/models/errors/addplaylistcontentsresponsebody.md @@ -0,0 +1,11 @@ +# AddPlaylistContentsResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `errors` | List[[errors.AddPlaylistContentsErrors](../../models/errors/addplaylistcontentserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/applyupdateserrors.md b/docs/models/errors/applyupdateserrors.md new file mode 100644 index 0000000..d159d16 --- /dev/null +++ b/docs/models/errors/applyupdateserrors.md @@ -0,0 +1,10 @@ +# ApplyUpdatesErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/applyupdatesresponsebody.md b/docs/models/errors/applyupdatesresponsebody.md new file mode 100644 index 0000000..22cd41c --- /dev/null +++ b/docs/models/errors/applyupdatesresponsebody.md @@ -0,0 +1,11 @@ +# ApplyUpdatesResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.ApplyUpdatesErrors](../../models/errors/applyupdateserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/cancelserveractivitieserrors.md b/docs/models/errors/cancelserveractivitieserrors.md new file mode 100644 index 0000000..4ac7bf8 --- /dev/null +++ b/docs/models/errors/cancelserveractivitieserrors.md @@ -0,0 +1,10 @@ +# CancelServerActivitiesErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/cancelserveractivitiesresponsebody.md b/docs/models/errors/cancelserveractivitiesresponsebody.md new file mode 100644 index 0000000..bb3a643 --- /dev/null +++ b/docs/models/errors/cancelserveractivitiesresponsebody.md @@ -0,0 +1,11 @@ +# CancelServerActivitiesResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `errors` | List[[errors.CancelServerActivitiesErrors](../../models/errors/cancelserveractivitieserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/checkforupdateserrors.md b/docs/models/errors/checkforupdateserrors.md new file mode 100644 index 0000000..3336879 --- /dev/null +++ b/docs/models/errors/checkforupdateserrors.md @@ -0,0 +1,10 @@ +# CheckForUpdatesErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/checkforupdatesresponsebody.md b/docs/models/errors/checkforupdatesresponsebody.md new file mode 100644 index 0000000..5bf874e --- /dev/null +++ b/docs/models/errors/checkforupdatesresponsebody.md @@ -0,0 +1,11 @@ +# CheckForUpdatesResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.CheckForUpdatesErrors](../../models/errors/checkforupdateserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/clearplaylistcontentserrors.md b/docs/models/errors/clearplaylistcontentserrors.md new file mode 100644 index 0000000..e634dfb --- /dev/null +++ b/docs/models/errors/clearplaylistcontentserrors.md @@ -0,0 +1,10 @@ +# ClearPlaylistContentsErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/clearplaylistcontentsresponsebody.md b/docs/models/errors/clearplaylistcontentsresponsebody.md new file mode 100644 index 0000000..b2d2942 --- /dev/null +++ b/docs/models/errors/clearplaylistcontentsresponsebody.md @@ -0,0 +1,11 @@ +# ClearPlaylistContentsResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `errors` | List[[errors.ClearPlaylistContentsErrors](../../models/errors/clearplaylistcontentserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/createplaylisterrors.md b/docs/models/errors/createplaylisterrors.md new file mode 100644 index 0000000..a890e9c --- /dev/null +++ b/docs/models/errors/createplaylisterrors.md @@ -0,0 +1,10 @@ +# CreatePlaylistErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/createplaylistresponsebody.md b/docs/models/errors/createplaylistresponsebody.md new file mode 100644 index 0000000..509f7ad --- /dev/null +++ b/docs/models/errors/createplaylistresponsebody.md @@ -0,0 +1,11 @@ +# CreatePlaylistResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.CreatePlaylistErrors](../../models/errors/createplaylisterrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/deletelibraryerrors.md b/docs/models/errors/deletelibraryerrors.md new file mode 100644 index 0000000..bf133f8 --- /dev/null +++ b/docs/models/errors/deletelibraryerrors.md @@ -0,0 +1,10 @@ +# DeleteLibraryErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/deletelibraryresponsebody.md b/docs/models/errors/deletelibraryresponsebody.md new file mode 100644 index 0000000..b3f0515 --- /dev/null +++ b/docs/models/errors/deletelibraryresponsebody.md @@ -0,0 +1,11 @@ +# DeleteLibraryResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.DeleteLibraryErrors](../../models/errors/deletelibraryerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/deleteplaylisterrors.md b/docs/models/errors/deleteplaylisterrors.md new file mode 100644 index 0000000..9694402 --- /dev/null +++ b/docs/models/errors/deleteplaylisterrors.md @@ -0,0 +1,10 @@ +# DeletePlaylistErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/deleteplaylistresponsebody.md b/docs/models/errors/deleteplaylistresponsebody.md new file mode 100644 index 0000000..89279ca --- /dev/null +++ b/docs/models/errors/deleteplaylistresponsebody.md @@ -0,0 +1,11 @@ +# DeletePlaylistResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.DeletePlaylistErrors](../../models/errors/deleteplaylisterrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/enablepapertrailerrors.md b/docs/models/errors/enablepapertrailerrors.md new file mode 100644 index 0000000..fef2aec --- /dev/null +++ b/docs/models/errors/enablepapertrailerrors.md @@ -0,0 +1,10 @@ +# EnablePaperTrailErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/enablepapertrailresponsebody.md b/docs/models/errors/enablepapertrailresponsebody.md new file mode 100644 index 0000000..d4dd291 --- /dev/null +++ b/docs/models/errors/enablepapertrailresponsebody.md @@ -0,0 +1,11 @@ +# EnablePaperTrailResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.EnablePaperTrailErrors](../../models/errors/enablepapertrailerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/errors.md b/docs/models/errors/errors.md new file mode 100644 index 0000000..246d197 --- /dev/null +++ b/docs/models/errors/errors.md @@ -0,0 +1,10 @@ +# Errors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getavailableclientserrors.md b/docs/models/errors/getavailableclientserrors.md new file mode 100644 index 0000000..7b8965e --- /dev/null +++ b/docs/models/errors/getavailableclientserrors.md @@ -0,0 +1,10 @@ +# GetAvailableClientsErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getavailableclientsresponsebody.md b/docs/models/errors/getavailableclientsresponsebody.md new file mode 100644 index 0000000..5567dd0 --- /dev/null +++ b/docs/models/errors/getavailableclientsresponsebody.md @@ -0,0 +1,11 @@ +# GetAvailableClientsResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `errors` | List[[errors.GetAvailableClientsErrors](../../models/errors/getavailableclientserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getbutlertaskserrors.md b/docs/models/errors/getbutlertaskserrors.md new file mode 100644 index 0000000..53066cd --- /dev/null +++ b/docs/models/errors/getbutlertaskserrors.md @@ -0,0 +1,10 @@ +# GetButlerTasksErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getbutlertasksresponsebody.md b/docs/models/errors/getbutlertasksresponsebody.md new file mode 100644 index 0000000..a449a7e --- /dev/null +++ b/docs/models/errors/getbutlertasksresponsebody.md @@ -0,0 +1,11 @@ +# GetButlerTasksResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetButlerTasksErrors](../../models/errors/getbutlertaskserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getdeviceserrors.md b/docs/models/errors/getdeviceserrors.md new file mode 100644 index 0000000..08ef2a5 --- /dev/null +++ b/docs/models/errors/getdeviceserrors.md @@ -0,0 +1,10 @@ +# GetDevicesErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getdevicesresponsebody.md b/docs/models/errors/getdevicesresponsebody.md new file mode 100644 index 0000000..fb3904b --- /dev/null +++ b/docs/models/errors/getdevicesresponsebody.md @@ -0,0 +1,11 @@ +# GetDevicesResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetDevicesErrors](../../models/errors/getdeviceserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getfilehasherrors.md b/docs/models/errors/getfilehasherrors.md new file mode 100644 index 0000000..05ea103 --- /dev/null +++ b/docs/models/errors/getfilehasherrors.md @@ -0,0 +1,10 @@ +# GetFileHashErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getfilehashresponsebody.md b/docs/models/errors/getfilehashresponsebody.md new file mode 100644 index 0000000..cd8be10 --- /dev/null +++ b/docs/models/errors/getfilehashresponsebody.md @@ -0,0 +1,11 @@ +# GetFileHashResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetFileHashErrors](../../models/errors/getfilehasherrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getglobalhubserrors.md b/docs/models/errors/getglobalhubserrors.md new file mode 100644 index 0000000..8e4f916 --- /dev/null +++ b/docs/models/errors/getglobalhubserrors.md @@ -0,0 +1,10 @@ +# GetGlobalHubsErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getglobalhubsresponsebody.md b/docs/models/errors/getglobalhubsresponsebody.md new file mode 100644 index 0000000..7490666 --- /dev/null +++ b/docs/models/errors/getglobalhubsresponsebody.md @@ -0,0 +1,11 @@ +# GetGlobalHubsResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetGlobalHubsErrors](../../models/errors/getglobalhubserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getlibrarieserrors.md b/docs/models/errors/getlibrarieserrors.md new file mode 100644 index 0000000..bac3a29 --- /dev/null +++ b/docs/models/errors/getlibrarieserrors.md @@ -0,0 +1,10 @@ +# GetLibrariesErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getlibrariesresponsebody.md b/docs/models/errors/getlibrariesresponsebody.md new file mode 100644 index 0000000..968a2e5 --- /dev/null +++ b/docs/models/errors/getlibrariesresponsebody.md @@ -0,0 +1,11 @@ +# GetLibrariesResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetLibrariesErrors](../../models/errors/getlibrarieserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getlibraryerrors.md b/docs/models/errors/getlibraryerrors.md new file mode 100644 index 0000000..53e73c7 --- /dev/null +++ b/docs/models/errors/getlibraryerrors.md @@ -0,0 +1,10 @@ +# GetLibraryErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getlibraryhubserrors.md b/docs/models/errors/getlibraryhubserrors.md new file mode 100644 index 0000000..c1c2cf4 --- /dev/null +++ b/docs/models/errors/getlibraryhubserrors.md @@ -0,0 +1,10 @@ +# GetLibraryHubsErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getlibraryhubsresponsebody.md b/docs/models/errors/getlibraryhubsresponsebody.md new file mode 100644 index 0000000..ceb2a25 --- /dev/null +++ b/docs/models/errors/getlibraryhubsresponsebody.md @@ -0,0 +1,11 @@ +# GetLibraryHubsResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetLibraryHubsErrors](../../models/errors/getlibraryhubserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getlibraryresponsebody.md b/docs/models/errors/getlibraryresponsebody.md new file mode 100644 index 0000000..f05d69a --- /dev/null +++ b/docs/models/errors/getlibraryresponsebody.md @@ -0,0 +1,11 @@ +# GetLibraryResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetLibraryErrors](../../models/errors/getlibraryerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getmetadatachildrenerrors.md b/docs/models/errors/getmetadatachildrenerrors.md new file mode 100644 index 0000000..20c822b --- /dev/null +++ b/docs/models/errors/getmetadatachildrenerrors.md @@ -0,0 +1,10 @@ +# GetMetadataChildrenErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getmetadatachildrenresponsebody.md b/docs/models/errors/getmetadatachildrenresponsebody.md new file mode 100644 index 0000000..4cb19f7 --- /dev/null +++ b/docs/models/errors/getmetadatachildrenresponsebody.md @@ -0,0 +1,11 @@ +# GetMetadataChildrenResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `errors` | List[[errors.GetMetadataChildrenErrors](../../models/errors/getmetadatachildrenerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getmetadataerrors.md b/docs/models/errors/getmetadataerrors.md new file mode 100644 index 0000000..dd1fc30 --- /dev/null +++ b/docs/models/errors/getmetadataerrors.md @@ -0,0 +1,10 @@ +# GetMetadataErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getmetadataresponsebody.md b/docs/models/errors/getmetadataresponsebody.md new file mode 100644 index 0000000..223c692 --- /dev/null +++ b/docs/models/errors/getmetadataresponsebody.md @@ -0,0 +1,11 @@ +# GetMetadataResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetMetadataErrors](../../models/errors/getmetadataerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getmyplexaccounterrors.md b/docs/models/errors/getmyplexaccounterrors.md new file mode 100644 index 0000000..0a4c425 --- /dev/null +++ b/docs/models/errors/getmyplexaccounterrors.md @@ -0,0 +1,10 @@ +# GetMyPlexAccountErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getmyplexaccountresponsebody.md b/docs/models/errors/getmyplexaccountresponsebody.md new file mode 100644 index 0000000..31f3236 --- /dev/null +++ b/docs/models/errors/getmyplexaccountresponsebody.md @@ -0,0 +1,11 @@ +# GetMyPlexAccountResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetMyPlexAccountErrors](../../models/errors/getmyplexaccounterrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getondeckerrors.md b/docs/models/errors/getondeckerrors.md new file mode 100644 index 0000000..fd4be45 --- /dev/null +++ b/docs/models/errors/getondeckerrors.md @@ -0,0 +1,10 @@ +# GetOnDeckErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getondeckresponsebody.md b/docs/models/errors/getondeckresponsebody.md new file mode 100644 index 0000000..0ca43ee --- /dev/null +++ b/docs/models/errors/getondeckresponsebody.md @@ -0,0 +1,11 @@ +# GetOnDeckResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetOnDeckErrors](../../models/errors/getondeckerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getpinerrors.md b/docs/models/errors/getpinerrors.md new file mode 100644 index 0000000..e3f20e2 --- /dev/null +++ b/docs/models/errors/getpinerrors.md @@ -0,0 +1,10 @@ +# GetPinErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1000 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | X-Plex-Client-Identifier is missing | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 400 | \ No newline at end of file diff --git a/docs/models/errors/getpinresponsebody.md b/docs/models/errors/getpinresponsebody.md new file mode 100644 index 0000000..b9086c4 --- /dev/null +++ b/docs/models/errors/getpinresponsebody.md @@ -0,0 +1,11 @@ +# GetPinResponseBody + +X-Plex-Client-Identifier is missing + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetPinErrors](../../models/errors/getpinerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getplaylistcontentserrors.md b/docs/models/errors/getplaylistcontentserrors.md new file mode 100644 index 0000000..99d2c5a --- /dev/null +++ b/docs/models/errors/getplaylistcontentserrors.md @@ -0,0 +1,10 @@ +# GetPlaylistContentsErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getplaylistcontentsresponsebody.md b/docs/models/errors/getplaylistcontentsresponsebody.md new file mode 100644 index 0000000..ab639a0 --- /dev/null +++ b/docs/models/errors/getplaylistcontentsresponsebody.md @@ -0,0 +1,11 @@ +# GetPlaylistContentsResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `errors` | List[[errors.GetPlaylistContentsErrors](../../models/errors/getplaylistcontentserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getplaylisterrors.md b/docs/models/errors/getplaylisterrors.md new file mode 100644 index 0000000..6f78dd2 --- /dev/null +++ b/docs/models/errors/getplaylisterrors.md @@ -0,0 +1,10 @@ +# GetPlaylistErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getplaylistresponsebody.md b/docs/models/errors/getplaylistresponsebody.md new file mode 100644 index 0000000..7e4817f --- /dev/null +++ b/docs/models/errors/getplaylistresponsebody.md @@ -0,0 +1,11 @@ +# GetPlaylistResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetPlaylistErrors](../../models/errors/getplaylisterrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getplaylistserrors.md b/docs/models/errors/getplaylistserrors.md new file mode 100644 index 0000000..ba36961 --- /dev/null +++ b/docs/models/errors/getplaylistserrors.md @@ -0,0 +1,10 @@ +# GetPlaylistsErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getplaylistsresponsebody.md b/docs/models/errors/getplaylistsresponsebody.md new file mode 100644 index 0000000..f1020eb --- /dev/null +++ b/docs/models/errors/getplaylistsresponsebody.md @@ -0,0 +1,11 @@ +# GetPlaylistsResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetPlaylistsErrors](../../models/errors/getplaylistserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getrecentlyaddederrors.md b/docs/models/errors/getrecentlyaddederrors.md new file mode 100644 index 0000000..6e9638d --- /dev/null +++ b/docs/models/errors/getrecentlyaddederrors.md @@ -0,0 +1,10 @@ +# GetRecentlyAddedErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getrecentlyaddedresponsebody.md b/docs/models/errors/getrecentlyaddedresponsebody.md new file mode 100644 index 0000000..591a893 --- /dev/null +++ b/docs/models/errors/getrecentlyaddedresponsebody.md @@ -0,0 +1,11 @@ +# GetRecentlyAddedResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetRecentlyAddedErrors](../../models/errors/getrecentlyaddederrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getresizedphotoerrors.md b/docs/models/errors/getresizedphotoerrors.md new file mode 100644 index 0000000..17df5be --- /dev/null +++ b/docs/models/errors/getresizedphotoerrors.md @@ -0,0 +1,10 @@ +# GetResizedPhotoErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getresizedphotoresponsebody.md b/docs/models/errors/getresizedphotoresponsebody.md new file mode 100644 index 0000000..e985b8e --- /dev/null +++ b/docs/models/errors/getresizedphotoresponsebody.md @@ -0,0 +1,11 @@ +# GetResizedPhotoResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetResizedPhotoErrors](../../models/errors/getresizedphotoerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getsearchresultserrors.md b/docs/models/errors/getsearchresultserrors.md new file mode 100644 index 0000000..ca8d75e --- /dev/null +++ b/docs/models/errors/getsearchresultserrors.md @@ -0,0 +1,10 @@ +# GetSearchResultsErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getsearchresultsresponsebody.md b/docs/models/errors/getsearchresultsresponsebody.md new file mode 100644 index 0000000..e0e31d6 --- /dev/null +++ b/docs/models/errors/getsearchresultsresponsebody.md @@ -0,0 +1,11 @@ +# GetSearchResultsResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetSearchResultsErrors](../../models/errors/getsearchresultserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getserveractivitieserrors.md b/docs/models/errors/getserveractivitieserrors.md new file mode 100644 index 0000000..032f174 --- /dev/null +++ b/docs/models/errors/getserveractivitieserrors.md @@ -0,0 +1,10 @@ +# GetServerActivitiesErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getserveractivitiesresponsebody.md b/docs/models/errors/getserveractivitiesresponsebody.md new file mode 100644 index 0000000..5c6de9b --- /dev/null +++ b/docs/models/errors/getserveractivitiesresponsebody.md @@ -0,0 +1,11 @@ +# GetServerActivitiesResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------ | +| `errors` | List[[errors.GetServerActivitiesErrors](../../models/errors/getserveractivitieserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getservercapabilitiesresponsebody.md b/docs/models/errors/getservercapabilitiesresponsebody.md new file mode 100644 index 0000000..b5bdf06 --- /dev/null +++ b/docs/models/errors/getservercapabilitiesresponsebody.md @@ -0,0 +1,11 @@ +# GetServerCapabilitiesResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.Errors](../../models/errors/errors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getserveridentityerrors.md b/docs/models/errors/getserveridentityerrors.md new file mode 100644 index 0000000..4393285 --- /dev/null +++ b/docs/models/errors/getserveridentityerrors.md @@ -0,0 +1,10 @@ +# GetServerIdentityErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getserveridentityresponsebody.md b/docs/models/errors/getserveridentityresponsebody.md new file mode 100644 index 0000000..f22dbdb --- /dev/null +++ b/docs/models/errors/getserveridentityresponsebody.md @@ -0,0 +1,11 @@ +# GetServerIdentityResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetServerIdentityErrors](../../models/errors/getserveridentityerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getserverlisterrors.md b/docs/models/errors/getserverlisterrors.md new file mode 100644 index 0000000..c56ab60 --- /dev/null +++ b/docs/models/errors/getserverlisterrors.md @@ -0,0 +1,10 @@ +# GetServerListErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getserverlistresponsebody.md b/docs/models/errors/getserverlistresponsebody.md new file mode 100644 index 0000000..ed16a0c --- /dev/null +++ b/docs/models/errors/getserverlistresponsebody.md @@ -0,0 +1,11 @@ +# GetServerListResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetServerListErrors](../../models/errors/getserverlisterrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getserverpreferenceserrors.md b/docs/models/errors/getserverpreferenceserrors.md new file mode 100644 index 0000000..f96fbfe --- /dev/null +++ b/docs/models/errors/getserverpreferenceserrors.md @@ -0,0 +1,10 @@ +# GetServerPreferencesErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getserverpreferencesresponsebody.md b/docs/models/errors/getserverpreferencesresponsebody.md new file mode 100644 index 0000000..c6333d1 --- /dev/null +++ b/docs/models/errors/getserverpreferencesresponsebody.md @@ -0,0 +1,11 @@ +# GetServerPreferencesResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetServerPreferencesErrors](../../models/errors/getserverpreferenceserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getsessionhistoryerrors.md b/docs/models/errors/getsessionhistoryerrors.md new file mode 100644 index 0000000..069ee46 --- /dev/null +++ b/docs/models/errors/getsessionhistoryerrors.md @@ -0,0 +1,10 @@ +# GetSessionHistoryErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getsessionhistoryresponsebody.md b/docs/models/errors/getsessionhistoryresponsebody.md new file mode 100644 index 0000000..fb3f5f8 --- /dev/null +++ b/docs/models/errors/getsessionhistoryresponsebody.md @@ -0,0 +1,11 @@ +# GetSessionHistoryResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetSessionHistoryErrors](../../models/errors/getsessionhistoryerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getsessionserrors.md b/docs/models/errors/getsessionserrors.md new file mode 100644 index 0000000..840f90a --- /dev/null +++ b/docs/models/errors/getsessionserrors.md @@ -0,0 +1,10 @@ +# GetSessionsErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getsessionsresponsebody.md b/docs/models/errors/getsessionsresponsebody.md new file mode 100644 index 0000000..713b13c --- /dev/null +++ b/docs/models/errors/getsessionsresponsebody.md @@ -0,0 +1,11 @@ +# GetSessionsResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetSessionsErrors](../../models/errors/getsessionserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getsourceconnectioninformationerrors.md b/docs/models/errors/getsourceconnectioninformationerrors.md new file mode 100644 index 0000000..17915b9 --- /dev/null +++ b/docs/models/errors/getsourceconnectioninformationerrors.md @@ -0,0 +1,10 @@ +# GetSourceConnectionInformationErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getsourceconnectioninformationresponsebody.md b/docs/models/errors/getsourceconnectioninformationresponsebody.md new file mode 100644 index 0000000..0f783cb --- /dev/null +++ b/docs/models/errors/getsourceconnectioninformationresponsebody.md @@ -0,0 +1,11 @@ +# GetSourceConnectionInformationResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetSourceConnectionInformationErrors](../../models/errors/getsourceconnectioninformationerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/gettimelineerrors.md b/docs/models/errors/gettimelineerrors.md new file mode 100644 index 0000000..3a0485a --- /dev/null +++ b/docs/models/errors/gettimelineerrors.md @@ -0,0 +1,10 @@ +# GetTimelineErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/gettimelineresponsebody.md b/docs/models/errors/gettimelineresponsebody.md new file mode 100644 index 0000000..c6083f6 --- /dev/null +++ b/docs/models/errors/gettimelineresponsebody.md @@ -0,0 +1,11 @@ +# GetTimelineResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetTimelineErrors](../../models/errors/gettimelineerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/gettokenerrors.md b/docs/models/errors/gettokenerrors.md new file mode 100644 index 0000000..ccf5742 --- /dev/null +++ b/docs/models/errors/gettokenerrors.md @@ -0,0 +1,10 @@ +# GetTokenErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1000 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | X-Plex-Client-Identifier is missing | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 400 | \ No newline at end of file diff --git a/docs/models/errors/gettokenresponsebody.md b/docs/models/errors/gettokenresponsebody.md new file mode 100644 index 0000000..44d6389 --- /dev/null +++ b/docs/models/errors/gettokenresponsebody.md @@ -0,0 +1,11 @@ +# GetTokenResponseBody + +X-Plex-Client-Identifier is missing + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetTokenErrors](../../models/errors/gettokenerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/gettranscodesessionserrors.md b/docs/models/errors/gettranscodesessionserrors.md new file mode 100644 index 0000000..5ada16e --- /dev/null +++ b/docs/models/errors/gettranscodesessionserrors.md @@ -0,0 +1,10 @@ +# GetTranscodeSessionsErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/gettranscodesessionsresponsebody.md b/docs/models/errors/gettranscodesessionsresponsebody.md new file mode 100644 index 0000000..4462d2f --- /dev/null +++ b/docs/models/errors/gettranscodesessionsresponsebody.md @@ -0,0 +1,11 @@ +# GetTranscodeSessionsResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetTranscodeSessionsErrors](../../models/errors/gettranscodesessionserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/gettransienttokenerrors.md b/docs/models/errors/gettransienttokenerrors.md new file mode 100644 index 0000000..f34617b --- /dev/null +++ b/docs/models/errors/gettransienttokenerrors.md @@ -0,0 +1,10 @@ +# GetTransientTokenErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/gettransienttokenresponsebody.md b/docs/models/errors/gettransienttokenresponsebody.md new file mode 100644 index 0000000..23aea89 --- /dev/null +++ b/docs/models/errors/gettransienttokenresponsebody.md @@ -0,0 +1,11 @@ +# GetTransientTokenResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetTransientTokenErrors](../../models/errors/gettransienttokenerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/getupdatestatuserrors.md b/docs/models/errors/getupdatestatuserrors.md new file mode 100644 index 0000000..cd5417f --- /dev/null +++ b/docs/models/errors/getupdatestatuserrors.md @@ -0,0 +1,10 @@ +# GetUpdateStatusErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/getupdatestatusresponsebody.md b/docs/models/errors/getupdatestatusresponsebody.md new file mode 100644 index 0000000..6b20b00 --- /dev/null +++ b/docs/models/errors/getupdatestatusresponsebody.md @@ -0,0 +1,11 @@ +# GetUpdateStatusResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.GetUpdateStatusErrors](../../models/errors/getupdatestatuserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/loglineerrors.md b/docs/models/errors/loglineerrors.md new file mode 100644 index 0000000..39af85e --- /dev/null +++ b/docs/models/errors/loglineerrors.md @@ -0,0 +1,10 @@ +# LogLineErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/loglineresponsebody.md b/docs/models/errors/loglineresponsebody.md new file mode 100644 index 0000000..4bdced2 --- /dev/null +++ b/docs/models/errors/loglineresponsebody.md @@ -0,0 +1,11 @@ +# LogLineResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.LogLineErrors](../../models/errors/loglineerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/logmultilineerrors.md b/docs/models/errors/logmultilineerrors.md new file mode 100644 index 0000000..87dda5d --- /dev/null +++ b/docs/models/errors/logmultilineerrors.md @@ -0,0 +1,10 @@ +# LogMultiLineErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/logmultilineresponsebody.md b/docs/models/errors/logmultilineresponsebody.md new file mode 100644 index 0000000..034de13 --- /dev/null +++ b/docs/models/errors/logmultilineresponsebody.md @@ -0,0 +1,11 @@ +# LogMultiLineResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.LogMultiLineErrors](../../models/errors/logmultilineerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/markplayederrors.md b/docs/models/errors/markplayederrors.md new file mode 100644 index 0000000..1e460ab --- /dev/null +++ b/docs/models/errors/markplayederrors.md @@ -0,0 +1,10 @@ +# MarkPlayedErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/markplayedresponsebody.md b/docs/models/errors/markplayedresponsebody.md new file mode 100644 index 0000000..8d96c98 --- /dev/null +++ b/docs/models/errors/markplayedresponsebody.md @@ -0,0 +1,11 @@ +# MarkPlayedResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.MarkPlayedErrors](../../models/errors/markplayederrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/markunplayederrors.md b/docs/models/errors/markunplayederrors.md new file mode 100644 index 0000000..b5f4a95 --- /dev/null +++ b/docs/models/errors/markunplayederrors.md @@ -0,0 +1,10 @@ +# MarkUnplayedErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/markunplayedresponsebody.md b/docs/models/errors/markunplayedresponsebody.md new file mode 100644 index 0000000..2e90831 --- /dev/null +++ b/docs/models/errors/markunplayedresponsebody.md @@ -0,0 +1,11 @@ +# MarkUnplayedResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.MarkUnplayedErrors](../../models/errors/markunplayederrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/performsearcherrors.md b/docs/models/errors/performsearcherrors.md new file mode 100644 index 0000000..4d5f84a --- /dev/null +++ b/docs/models/errors/performsearcherrors.md @@ -0,0 +1,10 @@ +# PerformSearchErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/performsearchresponsebody.md b/docs/models/errors/performsearchresponsebody.md new file mode 100644 index 0000000..a9160bb --- /dev/null +++ b/docs/models/errors/performsearchresponsebody.md @@ -0,0 +1,11 @@ +# PerformSearchResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.PerformSearchErrors](../../models/errors/performsearcherrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/performvoicesearcherrors.md b/docs/models/errors/performvoicesearcherrors.md new file mode 100644 index 0000000..26bda08 --- /dev/null +++ b/docs/models/errors/performvoicesearcherrors.md @@ -0,0 +1,10 @@ +# PerformVoiceSearchErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/performvoicesearchresponsebody.md b/docs/models/errors/performvoicesearchresponsebody.md new file mode 100644 index 0000000..5901105 --- /dev/null +++ b/docs/models/errors/performvoicesearchresponsebody.md @@ -0,0 +1,11 @@ +# PerformVoiceSearchResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `errors` | List[[errors.PerformVoiceSearchErrors](../../models/errors/performvoicesearcherrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/refreshlibraryerrors.md b/docs/models/errors/refreshlibraryerrors.md new file mode 100644 index 0000000..84784f1 --- /dev/null +++ b/docs/models/errors/refreshlibraryerrors.md @@ -0,0 +1,10 @@ +# RefreshLibraryErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/refreshlibraryresponsebody.md b/docs/models/errors/refreshlibraryresponsebody.md new file mode 100644 index 0000000..91684e1 --- /dev/null +++ b/docs/models/errors/refreshlibraryresponsebody.md @@ -0,0 +1,11 @@ +# RefreshLibraryResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.RefreshLibraryErrors](../../models/errors/refreshlibraryerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/startalltaskserrors.md b/docs/models/errors/startalltaskserrors.md new file mode 100644 index 0000000..fb27187 --- /dev/null +++ b/docs/models/errors/startalltaskserrors.md @@ -0,0 +1,10 @@ +# StartAllTasksErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/startalltasksresponsebody.md b/docs/models/errors/startalltasksresponsebody.md new file mode 100644 index 0000000..173277c --- /dev/null +++ b/docs/models/errors/startalltasksresponsebody.md @@ -0,0 +1,11 @@ +# StartAllTasksResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.StartAllTasksErrors](../../models/errors/startalltaskserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/starttaskerrors.md b/docs/models/errors/starttaskerrors.md new file mode 100644 index 0000000..13fa73f --- /dev/null +++ b/docs/models/errors/starttaskerrors.md @@ -0,0 +1,10 @@ +# StartTaskErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/starttaskresponsebody.md b/docs/models/errors/starttaskresponsebody.md new file mode 100644 index 0000000..50ce58e --- /dev/null +++ b/docs/models/errors/starttaskresponsebody.md @@ -0,0 +1,11 @@ +# StartTaskResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.StartTaskErrors](../../models/errors/starttaskerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/startuniversaltranscodeerrors.md b/docs/models/errors/startuniversaltranscodeerrors.md new file mode 100644 index 0000000..e5d6fe0 --- /dev/null +++ b/docs/models/errors/startuniversaltranscodeerrors.md @@ -0,0 +1,10 @@ +# StartUniversalTranscodeErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/startuniversaltranscoderesponsebody.md b/docs/models/errors/startuniversaltranscoderesponsebody.md new file mode 100644 index 0000000..9e95da1 --- /dev/null +++ b/docs/models/errors/startuniversaltranscoderesponsebody.md @@ -0,0 +1,11 @@ +# StartUniversalTranscodeResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `errors` | List[[errors.StartUniversalTranscodeErrors](../../models/errors/startuniversaltranscodeerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/stopalltaskserrors.md b/docs/models/errors/stopalltaskserrors.md new file mode 100644 index 0000000..4ae6e32 --- /dev/null +++ b/docs/models/errors/stopalltaskserrors.md @@ -0,0 +1,10 @@ +# StopAllTasksErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/stopalltasksresponsebody.md b/docs/models/errors/stopalltasksresponsebody.md new file mode 100644 index 0000000..8043eba --- /dev/null +++ b/docs/models/errors/stopalltasksresponsebody.md @@ -0,0 +1,11 @@ +# StopAllTasksResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.StopAllTasksErrors](../../models/errors/stopalltaskserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/stoptaskerrors.md b/docs/models/errors/stoptaskerrors.md new file mode 100644 index 0000000..503ae15 --- /dev/null +++ b/docs/models/errors/stoptaskerrors.md @@ -0,0 +1,10 @@ +# StopTaskErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/stoptaskresponsebody.md b/docs/models/errors/stoptaskresponsebody.md new file mode 100644 index 0000000..fc61e45 --- /dev/null +++ b/docs/models/errors/stoptaskresponsebody.md @@ -0,0 +1,11 @@ +# StopTaskResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.StopTaskErrors](../../models/errors/stoptaskerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/stoptranscodesessionerrors.md b/docs/models/errors/stoptranscodesessionerrors.md new file mode 100644 index 0000000..cb4043a --- /dev/null +++ b/docs/models/errors/stoptranscodesessionerrors.md @@ -0,0 +1,10 @@ +# StopTranscodeSessionErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/stoptranscodesessionresponsebody.md b/docs/models/errors/stoptranscodesessionresponsebody.md new file mode 100644 index 0000000..bbb4bb8 --- /dev/null +++ b/docs/models/errors/stoptranscodesessionresponsebody.md @@ -0,0 +1,11 @@ +# StopTranscodeSessionResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | +| `errors` | List[[errors.StopTranscodeSessionErrors](../../models/errors/stoptranscodesessionerrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/updateplaylisterrors.md b/docs/models/errors/updateplaylisterrors.md new file mode 100644 index 0000000..587558e --- /dev/null +++ b/docs/models/errors/updateplaylisterrors.md @@ -0,0 +1,10 @@ +# UpdatePlaylistErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/updateplaylistresponsebody.md b/docs/models/errors/updateplaylistresponsebody.md new file mode 100644 index 0000000..5a367b2 --- /dev/null +++ b/docs/models/errors/updateplaylistresponsebody.md @@ -0,0 +1,11 @@ +# UpdatePlaylistResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.UpdatePlaylistErrors](../../models/errors/updateplaylisterrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/updateplayprogresserrors.md b/docs/models/errors/updateplayprogresserrors.md new file mode 100644 index 0000000..557087d --- /dev/null +++ b/docs/models/errors/updateplayprogresserrors.md @@ -0,0 +1,10 @@ +# UpdatePlayProgressErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/updateplayprogressresponsebody.md b/docs/models/errors/updateplayprogressresponsebody.md new file mode 100644 index 0000000..ac5a4a3 --- /dev/null +++ b/docs/models/errors/updateplayprogressresponsebody.md @@ -0,0 +1,11 @@ +# UpdatePlayProgressResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `errors` | List[[errors.UpdatePlayProgressErrors](../../models/errors/updateplayprogresserrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/errors/uploadplaylisterrors.md b/docs/models/errors/uploadplaylisterrors.md new file mode 100644 index 0000000..ce5ccc6 --- /dev/null +++ b/docs/models/errors/uploadplaylisterrors.md @@ -0,0 +1,10 @@ +# UploadPlaylistErrors + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[float]* | :heavy_minus_sign: | N/A | 1001 | +| `message` | *Optional[str]* | :heavy_minus_sign: | N/A | User could not be authenticated | +| `status` | *Optional[float]* | :heavy_minus_sign: | N/A | 401 | \ No newline at end of file diff --git a/docs/models/errors/uploadplaylistresponsebody.md b/docs/models/errors/uploadplaylistresponsebody.md new file mode 100644 index 0000000..3e0ab71 --- /dev/null +++ b/docs/models/errors/uploadplaylistresponsebody.md @@ -0,0 +1,11 @@ +# UploadPlaylistResponseBody + +Unauthorized - Returned if the X-Plex-Token is missing from the header or query. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `errors` | List[[errors.UploadPlaylistErrors](../../models/errors/uploadplaylisterrors.md)] | :heavy_minus_sign: | N/A | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_minus_sign: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/activity.md b/docs/models/operations/activity.md new file mode 100644 index 0000000..464fa72 --- /dev/null +++ b/docs/models/operations/activity.md @@ -0,0 +1,15 @@ +# Activity + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `uuid` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `cancellable` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `user_id` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `subtitle` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `progress` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `context` | [Optional[operations.Context]](../../models/operations/context.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/addplaylistcontentsmediacontainer.md b/docs/models/operations/addplaylistcontentsmediacontainer.md new file mode 100644 index 0000000..eb8c2d0 --- /dev/null +++ b/docs/models/operations/addplaylistcontentsmediacontainer.md @@ -0,0 +1,11 @@ +# AddPlaylistContentsMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `leaf_count_added` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `leaf_count_requested` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `metadata` | List[[operations.AddPlaylistContentsMetadata](../../models/operations/addplaylistcontentsmetadata.md)] | :heavy_minus_sign: | N/A | [{"addedAt":1705716458,"composite":"/playlists/94/composite/1705800070","duration":423000,"guid":"com.plexapp.agents.none://972e3047-83d6-4848-a000-261f0af26ba2","key":"/playlists/94/items","leafCount":3,"playlistType":"video","ratingKey":"94","smart":false,"summary":"One of my great playlists","title":"A great playlist","type":"playlist","updatedAt":1705800070}] | \ No newline at end of file diff --git a/docs/models/operations/addplaylistcontentsmetadata.md b/docs/models/operations/addplaylistcontentsmetadata.md new file mode 100644 index 0000000..e303272 --- /dev/null +++ b/docs/models/operations/addplaylistcontentsmetadata.md @@ -0,0 +1,20 @@ +# AddPlaylistContentsMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 94 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /playlists/94/items | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.agents.none://972e3047-83d6-4848-a000-261f0af26ba2 | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | playlist | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | A great playlist | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | One of my great playlists | +| `smart` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `playlist_type` | *Optional[str]* | :heavy_minus_sign: | N/A | video | +| `composite` | *Optional[str]* | :heavy_minus_sign: | N/A | /playlists/94/composite/1705800070 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 423000 | +| `leaf_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 3 | +| `added_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705716458 | +| `updated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705800070 | \ No newline at end of file diff --git a/docs/models/operations/addplaylistcontentsrequest.md b/docs/models/operations/addplaylistcontentsrequest.md new file mode 100644 index 0000000..192438a --- /dev/null +++ b/docs/models/operations/addplaylistcontentsrequest.md @@ -0,0 +1,10 @@ +# AddPlaylistContentsRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | +| `playlist_id` | *float* | :heavy_check_mark: | the ID of the playlist | | +| `uri` | *str* | :heavy_check_mark: | the content URI for the playlist | server://12345/com.plexapp.plugins.library/library/metadata/1 | +| `play_queue_id` | *Optional[float]* | :heavy_minus_sign: | the play queue to add to a playlist | 123 | \ No newline at end of file diff --git a/docs/models/operations/addplaylistcontentsresponse.md b/docs/models/operations/addplaylistcontentsresponse.md new file mode 100644 index 0000000..279d13c --- /dev/null +++ b/docs/models/operations/addplaylistcontentsresponse.md @@ -0,0 +1,11 @@ +# AddPlaylistContentsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.AddPlaylistContentsResponseBody]](../../models/operations/addplaylistcontentsresponsebody.md) | :heavy_minus_sign: | Playlist Updated | \ No newline at end of file diff --git a/docs/models/operations/addplaylistcontentsresponsebody.md b/docs/models/operations/addplaylistcontentsresponsebody.md new file mode 100644 index 0000000..6a842aa --- /dev/null +++ b/docs/models/operations/addplaylistcontentsresponsebody.md @@ -0,0 +1,10 @@ +# AddPlaylistContentsResponseBody + +Playlist Updated + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.AddPlaylistContentsMediaContainer]](../../models/operations/addplaylistcontentsmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/applyupdatesrequest.md b/docs/models/operations/applyupdatesrequest.md new file mode 100644 index 0000000..e52e97e --- /dev/null +++ b/docs/models/operations/applyupdatesrequest.md @@ -0,0 +1,9 @@ +# ApplyUpdatesRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tonight` | [Optional[operations.Tonight]](../../models/operations/tonight.md) | :heavy_minus_sign: | Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install | +| `skip` | [Optional[operations.Skip]](../../models/operations/skip.md) | :heavy_minus_sign: | Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`. | \ No newline at end of file diff --git a/docs/models/operations/applyupdatesresponse.md b/docs/models/operations/applyupdatesresponse.md new file mode 100644 index 0000000..0d45000 --- /dev/null +++ b/docs/models/operations/applyupdatesresponse.md @@ -0,0 +1,10 @@ +# ApplyUpdatesResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/butlertask.md b/docs/models/operations/butlertask.md new file mode 100644 index 0000000..cfd69c2 --- /dev/null +++ b/docs/models/operations/butlertask.md @@ -0,0 +1,13 @@ +# ButlerTask + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | BackupDatabase | +| `interval` | *Optional[float]* | :heavy_minus_sign: | N/A | 3 | +| `schedule_randomized` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `enabled` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Backup Database | +| `description` | *Optional[str]* | :heavy_minus_sign: | N/A | Create a backup copy of the server's database in the configured backup directory | \ No newline at end of file diff --git a/docs/models/operations/butlertasks.md b/docs/models/operations/butlertasks.md new file mode 100644 index 0000000..664e4cc --- /dev/null +++ b/docs/models/operations/butlertasks.md @@ -0,0 +1,8 @@ +# ButlerTasks + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `butler_task` | List[[operations.ButlerTask](../../models/operations/butlertask.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/cancelserveractivitiesrequest.md b/docs/models/operations/cancelserveractivitiesrequest.md new file mode 100644 index 0000000..450aa92 --- /dev/null +++ b/docs/models/operations/cancelserveractivitiesrequest.md @@ -0,0 +1,8 @@ +# CancelServerActivitiesRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `activity_uuid` | *str* | :heavy_check_mark: | The UUID of the activity to cancel. | \ No newline at end of file diff --git a/docs/models/operations/cancelserveractivitiesresponse.md b/docs/models/operations/cancelserveractivitiesresponse.md new file mode 100644 index 0000000..e189097 --- /dev/null +++ b/docs/models/operations/cancelserveractivitiesresponse.md @@ -0,0 +1,10 @@ +# CancelServerActivitiesResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/checkforupdatesrequest.md b/docs/models/operations/checkforupdatesrequest.md new file mode 100644 index 0000000..94b0c74 --- /dev/null +++ b/docs/models/operations/checkforupdatesrequest.md @@ -0,0 +1,8 @@ +# CheckForUpdatesRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `download` | [Optional[operations.Download]](../../models/operations/download.md) | :heavy_minus_sign: | Indicate that you want to start download any updates found. | \ No newline at end of file diff --git a/docs/models/operations/checkforupdatesresponse.md b/docs/models/operations/checkforupdatesresponse.md new file mode 100644 index 0000000..41bc842 --- /dev/null +++ b/docs/models/operations/checkforupdatesresponse.md @@ -0,0 +1,10 @@ +# CheckForUpdatesResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/clearplaylistcontentsrequest.md b/docs/models/operations/clearplaylistcontentsrequest.md new file mode 100644 index 0000000..e410b79 --- /dev/null +++ b/docs/models/operations/clearplaylistcontentsrequest.md @@ -0,0 +1,8 @@ +# ClearPlaylistContentsRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------- | ---------------------- | ---------------------- | ---------------------- | +| `playlist_id` | *float* | :heavy_check_mark: | the ID of the playlist | \ No newline at end of file diff --git a/docs/models/operations/clearplaylistcontentsresponse.md b/docs/models/operations/clearplaylistcontentsresponse.md new file mode 100644 index 0000000..ba09599 --- /dev/null +++ b/docs/models/operations/clearplaylistcontentsresponse.md @@ -0,0 +1,10 @@ +# ClearPlaylistContentsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/context.md b/docs/models/operations/context.md new file mode 100644 index 0000000..f7c9e5e --- /dev/null +++ b/docs/models/operations/context.md @@ -0,0 +1,8 @@ +# Context + + +## Fields + +| Field | Type | Required | Description | +| -------------------- | -------------------- | -------------------- | -------------------- | +| `library_section_id` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/country.md b/docs/models/operations/country.md new file mode 100644 index 0000000..9ebca0f --- /dev/null +++ b/docs/models/operations/country.md @@ -0,0 +1,8 @@ +# Country + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | United States of America | \ No newline at end of file diff --git a/docs/models/operations/createplaylistmediacontainer.md b/docs/models/operations/createplaylistmediacontainer.md new file mode 100644 index 0000000..e830524 --- /dev/null +++ b/docs/models/operations/createplaylistmediacontainer.md @@ -0,0 +1,9 @@ +# CreatePlaylistMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 7 | +| `metadata` | List[[operations.CreatePlaylistMetadata](../../models/operations/createplaylistmetadata.md)] | :heavy_minus_sign: | N/A | [{"addedAt":1705719589,"composite":"/playlists/96/composite/1705724593","duration":141000,"guid":"com.plexapp.agents.none://a2f92937-1408-40e2-b022-63a8a9377e55","icon":"playlist://image.smart","key":"/playlists/96/items","lastViewedAt":1705719589,"leafCount":1,"playlistType":"video","ratingKey":"96","smart":false,"summary":"What a great playlist","title":"A Great Playlist","type":"playlist","updatedAt":1705724593,"viewCount":1}] | \ No newline at end of file diff --git a/docs/models/operations/createplaylistmetadata.md b/docs/models/operations/createplaylistmetadata.md new file mode 100644 index 0000000..c1d1a11 --- /dev/null +++ b/docs/models/operations/createplaylistmetadata.md @@ -0,0 +1,23 @@ +# CreatePlaylistMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 96 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /playlists/96/items | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.agents.none://a2f92937-1408-40e2-b022-63a8a9377e55 | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | playlist | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | A Great Playlist | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | What a great playlist | +| `smart` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `playlist_type` | *Optional[str]* | :heavy_minus_sign: | N/A | video | +| `icon` | *Optional[str]* | :heavy_minus_sign: | N/A | playlist://image.smart | +| `view_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `last_viewed_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705719589 | +| `leaf_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `added_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705719589 | +| `updated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705724593 | +| `composite` | *Optional[str]* | :heavy_minus_sign: | N/A | /playlists/96/composite/1705724593 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 141000 | \ No newline at end of file diff --git a/docs/models/operations/createplaylistrequest.md b/docs/models/operations/createplaylistrequest.md new file mode 100644 index 0000000..788bc30 --- /dev/null +++ b/docs/models/operations/createplaylistrequest.md @@ -0,0 +1,12 @@ +# CreatePlaylistRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------------------- | +| `title` | *str* | :heavy_check_mark: | name of the playlist | +| `type` | [operations.QueryParamType](../../models/operations/queryparamtype.md) | :heavy_check_mark: | type of playlist to create | +| `smart` | [operations.Smart](../../models/operations/smart.md) | :heavy_check_mark: | whether the playlist is smart or not | +| `uri` | *str* | :heavy_check_mark: | the content URI for the playlist | +| `play_queue_id` | *Optional[float]* | :heavy_minus_sign: | the play queue to copy to a playlist | \ No newline at end of file diff --git a/docs/models/operations/createplaylistresponse.md b/docs/models/operations/createplaylistresponse.md new file mode 100644 index 0000000..2867e87 --- /dev/null +++ b/docs/models/operations/createplaylistresponse.md @@ -0,0 +1,11 @@ +# CreatePlaylistResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.CreatePlaylistResponseBody]](../../models/operations/createplaylistresponsebody.md) | :heavy_minus_sign: | returns all playlists | \ No newline at end of file diff --git a/docs/models/operations/createplaylistresponsebody.md b/docs/models/operations/createplaylistresponsebody.md new file mode 100644 index 0000000..801680c --- /dev/null +++ b/docs/models/operations/createplaylistresponsebody.md @@ -0,0 +1,10 @@ +# CreatePlaylistResponseBody + +returns all playlists + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `media_container` | [Optional[operations.CreatePlaylistMediaContainer]](../../models/operations/createplaylistmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/deletelibraryrequest.md b/docs/models/operations/deletelibraryrequest.md new file mode 100644 index 0000000..8392df0 --- /dev/null +++ b/docs/models/operations/deletelibraryrequest.md @@ -0,0 +1,8 @@ +# DeleteLibraryRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `section_id` | *float* | :heavy_check_mark: | the Id of the library to query | 1000 | \ No newline at end of file diff --git a/docs/models/operations/deletelibraryresponse.md b/docs/models/operations/deletelibraryresponse.md new file mode 100644 index 0000000..7640204 --- /dev/null +++ b/docs/models/operations/deletelibraryresponse.md @@ -0,0 +1,10 @@ +# DeleteLibraryResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/deleteplaylistrequest.md b/docs/models/operations/deleteplaylistrequest.md new file mode 100644 index 0000000..4e34b55 --- /dev/null +++ b/docs/models/operations/deleteplaylistrequest.md @@ -0,0 +1,8 @@ +# DeletePlaylistRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------- | ---------------------- | ---------------------- | ---------------------- | +| `playlist_id` | *float* | :heavy_check_mark: | the ID of the playlist | \ No newline at end of file diff --git a/docs/models/operations/deleteplaylistresponse.md b/docs/models/operations/deleteplaylistresponse.md new file mode 100644 index 0000000..4fd9122 --- /dev/null +++ b/docs/models/operations/deleteplaylistresponse.md @@ -0,0 +1,10 @@ +# DeletePlaylistResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/device.md b/docs/models/operations/device.md new file mode 100644 index 0000000..1e5b98f --- /dev/null +++ b/docs/models/operations/device.md @@ -0,0 +1,12 @@ +# Device + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------- | ------------------- | ------------------- | ------------------- | ------------------- | +| `id` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 | +| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | iPhone | +| `platform` | *Optional[str]* | :heavy_minus_sign: | N/A | iOS | +| `client_identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `created_at` | *Optional[float]* | :heavy_minus_sign: | N/A | 1654131230 | \ No newline at end of file diff --git a/docs/models/operations/director.md b/docs/models/operations/director.md new file mode 100644 index 0000000..bc70d11 --- /dev/null +++ b/docs/models/operations/director.md @@ -0,0 +1,8 @@ +# Director + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Peyton Reed | \ No newline at end of file diff --git a/docs/models/operations/directory.md b/docs/models/operations/directory.md new file mode 100644 index 0000000..e467fd7 --- /dev/null +++ b/docs/models/operations/directory.md @@ -0,0 +1,10 @@ +# Directory + + +## Fields + +| Field | Type | Required | Description | +| ------------------ | ------------------ | ------------------ | ------------------ | +| `count` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/download.md b/docs/models/operations/download.md new file mode 100644 index 0000000..1eb27ea --- /dev/null +++ b/docs/models/operations/download.md @@ -0,0 +1,11 @@ +# Download + +Indicate that you want to start download any updates found. + + +## Values + +| Name | Value | +| ------ | ------ | +| `ZERO` | 0 | +| `ONE` | 1 | \ No newline at end of file diff --git a/docs/models/operations/enablepapertrailresponse.md b/docs/models/operations/enablepapertrailresponse.md new file mode 100644 index 0000000..34b13f5 --- /dev/null +++ b/docs/models/operations/enablepapertrailresponse.md @@ -0,0 +1,10 @@ +# EnablePaperTrailResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/field.md b/docs/models/operations/field.md new file mode 100644 index 0000000..5bd4312 --- /dev/null +++ b/docs/models/operations/field.md @@ -0,0 +1,11 @@ +# Field + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | label | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Label | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | tag | +| `sub_type` | *Optional[str]* | :heavy_minus_sign: | N/A | bitrate | \ No newline at end of file diff --git a/docs/models/operations/fieldtype.md b/docs/models/operations/fieldtype.md new file mode 100644 index 0000000..a65a696 --- /dev/null +++ b/docs/models/operations/fieldtype.md @@ -0,0 +1,9 @@ +# FieldType + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | resolution | +| `operator` | List[[operations.Operator](../../models/operations/operator.md)] | :heavy_minus_sign: | N/A | [{"key":"=","title":"is"}] | \ No newline at end of file diff --git a/docs/models/operations/filter_.md b/docs/models/operations/filter_.md new file mode 100644 index 0000000..691fa77 --- /dev/null +++ b/docs/models/operations/filter_.md @@ -0,0 +1,12 @@ +# Filter + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------- | ------------------------- | ------------------------- | ------------------------- | ------------------------- | +| `filter_` | *Optional[str]* | :heavy_minus_sign: | N/A | label | +| `filter_type` | *Optional[str]* | :heavy_minus_sign: | N/A | string | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/sections/1/label | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Labels | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | filter | \ No newline at end of file diff --git a/docs/models/operations/force.md b/docs/models/operations/force.md new file mode 100644 index 0000000..9bacc5e --- /dev/null +++ b/docs/models/operations/force.md @@ -0,0 +1,15 @@ +# Force + +Force overwriting of duplicate playlists. +By default, a playlist file uploaded with the same path will overwrite the existing playlist. +The `force` argument is used to disable overwriting. +If the `force` argument is set to 0, a new playlist will be created suffixed with the date and time that the duplicate was uploaded. + + + +## Values + +| Name | Value | +| ------ | ------ | +| `ZERO` | 0 | +| `ONE` | 1 | \ No newline at end of file diff --git a/docs/models/operations/genre.md b/docs/models/operations/genre.md new file mode 100644 index 0000000..ded259c --- /dev/null +++ b/docs/models/operations/genre.md @@ -0,0 +1,8 @@ +# Genre + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Comedy | \ No newline at end of file diff --git a/docs/models/operations/getavailableclientsmediacontainer.md b/docs/models/operations/getavailableclientsmediacontainer.md new file mode 100644 index 0000000..e3b362b --- /dev/null +++ b/docs/models/operations/getavailableclientsmediacontainer.md @@ -0,0 +1,9 @@ +# GetAvailableClientsMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 | +| `server` | List[[operations.Server](../../models/operations/server.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getavailableclientsresponse.md b/docs/models/operations/getavailableclientsresponse.md new file mode 100644 index 0000000..96f1ce7 --- /dev/null +++ b/docs/models/operations/getavailableclientsresponse.md @@ -0,0 +1,11 @@ +# GetAvailableClientsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetAvailableClientsResponseBody]](../../models/operations/getavailableclientsresponsebody.md) | :heavy_minus_sign: | Available Clients | \ No newline at end of file diff --git a/docs/models/operations/getavailableclientsresponsebody.md b/docs/models/operations/getavailableclientsresponsebody.md new file mode 100644 index 0000000..a7a42cf --- /dev/null +++ b/docs/models/operations/getavailableclientsresponsebody.md @@ -0,0 +1,10 @@ +# GetAvailableClientsResponseBody + +Available Clients + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetAvailableClientsMediaContainer]](../../models/operations/getavailableclientsmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getbutlertasksresponse.md b/docs/models/operations/getbutlertasksresponse.md new file mode 100644 index 0000000..0baf1a2 --- /dev/null +++ b/docs/models/operations/getbutlertasksresponse.md @@ -0,0 +1,11 @@ +# GetButlerTasksResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetButlerTasksResponseBody]](../../models/operations/getbutlertasksresponsebody.md) | :heavy_minus_sign: | All butler tasks | \ No newline at end of file diff --git a/docs/models/operations/getbutlertasksresponsebody.md b/docs/models/operations/getbutlertasksresponsebody.md new file mode 100644 index 0000000..93b73c2 --- /dev/null +++ b/docs/models/operations/getbutlertasksresponsebody.md @@ -0,0 +1,10 @@ +# GetButlerTasksResponseBody + +All butler tasks + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `butler_tasks` | [Optional[operations.ButlerTasks]](../../models/operations/butlertasks.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getdevicesmediacontainer.md b/docs/models/operations/getdevicesmediacontainer.md new file mode 100644 index 0000000..017210c --- /dev/null +++ b/docs/models/operations/getdevicesmediacontainer.md @@ -0,0 +1,10 @@ +# GetDevicesMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | +| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 151 | +| `identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.system.devices | +| `device` | List[[operations.Device](../../models/operations/device.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getdevicesresponse.md b/docs/models/operations/getdevicesresponse.md new file mode 100644 index 0000000..62350d1 --- /dev/null +++ b/docs/models/operations/getdevicesresponse.md @@ -0,0 +1,11 @@ +# GetDevicesResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetDevicesResponseBody]](../../models/operations/getdevicesresponsebody.md) | :heavy_minus_sign: | Devices | \ No newline at end of file diff --git a/docs/models/operations/getdevicesresponsebody.md b/docs/models/operations/getdevicesresponsebody.md new file mode 100644 index 0000000..a16be68 --- /dev/null +++ b/docs/models/operations/getdevicesresponsebody.md @@ -0,0 +1,10 @@ +# GetDevicesResponseBody + +Devices + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetDevicesMediaContainer]](../../models/operations/getdevicesmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getfilehashrequest.md b/docs/models/operations/getfilehashrequest.md new file mode 100644 index 0000000..1bd8306 --- /dev/null +++ b/docs/models/operations/getfilehashrequest.md @@ -0,0 +1,9 @@ +# GetFileHashRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | +| `url` | *str* | :heavy_check_mark: | This is the path to the local file, must be prefixed by `file://` | file://C:\Image.png&type=13 | +| `type` | *Optional[float]* | :heavy_minus_sign: | Item type | | \ No newline at end of file diff --git a/docs/models/operations/getfilehashresponse.md b/docs/models/operations/getfilehashresponse.md new file mode 100644 index 0000000..625674f --- /dev/null +++ b/docs/models/operations/getfilehashresponse.md @@ -0,0 +1,10 @@ +# GetFileHashResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/getglobalhubsmediacontainer.md b/docs/models/operations/getglobalhubsmediacontainer.md new file mode 100644 index 0000000..d534511 --- /dev/null +++ b/docs/models/operations/getglobalhubsmediacontainer.md @@ -0,0 +1,11 @@ +# GetGlobalHubsMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 8 | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library | +| `hub` | List[[operations.Hub](../../models/operations/hub.md)] | :heavy_minus_sign: | N/A | [{"Metadata":[{"addedAt":1655309388,"composite":"/playlists/50768/composite/1704333758","duration":42864000,"guid":"com.plexapp.agents.none://81658e0d-cd4e-4c73-abb9-832b2ae2037b","icon":"playlist://image.smart","key":"/playlists/50768/items","lastViewedAt":1705329935,"leafCount":178,"playlistType":"audio","ratingKey":"50768","smart":true,"summary":"All your highly rated tracks, in one convenient place.","title":"❤️ Tracks","titleSort":"Tracks","type":"playlist","updatedAt":1704333758,"viewCount":47},{"addedAt":1697993545,"composite":"/playlists/65523/composite/1698597932","duration":4864000,"guid":"com.plexapp.agents.none://1bcdd596-892b-4856-9f28-b4338c439300","key":"/playlists/65523/items","lastViewedAt":1698597949,"leafCount":19,"playlistType":"audio","ratingKey":"65523","smart":false,"summary":"","title":"Car Rides","type":"playlist","updatedAt":1698597932,"viewCount":2},{"addedAt":1679616785,"composite":"/playlists/58188/composite/1680825595","duration":12522000,"guid":"com.plexapp.agents.none://8f0441d3-2a28-4644-a2f1-b7deeb290dff","key":"/playlists/58188/items","lastViewedAt":1680825596,"leafCount":56,"playlistType":"audio","ratingKey":"58188","smart":false,"summary":"","title":"Workout","type":"playlist","updatedAt":1680825595,"viewCount":4},{"addedAt":1673372306,"composite":"/playlists/57341/composite/1673372385","duration":19119000,"guid":"com.plexapp.agents.none://bf8778c3-20a3-4619-8eb0-3c172c18ffd6","key":"/playlists/57341/items","lastViewedAt":1673372306,"leafCount":3,"playlistType":"video","ratingKey":"57341","smart":false,"summary":"","title":"January Movie Day","type":"playlist","updatedAt":1673372385,"viewCount":1},{"addedAt":1671197078,"composite":"/playlists/57302/composite/1671205874","duration":23040000,"guid":"com.plexapp.agents.none://f25064ed-05bb-4bcf-b70c-ed7514b70929","key":"/playlists/57302/items","lastViewedAt":1671206853,"leafCount":3,"playlistType":"video","ratingKey":"57302","smart":false,"summary":"","title":"December Movie Day","type":"playlist","updatedAt":1671205874,"viewCount":2},{"addedAt":1668779618,"composite":"/playlists/57070/composite/1668787730","duration":16873000,"guid":"com.plexapp.agents.none://9fee6c5b-3143-4923-813e-57bd0190056c","key":"/playlists/57070/items","lastViewedAt":1668787732,"leafCount":3,"playlistType":"video","ratingKey":"57070","smart":false,"summary":"","title":"November Movie Day","type":"playlist","updatedAt":1668787730,"viewCount":2}],"context":"hub.home.playlists","hubIdentifier":"home.playlists","hubKey":"/library/metadata/50768,65523,58188,57341,57302,57070","key":"/playlists/all?type=15\u0026sort=lastViewedAt:desc\u0026playlistType=video,audio","more":true,"promoted":true,"size":6,"style":"shelf","title":"Recent Playlists","type":"playlist"}] | \ No newline at end of file diff --git a/docs/models/operations/getglobalhubsmetadata.md b/docs/models/operations/getglobalhubsmetadata.md new file mode 100644 index 0000000..e637b8c --- /dev/null +++ b/docs/models/operations/getglobalhubsmetadata.md @@ -0,0 +1,24 @@ +# GetGlobalHubsMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 57070 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /playlists/57070/items | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.agents.none://9fee6c5b-3143-4923-813e-57bd0190056c | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | playlist | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | November Movie Day | +| `title_sort` | *Optional[str]* | :heavy_minus_sign: | N/A | Tracks | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `smart` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `playlist_type` | *Optional[str]* | :heavy_minus_sign: | N/A | video | +| `composite` | *Optional[str]* | :heavy_minus_sign: | N/A | /playlists/57070/composite/1668787730 | +| `icon` | *Optional[str]* | :heavy_minus_sign: | N/A | playlist://image.smart | +| `view_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `last_viewed_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1668787732 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 16873000 | +| `leaf_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 3 | +| `added_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1668779618 | +| `updated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1668787730 | \ No newline at end of file diff --git a/docs/models/operations/getglobalhubsrequest.md b/docs/models/operations/getglobalhubsrequest.md new file mode 100644 index 0000000..747e02c --- /dev/null +++ b/docs/models/operations/getglobalhubsrequest.md @@ -0,0 +1,9 @@ +# GetGlobalHubsRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| `count` | *Optional[float]* | :heavy_minus_sign: | The number of items to return with each hub. | +| `only_transient` | [Optional[operations.OnlyTransient]](../../models/operations/onlytransient.md) | :heavy_minus_sign: | Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added). | \ No newline at end of file diff --git a/docs/models/operations/getglobalhubsresponse.md b/docs/models/operations/getglobalhubsresponse.md new file mode 100644 index 0000000..0803979 --- /dev/null +++ b/docs/models/operations/getglobalhubsresponse.md @@ -0,0 +1,11 @@ +# GetGlobalHubsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetGlobalHubsResponseBody]](../../models/operations/getglobalhubsresponsebody.md) | :heavy_minus_sign: | returns global hubs | \ No newline at end of file diff --git a/docs/models/operations/getglobalhubsresponsebody.md b/docs/models/operations/getglobalhubsresponsebody.md new file mode 100644 index 0000000..04c2bb3 --- /dev/null +++ b/docs/models/operations/getglobalhubsresponsebody.md @@ -0,0 +1,10 @@ +# GetGlobalHubsResponseBody + +returns global hubs + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetGlobalHubsMediaContainer]](../../models/operations/getglobalhubsmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getlibrariesdirectory.md b/docs/models/operations/getlibrariesdirectory.md new file mode 100644 index 0000000..9c6f375 --- /dev/null +++ b/docs/models/operations/getlibrariesdirectory.md @@ -0,0 +1,28 @@ +# GetLibrariesDirectory + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /:/resources/movie-fanart.jpg | +| `composite` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/sections/1/composite/1705615584 | +| `filters` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `refreshing` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /:/resources/movie.png | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | 1 | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | movie | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Movies | +| `agent` | *Optional[str]* | :heavy_minus_sign: | N/A | tv.plex.agents.movie | +| `scanner` | *Optional[str]* | :heavy_minus_sign: | N/A | Plex Movie | +| `language` | *Optional[str]* | :heavy_minus_sign: | N/A | en-US | +| `uuid` | *Optional[str]* | :heavy_minus_sign: | N/A | 322a231a-b7f7-49f5-920f-14c61199cd30 | +| `updated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705615634 | +| `created_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1654131312 | +| `scanned_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705615584 | +| `content` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `directory` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `content_changed_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 3192854 | +| `hidden` | *Optional[int]* | :heavy_minus_sign: | N/A | 0 | +| `location` | List[[operations.GetLibrariesLocation](../../models/operations/getlibrarieslocation.md)] | :heavy_minus_sign: | N/A | [{"id":1,"path":"/movies"}] | \ No newline at end of file diff --git a/docs/models/operations/getlibrarieslocation.md b/docs/models/operations/getlibrarieslocation.md new file mode 100644 index 0000000..f0fbcab --- /dev/null +++ b/docs/models/operations/getlibrarieslocation.md @@ -0,0 +1,9 @@ +# GetLibrariesLocation + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `path` | *Optional[str]* | :heavy_minus_sign: | N/A | /movies | \ No newline at end of file diff --git a/docs/models/operations/getlibrariesmediacontainer.md b/docs/models/operations/getlibrariesmediacontainer.md new file mode 100644 index 0000000..702d020 --- /dev/null +++ b/docs/models/operations/getlibrariesmediacontainer.md @@ -0,0 +1,11 @@ +# GetLibrariesMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 5 | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `title1` | *Optional[str]* | :heavy_minus_sign: | N/A | Plex Library | +| `directory` | List[[operations.GetLibrariesDirectory](../../models/operations/getlibrariesdirectory.md)] | :heavy_minus_sign: | N/A | [{"Location":[{"id":1,"path":"/movies"}],"agent":"tv.plex.agents.movie","allowSync":true,"art":"/:/resources/movie-fanart.jpg","composite":"/library/sections/1/composite/1705615584","content":true,"contentChangedAt":3192854,"createdAt":1654131312,"directory":true,"filters":true,"hidden":0,"key":"1","language":"en-US","refreshing":false,"scannedAt":1705615584,"scanner":"Plex Movie","thumb":"/:/resources/movie.png","title":"Movies","type":"movie","updatedAt":1705615634,"uuid":"322a231a-b7f7-49f5-920f-14c61199cd30"}] | \ No newline at end of file diff --git a/docs/models/operations/getlibrariesresponse.md b/docs/models/operations/getlibrariesresponse.md new file mode 100644 index 0000000..ddb8362 --- /dev/null +++ b/docs/models/operations/getlibrariesresponse.md @@ -0,0 +1,11 @@ +# GetLibrariesResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetLibrariesResponseBody]](../../models/operations/getlibrariesresponsebody.md) | :heavy_minus_sign: | The libraries available on the Server | \ No newline at end of file diff --git a/docs/models/operations/getlibrariesresponsebody.md b/docs/models/operations/getlibrariesresponsebody.md new file mode 100644 index 0000000..4691efc --- /dev/null +++ b/docs/models/operations/getlibrariesresponsebody.md @@ -0,0 +1,10 @@ +# GetLibrariesResponseBody + +The libraries available on the Server + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetLibrariesMediaContainer]](../../models/operations/getlibrariesmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getlibrarydirectory.md b/docs/models/operations/getlibrarydirectory.md new file mode 100644 index 0000000..31449d6 --- /dev/null +++ b/docs/models/operations/getlibrarydirectory.md @@ -0,0 +1,12 @@ +# GetLibraryDirectory + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | search?type=1 | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Search... | +| `secondary` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `prompt` | *Optional[str]* | :heavy_minus_sign: | N/A | Search Movies | +| `search` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | \ No newline at end of file diff --git a/docs/models/operations/getlibraryhubscountry.md b/docs/models/operations/getlibraryhubscountry.md new file mode 100644 index 0000000..27b9301 --- /dev/null +++ b/docs/models/operations/getlibraryhubscountry.md @@ -0,0 +1,8 @@ +# GetLibraryHubsCountry + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | United States of America | \ No newline at end of file diff --git a/docs/models/operations/getlibraryhubsdirector.md b/docs/models/operations/getlibraryhubsdirector.md new file mode 100644 index 0000000..e838d96 --- /dev/null +++ b/docs/models/operations/getlibraryhubsdirector.md @@ -0,0 +1,8 @@ +# GetLibraryHubsDirector + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Nathan Greno | \ No newline at end of file diff --git a/docs/models/operations/getlibraryhubsgenre.md b/docs/models/operations/getlibraryhubsgenre.md new file mode 100644 index 0000000..8bf03e9 --- /dev/null +++ b/docs/models/operations/getlibraryhubsgenre.md @@ -0,0 +1,8 @@ +# GetLibraryHubsGenre + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Animation | \ No newline at end of file diff --git a/docs/models/operations/getlibraryhubshub.md b/docs/models/operations/getlibraryhubshub.md new file mode 100644 index 0000000..9aa6ead --- /dev/null +++ b/docs/models/operations/getlibraryhubshub.md @@ -0,0 +1,19 @@ +# GetLibraryHubsHub + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/sections/1/all?sort=lastViewedAt:desc&unwatched=0&viewOffset=0 | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Recently Played Movies | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | movie | +| `hub_identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | movie.recentlyviewed.1 | +| `context` | *Optional[str]* | :heavy_minus_sign: | N/A | hub.movie.recentlyviewed | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 6 | +| `more` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `style` | *Optional[str]* | :heavy_minus_sign: | N/A | shelf | +| `hub_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/66485,66098,57249,11449,5858,14944 | +| `metadata` | List[[operations.GetLibraryHubsMetadata](../../models/operations/getlibraryhubsmetadata.md)] | :heavy_minus_sign: | N/A | [{"Country":[{"tag":"United States of America"}],"Director":[{"tag":"Byron Howard"},{"tag":"Nathan Greno"}],"Genre":[{"tag":"Comedy"},{"tag":"Animation"}],"Media":[{"Part":[{"audioProfile":"lc","container":"mp4","duration":6017237,"file":"/movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4","has64bitOffsets":false,"id":38247,"key":"/library/parts/38247/1589412494/file.mp4","optimizedForStreaming":true,"size":1545647447,"videoProfile":"high"}],"aspectRatio":1.78,"audioChannels":2,"audioCodec":"aac","audioProfile":"lc","bitrate":2051,"container":"mp4","duration":6017237,"has64bitOffsets":false,"height":1080,"id":38247,"optimizedForStreaming":1,"videoCodec":"h264","videoFrameRate":"24p","videoProfile":"high","videoResolution":"1080","width":1920}],"Role":[{"tag":"Mandy Moore"},{"tag":"Zachary Levi"},{"tag":"Donna Murphy"}],"Writer":[{"tag":"Jacob Grimm"},{"tag":"Wilhelm Grimm"}],"addedAt":1589412494,"art":"/library/metadata/14944/art/1705739847","audienceRating":8.7,"audienceRatingImage":"rottentomatoes://image.rating.upright","chapterSource":"media","contentRating":"PG","duration":6017237,"guid":"plex://movie/5d77686eeb5d26001f1eb339","key":"/library/metadata/14944","lastViewedAt":1704936047,"librarySectionID":1,"librarySectionKey":"/library/sections/1","librarySectionTitle":"Movies","originallyAvailableAt":"2010-11-24T00:00:00Z","primaryExtraKey":"/library/metadata/14952","rating":8.9,"ratingImage":"rottentomatoes://image.rating.ripe","ratingKey":"14944","skipCount":1,"studio":"Walt Disney Animation Studios","summary":"The magically long-haired Rapunzel has spent her entire life in a tower, but now that a runaway thief has stumbled upon her, she is about to discover the world for the first time, and who she really is.","tagline":"They're taking adventure to new lengths.","thumb":"/library/metadata/14944/thumb/1705739847","title":"Tangled","type":"movie","updatedAt":1705739847,"viewCount":1,"year":2010}] | +| `promoted` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `random` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | \ No newline at end of file diff --git a/docs/models/operations/getlibraryhubsmedia.md b/docs/models/operations/getlibraryhubsmedia.md new file mode 100644 index 0000000..ac46647 --- /dev/null +++ b/docs/models/operations/getlibraryhubsmedia.md @@ -0,0 +1,24 @@ +# GetLibraryHubsMedia + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 38247 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 6017237 | +| `bitrate` | *Optional[int]* | :heavy_minus_sign: | N/A | 2051 | +| `width` | *Optional[int]* | :heavy_minus_sign: | N/A | 1920 | +| `height` | *Optional[int]* | :heavy_minus_sign: | N/A | 1080 | +| `aspect_ratio` | *Optional[float]* | :heavy_minus_sign: | N/A | 1.78 | +| `audio_channels` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `audio_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | aac | +| `video_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | h264 | +| `video_resolution` | *Optional[str]* | :heavy_minus_sign: | N/A | 1080 | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mp4 | +| `video_frame_rate` | *Optional[str]* | :heavy_minus_sign: | N/A | 24p | +| `optimized_for_streaming` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `audio_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | lc | +| `has64bit_offsets` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | high | +| `part` | List[[operations.GetLibraryHubsPart](../../models/operations/getlibraryhubspart.md)] | :heavy_minus_sign: | N/A | [{"audioProfile":"lc","container":"mp4","duration":6017237,"file":"/movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4","has64bitOffsets":false,"id":38247,"key":"/library/parts/38247/1589412494/file.mp4","optimizedForStreaming":true,"size":1545647447,"videoProfile":"high"}] | \ No newline at end of file diff --git a/docs/models/operations/getlibraryhubsmediacontainer.md b/docs/models/operations/getlibraryhubsmediacontainer.md new file mode 100644 index 0000000..cd8dfde --- /dev/null +++ b/docs/models/operations/getlibraryhubsmediacontainer.md @@ -0,0 +1,14 @@ +# GetLibraryHubsMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 7 | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library | +| `library_section_id` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `library_section_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Movies | +| `library_section_uuid` | *Optional[str]* | :heavy_minus_sign: | N/A | 322a231a-b7f7-49f5-920f-14c61199cd30 | +| `hub` | List[[operations.GetLibraryHubsHub](../../models/operations/getlibraryhubshub.md)] | :heavy_minus_sign: | N/A | [{"Metadata":[{"Country":[{"tag":"United States of America"}],"Director":[{"tag":"Ceyda Torun"}],"Genre":[{"tag":"Documentary"}],"Media":[{"Part":[{"audioProfile":"lc","container":"mp4","duration":4736174,"file":"/movies/Kedi (2017)/Kedi (2017) 1080p x264.mp4","has64bitOffsets":false,"id":129778,"key":"/library/parts/129778/1702586883/file.mp4","optimizedForStreaming":false,"size":1410810905,"videoProfile":"high"}],"aspectRatio":1.78,"audioChannels":2,"audioCodec":"aac","audioProfile":"lc","bitrate":2377,"container":"mp4","duration":4736174,"has64bitOffsets":false,"height":1080,"id":129531,"optimizedForStreaming":0,"videoCodec":"h264","videoFrameRate":"24p","videoProfile":"high","videoResolution":"1080","width":1920}],"Role":[{"tag":"Bülent Üstün"}],"addedAt":1702586905,"art":"/library/metadata/66485/art/1702586907","audienceRating":8.5,"audienceRatingImage":"rottentomatoes://image.rating.upright","contentRating":"Not Rated","duration":4736174,"guid":"plex://movie/5d776c3251dd69001fe38bb4","key":"/library/metadata/66485","lastViewedAt":1705786111,"librarySectionID":1,"librarySectionKey":"/library/sections/1","librarySectionTitle":"Movies","originallyAvailableAt":"2017-02-10T00:00:00Z","primaryExtraKey":"/library/metadata/66486","rating":9.8,"ratingImage":"rottentomatoes://image.rating.ripe","ratingKey":"66485","studio":"Termite Films","summary":"A profile of an ancient city and its unique people, seen through the eyes of the most mysterious and beloved animal humans have ever known, the Cat.","tagline":"A cat meowing at your feet, looking up at you, is life smiling at you...","thumb":"/library/metadata/66485/thumb/1702586907","title":"Kedi","type":"movie","updatedAt":1702586907,"viewCount":2,"year":2017},{"Country":[{"tag":"United States of America"}],"Director":[{"tag":"Duwayne Dunham"}],"Genre":[{"tag":"Adventure"},{"tag":"Comedy"}],"Media":[{"Part":[{"audioProfile":"lc","container":"mp4","duration":5065775,"file":"/movies/Homeward Bound The Incredible Journey (1993)/Homeward Bound The Incredible Journey (1993) [BluRay] [1080p] [YTS.LT].mp4","has64bitOffsets":false,"id":129250,"key":"/library/parts/129250/1700434864/file.mp4","optimizedForStreaming":true,"size":1550855333,"videoProfile":"high"}],"aspectRatio":1.85,"audioChannels":2,"audioCodec":"aac","audioProfile":"lc","bitrate":2444,"container":"mp4","duration":5065775,"has64bitOffsets":false,"height":1024,"id":129003,"optimizedForStreaming":1,"videoCodec":"h264","videoFrameRate":"24p","videoProfile":"high","videoResolution":"1080","width":1904}],"Role":[{"tag":"Michael J. Fox"},{"tag":"Sally Field"},{"tag":"Don Ameche"}],"Writer":[{"tag":"Caroline Thompson"},{"tag":"Linda Woolverton"}],"addedAt":1700434925,"art":"/library/metadata/66098/art/1703148781","audienceRating":7.1,"audienceRatingImage":"rottentomatoes://image.rating.upright","contentRating":"G","duration":5065775,"guid":"plex://movie/5d9f34f4adeb7a0021ce020f","key":"/library/metadata/66098","lastViewedAt":1705709811,"librarySectionID":1,"librarySectionKey":"/library/sections/1","librarySectionTitle":"Movies","originallyAvailableAt":"1993-02-12T00:00:00Z","primaryExtraKey":"/library/metadata/66099","rating":8.7,"ratingImage":"rottentomatoes://image.rating.ripe","ratingKey":"66098","studio":"Touchwood Pacific Partners 1","summary":"A fun-loving American bulldog pup, a hilarious Himalayan cat, and a wise old golden retriever embark on a long trek through the rugged wilderness of the Sierra Nevada mountains in a quest to reach home and their beloved owners.","tagline":"In the classic tradition of Walt Disney Pictures comes a story about courage, adventure and friendship.","thumb":"/library/metadata/66098/thumb/1703148781","title":"Homeward Bound: The Incredible Journey","type":"movie","updatedAt":1703148781,"viewCount":2,"year":1993},{"Country":[{"tag":"Canada"},{"tag":"Ireland"}],"Director":[{"tag":"Matt Stawski"}],"Genre":[{"tag":"Comedy"},{"tag":"Family"}],"Media":[{"Part":[{"audioProfile":"lc","container":"mkv","duration":4459050,"file":"/movies/Blue's Big City Adventure (2022)/Blues.Big.City.Adventure.2022.2160p.4K.WEB.x265.10bit.AAC5.1-[YTS.MX].mkv","id":115478,"key":"/library/parts/115478/1669671340/file.mkv","size":3560750664,"videoProfile":"main 10"}],"aspectRatio":1.78,"audioChannels":6,"audioCodec":"aac","audioProfile":"lc","bitrate":6384,"container":"mkv","duration":4459050,"height":2160,"id":115470,"videoCodec":"hevc","videoFrameRate":"24p","videoProfile":"main 10","videoResolution":"4k","width":3840}],"Role":[{"tag":"Joshua Dela Cruz"},{"tag":"Steve Burns"},{"tag":"Donovan Patton"}],"Writer":[{"tag":"Traci Paige Johnson"},{"tag":"Todd Kessler"}],"addedAt":1669671356,"art":"/library/metadata/57249/art/1704274800","audienceRating":8.6,"audienceRatingImage":"rottentomatoes://image.rating.upright","contentRating":"TV-Y","duration":4459050,"guid":"plex://movie/60eff7d3e22797002c55c1cc","key":"/library/metadata/57249","lastViewedAt":1705681955,"librarySectionID":1,"librarySectionKey":"/library/sections/1","librarySectionTitle":"Movies","originallyAvailableAt":"2022-11-18T00:00:00Z","primaryExtraKey":"/library/metadata/57250","rating":8.3,"ratingImage":"rottentomatoes://image.rating.ripe","ratingKey":"57249","skipCount":1,"studio":"Nickelodeon Movies","summary":"Josh and Blue skidoo to New York City to audition for Rainbow Puppy's Broadway musical, but they get lost when Josh accidentally left his Handy Dandy Notebook at home. This leads to a game of Blue's Clues to figure out where the audition is. Meanwhile, Tickety Tock and her friends go to New York City to find Josh and Blue and get to the audition with help from Joe and Steve.","tagline":"All They Need is You.","thumb":"/library/metadata/57249/thumb/1704274800","title":"Blue's Big City Adventure","type":"movie","updatedAt":1704274800,"viewCount":8,"year":2022},{"Country":[{"tag":"United States of America"}],"Director":[{"tag":"Dan Scanlon"}],"Genre":[{"tag":"Animation"},{"tag":"Comedy"}],"Media":[{"Part":[{"audioProfile":"ma","container":"mkv","duration":6141428,"file":"/movies/Onward (2020)/Onward (2020) Bluray-1080p.mkv","id":29291,"key":"/library/parts/29291/1589237130/file.mkv","size":8426669232,"videoProfile":"high"}],"aspectRatio":2.35,"audioChannels":8,"audioCodec":"dca-ma","audioProfile":"ma","bitrate":10977,"container":"mkv","duration":6141428,"height":804,"id":29291,"videoCodec":"h264","videoFrameRate":"24p","videoProfile":"high","videoResolution":"1080","width":1920},{"Part":[{"audioProfile":"lc","container":"mp4","duration":6142006,"file":"/movies/Onward (2020)/Onward (2020) WEBRip-1080p.mp4","has64bitOffsets":false,"id":29315,"key":"/library/parts/29315/1629002847/file.mp4","optimizedForStreaming":true,"size":2026154995,"videoProfile":"high"}],"aspectRatio":2.35,"audioChannels":6,"audioCodec":"aac","audioProfile":"lc","bitrate":2639,"container":"mp4","duration":6142006,"has64bitOffsets":false,"height":800,"id":29315,"optimizedForStreaming":1,"videoCodec":"h264","videoFrameRate":"24p","videoProfile":"high","videoResolution":"1080","width":1920}],"Role":[{"tag":"Tom Holland"},{"tag":"Chris Pratt"},{"tag":"Julia Louis-Dreyfus"}],"Writer":[{"tag":"Kelsey Mann"},{"tag":"Dan Scanlon"}],"addedAt":1589237130,"art":"/library/metadata/11449/art/1705224000","audienceRating":9.5,"audienceRatingImage":"rottentomatoes://image.rating.upright","chapterSource":"media","contentRating":"PG","duration":6141428,"guid":"plex://movie/5d776edfad5437001f803cf9","key":"/library/metadata/11449","lastViewedAt":1705543126,"librarySectionID":1,"librarySectionKey":"/library/sections/1","librarySectionTitle":"Movies","originallyAvailableAt":"2020-03-04T00:00:00Z","primaryExtraKey":"/library/metadata/11470","rating":8.8,"ratingImage":"rottentomatoes://image.rating.ripe","ratingKey":"11449","studio":"Walt Disney Pictures","summary":"In a magical world full of technological advances, elven brothers Ian and Barley Lightfoot set out on an adventure to resurrect their late father for a day.","tagline":"Their quest begineth.","thumb":"/library/metadata/11449/thumb/1705224000","title":"Onward","type":"movie","updatedAt":1705224000,"viewCount":3,"year":2020},{"Country":[{"tag":"United States of America"}],"Director":[{"tag":"Chris Buck"},{"tag":"Jennifer Lee"}],"Genre":[{"tag":"Adventure"},{"tag":"Animation"}],"Media":[{"Part":[{"audioProfile":"lc","container":"mp4","duration":6194042,"file":"/movies/Frozen II (2019)/Frozen II (2019) Bluray-1080p.mp4","has64bitOffsets":false,"id":14954,"key":"/library/parts/14954/1588207762/file.mp4","optimizedForStreaming":true,"size":1969230037,"videoProfile":"high"}],"aspectRatio":2.35,"audioChannels":6,"audioCodec":"aac","audioProfile":"lc","bitrate":2538,"container":"mp4","duration":6194042,"has64bitOffsets":false,"height":800,"id":14954,"optimizedForStreaming":1,"videoCodec":"h264","videoFrameRate":"24p","videoProfile":"high","videoResolution":"1080","width":1920},{"Part":[{"audioProfile":"lc","container":"mp4","duration":6244271,"file":"/movies/Frozen II (2019)/Frozen II (2019) WEBRip-1080p.mp4","has64bitOffsets":false,"id":14999,"key":"/library/parts/14999/1629001526/file.mp4","optimizedForStreaming":true,"size":1983357282,"videoProfile":"high"}],"aspectRatio":2.35,"audioChannels":6,"audioCodec":"aac","audioProfile":"lc","bitrate":2536,"container":"mp4","duration":6244271,"has64bitOffsets":false,"height":800,"id":14999,"optimizedForStreaming":1,"videoCodec":"h264","videoFrameRate":"24p","videoProfile":"high","videoResolution":"1080","width":1920}],"Role":[{"tag":"Idina Menzel"},{"tag":"Kristen Bell"},{"tag":"Josh Gad"}],"Writer":[{"tag":"Chris Buck"},{"tag":"Hans Christian Andersen"}],"addedAt":1588207762,"art":"/library/metadata/5858/art/1704621922","audienceRating":9.2,"audienceRatingImage":"rottentomatoes://image.rating.upright","contentRating":"PG","duration":6194042,"guid":"plex://movie/5d776b85594b2b001e6dc641","key":"/library/metadata/5858","lastViewedAt":1705337663,"librarySectionID":1,"librarySectionKey":"/library/sections/1","librarySectionTitle":"Movies","originallyAvailableAt":"2019-11-20T00:00:00Z","primaryExtraKey":"/library/metadata/5892","rating":7.7,"ratingImage":"rottentomatoes://image.rating.ripe","ratingKey":"5858","skipCount":1,"studio":"Walt Disney Pictures","summary":"Anna, Elsa, Kristoff, Olaf and Sven leave Arendelle to travel to an ancient, autumn-bound forest of an enchanted land. They set out to find the origin of Elsa's powers in order to save their kingdom.","tagline":"The past is not what it seems.","thumb":"/library/metadata/5858/thumb/1704621922","title":"Frozen II","type":"movie","updatedAt":1704621922,"viewCount":1,"year":2019},{"Country":[{"tag":"United States of America"}],"Director":[{"tag":"Byron Howard"},{"tag":"Nathan Greno"}],"Genre":[{"tag":"Comedy"},{"tag":"Animation"}],"Media":[{"Part":[{"audioProfile":"lc","container":"mp4","duration":6017237,"file":"/movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4","has64bitOffsets":false,"id":38247,"key":"/library/parts/38247/1589412494/file.mp4","optimizedForStreaming":true,"size":1545647447,"videoProfile":"high"}],"aspectRatio":1.78,"audioChannels":2,"audioCodec":"aac","audioProfile":"lc","bitrate":2051,"container":"mp4","duration":6017237,"has64bitOffsets":false,"height":1080,"id":38247,"optimizedForStreaming":1,"videoCodec":"h264","videoFrameRate":"24p","videoProfile":"high","videoResolution":"1080","width":1920}],"Role":[{"tag":"Mandy Moore"},{"tag":"Zachary Levi"},{"tag":"Donna Murphy"}],"Writer":[{"tag":"Jacob Grimm"},{"tag":"Wilhelm Grimm"}],"addedAt":1589412494,"art":"/library/metadata/14944/art/1705739847","audienceRating":8.7,"audienceRatingImage":"rottentomatoes://image.rating.upright","contentRating":"PG","duration":6017237,"guid":"plex://movie/5d77686eeb5d26001f1eb339","key":"/library/metadata/14944","lastViewedAt":1704936047,"librarySectionID":1,"librarySectionKey":"/library/sections/1","librarySectionTitle":"Movies","originallyAvailableAt":"2010-11-24T00:00:00Z","primaryExtraKey":"/library/metadata/14952","rating":8.9,"ratingImage":"rottentomatoes://image.rating.ripe","ratingKey":"14944","studio":"Walt Disney Animation Studios","summary":"The magically long-haired Rapunzel has spent her entire life in a tower, but now that a runaway thief has stumbled upon her, she is about to discover the world for the first time, and who she really is.","tagline":"They're taking adventure to new lengths.","thumb":"/library/metadata/14944/thumb/1705739847","title":"Tangled","type":"movie","updatedAt":1705739847,"viewCount":1,"year":2010}],"context":"hub.movie.recentlyviewed","hubIdentifier":"movie.recentlyviewed.1","hubKey":"/library/metadata/66485,66098,57249,11449,5858,14944","key":"/library/sections/1/all?sort=lastViewedAt:desc\u0026unwatched=0\u0026viewOffset=0","more":true,"promoted":true,"random":true,"size":6,"style":"shelf","title":"Recently Played Movies","type":"movie"}] | \ No newline at end of file diff --git a/docs/models/operations/getlibraryhubsmetadata.md b/docs/models/operations/getlibraryhubsmetadata.md new file mode 100644 index 0000000..8922e2a --- /dev/null +++ b/docs/models/operations/getlibraryhubsmetadata.md @@ -0,0 +1,41 @@ +# GetLibraryHubsMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 14944 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/14944 | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://movie/5d77686eeb5d26001f1eb339 | +| `studio` | *Optional[str]* | :heavy_minus_sign: | N/A | Walt Disney Animation Studios | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | movie | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Tangled | +| `library_section_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Movies | +| `library_section_id` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `library_section_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/sections/1 | +| `content_rating` | *Optional[str]* | :heavy_minus_sign: | N/A | PG | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | The magically long-haired Rapunzel has spent her entire life in a tower, but now that a runaway thief has stumbled upon her, she is about to discover the world for the first time, and who she really is. | +| `rating` | *Optional[float]* | :heavy_minus_sign: | N/A | 8.9 | +| `audience_rating` | *Optional[float]* | :heavy_minus_sign: | N/A | 8.7 | +| `view_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `last_viewed_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1704936047 | +| `year` | *Optional[int]* | :heavy_minus_sign: | N/A | 2010 | +| `tagline` | *Optional[str]* | :heavy_minus_sign: | N/A | They're taking adventure to new lengths. | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/14944/thumb/1705739847 | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/14944/art/1705739847 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 6017237 | +| `originally_available_at` | [datetime](https://docs.python.org/3/library/datetime.html#datetime-objects) | :heavy_minus_sign: | N/A | 2010-11-24 00:00:00 +0000 UTC | +| `added_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1589412494 | +| `updated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705739847 | +| `audience_rating_image` | *Optional[str]* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.upright | +| `primary_extra_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/14952 | +| `rating_image` | *Optional[str]* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.ripe | +| `media` | List[[operations.GetLibraryHubsMedia](../../models/operations/getlibraryhubsmedia.md)] | :heavy_minus_sign: | N/A | [{"Part":[{"audioProfile":"lc","container":"mp4","duration":6017237,"file":"/movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4","has64bitOffsets":false,"id":38247,"key":"/library/parts/38247/1589412494/file.mp4","optimizedForStreaming":true,"size":1545647447,"videoProfile":"high"}],"aspectRatio":1.78,"audioChannels":2,"audioCodec":"aac","audioProfile":"lc","bitrate":2051,"container":"mp4","duration":6017237,"has64bitOffsets":false,"height":1080,"id":38247,"optimizedForStreaming":1,"videoCodec":"h264","videoFrameRate":"24p","videoProfile":"high","videoResolution":"1080","width":1920}] | +| `genre` | List[[operations.GetLibraryHubsGenre](../../models/operations/getlibraryhubsgenre.md)] | :heavy_minus_sign: | N/A | [{"tag":"Animation"}] | +| `country` | List[[operations.GetLibraryHubsCountry](../../models/operations/getlibraryhubscountry.md)] | :heavy_minus_sign: | N/A | [{"tag":"United States of America"}] | +| `director` | List[[operations.GetLibraryHubsDirector](../../models/operations/getlibraryhubsdirector.md)] | :heavy_minus_sign: | N/A | [{"tag":"Nathan Greno"}] | +| `role` | List[[operations.GetLibraryHubsRole](../../models/operations/getlibraryhubsrole.md)] | :heavy_minus_sign: | N/A | [{"tag":"Donna Murphy"}] | +| `writer` | List[[operations.GetLibraryHubsWriter](../../models/operations/getlibraryhubswriter.md)] | :heavy_minus_sign: | N/A | [{"tag":"Wilhelm Grimm"}] | +| `skip_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `chapter_source` | *Optional[str]* | :heavy_minus_sign: | N/A | media | \ No newline at end of file diff --git a/docs/models/operations/getlibraryhubspart.md b/docs/models/operations/getlibraryhubspart.md new file mode 100644 index 0000000..25d64d0 --- /dev/null +++ b/docs/models/operations/getlibraryhubspart.md @@ -0,0 +1,17 @@ +# GetLibraryHubsPart + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------ | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 38247 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/parts/38247/1589412494/file.mp4 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 6017237 | +| `file` | *Optional[str]* | :heavy_minus_sign: | N/A | /movies/Tangled (2010)/Tangled (2010) Bluray-1080p.mp4 | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 1545647447 | +| `audio_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | lc | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mp4 | +| `has64bit_offsets` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `optimized_for_streaming` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | high | \ No newline at end of file diff --git a/docs/models/operations/getlibraryhubsrequest.md b/docs/models/operations/getlibraryhubsrequest.md new file mode 100644 index 0000000..217d09f --- /dev/null +++ b/docs/models/operations/getlibraryhubsrequest.md @@ -0,0 +1,10 @@ +# GetLibraryHubsRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| `section_id` | *float* | :heavy_check_mark: | the Id of the library to query | +| `count` | *Optional[float]* | :heavy_minus_sign: | The number of items to return with each hub. | +| `only_transient` | [Optional[operations.QueryParamOnlyTransient]](../../models/operations/queryparamonlytransient.md) | :heavy_minus_sign: | Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added). | \ No newline at end of file diff --git a/docs/models/operations/getlibraryhubsresponse.md b/docs/models/operations/getlibraryhubsresponse.md new file mode 100644 index 0000000..88c82bf --- /dev/null +++ b/docs/models/operations/getlibraryhubsresponse.md @@ -0,0 +1,11 @@ +# GetLibraryHubsResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetLibraryHubsResponseBody]](../../models/operations/getlibraryhubsresponsebody.md) | :heavy_minus_sign: | The hubs specific to the library | \ No newline at end of file diff --git a/docs/models/operations/getlibraryhubsresponsebody.md b/docs/models/operations/getlibraryhubsresponsebody.md new file mode 100644 index 0000000..edb146d --- /dev/null +++ b/docs/models/operations/getlibraryhubsresponsebody.md @@ -0,0 +1,10 @@ +# GetLibraryHubsResponseBody + +The hubs specific to the library + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `media_container` | [Optional[operations.GetLibraryHubsMediaContainer]](../../models/operations/getlibraryhubsmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getlibraryhubsrole.md b/docs/models/operations/getlibraryhubsrole.md new file mode 100644 index 0000000..d9bc7a9 --- /dev/null +++ b/docs/models/operations/getlibraryhubsrole.md @@ -0,0 +1,8 @@ +# GetLibraryHubsRole + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Donna Murphy | \ No newline at end of file diff --git a/docs/models/operations/getlibraryhubswriter.md b/docs/models/operations/getlibraryhubswriter.md new file mode 100644 index 0000000..f8e5b4d --- /dev/null +++ b/docs/models/operations/getlibraryhubswriter.md @@ -0,0 +1,8 @@ +# GetLibraryHubsWriter + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Wilhelm Grimm | \ No newline at end of file diff --git a/docs/models/operations/getlibraryitemscountry.md b/docs/models/operations/getlibraryitemscountry.md new file mode 100644 index 0000000..c1a5ba3 --- /dev/null +++ b/docs/models/operations/getlibraryitemscountry.md @@ -0,0 +1,8 @@ +# GetLibraryItemsCountry + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | United States of America | \ No newline at end of file diff --git a/docs/models/operations/getlibraryitemsdirector.md b/docs/models/operations/getlibraryitemsdirector.md new file mode 100644 index 0000000..90b256b --- /dev/null +++ b/docs/models/operations/getlibraryitemsdirector.md @@ -0,0 +1,8 @@ +# GetLibraryItemsDirector + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | James Cameron | \ No newline at end of file diff --git a/docs/models/operations/getlibraryitemsgenre.md b/docs/models/operations/getlibraryitemsgenre.md new file mode 100644 index 0000000..faa7aaf --- /dev/null +++ b/docs/models/operations/getlibraryitemsgenre.md @@ -0,0 +1,8 @@ +# GetLibraryItemsGenre + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Adventure | \ No newline at end of file diff --git a/docs/models/operations/getlibraryitemsmedia.md b/docs/models/operations/getlibraryitemsmedia.md new file mode 100644 index 0000000..76f0796 --- /dev/null +++ b/docs/models/operations/getlibraryitemsmedia.md @@ -0,0 +1,21 @@ +# GetLibraryItemsMedia + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 119534 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 11558112 | +| `bitrate` | *Optional[int]* | :heavy_minus_sign: | N/A | 25025 | +| `width` | *Optional[int]* | :heavy_minus_sign: | N/A | 3840 | +| `height` | *Optional[int]* | :heavy_minus_sign: | N/A | 2072 | +| `aspect_ratio` | *Optional[float]* | :heavy_minus_sign: | N/A | 1.85 | +| `audio_channels` | *Optional[int]* | :heavy_minus_sign: | N/A | 6 | +| `audio_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | eac3 | +| `video_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | hevc | +| `video_resolution` | *Optional[str]* | :heavy_minus_sign: | N/A | 4k | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mkv | +| `video_frame_rate` | *Optional[str]* | :heavy_minus_sign: | N/A | 24p | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | main 10 | +| `part` | List[[operations.GetLibraryItemsPart](../../models/operations/getlibraryitemspart.md)] | :heavy_minus_sign: | N/A | [{"container":"mkv","duration":11558112,"file":"/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv","id":119542,"key":"/library/parts/119542/1680457526/file.mkv","size":36158371307,"videoProfile":"main 10"}] | \ No newline at end of file diff --git a/docs/models/operations/getlibraryitemsmediacontainer.md b/docs/models/operations/getlibraryitemsmediacontainer.md new file mode 100644 index 0000000..3d88460 --- /dev/null +++ b/docs/models/operations/getlibraryitemsmediacontainer.md @@ -0,0 +1,23 @@ +# GetLibraryItemsMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 70 | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /:/resources/movie-fanart.jpg | +| `identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library | +| `library_section_id` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `library_section_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Movies | +| `library_section_uuid` | *Optional[str]* | :heavy_minus_sign: | N/A | 322a231a-b7f7-49f5-920f-14c61199cd30 | +| `media_tag_prefix` | *Optional[str]* | :heavy_minus_sign: | N/A | /system/bundle/media/flags/ | +| `media_tag_version` | *Optional[int]* | :heavy_minus_sign: | N/A | 1701731894 | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /:/resources/movie.png | +| `title1` | *Optional[str]* | :heavy_minus_sign: | N/A | Movies | +| `title2` | *Optional[str]* | :heavy_minus_sign: | N/A | Recently Released | +| `view_group` | *Optional[str]* | :heavy_minus_sign: | N/A | movie | +| `view_mode` | *Optional[int]* | :heavy_minus_sign: | N/A | 65592 | +| `mixed_parents` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `metadata` | List[[operations.GetLibraryItemsMetadata](../../models/operations/getlibraryitemsmetadata.md)] | :heavy_minus_sign: | N/A | [{"Country":[{"tag":"United States of America"}],"Director":[{"tag":"James Cameron"}],"Genre":[{"tag":"Action"},{"tag":"Adventure"}],"Media":[{"Part":[{"container":"mkv","duration":11558112,"file":"/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv","id":119542,"key":"/library/parts/119542/1680457526/file.mkv","size":36158371307,"videoProfile":"main 10"}],"aspectRatio":1.85,"audioChannels":6,"audioCodec":"eac3","bitrate":25025,"container":"mkv","duration":11558112,"height":2072,"id":119534,"videoCodec":"hevc","videoFrameRate":"24p","videoProfile":"main 10","videoResolution":"4k","width":3840}],"Role":[{"tag":"Sam Worthington"},{"tag":"Zoe Saldaña"},{"tag":"Sigourney Weaver"}],"Writer":[{"tag":"Josh Friedman"},{"tag":"James Cameron"}],"addedAt":1680457607,"art":"/library/metadata/58683/art/1703239236","audienceRating":9.2,"audienceRatingImage":"rottentomatoes://image.rating.upright","chapterSource":"media","childCount":1,"contentRating":"PG-13","duration":11558112,"grandparentArt":"/library/metadata/66/art/1705716261","grandparentGuid":"plex://show/5d9c081b170e24001f2a7be4","grandparentKey":"/library/metadata/66","grandparentRatingKey":"66","grandparentTheme":"/library/metadata/66/theme/1705716261","grandparentThumb":"/library/metadata/66/thumb/1705716261","grandparentTitle":"Caprica","guid":"plex://movie/5d7768ba96b655001fdc0408","hasPremiumExtras":"1","hasPremiumPrimaryExtra":"1","index":1,"key":"/library/metadata/58683","lastViewedAt":1682752242,"leafCount":14,"originalTitle":"映画 ブラッククローバー 魔法帝の剣","originallyAvailableAt":"2022-12-14T00:00:00Z","parentGuid":"plex://show/5d9c081b170e24001f2a7be4","parentIndex":1,"parentKey":"/library/metadata/66","parentRatingKey":"66","parentStudio":"UCP","parentTheme":"/library/metadata/66/theme/1705716261","parentThumb":"/library/metadata/66/thumb/1705716261","parentTitle":"Caprica","parentYear":2010,"primaryExtraKey":"/library/metadata/58684","rating":7.6,"ratingImage":"rottentomatoes://image.rating.ripe","ratingKey":"58683","skipCount":1,"studio":"20th Century Studios","summary":"Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home.","tagline":"Return to Pandora.","theme":"/library/metadata/1/theme/1705636920","thumb":"/library/metadata/58683/thumb/1703239236","title":"Avatar: The Way of Water","titleSort":"Whale","type":"movie","updatedAt":1703239236,"viewCount":1,"viewOffset":5222500,"viewedLeafCount":0,"year":2022}] | \ No newline at end of file diff --git a/docs/models/operations/getlibraryitemsmetadata.md b/docs/models/operations/getlibraryitemsmetadata.md new file mode 100644 index 0000000..7192a7e --- /dev/null +++ b/docs/models/operations/getlibraryitemsmetadata.md @@ -0,0 +1,64 @@ +# GetLibraryItemsMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 58683 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/58683 | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://movie/5d7768ba96b655001fdc0408 | +| `studio` | *Optional[str]* | :heavy_minus_sign: | N/A | 20th Century Studios | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | movie | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Avatar: The Way of Water | +| `content_rating` | *Optional[str]* | :heavy_minus_sign: | N/A | PG-13 | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | Jake Sully lives with his newfound family formed on the extrasolar moon Pandora. Once a familiar threat returns to finish what was previously started, Jake must work with Neytiri and the army of the Na'vi race to protect their home. | +| `rating` | *Optional[float]* | :heavy_minus_sign: | N/A | 7.6 | +| `audience_rating` | *Optional[float]* | :heavy_minus_sign: | N/A | 9.2 | +| `year` | *Optional[int]* | :heavy_minus_sign: | N/A | 2022 | +| `tagline` | *Optional[str]* | :heavy_minus_sign: | N/A | Return to Pandora. | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/58683/thumb/1703239236 | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/58683/art/1703239236 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 11558112 | +| `originally_available_at` | [datetime](https://docs.python.org/3/library/datetime.html#datetime-objects) | :heavy_minus_sign: | N/A | 2022-12-14 00:00:00 +0000 UTC | +| `added_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1680457607 | +| `updated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1703239236 | +| `audience_rating_image` | *Optional[str]* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.upright | +| `chapter_source` | *Optional[str]* | :heavy_minus_sign: | N/A | media | +| `primary_extra_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/58684 | +| `rating_image` | *Optional[str]* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.ripe | +| `grandparent_rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 66 | +| `grandparent_guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://show/5d9c081b170e24001f2a7be4 | +| `grandparent_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/66 | +| `grandparent_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Caprica | +| `grandparent_thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/66/thumb/1705716261 | +| `grandparent_art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/66/art/1705716261 | +| `grandparent_theme` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/66/theme/1705716261 | +| `media` | List[[operations.GetLibraryItemsMedia](../../models/operations/getlibraryitemsmedia.md)] | :heavy_minus_sign: | N/A | [{"Part":[{"container":"mkv","duration":11558112,"file":"/movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv","id":119542,"key":"/library/parts/119542/1680457526/file.mkv","size":36158371307,"videoProfile":"main 10"}],"aspectRatio":1.85,"audioChannels":6,"audioCodec":"eac3","bitrate":25025,"container":"mkv","duration":11558112,"height":2072,"id":119534,"videoCodec":"hevc","videoFrameRate":"24p","videoProfile":"main 10","videoResolution":"4k","width":3840}] | +| `genre` | List[[operations.GetLibraryItemsGenre](../../models/operations/getlibraryitemsgenre.md)] | :heavy_minus_sign: | N/A | [{"tag":"Adventure"}] | +| `country` | List[[operations.GetLibraryItemsCountry](../../models/operations/getlibraryitemscountry.md)] | :heavy_minus_sign: | N/A | [{"tag":"United States of America"}] | +| `director` | List[[operations.GetLibraryItemsDirector](../../models/operations/getlibraryitemsdirector.md)] | :heavy_minus_sign: | N/A | [{"tag":"James Cameron"}] | +| `writer` | List[[operations.GetLibraryItemsWriter](../../models/operations/getlibraryitemswriter.md)] | :heavy_minus_sign: | N/A | [{"tag":"James Cameron"}] | +| `role` | List[[operations.GetLibraryItemsRole](../../models/operations/getlibraryitemsrole.md)] | :heavy_minus_sign: | N/A | [{"tag":"Sigourney Weaver"}] | +| `title_sort` | *Optional[str]* | :heavy_minus_sign: | N/A | Whale | +| `view_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `last_viewed_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1682752242 | +| `original_title` | *Optional[str]* | :heavy_minus_sign: | N/A | 映画 ブラッククローバー 魔法帝の剣 | +| `view_offset` | *Optional[int]* | :heavy_minus_sign: | N/A | 5222500 | +| `skip_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `index` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `theme` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/1/theme/1705636920 | +| `leaf_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 14 | +| `viewed_leaf_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 0 | +| `child_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `has_premium_extras` | *Optional[str]* | :heavy_minus_sign: | N/A | 1 | +| `has_premium_primary_extra` | *Optional[str]* | :heavy_minus_sign: | N/A | 1 | +| `parent_rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 66 | +| `parent_guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://show/5d9c081b170e24001f2a7be4 | +| `parent_studio` | *Optional[str]* | :heavy_minus_sign: | N/A | UCP | +| `parent_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/66 | +| `parent_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Caprica | +| `parent_index` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `parent_year` | *Optional[int]* | :heavy_minus_sign: | N/A | 2010 | +| `parent_thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/66/thumb/1705716261 | +| `parent_theme` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/66/theme/1705716261 | \ No newline at end of file diff --git a/docs/models/operations/getlibraryitemspart.md b/docs/models/operations/getlibraryitemspart.md new file mode 100644 index 0000000..e98e524 --- /dev/null +++ b/docs/models/operations/getlibraryitemspart.md @@ -0,0 +1,14 @@ +# GetLibraryItemsPart + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 119542 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/parts/119542/1680457526/file.mkv | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 11558112 | +| `file` | *Optional[str]* | :heavy_minus_sign: | N/A | /movies/Avatar The Way of Water (2022)/Avatar.The.Way.of.Water.2022.2160p.WEB-DL.DDP5.1.Atmos.DV.HDR10.HEVC-CMRG.mkv | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 36158371307 | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mkv | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | main 10 | \ No newline at end of file diff --git a/docs/models/operations/getlibraryitemsrequest.md b/docs/models/operations/getlibraryitemsrequest.md new file mode 100644 index 0000000..74122e2 --- /dev/null +++ b/docs/models/operations/getlibraryitemsrequest.md @@ -0,0 +1,9 @@ +# GetLibraryItemsRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `section_id` | *int* | :heavy_check_mark: | the Id of the library to query | +| `tag` | [operations.Tag](../../models/operations/tag.md) | :heavy_check_mark: | A key representing a specific tag within the section. | \ No newline at end of file diff --git a/docs/models/operations/getlibraryitemsresponse.md b/docs/models/operations/getlibraryitemsresponse.md new file mode 100644 index 0000000..0f7a620 --- /dev/null +++ b/docs/models/operations/getlibraryitemsresponse.md @@ -0,0 +1,11 @@ +# GetLibraryItemsResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetLibraryItemsResponseBody]](../../models/operations/getlibraryitemsresponsebody.md) | :heavy_minus_sign: | The contents of the library by section and tag | \ No newline at end of file diff --git a/docs/models/operations/getlibraryitemsresponsebody.md b/docs/models/operations/getlibraryitemsresponsebody.md new file mode 100644 index 0000000..95f8d93 --- /dev/null +++ b/docs/models/operations/getlibraryitemsresponsebody.md @@ -0,0 +1,10 @@ +# GetLibraryItemsResponseBody + +The contents of the library by section and tag + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetLibraryItemsMediaContainer]](../../models/operations/getlibraryitemsmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getlibraryitemsrole.md b/docs/models/operations/getlibraryitemsrole.md new file mode 100644 index 0000000..85d4f03 --- /dev/null +++ b/docs/models/operations/getlibraryitemsrole.md @@ -0,0 +1,8 @@ +# GetLibraryItemsRole + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Sigourney Weaver | \ No newline at end of file diff --git a/docs/models/operations/getlibraryitemswriter.md b/docs/models/operations/getlibraryitemswriter.md new file mode 100644 index 0000000..509c9a9 --- /dev/null +++ b/docs/models/operations/getlibraryitemswriter.md @@ -0,0 +1,8 @@ +# GetLibraryItemsWriter + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | James Cameron | \ No newline at end of file diff --git a/docs/models/operations/getlibrarymediacontainer.md b/docs/models/operations/getlibrarymediacontainer.md new file mode 100644 index 0000000..0fe7a1b --- /dev/null +++ b/docs/models/operations/getlibrarymediacontainer.md @@ -0,0 +1,22 @@ +# GetLibraryMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 29 | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /:/resources/movie-fanart.jpg | +| `content` | *Optional[str]* | :heavy_minus_sign: | N/A | secondary | +| `identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library | +| `library_section_id` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `media_tag_prefix` | *Optional[str]* | :heavy_minus_sign: | N/A | /system/bundle/media/flags/ | +| `media_tag_version` | *Optional[int]* | :heavy_minus_sign: | N/A | 1701731894 | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /:/resources/movie.png | +| `title1` | *Optional[str]* | :heavy_minus_sign: | N/A | Movies | +| `view_group` | *Optional[str]* | :heavy_minus_sign: | N/A | secondary | +| `view_mode` | *Optional[int]* | :heavy_minus_sign: | N/A | 65592 | +| `directory` | List[[operations.GetLibraryDirectory](../../models/operations/getlibrarydirectory.md)] | :heavy_minus_sign: | N/A | [{"key":"search?type=1","prompt":"Search Movies","search":true,"secondary":true,"title":"Search..."}] | +| `type` | List[[operations.GetLibraryType](../../models/operations/getlibrarytype.md)] | :heavy_minus_sign: | N/A | [{"Field":[{"key":"title","title":"Title","type":"string"},{"key":"studio","title":"Studio","type":"string"},{"key":"userRating","subType":"rating","title":"Rating","type":"integer"},{"key":"contentRating","title":"Content Rating","type":"tag"},{"key":"year","subType":"year","title":"Year","type":"integer"},{"key":"decade","subType":"decade","title":"Decade","type":"integer"},{"key":"originallyAvailableAt","title":"Release Date","type":"date"},{"key":"duration","subType":"duration","title":"Duration","type":"integer"},{"key":"unmatched","title":"Unmatched","type":"boolean"},{"key":"duplicate","title":"Duplicate","type":"boolean"},{"key":"genre","title":"Genre","type":"tag"},{"key":"collection","title":"Collection","type":"tag"},{"key":"director","title":"Director","type":"tag"},{"key":"writer","title":"Writer","type":"tag"},{"key":"producer","title":"Producer","type":"tag"},{"key":"actor","title":"Actor","type":"tag"},{"key":"country","title":"Country","type":"tag"},{"key":"addedAt","title":"Date Added","type":"date"},{"key":"viewCount","title":"Plays","type":"integer"},{"key":"lastViewedAt","title":"Last Played","type":"date"},{"key":"unwatched","title":"Unplayed","type":"boolean"},{"key":"resolution","title":"Resolution","type":"resolution"},{"key":"hdr","subType":"hdr","title":"HDR","type":"boolean"},{"key":"mediaSize","subType":"fileSize","title":"File Size","type":"integer"},{"key":"mediaBitrate","subType":"bitrate","title":"Bitrate","type":"integer"},{"key":"subtitleLanguage","title":"Subtitle Language","type":"subtitleLanguage"},{"key":"audioLanguage","title":"Audio Language","type":"audioLanguage"},{"key":"inProgress","title":"In Progress","type":"boolean"},{"key":"trash","title":"Trash","type":"boolean"},{"key":"editionTitle","title":"Edition","type":"string"},{"key":"label","title":"Label","type":"tag"}],"Filter":[{"filter":"genre","filterType":"string","key":"/library/sections/1/genre","title":"Genre","type":"filter"},{"filter":"year","filterType":"integer","key":"/library/sections/1/year","title":"Year","type":"filter"},{"filter":"decade","filterType":"integer","key":"/library/sections/1/decade","title":"Decade","type":"filter"},{"filter":"contentRating","filterType":"string","key":"/library/sections/1/contentRating","title":"Content Rating","type":"filter"},{"filter":"collection","filterType":"string","key":"/library/sections/1/collection","title":"Collection","type":"filter"},{"filter":"director","filterType":"string","key":"/library/sections/1/director","title":"Director","type":"filter"},{"filter":"actor","filterType":"string","key":"/library/sections/1/actor","title":"Actor","type":"filter"},{"filter":"writer","filterType":"string","key":"/library/sections/1/writer","title":"Writer","type":"filter"},{"filter":"producer","filterType":"string","key":"/library/sections/1/producer","title":"Producer","type":"filter"},{"filter":"country","filterType":"string","key":"/library/sections/1/country","title":"Country","type":"filter"},{"filter":"studio","filterType":"string","key":"/library/sections/1/studio","title":"Studio","type":"filter"},{"filter":"resolution","filterType":"string","key":"/library/sections/1/resolution","title":"Resolution","type":"filter"},{"filter":"hdr","filterType":"boolean","key":"/library/sections/1/hdr","title":"HDR","type":"filter"},{"filter":"unwatched","filterType":"boolean","key":"/library/sections/1/unwatched","title":"Unplayed","type":"filter"},{"filter":"inProgress","filterType":"boolean","key":"/library/sections/1/inProgress","title":"In Progress","type":"filter"},{"filter":"unmatched","filterType":"boolean","key":"/library/sections/1/unmatched","title":"Unmatched","type":"filter"},{"filter":"audioLanguage","filterType":"string","key":"/library/sections/1/audioLanguage","title":"Audio Language","type":"filter"},{"filter":"subtitleLanguage","filterType":"string","key":"/library/sections/1/subtitleLanguage","title":"Subtitle Language","type":"filter"},{"filter":"editionTitle","filterType":"string","key":"/library/sections/1/editionTitle","title":"Edition","type":"filter"},{"filter":"label","filterType":"string","key":"/library/sections/1/label","title":"Labels","type":"filter"}],"Sort":[{"default":"asc","defaultDirection":"asc","descKey":"titleSort:desc","firstCharacterKey":"/library/sections/1/firstCharacter","key":"titleSort","title":"Title"},{"defaultDirection":"desc","descKey":"originallyAvailableAt:desc","key":"originallyAvailableAt","title":"Release Date"},{"defaultDirection":"desc","descKey":"rating:desc","key":"rating","title":"Critic Rating"},{"defaultDirection":"desc","descKey":"audienceRating:desc","key":"audienceRating","title":"Audience Rating"},{"defaultDirection":"desc","descKey":"duration:desc","key":"duration","title":"Duration"},{"defaultDirection":"desc","descKey":"addedAt:desc","key":"addedAt","title":"Date Added"},{"defaultDirection":"desc","descKey":"lastViewedAt:desc","key":"lastViewedAt","title":"Date Viewed"},{"defaultDirection":"asc","descKey":"mediaHeight:desc","key":"mediaHeight","title":"Resolution"},{"defaultDirection":"desc","descKey":"random:desc","key":"random","title":"Randomly"}],"active":false,"key":"/library/sections/1/all?type=1","title":"Movies","type":"movie"}] | +| `field_type` | List[[operations.FieldType](../../models/operations/fieldtype.md)] | :heavy_minus_sign: | N/A | [{"Operator":[{"key":"=","title":"is"}],"type":"resolution"}] | \ No newline at end of file diff --git a/docs/models/operations/getlibraryrequest.md b/docs/models/operations/getlibraryrequest.md new file mode 100644 index 0000000..3803e90 --- /dev/null +++ b/docs/models/operations/getlibraryrequest.md @@ -0,0 +1,9 @@ +# GetLibraryRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `section_id` | *float* | :heavy_check_mark: | the Id of the library to query | 1000 | +| `include_details` | [Optional[operations.IncludeDetails]](../../models/operations/includedetails.md) | :heavy_minus_sign: | Whether or not to include details for a section (types, filters, and sorts).
Only exists for backwards compatibility, media providers other than the server libraries have it on always.
| | \ No newline at end of file diff --git a/docs/models/operations/getlibraryresponse.md b/docs/models/operations/getlibraryresponse.md new file mode 100644 index 0000000..73d299d --- /dev/null +++ b/docs/models/operations/getlibraryresponse.md @@ -0,0 +1,11 @@ +# GetLibraryResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetLibraryResponseBody]](../../models/operations/getlibraryresponsebody.md) | :heavy_minus_sign: | The details of the library | \ No newline at end of file diff --git a/docs/models/operations/getlibraryresponsebody.md b/docs/models/operations/getlibraryresponsebody.md new file mode 100644 index 0000000..fc9afe4 --- /dev/null +++ b/docs/models/operations/getlibraryresponsebody.md @@ -0,0 +1,10 @@ +# GetLibraryResponseBody + +The details of the library + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetLibraryMediaContainer]](../../models/operations/getlibrarymediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getlibrarytype.md b/docs/models/operations/getlibrarytype.md new file mode 100644 index 0000000..773a5eb --- /dev/null +++ b/docs/models/operations/getlibrarytype.md @@ -0,0 +1,14 @@ +# GetLibraryType + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/sections/1/all?type=1 | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | movie | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Movies | +| `active` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `filter_` | List[[operations.Filter](../../models/operations/filter_.md)] | :heavy_minus_sign: | N/A | [{"filter":"label","filterType":"string","key":"/library/sections/1/label","title":"Labels","type":"filter"}] | +| `sort` | List[[operations.Sort](../../models/operations/sort.md)] | :heavy_minus_sign: | N/A | [{"default":"asc","defaultDirection":"desc","descKey":"random:desc","firstCharacterKey":"/library/sections/1/firstCharacter","key":"random","title":"Randomly"}] | +| `field` | List[[operations.Field](../../models/operations/field.md)] | :heavy_minus_sign: | N/A | [{"key":"label","subType":"bitrate","title":"Label","type":"tag"}] | \ No newline at end of file diff --git a/docs/models/operations/getmetadatachildrendirectory.md b/docs/models/operations/getmetadatachildrendirectory.md new file mode 100644 index 0000000..dee13f5 --- /dev/null +++ b/docs/models/operations/getmetadatachildrendirectory.md @@ -0,0 +1,12 @@ +# GetMetadataChildrenDirectory + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| `leaf_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 16 | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/30072/thumb/1705739923 | +| `viewed_leaf_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 16 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/30072/allLeaves | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | All episodes | \ No newline at end of file diff --git a/docs/models/operations/getmetadatachildrenmediacontainer.md b/docs/models/operations/getmetadatachildrenmediacontainer.md new file mode 100644 index 0000000..517dc40 --- /dev/null +++ b/docs/models/operations/getmetadatachildrenmediacontainer.md @@ -0,0 +1,30 @@ +# GetMetadataChildrenMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 3 | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/30072/art/1705739923 | +| `identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | 30072 | +| `library_section_id` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `library_section_title` | *Optional[str]* | :heavy_minus_sign: | N/A | TV Shows | +| `library_section_uuid` | *Optional[str]* | :heavy_minus_sign: | N/A | 4bb2521c-8ba9-459b-aaee-8ab8bc35eabd | +| `media_tag_prefix` | *Optional[str]* | :heavy_minus_sign: | N/A | /system/bundle/media/flags/ | +| `media_tag_version` | *Optional[int]* | :heavy_minus_sign: | N/A | 1701731894 | +| `nocache` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `parent_index` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `parent_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Reacher | +| `parent_year` | *Optional[int]* | :heavy_minus_sign: | N/A | 2022 | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | When retired Military Police Officer Jack Reacher is arrested for a murder he did not commit, he finds himself in the middle of a deadly conspiracy full of dirty cops, shady businessmen, and scheming politicians. With nothing but his wits, he must figure out what is happening in Margrave, Georgia. | +| `theme` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/30072/theme/1705739923 | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/30072/thumb/1705739923 | +| `title1` | *Optional[str]* | :heavy_minus_sign: | N/A | TV Shows | +| `title2` | *Optional[str]* | :heavy_minus_sign: | N/A | Reacher | +| `view_group` | *Optional[str]* | :heavy_minus_sign: | N/A | season | +| `view_mode` | *Optional[int]* | :heavy_minus_sign: | N/A | 65593 | +| `directory` | List[[operations.GetMetadataChildrenDirectory](../../models/operations/getmetadatachildrendirectory.md)] | :heavy_minus_sign: | N/A | [{"key":"/library/metadata/30072/allLeaves","leafCount":16,"thumb":"/library/metadata/30072/thumb/1705739923","title":"All episodes","viewedLeafCount":16}] | +| `metadata` | List[[operations.GetMetadataChildrenMetadata](../../models/operations/getmetadatachildrenmetadata.md)] | :heavy_minus_sign: | N/A | [{"addedAt":1702602021,"art":"/library/metadata/30072/art/1705739923","guid":"plex://season/652aea6549508477c34c6000","index":2,"key":"/library/metadata/66488/children","lastRatedAt":1703881224,"lastViewedAt":1705646565,"leafCount":8,"parentGuid":"plex://show/5d9c09190aaccd001f8f42f0","parentIndex":1,"parentKey":"/library/metadata/30072","parentRatingKey":"30072","parentStudio":"Amazon Studios","parentTheme":"/library/metadata/30072/theme/1705739923","parentThumb":"/library/metadata/30072/thumb/1705739923","parentTitle":"Reacher","parentYear":2022,"ratingKey":"66488","skipCount":1,"summary":"Based on\"Bad Luck and Trouble,\" when members of Reacher's old military unit start turning up dead, Reacher has just one thing on his mind—revenge.","thumb":"/library/metadata/66488/thumb/1703065033","title":"Season 2","type":"season","updatedAt":1703065033,"userRating":9,"viewCount":11,"viewedLeafCount":8}] | \ No newline at end of file diff --git a/docs/models/operations/getmetadatachildrenmetadata.md b/docs/models/operations/getmetadatachildrenmetadata.md new file mode 100644 index 0000000..2509754 --- /dev/null +++ b/docs/models/operations/getmetadatachildrenmetadata.md @@ -0,0 +1,34 @@ +# GetMetadataChildrenMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 66488 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/66488/children | +| `parent_rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 30072 | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://season/652aea6549508477c34c6000 | +| `parent_guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://show/5d9c09190aaccd001f8f42f0 | +| `parent_studio` | *Optional[str]* | :heavy_minus_sign: | N/A | Amazon Studios | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | season | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Season 2 | +| `parent_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/30072 | +| `parent_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Reacher | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | Based on"Bad Luck and Trouble," when members of Reacher's old military unit start turning up dead, Reacher has just one thing on his mind—revenge. | +| `index` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `parent_index` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `view_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 11 | +| `last_viewed_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705646565 | +| `parent_year` | *Optional[int]* | :heavy_minus_sign: | N/A | 2022 | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/66488/thumb/1703065033 | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/30072/art/1705739923 | +| `parent_thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/30072/thumb/1705739923 | +| `parent_theme` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/30072/theme/1705739923 | +| `leaf_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 8 | +| `viewed_leaf_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 8 | +| `added_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1702602021 | +| `updated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1703065033 | +| `user_rating` | *Optional[int]* | :heavy_minus_sign: | N/A | 9 | +| `skip_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `last_rated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1703881224 | \ No newline at end of file diff --git a/docs/models/operations/getmetadatachildrenrequest.md b/docs/models/operations/getmetadatachildrenrequest.md new file mode 100644 index 0000000..3ccf8f4 --- /dev/null +++ b/docs/models/operations/getmetadatachildrenrequest.md @@ -0,0 +1,8 @@ +# GetMetadataChildrenRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `rating_key` | *float* | :heavy_check_mark: | the id of the library item to return the children of. | \ No newline at end of file diff --git a/docs/models/operations/getmetadatachildrenresponse.md b/docs/models/operations/getmetadatachildrenresponse.md new file mode 100644 index 0000000..8ab7303 --- /dev/null +++ b/docs/models/operations/getmetadatachildrenresponse.md @@ -0,0 +1,11 @@ +# GetMetadataChildrenResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetMetadataChildrenResponseBody]](../../models/operations/getmetadatachildrenresponsebody.md) | :heavy_minus_sign: | The children of the library item. | \ No newline at end of file diff --git a/docs/models/operations/getmetadatachildrenresponsebody.md b/docs/models/operations/getmetadatachildrenresponsebody.md new file mode 100644 index 0000000..3788390 --- /dev/null +++ b/docs/models/operations/getmetadatachildrenresponsebody.md @@ -0,0 +1,10 @@ +# GetMetadataChildrenResponseBody + +The children of the library item. + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetMetadataChildrenMediaContainer]](../../models/operations/getmetadatachildrenmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getmetadatacountry.md b/docs/models/operations/getmetadatacountry.md new file mode 100644 index 0000000..f9000a2 --- /dev/null +++ b/docs/models/operations/getmetadatacountry.md @@ -0,0 +1,10 @@ +# GetMetadataCountry + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 116 | +| `filter_` | *Optional[str]* | :heavy_minus_sign: | N/A | country=116 | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | United States of America | \ No newline at end of file diff --git a/docs/models/operations/getmetadatadirector.md b/docs/models/operations/getmetadatadirector.md new file mode 100644 index 0000000..e25dc83 --- /dev/null +++ b/docs/models/operations/getmetadatadirector.md @@ -0,0 +1,12 @@ +# GetMetadataDirector + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 130 | +| `filter_` | *Optional[str]* | :heavy_minus_sign: | N/A | director=130 | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Joss Whedon | +| `tag_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 5d776828880197001ec90e8f | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | https://metadata-static.plex.tv/people/5d776828880197001ec90e8f.jpg | \ No newline at end of file diff --git a/docs/models/operations/getmetadatagenre.md b/docs/models/operations/getmetadatagenre.md new file mode 100644 index 0000000..1be34af --- /dev/null +++ b/docs/models/operations/getmetadatagenre.md @@ -0,0 +1,10 @@ +# GetMetadataGenre + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 184 | +| `filter_` | *Optional[str]* | :heavy_minus_sign: | N/A | genre=184 | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Thriller | \ No newline at end of file diff --git a/docs/models/operations/getmetadatamedia.md b/docs/models/operations/getmetadatamedia.md new file mode 100644 index 0000000..c51ff7f --- /dev/null +++ b/docs/models/operations/getmetadatamedia.md @@ -0,0 +1,24 @@ +# GetMetadataMedia + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 15 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 141417 | +| `bitrate` | *Optional[int]* | :heavy_minus_sign: | N/A | 2278 | +| `width` | *Optional[int]* | :heavy_minus_sign: | N/A | 1920 | +| `height` | *Optional[int]* | :heavy_minus_sign: | N/A | 814 | +| `aspect_ratio` | *Optional[float]* | :heavy_minus_sign: | N/A | 2.35 | +| `audio_channels` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `audio_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | aac | +| `video_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | h264 | +| `video_resolution` | *Optional[str]* | :heavy_minus_sign: | N/A | 1080 | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mp4 | +| `video_frame_rate` | *Optional[str]* | :heavy_minus_sign: | N/A | 24p | +| `optimized_for_streaming` | *Optional[int]* | :heavy_minus_sign: | N/A | 0 | +| `audio_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | lc | +| `has64bit_offsets` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | high | +| `part` | List[[operations.GetMetadataPart](../../models/operations/getmetadatapart.md)] | :heavy_minus_sign: | N/A | [{"Stream":[{"bitDepth":8,"bitrate":2160,"chromaLocation":"left","chromaSubsampling":14520,"codec":"h264","codedHeight":816,"codedWidth":1920,"colorPrimaries":"bt709","colorRange":"tv","colorSpace":"bt709","colorTrc":"bt709","default":true,"displayTitle":"1080p (H.264)","extendedDisplayTitle":"1080p (H.264)","frameRate":24,"hasScalingMatrix":false,"height":814,"id":30,"index":1,"level":40,"profile":"high","refFrames":4,"scanType":"progressive","streamIdentifier":"2","streamType":1,"width":1920},{"bitrate":128,"channels":2,"codec":"aac","default":true,"displayTitle":"English (AAC Stereo)","extendedDisplayTitle":"English (AAC Stereo)","id":29,"index":0,"language":"English","languageCode":"eng","languageTag":"en","profile":"lc","samplingRate":44100,"selected":true,"streamIdentifier":"1","streamType":2}],"audioProfile":"lc","container":"mp4","duration":141417,"file":"/movies/Serenity (2005)/Serenity (2005).mp4","has64bitOffsets":false,"id":15,"key":"/library/parts/15/1705637151/file.mp4","optimizedForStreaming":false,"size":40271948,"videoProfile":"high"}] | \ No newline at end of file diff --git a/docs/models/operations/getmetadatamediacontainer.md b/docs/models/operations/getmetadatamediacontainer.md new file mode 100644 index 0000000..4662e49 --- /dev/null +++ b/docs/models/operations/getmetadatamediacontainer.md @@ -0,0 +1,16 @@ +# GetMetadataMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library | +| `library_section_id` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `library_section_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Movies | +| `library_section_uuid` | *Optional[str]* | :heavy_minus_sign: | N/A | cfc899d7-3000-46f6-8489-b9592714ada5 | +| `media_tag_prefix` | *Optional[str]* | :heavy_minus_sign: | N/A | /system/bundle/media/flags/ | +| `media_tag_version` | *Optional[int]* | :heavy_minus_sign: | N/A | 1698860922 | +| `metadata` | List[[operations.GetMetadataMetadata](../../models/operations/getmetadatametadata.md)] | :heavy_minus_sign: | N/A | [{"Country":[{"filter":"country=116","id":116,"tag":"United States of America"}],"Director":[{"filter":"director=130","id":130,"tag":"Joss Whedon","tagKey":"5d776828880197001ec90e8f","thumb":"https://metadata-static.plex.tv/people/5d776828880197001ec90e8f.jpg"}],"Genre":[{"filter":"genre=5","id":5,"tag":"Science Fiction"}],"Guid":[{"id":"imdb://tt0379786"}],"Media":[{"Part":[{"Stream":[{"bitDepth":8,"bitrate":2160,"chromaLocation":"left","chromaSubsampling":14520,"codec":"h264","codedHeight":816,"codedWidth":1920,"colorPrimaries":"bt709","colorRange":"tv","colorSpace":"bt709","colorTrc":"bt709","default":true,"displayTitle":"1080p (H.264)","extendedDisplayTitle":"1080p (H.264)","frameRate":24,"hasScalingMatrix":false,"height":814,"id":30,"index":1,"level":40,"profile":"high","refFrames":4,"scanType":"progressive","streamIdentifier":"2","streamType":1,"width":1920},{"bitrate":128,"channels":2,"codec":"aac","default":true,"displayTitle":"English (AAC Stereo)","extendedDisplayTitle":"English (AAC Stereo)","id":29,"index":0,"language":"English","languageCode":"eng","languageTag":"en","profile":"lc","samplingRate":44100,"selected":true,"streamIdentifier":"1","streamType":2}],"audioProfile":"lc","container":"mp4","duration":141417,"file":"/movies/Serenity (2005)/Serenity (2005).mp4","has64bitOffsets":false,"id":15,"key":"/library/parts/15/1705637151/file.mp4","optimizedForStreaming":false,"size":40271948,"videoProfile":"high"}],"aspectRatio":2.35,"audioChannels":2,"audioCodec":"aac","audioProfile":"lc","bitrate":2278,"container":"mp4","duration":141417,"has64bitOffsets":false,"height":814,"id":15,"optimizedForStreaming":0,"videoCodec":"h264","videoFrameRate":"24p","videoProfile":"high","videoResolution":"1080","width":1920}],"Producer":[{"filter":"producer=221","id":221,"tag":"Barry Mendel","tagKey":"5d776826961905001eb90e2b","thumb":"https://metadata-static.plex.tv/8/people/87877371326a964634d18556d94547e1.jpg"}],"Rating":[{"image":"imdb://image.rating","type":"audience","value":7.8}],"Role":[{"filter":"actor=8","id":8,"role":"Malcolm \"Mal\" Reynolds","tag":"Nathan Fillion","tagKey":"5d7768286f4521001ea9945c","thumb":"https://metadata-static.plex.tv/4/people/4a2890ca346eb832500b1ed0add89d5e.jpg"}],"Writer":[{"filter":"writer=132","id":132,"tag":"Joss Whedon","tagKey":"5d776828880197001ec90e8f","thumb":"https://metadata-static.plex.tv/people/5d776828880197001ec90e8f.jpg"}],"addedAt":1705637164,"art":"/library/metadata/17/art/1705637165","audienceRating":9.1,"audienceRatingImage":"rottentomatoes://image.rating.upright","contentRating":"PG-13","duration":141417,"guid":"plex://movie/5d77683f6f4521001ea9dc53","hasPremiumPrimaryExtra":"1","key":"/library/metadata/17","librarySectionID":1,"librarySectionKey":"/library/sections/1","librarySectionTitle":"Movies","originallyAvailableAt":"2005-09-29T00:00:00Z","rating":8.2,"ratingImage":"rottentomatoes://image.rating.ripe","ratingKey":"17","studio":"Universal Pictures","summary":"Serenity continues the story of the TV series it was based upon (\"Firefly\"). River Tam had a secret - one in which she's not even aware - so dangerous, no one's safe, as an Alliance operative's sent to capture her, and all others are considered irrelevant to his job.","tagline":"They aim to misbehave.","thumb":"/library/metadata/17/thumb/1705637165","title":"Serenity","type":"movie","updatedAt":1705637165,"year":2005}] | \ No newline at end of file diff --git a/docs/models/operations/getmetadatametadata.md b/docs/models/operations/getmetadatametadata.md new file mode 100644 index 0000000..ddee846 --- /dev/null +++ b/docs/models/operations/getmetadatametadata.md @@ -0,0 +1,40 @@ +# GetMetadataMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 17 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/17 | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://movie/5d77683f6f4521001ea9dc53 | +| `studio` | *Optional[str]* | :heavy_minus_sign: | N/A | Universal Pictures | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | movie | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Serenity | +| `library_section_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Movies | +| `library_section_id` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `library_section_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/sections/1 | +| `content_rating` | *Optional[str]* | :heavy_minus_sign: | N/A | PG-13 | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | Serenity continues the story of the TV series it was based upon ("Firefly"). River Tam had a secret - one in which she's not even aware - so dangerous, no one's safe, as an Alliance operative's sent to capture her, and all others are considered irrelevant to his job. | +| `rating` | *Optional[float]* | :heavy_minus_sign: | N/A | 8.2 | +| `audience_rating` | *Optional[float]* | :heavy_minus_sign: | N/A | 9.1 | +| `year` | *Optional[int]* | :heavy_minus_sign: | N/A | 2005 | +| `tagline` | *Optional[str]* | :heavy_minus_sign: | N/A | They aim to misbehave. | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/17/thumb/1705637165 | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/17/art/1705637165 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 141417 | +| `originally_available_at` | [datetime](https://docs.python.org/3/library/datetime.html#datetime-objects) | :heavy_minus_sign: | N/A | 2005-09-29 00:00:00 +0000 UTC | +| `added_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705637164 | +| `updated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705637165 | +| `audience_rating_image` | *Optional[str]* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.upright | +| `has_premium_primary_extra` | *Optional[str]* | :heavy_minus_sign: | N/A | 1 | +| `rating_image` | *Optional[str]* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.ripe | +| `media` | List[[operations.GetMetadataMedia](../../models/operations/getmetadatamedia.md)] | :heavy_minus_sign: | N/A | [{"Part":[{"Stream":[{"bitDepth":8,"bitrate":2160,"chromaLocation":"left","chromaSubsampling":14520,"codec":"h264","codedHeight":816,"codedWidth":1920,"colorPrimaries":"bt709","colorRange":"tv","colorSpace":"bt709","colorTrc":"bt709","default":true,"displayTitle":"1080p (H.264)","extendedDisplayTitle":"1080p (H.264)","frameRate":24,"hasScalingMatrix":false,"height":814,"id":30,"index":1,"level":40,"profile":"high","refFrames":4,"scanType":"progressive","streamIdentifier":"2","streamType":1,"width":1920},{"bitrate":128,"channels":2,"codec":"aac","default":true,"displayTitle":"English (AAC Stereo)","extendedDisplayTitle":"English (AAC Stereo)","id":29,"index":0,"language":"English","languageCode":"eng","languageTag":"en","profile":"lc","samplingRate":44100,"selected":true,"streamIdentifier":"1","streamType":2}],"audioProfile":"lc","container":"mp4","duration":141417,"file":"/movies/Serenity (2005)/Serenity (2005).mp4","has64bitOffsets":false,"id":15,"key":"/library/parts/15/1705637151/file.mp4","optimizedForStreaming":false,"size":40271948,"videoProfile":"high"}],"aspectRatio":2.35,"audioChannels":2,"audioCodec":"aac","audioProfile":"lc","bitrate":2278,"container":"mp4","duration":141417,"has64bitOffsets":false,"height":814,"id":15,"optimizedForStreaming":0,"videoCodec":"h264","videoFrameRate":"24p","videoProfile":"high","videoResolution":"1080","width":1920}] | +| `genre` | List[[operations.GetMetadataGenre](../../models/operations/getmetadatagenre.md)] | :heavy_minus_sign: | N/A | [{"filter":"genre=184","id":184,"tag":"Thriller"}] | +| `country` | List[[operations.GetMetadataCountry](../../models/operations/getmetadatacountry.md)] | :heavy_minus_sign: | N/A | [{"filter":"country=116","id":116,"tag":"United States of America"}] | +| `guids` | List[[operations.Guids](../../models/operations/guids.md)] | :heavy_minus_sign: | N/A | [{"id":"tvdb://2337"}] | +| `ratings` | List[[operations.Ratings](../../models/operations/ratings.md)] | :heavy_minus_sign: | N/A | [{"image":"themoviedb://image.rating","type":"audience","value":7.4}] | +| `director` | List[[operations.GetMetadataDirector](../../models/operations/getmetadatadirector.md)] | :heavy_minus_sign: | N/A | [{"filter":"director=130","id":130,"tag":"Joss Whedon","tagKey":"5d776828880197001ec90e8f","thumb":"https://metadata-static.plex.tv/people/5d776828880197001ec90e8f.jpg"}] | +| `writer` | List[[operations.GetMetadataWriter](../../models/operations/getmetadatawriter.md)] | :heavy_minus_sign: | N/A | [{"filter":"writer=132","id":132,"tag":"Joss Whedon","tagKey":"5d776828880197001ec90e8f","thumb":"https://metadata-static.plex.tv/people/5d776828880197001ec90e8f.jpg"}] | +| `role` | List[[operations.GetMetadataRole](../../models/operations/getmetadatarole.md)] | :heavy_minus_sign: | N/A | [{"filter":"actor=220","id":220,"role":"Bar Guy (uncredited)","tag":"Dennis Keiffer","tagKey":"5d77683554f42c001f8c4708","thumb":"https://metadata-static.plex.tv/6/people/648e9a7ea1d537bccfcd7615134b78ce.jpg"}] | +| `producer` | List[[operations.Producer](../../models/operations/producer.md)] | :heavy_minus_sign: | N/A | [{"filter":"producer=221","id":221,"tag":"Barry Mendel","tagKey":"5d776826961905001eb90e2b","thumb":"https://metadata-static.plex.tv/8/people/87877371326a964634d18556d94547e1.jpg"}] | \ No newline at end of file diff --git a/docs/models/operations/getmetadatapart.md b/docs/models/operations/getmetadatapart.md new file mode 100644 index 0000000..1d4f8dd --- /dev/null +++ b/docs/models/operations/getmetadatapart.md @@ -0,0 +1,18 @@ +# GetMetadataPart + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 15 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/parts/15/1705637151/file.mp4 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 141417 | +| `file` | *Optional[str]* | :heavy_minus_sign: | N/A | /movies/Serenity (2005)/Serenity (2005).mp4 | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 40271948 | +| `audio_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | lc | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mp4 | +| `has64bit_offsets` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `optimized_for_streaming` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | high | +| `stream` | List[[operations.Stream](../../models/operations/stream.md)] | :heavy_minus_sign: | N/A | [{"bitDepth":8,"bitrate":128,"channels":2,"chromaLocation":"left","chromaSubsampling":14520,"codec":"aac","codedHeight":816,"codedWidth":1920,"colorPrimaries":"bt709","colorRange":"tv","colorSpace":"bt709","colorTrc":"bt709","default":true,"displayTitle":"English (AAC Stereo)","extendedDisplayTitle":"English (AAC Stereo)","frameRate":24,"hasScalingMatrix":false,"height":814,"id":29,"index":0,"language":"English","languageCode":"eng","languageTag":"en","level":40,"profile":"lc","refFrames":4,"samplingRate":44100,"scanType":"progressive","selected":true,"streamIdentifier":"1","streamType":2,"width":1920}] | \ No newline at end of file diff --git a/docs/models/operations/getmetadatarequest.md b/docs/models/operations/getmetadatarequest.md new file mode 100644 index 0000000..b2761e6 --- /dev/null +++ b/docs/models/operations/getmetadatarequest.md @@ -0,0 +1,8 @@ +# GetMetadataRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `rating_key` | *float* | :heavy_check_mark: | the id of the library item to return the children of. | \ No newline at end of file diff --git a/docs/models/operations/getmetadataresponse.md b/docs/models/operations/getmetadataresponse.md new file mode 100644 index 0000000..0e88ed4 --- /dev/null +++ b/docs/models/operations/getmetadataresponse.md @@ -0,0 +1,11 @@ +# GetMetadataResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetMetadataResponseBody]](../../models/operations/getmetadataresponsebody.md) | :heavy_minus_sign: | The metadata of the library item. | \ No newline at end of file diff --git a/docs/models/operations/getmetadataresponsebody.md b/docs/models/operations/getmetadataresponsebody.md new file mode 100644 index 0000000..1cf0367 --- /dev/null +++ b/docs/models/operations/getmetadataresponsebody.md @@ -0,0 +1,10 @@ +# GetMetadataResponseBody + +The metadata of the library item. + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `media_container` | [Optional[operations.GetMetadataMediaContainer]](../../models/operations/getmetadatamediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getmetadatarole.md b/docs/models/operations/getmetadatarole.md new file mode 100644 index 0000000..fb7d5da --- /dev/null +++ b/docs/models/operations/getmetadatarole.md @@ -0,0 +1,13 @@ +# GetMetadataRole + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 220 | +| `filter_` | *Optional[str]* | :heavy_minus_sign: | N/A | actor=220 | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Dennis Keiffer | +| `tag_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 5d77683554f42c001f8c4708 | +| `role` | *Optional[str]* | :heavy_minus_sign: | N/A | Bar Guy (uncredited) | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | https://metadata-static.plex.tv/6/people/648e9a7ea1d537bccfcd7615134b78ce.jpg | \ No newline at end of file diff --git a/docs/models/operations/getmetadatawriter.md b/docs/models/operations/getmetadatawriter.md new file mode 100644 index 0000000..b2bcc5f --- /dev/null +++ b/docs/models/operations/getmetadatawriter.md @@ -0,0 +1,12 @@ +# GetMetadataWriter + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 132 | +| `filter_` | *Optional[str]* | :heavy_minus_sign: | N/A | writer=132 | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Joss Whedon | +| `tag_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 5d776828880197001ec90e8f | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | https://metadata-static.plex.tv/people/5d776828880197001ec90e8f.jpg | \ No newline at end of file diff --git a/docs/models/operations/getmyplexaccountresponse.md b/docs/models/operations/getmyplexaccountresponse.md new file mode 100644 index 0000000..74dfeb3 --- /dev/null +++ b/docs/models/operations/getmyplexaccountresponse.md @@ -0,0 +1,11 @@ +# GetMyPlexAccountResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetMyPlexAccountResponseBody]](../../models/operations/getmyplexaccountresponsebody.md) | :heavy_minus_sign: | MyPlex Account | \ No newline at end of file diff --git a/docs/models/operations/getmyplexaccountresponsebody.md b/docs/models/operations/getmyplexaccountresponsebody.md new file mode 100644 index 0000000..6d8c8bc --- /dev/null +++ b/docs/models/operations/getmyplexaccountresponsebody.md @@ -0,0 +1,10 @@ +# GetMyPlexAccountResponseBody + +MyPlex Account + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `my_plex` | [Optional[operations.MyPlex]](../../models/operations/myplex.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getondeckguids.md b/docs/models/operations/getondeckguids.md new file mode 100644 index 0000000..6ff69a3 --- /dev/null +++ b/docs/models/operations/getondeckguids.md @@ -0,0 +1,8 @@ +# GetOnDeckGuids + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | imdb://tt13303712 | \ No newline at end of file diff --git a/docs/models/operations/getondeckmedia.md b/docs/models/operations/getondeckmedia.md new file mode 100644 index 0000000..5a3eb0d --- /dev/null +++ b/docs/models/operations/getondeckmedia.md @@ -0,0 +1,22 @@ +# GetOnDeckMedia + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | -------------------------------------------------------------------------- | +| `id` | *Optional[float]* | :heavy_minus_sign: | N/A | 80994 | +| `duration` | *Optional[float]* | :heavy_minus_sign: | N/A | 420080 | +| `bitrate` | *Optional[float]* | :heavy_minus_sign: | N/A | 1046 | +| `width` | *Optional[float]* | :heavy_minus_sign: | N/A | 1920 | +| `height` | *Optional[float]* | :heavy_minus_sign: | N/A | 1080 | +| `aspect_ratio` | *Optional[float]* | :heavy_minus_sign: | N/A | 1.78 | +| `audio_channels` | *Optional[float]* | :heavy_minus_sign: | N/A | 2 | +| `audio_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | aac | +| `video_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | hevc | +| `video_resolution` | *Optional[str]* | :heavy_minus_sign: | N/A | 1080 | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mkv | +| `video_frame_rate` | *Optional[str]* | :heavy_minus_sign: | N/A | PAL | +| `audio_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | lc | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | main | +| `part` | List[[operations.GetOnDeckPart](../../models/operations/getondeckpart.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getondeckmediacontainer.md b/docs/models/operations/getondeckmediacontainer.md new file mode 100644 index 0000000..555c2bf --- /dev/null +++ b/docs/models/operations/getondeckmediacontainer.md @@ -0,0 +1,14 @@ +# GetOnDeckMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 16 | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library | +| `media_tag_prefix` | *Optional[str]* | :heavy_minus_sign: | N/A | /system/bundle/media/flags/ | +| `media_tag_version` | *Optional[float]* | :heavy_minus_sign: | N/A | 1680021154 | +| `mixed_parents` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `metadata` | List[[operations.GetOnDeckMetadata](../../models/operations/getondeckmetadata.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getondeckmetadata.md b/docs/models/operations/getondeckmetadata.md new file mode 100644 index 0000000..46a115e --- /dev/null +++ b/docs/models/operations/getondeckmetadata.md @@ -0,0 +1,43 @@ +# GetOnDeckMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `library_section_id` | *Optional[float]* | :heavy_minus_sign: | N/A | 2 | +| `library_section_title` | *Optional[str]* | :heavy_minus_sign: | N/A | TV Shows | +| `library_section_uuid` | *Optional[str]* | :heavy_minus_sign: | N/A | 4bb2521c-8ba9-459b-aaee-8ab8bc35eabd | +| `rating_key` | *Optional[float]* | :heavy_minus_sign: | N/A | 49564 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/49564 | +| `parent_rating_key` | *Optional[float]* | :heavy_minus_sign: | N/A | 49557 | +| `grandparent_rating_key` | *Optional[float]* | :heavy_minus_sign: | N/A | 49556 | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://episode/5ea7d7402e7ab10042e74d4f | +| `parent_guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://season/602e754d67f4c8002ce54b3d | +| `grandparent_guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://show/5d9c090e705e7a001e6e94d8 | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | episode | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Circus | +| `grandparent_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/49556 | +| `parent_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/49557 | +| `library_section_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/sections/2 | +| `grandparent_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Bluey (2018) | +| `parent_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Season 2 | +| `content_rating` | *Optional[str]* | :heavy_minus_sign: | N/A | TV-Y | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | Bluey is the ringmaster in a game of circus with her friends but Hercules wants to play his motorcycle game instead. Luckily Bluey has a solution to keep everyone happy. | +| `index` | *Optional[float]* | :heavy_minus_sign: | N/A | 33 | +| `parent_index` | *Optional[float]* | :heavy_minus_sign: | N/A | 2 | +| `last_viewed_at` | *Optional[float]* | :heavy_minus_sign: | N/A | 1681908352 | +| `year` | *Optional[float]* | :heavy_minus_sign: | N/A | 2018 | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/49564/thumb/1654258204 | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/49556/art/1680939546 | +| `parent_thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/49557/thumb/1654258204 | +| `grandparent_thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/49556/thumb/1680939546 | +| `grandparent_art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/49556/art/1680939546 | +| `grandparent_theme` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/49556/theme/1680939546 | +| `duration` | *Optional[float]* | :heavy_minus_sign: | N/A | 420080 | +| `originally_available_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | 2020-10-31 00:00:00 +0000 UTC | +| `added_at` | *Optional[float]* | :heavy_minus_sign: | N/A | 1654258196 | +| `updated_at` | *Optional[float]* | :heavy_minus_sign: | N/A | 1654258204 | +| `media` | List[[operations.GetOnDeckMedia](../../models/operations/getondeckmedia.md)] | :heavy_minus_sign: | N/A | | +| `guids` | List[[operations.GetOnDeckGuids](../../models/operations/getondeckguids.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getondeckpart.md b/docs/models/operations/getondeckpart.md new file mode 100644 index 0000000..76d7ca5 --- /dev/null +++ b/docs/models/operations/getondeckpart.md @@ -0,0 +1,16 @@ +# GetOnDeckPart + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `id` | *Optional[float]* | :heavy_minus_sign: | N/A | 80994 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/parts/80994/1655007810/file.mkv | +| `duration` | *Optional[float]* | :heavy_minus_sign: | N/A | 420080 | +| `file` | *Optional[str]* | :heavy_minus_sign: | N/A | /tvshows/Bluey (2018)/Bluey (2018) - S02E33 - Circus.mkv | +| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 55148931 | +| `audio_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | lc | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mkv | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | main | +| `stream` | List[[operations.GetOnDeckStream](../../models/operations/getondeckstream.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getondeckresponse.md b/docs/models/operations/getondeckresponse.md new file mode 100644 index 0000000..243d9a8 --- /dev/null +++ b/docs/models/operations/getondeckresponse.md @@ -0,0 +1,11 @@ +# GetOnDeckResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetOnDeckResponseBody]](../../models/operations/getondeckresponsebody.md) | :heavy_minus_sign: | The on Deck content | \ No newline at end of file diff --git a/docs/models/operations/getondeckresponsebody.md b/docs/models/operations/getondeckresponsebody.md new file mode 100644 index 0000000..752ae00 --- /dev/null +++ b/docs/models/operations/getondeckresponsebody.md @@ -0,0 +1,10 @@ +# GetOnDeckResponseBody + +The on Deck content + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetOnDeckMediaContainer]](../../models/operations/getondeckmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getondeckstream.md b/docs/models/operations/getondeckstream.md new file mode 100644 index 0000000..e3ef198 --- /dev/null +++ b/docs/models/operations/getondeckstream.md @@ -0,0 +1,30 @@ +# GetOnDeckStream + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `id` | *Optional[float]* | :heavy_minus_sign: | N/A | 211234 | +| `stream_type` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 | +| `default` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `codec` | *Optional[str]* | :heavy_minus_sign: | N/A | hevc | +| `index` | *Optional[float]* | :heavy_minus_sign: | N/A | 0 | +| `bitrate` | *Optional[float]* | :heavy_minus_sign: | N/A | 918 | +| `language` | *Optional[str]* | :heavy_minus_sign: | N/A | English | +| `language_tag` | *Optional[str]* | :heavy_minus_sign: | N/A | en | +| `language_code` | *Optional[str]* | :heavy_minus_sign: | N/A | eng | +| `bit_depth` | *Optional[float]* | :heavy_minus_sign: | N/A | 8 | +| `chroma_location` | *Optional[str]* | :heavy_minus_sign: | N/A | left | +| `chroma_subsampling` | *Optional[str]* | :heavy_minus_sign: | N/A | 4:2:0 | +| `coded_height` | *Optional[float]* | :heavy_minus_sign: | N/A | 1080 | +| `coded_width` | *Optional[float]* | :heavy_minus_sign: | N/A | 1920 | +| `color_range` | *Optional[str]* | :heavy_minus_sign: | N/A | tv | +| `frame_rate` | *Optional[float]* | :heavy_minus_sign: | N/A | 25 | +| `height` | *Optional[float]* | :heavy_minus_sign: | N/A | 1080 | +| `level` | *Optional[float]* | :heavy_minus_sign: | N/A | 120 | +| `profile` | *Optional[str]* | :heavy_minus_sign: | N/A | main | +| `ref_frames` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 | +| `width` | *Optional[float]* | :heavy_minus_sign: | N/A | 1920 | +| `display_title` | *Optional[str]* | :heavy_minus_sign: | N/A | 1080p (HEVC Main) | +| `extended_display_title` | *Optional[str]* | :heavy_minus_sign: | N/A | 1080p (HEVC Main) | \ No newline at end of file diff --git a/docs/models/operations/getpinrequest.md b/docs/models/operations/getpinrequest.md new file mode 100644 index 0000000..0bd6e4b --- /dev/null +++ b/docs/models/operations/getpinrequest.md @@ -0,0 +1,9 @@ +# GetPinRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| `x_plex_client_identifier` | *str* | :heavy_check_mark: | Plex Authentication Token | +| `strong` | *Optional[bool]* | :heavy_minus_sign: | Determines the kind of code returned by the API call
Strong codes are used for Pin authentication flows
Non-Strong codes are used for `Plex.tv/link`
| \ No newline at end of file diff --git a/docs/models/operations/getpinresponse.md b/docs/models/operations/getpinresponse.md new file mode 100644 index 0000000..7d0f69d --- /dev/null +++ b/docs/models/operations/getpinresponse.md @@ -0,0 +1,11 @@ +# GetPinResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetPinResponseBody]](../../models/operations/getpinresponsebody.md) | :heavy_minus_sign: | The Pin | \ No newline at end of file diff --git a/docs/models/operations/getpinresponsebody.md b/docs/models/operations/getpinresponsebody.md new file mode 100644 index 0000000..d43e096 --- /dev/null +++ b/docs/models/operations/getpinresponsebody.md @@ -0,0 +1,21 @@ +# GetPinResponseBody + +The Pin + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *Optional[float]* | :heavy_minus_sign: | PinID for use with authentication | 1272322473 | +| `code` | *Optional[str]* | :heavy_minus_sign: | N/A | 3patfx1a78ukcbr7x0n9bl26t | +| `product` | *Optional[str]* | :heavy_minus_sign: | N/A | Plex Web | +| `trusted` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `qr` | *Optional[str]* | :heavy_minus_sign: | a link to a QR code hosted on plex.tv
The QR code redirects to the relevant `plex.tv/link` authentication page
Which then prompts the user for the 4 Digit Link Pin
| https://plex.tv/api/v2/pins/qr/3patfx1a78ukcbr7x0n9bl26t | +| `client_identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | Postman | +| `location` | [Optional[operations.Location]](../../models/operations/location.md) | :heavy_minus_sign: | N/A | | +| `expires_in` | *Optional[float]* | :heavy_minus_sign: | N/A | 1800 | +| `created_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | 2023-04-12 17:00:03 +0000 UTC | +| `expires_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | 2023-04-12 17:30:03 +0000 UTC | +| `auth_token` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `new_registration` | *Optional[str]* | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getplaylistcontentscountry.md b/docs/models/operations/getplaylistcontentscountry.md new file mode 100644 index 0000000..121737c --- /dev/null +++ b/docs/models/operations/getplaylistcontentscountry.md @@ -0,0 +1,8 @@ +# GetPlaylistContentsCountry + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | United States of America | \ No newline at end of file diff --git a/docs/models/operations/getplaylistcontentsdirector.md b/docs/models/operations/getplaylistcontentsdirector.md new file mode 100644 index 0000000..7f0a228 --- /dev/null +++ b/docs/models/operations/getplaylistcontentsdirector.md @@ -0,0 +1,8 @@ +# GetPlaylistContentsDirector + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Joss Whedon | \ No newline at end of file diff --git a/docs/models/operations/getplaylistcontentsgenre.md b/docs/models/operations/getplaylistcontentsgenre.md new file mode 100644 index 0000000..47acf28 --- /dev/null +++ b/docs/models/operations/getplaylistcontentsgenre.md @@ -0,0 +1,8 @@ +# GetPlaylistContentsGenre + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Action | \ No newline at end of file diff --git a/docs/models/operations/getplaylistcontentsmedia.md b/docs/models/operations/getplaylistcontentsmedia.md new file mode 100644 index 0000000..5b61f01 --- /dev/null +++ b/docs/models/operations/getplaylistcontentsmedia.md @@ -0,0 +1,24 @@ +# GetPlaylistContentsMedia + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 15 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 141416 | +| `bitrate` | *Optional[int]* | :heavy_minus_sign: | N/A | 2273 | +| `width` | *Optional[int]* | :heavy_minus_sign: | N/A | 1920 | +| `height` | *Optional[int]* | :heavy_minus_sign: | N/A | 814 | +| `aspect_ratio` | *Optional[float]* | :heavy_minus_sign: | N/A | 2.35 | +| `audio_channels` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `audio_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | aac | +| `video_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | h264 | +| `video_resolution` | *Optional[str]* | :heavy_minus_sign: | N/A | 1080 | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mp4 | +| `video_frame_rate` | *Optional[str]* | :heavy_minus_sign: | N/A | 24p | +| `optimized_for_streaming` | *Optional[int]* | :heavy_minus_sign: | N/A | 0 | +| `audio_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | lc | +| `has64bit_offsets` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | high | +| `part` | List[[operations.GetPlaylistContentsPart](../../models/operations/getplaylistcontentspart.md)] | :heavy_minus_sign: | N/A | [{"audioProfile":"lc","container":"mp4","duration":141416,"file":"/movies/Serenity (2005)/Serenity (2005).mp4","has64bitOffsets":false,"id":15,"key":"/library/parts/15/1705637151/file.mp4","optimizedForStreaming":false,"size":40271948,"videoProfile":"high"}] | \ No newline at end of file diff --git a/docs/models/operations/getplaylistcontentsmediacontainer.md b/docs/models/operations/getplaylistcontentsmediacontainer.md new file mode 100644 index 0000000..abb0bc9 --- /dev/null +++ b/docs/models/operations/getplaylistcontentsmediacontainer.md @@ -0,0 +1,16 @@ +# GetPlaylistContentsMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `composite` | *Optional[str]* | :heavy_minus_sign: | N/A | /playlists/95/composite/1705717521 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 282 | +| `leaf_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `playlist_type` | *Optional[str]* | :heavy_minus_sign: | N/A | video | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 95 | +| `smart` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Smart Movie Playlist | +| `metadata` | List[[operations.GetPlaylistContentsMetadata](../../models/operations/getplaylistcontentsmetadata.md)] | :heavy_minus_sign: | N/A | [{"Country":[{"tag":"United States of America"}],"Director":[{"tag":"Joss Whedon"}],"Genre":[{"tag":"Science Fiction"}],"Media":[{"Part":[{"audioProfile":"lc","container":"mp4","duration":141416,"file":"/movies/Serenity (2005)/Serenity (2005).mp4","has64bitOffsets":false,"id":15,"key":"/library/parts/15/1705637151/file.mp4","optimizedForStreaming":false,"size":40271948,"videoProfile":"high"}],"aspectRatio":2.35,"audioChannels":2,"audioCodec":"aac","audioProfile":"lc","bitrate":2273,"container":"mp4","duration":141416,"has64bitOffsets":false,"height":814,"id":15,"optimizedForStreaming":0,"videoCodec":"h264","videoFrameRate":"24p","videoProfile":"high","videoResolution":"1080","width":1920}],"Role":[{"tag":"Nathan Fillion"}],"Writer":[{"tag":"Joss Whedon"}],"addedAt":1705637164,"art":"/library/metadata/17/art/1705637165","audienceRating":9.1,"audienceRatingImage":"rottentomatoes://image.rating.upright","contentRating":"PG-13","duration":141416,"guid":"plex://movie/5d77683f6f4521001ea9dc53","hasPremiumExtras":"1","hasPremiumPrimaryExtra":"1","key":"/library/metadata/17","librarySectionID":1,"librarySectionKey":"/library/sections/1","librarySectionTitle":"Movies","originallyAvailableAt":"2005-09-29T00:00:00Z","rating":8.2,"ratingImage":"rottentomatoes://image.rating.ripe","ratingKey":"17","studio":"Universal Pictures","summary":"Serenity continues the story of the TV series it was based upon (\"Firefly\"). River Tam had a secret - one in which she's not even aware - so dangerous, no one's safe, as an Alliance operative's sent to capture her, and all others are considered irrelevant to his job.","tagline":"They aim to misbehave.","thumb":"/library/metadata/17/thumb/1705637165","title":"Serenity","titleSort":"Amazing Spider-Man 2","type":"movie","updatedAt":1705637165,"year":2005}] | \ No newline at end of file diff --git a/docs/models/operations/getplaylistcontentsmetadata.md b/docs/models/operations/getplaylistcontentsmetadata.md new file mode 100644 index 0000000..80a50e7 --- /dev/null +++ b/docs/models/operations/getplaylistcontentsmetadata.md @@ -0,0 +1,39 @@ +# GetPlaylistContentsMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 17 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/17 | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://movie/5d77683f6f4521001ea9dc53 | +| `studio` | *Optional[str]* | :heavy_minus_sign: | N/A | Universal Pictures | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | movie | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Serenity | +| `title_sort` | *Optional[str]* | :heavy_minus_sign: | N/A | Amazing Spider-Man 2 | +| `library_section_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Movies | +| `library_section_id` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `library_section_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/sections/1 | +| `content_rating` | *Optional[str]* | :heavy_minus_sign: | N/A | PG-13 | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | Serenity continues the story of the TV series it was based upon ("Firefly"). River Tam had a secret - one in which she's not even aware - so dangerous, no one's safe, as an Alliance operative's sent to capture her, and all others are considered irrelevant to his job. | +| `rating` | *Optional[float]* | :heavy_minus_sign: | N/A | 8.2 | +| `audience_rating` | *Optional[float]* | :heavy_minus_sign: | N/A | 9.1 | +| `year` | *Optional[int]* | :heavy_minus_sign: | N/A | 2005 | +| `tagline` | *Optional[str]* | :heavy_minus_sign: | N/A | They aim to misbehave. | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/17/thumb/1705637165 | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/17/art/1705637165 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 141416 | +| `originally_available_at` | [datetime](https://docs.python.org/3/library/datetime.html#datetime-objects) | :heavy_minus_sign: | N/A | 2005-09-29 00:00:00 +0000 UTC | +| `added_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705637164 | +| `updated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705637165 | +| `audience_rating_image` | *Optional[str]* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.upright | +| `has_premium_extras` | *Optional[str]* | :heavy_minus_sign: | N/A | 1 | +| `has_premium_primary_extra` | *Optional[str]* | :heavy_minus_sign: | N/A | 1 | +| `rating_image` | *Optional[str]* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.ripe | +| `media` | List[[operations.GetPlaylistContentsMedia](../../models/operations/getplaylistcontentsmedia.md)] | :heavy_minus_sign: | N/A | [{"Part":[{"audioProfile":"lc","container":"mp4","duration":141416,"file":"/movies/Serenity (2005)/Serenity (2005).mp4","has64bitOffsets":false,"id":15,"key":"/library/parts/15/1705637151/file.mp4","optimizedForStreaming":false,"size":40271948,"videoProfile":"high"}],"aspectRatio":2.35,"audioChannels":2,"audioCodec":"aac","audioProfile":"lc","bitrate":2273,"container":"mp4","duration":141416,"has64bitOffsets":false,"height":814,"id":15,"optimizedForStreaming":0,"videoCodec":"h264","videoFrameRate":"24p","videoProfile":"high","videoResolution":"1080","width":1920}] | +| `genre` | List[[operations.GetPlaylistContentsGenre](../../models/operations/getplaylistcontentsgenre.md)] | :heavy_minus_sign: | N/A | [{"tag":"Action"}] | +| `country` | List[[operations.GetPlaylistContentsCountry](../../models/operations/getplaylistcontentscountry.md)] | :heavy_minus_sign: | N/A | [{"tag":"United States of America"}] | +| `director` | List[[operations.GetPlaylistContentsDirector](../../models/operations/getplaylistcontentsdirector.md)] | :heavy_minus_sign: | N/A | [{"tag":"Joss Whedon"}] | +| `writer` | List[[operations.GetPlaylistContentsWriter](../../models/operations/getplaylistcontentswriter.md)] | :heavy_minus_sign: | N/A | [{"tag":"Joss Whedon"}] | +| `role` | List[[operations.GetPlaylistContentsRole](../../models/operations/getplaylistcontentsrole.md)] | :heavy_minus_sign: | N/A | [{"tag":"Gina Torres"}] | \ No newline at end of file diff --git a/docs/models/operations/getplaylistcontentspart.md b/docs/models/operations/getplaylistcontentspart.md new file mode 100644 index 0000000..f65861f --- /dev/null +++ b/docs/models/operations/getplaylistcontentspart.md @@ -0,0 +1,17 @@ +# GetPlaylistContentsPart + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | ------------------------------------------- | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 15 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/parts/15/1705637151/file.mp4 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 141416 | +| `file` | *Optional[str]* | :heavy_minus_sign: | N/A | /movies/Serenity (2005)/Serenity (2005).mp4 | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 40271948 | +| `audio_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | lc | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mp4 | +| `has64bit_offsets` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `optimized_for_streaming` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | high | \ No newline at end of file diff --git a/docs/models/operations/getplaylistcontentsrequest.md b/docs/models/operations/getplaylistcontentsrequest.md new file mode 100644 index 0000000..b5240cb --- /dev/null +++ b/docs/models/operations/getplaylistcontentsrequest.md @@ -0,0 +1,9 @@ +# GetPlaylistContentsRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- | +| `playlist_id` | *float* | :heavy_check_mark: | the ID of the playlist | +| `type` | *float* | :heavy_check_mark: | the metadata type of the item to return | \ No newline at end of file diff --git a/docs/models/operations/getplaylistcontentsresponse.md b/docs/models/operations/getplaylistcontentsresponse.md new file mode 100644 index 0000000..d498734 --- /dev/null +++ b/docs/models/operations/getplaylistcontentsresponse.md @@ -0,0 +1,11 @@ +# GetPlaylistContentsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetPlaylistContentsResponseBody]](../../models/operations/getplaylistcontentsresponsebody.md) | :heavy_minus_sign: | The playlist contents | \ No newline at end of file diff --git a/docs/models/operations/getplaylistcontentsresponsebody.md b/docs/models/operations/getplaylistcontentsresponsebody.md new file mode 100644 index 0000000..dbe6fb9 --- /dev/null +++ b/docs/models/operations/getplaylistcontentsresponsebody.md @@ -0,0 +1,10 @@ +# GetPlaylistContentsResponseBody + +The playlist contents + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetPlaylistContentsMediaContainer]](../../models/operations/getplaylistcontentsmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getplaylistcontentsrole.md b/docs/models/operations/getplaylistcontentsrole.md new file mode 100644 index 0000000..a3ecea1 --- /dev/null +++ b/docs/models/operations/getplaylistcontentsrole.md @@ -0,0 +1,8 @@ +# GetPlaylistContentsRole + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Gina Torres | \ No newline at end of file diff --git a/docs/models/operations/getplaylistcontentswriter.md b/docs/models/operations/getplaylistcontentswriter.md new file mode 100644 index 0000000..c57cdb7 --- /dev/null +++ b/docs/models/operations/getplaylistcontentswriter.md @@ -0,0 +1,8 @@ +# GetPlaylistContentsWriter + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Joss Whedon | \ No newline at end of file diff --git a/docs/models/operations/getplaylistmediacontainer.md b/docs/models/operations/getplaylistmediacontainer.md new file mode 100644 index 0000000..e70f358 --- /dev/null +++ b/docs/models/operations/getplaylistmediacontainer.md @@ -0,0 +1,9 @@ +# GetPlaylistMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `metadata` | List[[operations.GetPlaylistMetadata](../../models/operations/getplaylistmetadata.md)] | :heavy_minus_sign: | N/A | [{"addedAt":1705716493,"composite":"/playlists/95/composite/1705717387","content":"library://x/directory/%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1%26push%3D1%26title%3D2%26or%3D1%26title%3DSerenity%26pop%3D1","duration":282000,"guid":"com.plexapp.agents.none://87425529-380f-44b8-a689-9a0537e7ec91","icon":"playlist://image.smart","key":"/playlists/95/items","leafCount":2,"playlistType":"video","ratingKey":"95","smart":true,"summary":"","title":"Smart Movie Playlist","type":"playlist","updatedAt":1705717387}] | \ No newline at end of file diff --git a/docs/models/operations/getplaylistmetadata.md b/docs/models/operations/getplaylistmetadata.md new file mode 100644 index 0000000..f4b4d43 --- /dev/null +++ b/docs/models/operations/getplaylistmetadata.md @@ -0,0 +1,22 @@ +# GetPlaylistMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | +| `content` | *Optional[str]* | :heavy_minus_sign: | N/A | library://x/directory/%2Flibrary%2Fsections%2F1%2Fall%3Ftype%3D1%26push%3D1%26title%3D2%26or%3D1%26title%3DSerenity%26pop%3D1 | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 95 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /playlists/95/items | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.agents.none://87425529-380f-44b8-a689-9a0537e7ec91 | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | playlist | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Smart Movie Playlist | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `smart` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `playlist_type` | *Optional[str]* | :heavy_minus_sign: | N/A | video | +| `composite` | *Optional[str]* | :heavy_minus_sign: | N/A | /playlists/95/composite/1705717387 | +| `icon` | *Optional[str]* | :heavy_minus_sign: | N/A | playlist://image.smart | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 282000 | +| `leaf_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `added_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705716493 | +| `updated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705717387 | \ No newline at end of file diff --git a/docs/models/operations/getplaylistrequest.md b/docs/models/operations/getplaylistrequest.md new file mode 100644 index 0000000..8499a15 --- /dev/null +++ b/docs/models/operations/getplaylistrequest.md @@ -0,0 +1,8 @@ +# GetPlaylistRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------- | ---------------------- | ---------------------- | ---------------------- | +| `playlist_id` | *float* | :heavy_check_mark: | the ID of the playlist | \ No newline at end of file diff --git a/docs/models/operations/getplaylistresponse.md b/docs/models/operations/getplaylistresponse.md new file mode 100644 index 0000000..5b6b372 --- /dev/null +++ b/docs/models/operations/getplaylistresponse.md @@ -0,0 +1,11 @@ +# GetPlaylistResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetPlaylistResponseBody]](../../models/operations/getplaylistresponsebody.md) | :heavy_minus_sign: | The playlist | \ No newline at end of file diff --git a/docs/models/operations/getplaylistresponsebody.md b/docs/models/operations/getplaylistresponsebody.md new file mode 100644 index 0000000..57839cb --- /dev/null +++ b/docs/models/operations/getplaylistresponsebody.md @@ -0,0 +1,10 @@ +# GetPlaylistResponseBody + +The playlist + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `media_container` | [Optional[operations.GetPlaylistMediaContainer]](../../models/operations/getplaylistmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getplaylistsmediacontainer.md b/docs/models/operations/getplaylistsmediacontainer.md new file mode 100644 index 0000000..505f511 --- /dev/null +++ b/docs/models/operations/getplaylistsmediacontainer.md @@ -0,0 +1,9 @@ +# GetPlaylistsMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 4 | +| `metadata` | List[[operations.GetPlaylistsMetadata](../../models/operations/getplaylistsmetadata.md)] | :heavy_minus_sign: | N/A | [{"addedAt":1705716298,"composite":"/playlists/92/composite/1705716440","duration":7328000,"guid":"com.plexapp.agents.none://7ca5aaef-58e8-4828-9e21-c009c97f2903","icon":"playlist://image.smart","key":"/playlists/92/items","lastViewedAt":1705716298,"leafCount":32,"playlistType":"video","ratingKey":"92","smart":false,"summary":"A Great Playlist","title":"Static Playlist","type":"playlist","updatedAt":1705716440,"viewCount":1}] | \ No newline at end of file diff --git a/docs/models/operations/getplaylistsmetadata.md b/docs/models/operations/getplaylistsmetadata.md new file mode 100644 index 0000000..9f6f656 --- /dev/null +++ b/docs/models/operations/getplaylistsmetadata.md @@ -0,0 +1,23 @@ +# GetPlaylistsMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------------------------------------------- | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 92 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /playlists/92/items | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.agents.none://7ca5aaef-58e8-4828-9e21-c009c97f2903 | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | playlist | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Static Playlist | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | A Great Playlist | +| `smart` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `playlist_type` | *Optional[str]* | :heavy_minus_sign: | N/A | video | +| `composite` | *Optional[str]* | :heavy_minus_sign: | N/A | /playlists/92/composite/1705716440 | +| `icon` | *Optional[str]* | :heavy_minus_sign: | N/A | playlist://image.smart | +| `view_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `last_viewed_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705716298 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 7328000 | +| `leaf_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 32 | +| `added_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705716298 | +| `updated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705716440 | \ No newline at end of file diff --git a/docs/models/operations/getplaylistsrequest.md b/docs/models/operations/getplaylistsrequest.md new file mode 100644 index 0000000..b8d0c05 --- /dev/null +++ b/docs/models/operations/getplaylistsrequest.md @@ -0,0 +1,9 @@ +# GetPlaylistsRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `playlist_type` | [Optional[operations.PlaylistType]](../../models/operations/playlisttype.md) | :heavy_minus_sign: | limit to a type of playlist. | +| `smart` | [Optional[operations.QueryParamSmart]](../../models/operations/queryparamsmart.md) | :heavy_minus_sign: | type of playlists to return (default is all). | \ No newline at end of file diff --git a/docs/models/operations/getplaylistsresponse.md b/docs/models/operations/getplaylistsresponse.md new file mode 100644 index 0000000..254eb4a --- /dev/null +++ b/docs/models/operations/getplaylistsresponse.md @@ -0,0 +1,11 @@ +# GetPlaylistsResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetPlaylistsResponseBody]](../../models/operations/getplaylistsresponsebody.md) | :heavy_minus_sign: | returns all playlists | \ No newline at end of file diff --git a/docs/models/operations/getplaylistsresponsebody.md b/docs/models/operations/getplaylistsresponsebody.md new file mode 100644 index 0000000..e812345 --- /dev/null +++ b/docs/models/operations/getplaylistsresponsebody.md @@ -0,0 +1,10 @@ +# GetPlaylistsResponseBody + +returns all playlists + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetPlaylistsMediaContainer]](../../models/operations/getplaylistsmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getrecentlyaddedmediacontainer.md b/docs/models/operations/getrecentlyaddedmediacontainer.md new file mode 100644 index 0000000..bf28a57 --- /dev/null +++ b/docs/models/operations/getrecentlyaddedmediacontainer.md @@ -0,0 +1,14 @@ +# GetRecentlyAddedMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 50 | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library | +| `media_tag_prefix` | *Optional[str]* | :heavy_minus_sign: | N/A | /system/bundle/media/flags/ | +| `media_tag_version` | *Optional[float]* | :heavy_minus_sign: | N/A | 1680021154 | +| `mixed_parents` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `metadata` | List[[operations.Metadata](../../models/operations/metadata.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getrecentlyaddedresponse.md b/docs/models/operations/getrecentlyaddedresponse.md new file mode 100644 index 0000000..8794c6f --- /dev/null +++ b/docs/models/operations/getrecentlyaddedresponse.md @@ -0,0 +1,11 @@ +# GetRecentlyAddedResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetRecentlyAddedResponseBody]](../../models/operations/getrecentlyaddedresponsebody.md) | :heavy_minus_sign: | The recently added content | \ No newline at end of file diff --git a/docs/models/operations/getrecentlyaddedresponsebody.md b/docs/models/operations/getrecentlyaddedresponsebody.md new file mode 100644 index 0000000..57c2b51 --- /dev/null +++ b/docs/models/operations/getrecentlyaddedresponsebody.md @@ -0,0 +1,10 @@ +# GetRecentlyAddedResponseBody + +The recently added content + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetRecentlyAddedMediaContainer]](../../models/operations/getrecentlyaddedmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getresizedphotorequest.md b/docs/models/operations/getresizedphotorequest.md new file mode 100644 index 0000000..4e19f6c --- /dev/null +++ b/docs/models/operations/getresizedphotorequest.md @@ -0,0 +1,14 @@ +# GetResizedPhotoRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `width` | *float* | :heavy_check_mark: | The width for the resized photo | 110 | +| `height` | *float* | :heavy_check_mark: | The height for the resized photo | 165 | +| `opacity` | *int* | :heavy_check_mark: | The opacity for the resized photo | | +| `blur` | *float* | :heavy_check_mark: | The width for the resized photo | 0 | +| `min_size` | [operations.MinSize](../../models/operations/minsize.md) | :heavy_check_mark: | images are always scaled proportionally. A value of '1' in minSize will make the smaller native dimension the dimension resized against. | | +| `upscale` | [operations.Upscale](../../models/operations/upscale.md) | :heavy_check_mark: | allow images to be resized beyond native dimensions. | | +| `url` | *str* | :heavy_check_mark: | path to image within Plex | /library/metadata/49564/thumb/1654258204 | \ No newline at end of file diff --git a/docs/models/operations/getresizedphotoresponse.md b/docs/models/operations/getresizedphotoresponse.md new file mode 100644 index 0000000..33a3ee9 --- /dev/null +++ b/docs/models/operations/getresizedphotoresponse.md @@ -0,0 +1,10 @@ +# GetResizedPhotoResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/getsearchresultscountry.md b/docs/models/operations/getsearchresultscountry.md new file mode 100644 index 0000000..855a19f --- /dev/null +++ b/docs/models/operations/getsearchresultscountry.md @@ -0,0 +1,8 @@ +# GetSearchResultsCountry + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | United States of America | \ No newline at end of file diff --git a/docs/models/operations/getsearchresultsdirector.md b/docs/models/operations/getsearchresultsdirector.md new file mode 100644 index 0000000..5576acd --- /dev/null +++ b/docs/models/operations/getsearchresultsdirector.md @@ -0,0 +1,8 @@ +# GetSearchResultsDirector + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Brian De Palma | \ No newline at end of file diff --git a/docs/models/operations/getsearchresultsgenre.md b/docs/models/operations/getsearchresultsgenre.md new file mode 100644 index 0000000..56cae67 --- /dev/null +++ b/docs/models/operations/getsearchresultsgenre.md @@ -0,0 +1,8 @@ +# GetSearchResultsGenre + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Action | \ No newline at end of file diff --git a/docs/models/operations/getsearchresultsmedia.md b/docs/models/operations/getsearchresultsmedia.md new file mode 100644 index 0000000..2fa8136 --- /dev/null +++ b/docs/models/operations/getsearchresultsmedia.md @@ -0,0 +1,22 @@ +# GetSearchResultsMedia + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| `id` | *Optional[float]* | :heavy_minus_sign: | N/A | 26610 | +| `duration` | *Optional[float]* | :heavy_minus_sign: | N/A | 6612628 | +| `bitrate` | *Optional[float]* | :heavy_minus_sign: | N/A | 4751 | +| `width` | *Optional[float]* | :heavy_minus_sign: | N/A | 1916 | +| `height` | *Optional[float]* | :heavy_minus_sign: | N/A | 796 | +| `aspect_ratio` | *Optional[float]* | :heavy_minus_sign: | N/A | 2.35 | +| `audio_channels` | *Optional[float]* | :heavy_minus_sign: | N/A | 6 | +| `audio_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | aac | +| `video_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | hevc | +| `video_resolution` | *Optional[float]* | :heavy_minus_sign: | N/A | 1080 | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mkv | +| `video_frame_rate` | *Optional[str]* | :heavy_minus_sign: | N/A | 24p | +| `audio_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | lc | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | main 10 | +| `part` | List[[operations.GetSearchResultsPart](../../models/operations/getsearchresultspart.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getsearchresultsmediacontainer.md b/docs/models/operations/getsearchresultsmediacontainer.md new file mode 100644 index 0000000..1916c2f --- /dev/null +++ b/docs/models/operations/getsearchresultsmediacontainer.md @@ -0,0 +1,13 @@ +# GetSearchResultsMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | +| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 26 | +| `identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library | +| `media_tag_prefix` | *Optional[str]* | :heavy_minus_sign: | N/A | /system/bundle/media/flags/ | +| `media_tag_version` | *Optional[float]* | :heavy_minus_sign: | N/A | 1680021154 | +| `metadata` | List[[operations.GetSearchResultsMetadata](../../models/operations/getsearchresultsmetadata.md)] | :heavy_minus_sign: | N/A | | +| `provider` | List[[operations.Provider](../../models/operations/provider.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getsearchresultsmetadata.md b/docs/models/operations/getsearchresultsmetadata.md new file mode 100644 index 0000000..7073ec0 --- /dev/null +++ b/docs/models/operations/getsearchresultsmetadata.md @@ -0,0 +1,41 @@ +# GetSearchResultsMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `library_section_id` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 | +| `library_section_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Movies | +| `library_section_uuid` | *Optional[str]* | :heavy_minus_sign: | N/A | 322a231a-b7f7-49f5-920f-14c61199cd30 | +| `personal` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `source_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Hera | +| `rating_key` | *Optional[float]* | :heavy_minus_sign: | N/A | 10398 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/10398 | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://movie/5d7768284de0ee001fcc8f52 | +| `studio` | *Optional[str]* | :heavy_minus_sign: | N/A | Paramount | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | movie | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Mission: Impossible | +| `content_rating` | *Optional[str]* | :heavy_minus_sign: | N/A | PG-13 | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | When Ethan Hunt the leader of a crack espionage team whose perilous operation has gone awry with no explanation discovers that a mole has penetrated the CIA he's surprised to learn that he's the No. 1 suspect. To clear his name Hunt now must ferret out the real double agent and in the process even the score. | +| `rating` | *Optional[float]* | :heavy_minus_sign: | N/A | 6.6 | +| `audience_rating` | *Optional[float]* | :heavy_minus_sign: | N/A | 7.1 | +| `year` | *Optional[float]* | :heavy_minus_sign: | N/A | 1996 | +| `tagline` | *Optional[str]* | :heavy_minus_sign: | N/A | Expect the impossible. | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/10398/thumb/1679505055 | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/10398/art/1679505055 | +| `duration` | *Optional[float]* | :heavy_minus_sign: | N/A | 6612628 | +| `originally_available_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | 1996-05-22 00:00:00 +0000 UTC | +| `added_at` | *Optional[float]* | :heavy_minus_sign: | N/A | 1589234571 | +| `updated_at` | *Optional[float]* | :heavy_minus_sign: | N/A | 1679505055 | +| `audience_rating_image` | *Optional[str]* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.upright | +| `chapter_source` | *Optional[str]* | :heavy_minus_sign: | N/A | media | +| `primary_extra_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/10501 | +| `rating_image` | *Optional[str]* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.ripe | +| `media` | List[[operations.GetSearchResultsMedia](../../models/operations/getsearchresultsmedia.md)] | :heavy_minus_sign: | N/A | | +| `genre` | List[[operations.GetSearchResultsGenre](../../models/operations/getsearchresultsgenre.md)] | :heavy_minus_sign: | N/A | | +| `director` | List[[operations.GetSearchResultsDirector](../../models/operations/getsearchresultsdirector.md)] | :heavy_minus_sign: | N/A | | +| `writer` | List[[operations.GetSearchResultsWriter](../../models/operations/getsearchresultswriter.md)] | :heavy_minus_sign: | N/A | | +| `country` | List[[operations.GetSearchResultsCountry](../../models/operations/getsearchresultscountry.md)] | :heavy_minus_sign: | N/A | | +| `role` | List[[operations.GetSearchResultsRole](../../models/operations/getsearchresultsrole.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getsearchresultspart.md b/docs/models/operations/getsearchresultspart.md new file mode 100644 index 0000000..8ca3a9f --- /dev/null +++ b/docs/models/operations/getsearchresultspart.md @@ -0,0 +1,15 @@ +# GetSearchResultsPart + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `id` | *Optional[float]* | :heavy_minus_sign: | N/A | 26610 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/parts/26610/1589234571/file.mkv | +| `duration` | *Optional[float]* | :heavy_minus_sign: | N/A | 6612628 | +| `file` | *Optional[str]* | :heavy_minus_sign: | N/A | /movies/Mission Impossible (1996)/Mission Impossible (1996) Bluray-1080p.mkv | +| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 3926903851 | +| `audio_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | lc | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mkv | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | main 10 | \ No newline at end of file diff --git a/docs/models/operations/getsearchresultsrequest.md b/docs/models/operations/getsearchresultsrequest.md new file mode 100644 index 0000000..b99ffee --- /dev/null +++ b/docs/models/operations/getsearchresultsrequest.md @@ -0,0 +1,8 @@ +# GetSearchResultsRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `query` | *str* | :heavy_check_mark: | The search query string to use | 110 | \ No newline at end of file diff --git a/docs/models/operations/getsearchresultsresponse.md b/docs/models/operations/getsearchresultsresponse.md new file mode 100644 index 0000000..c55f125 --- /dev/null +++ b/docs/models/operations/getsearchresultsresponse.md @@ -0,0 +1,11 @@ +# GetSearchResultsResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetSearchResultsResponseBody]](../../models/operations/getsearchresultsresponsebody.md) | :heavy_minus_sign: | Search Results | \ No newline at end of file diff --git a/docs/models/operations/getsearchresultsresponsebody.md b/docs/models/operations/getsearchresultsresponsebody.md new file mode 100644 index 0000000..bbf81b9 --- /dev/null +++ b/docs/models/operations/getsearchresultsresponsebody.md @@ -0,0 +1,10 @@ +# GetSearchResultsResponseBody + +Search Results + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetSearchResultsMediaContainer]](../../models/operations/getsearchresultsmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getsearchresultsrole.md b/docs/models/operations/getsearchresultsrole.md new file mode 100644 index 0000000..02a1f66 --- /dev/null +++ b/docs/models/operations/getsearchresultsrole.md @@ -0,0 +1,8 @@ +# GetSearchResultsRole + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Tom Cruise | \ No newline at end of file diff --git a/docs/models/operations/getsearchresultswriter.md b/docs/models/operations/getsearchresultswriter.md new file mode 100644 index 0000000..f8d31d3 --- /dev/null +++ b/docs/models/operations/getsearchresultswriter.md @@ -0,0 +1,8 @@ +# GetSearchResultsWriter + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | David Koepp | \ No newline at end of file diff --git a/docs/models/operations/getserveractivitiesmediacontainer.md b/docs/models/operations/getserveractivitiesmediacontainer.md new file mode 100644 index 0000000..0acf6de --- /dev/null +++ b/docs/models/operations/getserveractivitiesmediacontainer.md @@ -0,0 +1,9 @@ +# GetServerActivitiesMediaContainer + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------------------------------------------------- | +| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `activity` | List[[operations.Activity](../../models/operations/activity.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getserveractivitiesresponse.md b/docs/models/operations/getserveractivitiesresponse.md new file mode 100644 index 0000000..ff7d925 --- /dev/null +++ b/docs/models/operations/getserveractivitiesresponse.md @@ -0,0 +1,11 @@ +# GetServerActivitiesResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetServerActivitiesResponseBody]](../../models/operations/getserveractivitiesresponsebody.md) | :heavy_minus_sign: | The Server Activities | \ No newline at end of file diff --git a/docs/models/operations/getserveractivitiesresponsebody.md b/docs/models/operations/getserveractivitiesresponsebody.md new file mode 100644 index 0000000..809e48d --- /dev/null +++ b/docs/models/operations/getserveractivitiesresponsebody.md @@ -0,0 +1,10 @@ +# GetServerActivitiesResponseBody + +The Server Activities + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetServerActivitiesMediaContainer]](../../models/operations/getserveractivitiesmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getservercapabilitiesresponse.md b/docs/models/operations/getservercapabilitiesresponse.md new file mode 100644 index 0000000..6d2c323 --- /dev/null +++ b/docs/models/operations/getservercapabilitiesresponse.md @@ -0,0 +1,11 @@ +# GetServerCapabilitiesResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetServerCapabilitiesResponseBody]](../../models/operations/getservercapabilitiesresponsebody.md) | :heavy_minus_sign: | The Server Capabilities | \ No newline at end of file diff --git a/docs/models/operations/getservercapabilitiesresponsebody.md b/docs/models/operations/getservercapabilitiesresponsebody.md new file mode 100644 index 0000000..6bf6e65 --- /dev/null +++ b/docs/models/operations/getservercapabilitiesresponsebody.md @@ -0,0 +1,10 @@ +# GetServerCapabilitiesResponseBody + +The Server Capabilities + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.MediaContainer]](../../models/operations/mediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getserveridentitymediacontainer.md b/docs/models/operations/getserveridentitymediacontainer.md new file mode 100644 index 0000000..f5eb169 --- /dev/null +++ b/docs/models/operations/getserveridentitymediacontainer.md @@ -0,0 +1,11 @@ +# GetServerIdentityMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 0 | +| `claimed` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `machine_identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | 96f2fe7a78c9dc1f16a16bedbe90f98149be16b4 | +| `version` | *Optional[str]* | :heavy_minus_sign: | N/A | 1.31.3.6868-28fc46b27 | \ No newline at end of file diff --git a/docs/models/operations/getserveridentityresponse.md b/docs/models/operations/getserveridentityresponse.md new file mode 100644 index 0000000..b6b8833 --- /dev/null +++ b/docs/models/operations/getserveridentityresponse.md @@ -0,0 +1,11 @@ +# GetServerIdentityResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetServerIdentityResponseBody]](../../models/operations/getserveridentityresponsebody.md) | :heavy_minus_sign: | The Server Identity information | \ No newline at end of file diff --git a/docs/models/operations/getserveridentityresponsebody.md b/docs/models/operations/getserveridentityresponsebody.md new file mode 100644 index 0000000..0201c88 --- /dev/null +++ b/docs/models/operations/getserveridentityresponsebody.md @@ -0,0 +1,10 @@ +# GetServerIdentityResponseBody + +The Server Identity information + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `media_container` | [Optional[operations.GetServerIdentityMediaContainer]](../../models/operations/getserveridentitymediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getserverlistmediacontainer.md b/docs/models/operations/getserverlistmediacontainer.md new file mode 100644 index 0000000..b6b171f --- /dev/null +++ b/docs/models/operations/getserverlistmediacontainer.md @@ -0,0 +1,9 @@ +# GetServerListMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 | +| `server` | List[[operations.GetServerListServer](../../models/operations/getserverlistserver.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getserverlistresponse.md b/docs/models/operations/getserverlistresponse.md new file mode 100644 index 0000000..ab7d986 --- /dev/null +++ b/docs/models/operations/getserverlistresponse.md @@ -0,0 +1,11 @@ +# GetServerListResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetServerListResponseBody]](../../models/operations/getserverlistresponsebody.md) | :heavy_minus_sign: | List of Servers | \ No newline at end of file diff --git a/docs/models/operations/getserverlistresponsebody.md b/docs/models/operations/getserverlistresponsebody.md new file mode 100644 index 0000000..e8b2cb0 --- /dev/null +++ b/docs/models/operations/getserverlistresponsebody.md @@ -0,0 +1,10 @@ +# GetServerListResponseBody + +List of Servers + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetServerListMediaContainer]](../../models/operations/getserverlistmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getserverlistserver.md b/docs/models/operations/getserverlistserver.md new file mode 100644 index 0000000..68b23ad --- /dev/null +++ b/docs/models/operations/getserverlistserver.md @@ -0,0 +1,13 @@ +# GetServerListServer + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | Hera | +| `host` | *Optional[str]* | :heavy_minus_sign: | N/A | 10.10.10.47 | +| `address` | *Optional[str]* | :heavy_minus_sign: | N/A | 10.10.10.47 | +| `port` | *Optional[float]* | :heavy_minus_sign: | N/A | 32400 | +| `machine_identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | 96f2fe7a78c9dc1f16a16bedbe90f98149be16b4 | +| `version` | *Optional[str]* | :heavy_minus_sign: | N/A | 1.31.3.6868-28fc46b27 | \ No newline at end of file diff --git a/docs/models/operations/getserverpreferencesmediacontainer.md b/docs/models/operations/getserverpreferencesmediacontainer.md new file mode 100644 index 0000000..6e6f212 --- /dev/null +++ b/docs/models/operations/getserverpreferencesmediacontainer.md @@ -0,0 +1,9 @@ +# GetServerPreferencesMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 161 | +| `setting` | List[[Union[operations.One, operations.Two]](../../models/operations/setting.md)] | :heavy_minus_sign: | N/A | [{"advanced":false,"default":"","group":"general","hidden":false,"id":"FriendlyName","label":"Friendly name","summary":"This name will be used to identify this media server to other computers on your network. If you leave it blank, your computer's name will be used instead.","type":"text","value":"Hera"},{"advanced":false,"default":3600,"enumValues":"900:every 15 minutes\|1800:every 30 minutes\|3600:hourly\|7200:every 2 hours\|21600:every 6 hours\|43200:every 12 hours\|86400:daily","group":"library","hidden":false,"id":"ScheduledLibraryUpdateInterval","label":"Library scan interval","summary":"","type":"int","value":3600}] | \ No newline at end of file diff --git a/docs/models/operations/getserverpreferencesresponse.md b/docs/models/operations/getserverpreferencesresponse.md new file mode 100644 index 0000000..8907f64 --- /dev/null +++ b/docs/models/operations/getserverpreferencesresponse.md @@ -0,0 +1,11 @@ +# GetServerPreferencesResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetServerPreferencesResponseBody]](../../models/operations/getserverpreferencesresponsebody.md) | :heavy_minus_sign: | Server Preferences | \ No newline at end of file diff --git a/docs/models/operations/getserverpreferencesresponsebody.md b/docs/models/operations/getserverpreferencesresponsebody.md new file mode 100644 index 0000000..5774150 --- /dev/null +++ b/docs/models/operations/getserverpreferencesresponsebody.md @@ -0,0 +1,10 @@ +# GetServerPreferencesResponseBody + +Server Preferences + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `media_container` | [Optional[operations.GetServerPreferencesMediaContainer]](../../models/operations/getserverpreferencesmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getsessionhistorymediacontainer.md b/docs/models/operations/getsessionhistorymediacontainer.md new file mode 100644 index 0000000..e063193 --- /dev/null +++ b/docs/models/operations/getsessionhistorymediacontainer.md @@ -0,0 +1,9 @@ +# GetSessionHistoryMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 10855 | +| `metadata` | List[[operations.GetSessionHistoryMetadata](../../models/operations/getsessionhistorymetadata.md)] | :heavy_minus_sign: | N/A | [{"accountID":1,"deviceID":5,"grandparentArt":"/library/metadata/32132/art/1703933346","grandparentKey":"/library/metadata/32132","grandparentThumb":"/library/metadata/32132/thumb/1703933346","grandparentTitle":"Taskmaster","historyKey":"/status/sessions/history/1","index":1,"key":"/library/metadata/32171","librarySectionID":"2","originallyAvailableAt":"2022-04-14T00:00:00Z","parentIndex":13,"parentKey":"/library/metadata/32170","parentThumb":"/library/metadata/32170/thumb/1654134301","ratingKey":"32171","thumb":"/library/metadata/32171/thumb/-1","title":"The Noise That Blue Makes","type":"episode","viewedAt":1654139223}] | \ No newline at end of file diff --git a/docs/models/operations/getsessionhistorymetadata.md b/docs/models/operations/getsessionhistorymetadata.md new file mode 100644 index 0000000..1fe11ba --- /dev/null +++ b/docs/models/operations/getsessionhistorymetadata.md @@ -0,0 +1,26 @@ +# GetSessionHistoryMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `history_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /status/sessions/history/1 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/32171 | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 32171 | +| `library_section_id` | *Optional[str]* | :heavy_minus_sign: | N/A | 2 | +| `parent_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/32170 | +| `grandparent_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/32132 | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | The Noise That Blue Makes | +| `grandparent_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Taskmaster | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | episode | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/32171/thumb/-1 | +| `parent_thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/32170/thumb/1654134301 | +| `grandparent_thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/32132/thumb/1703933346 | +| `grandparent_art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/32132/art/1703933346 | +| `index` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `parent_index` | *Optional[int]* | :heavy_minus_sign: | N/A | 13 | +| `originally_available_at` | [datetime](https://docs.python.org/3/library/datetime.html#datetime-objects) | :heavy_minus_sign: | N/A | 2022-04-14 00:00:00 +0000 UTC | +| `viewed_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1654139223 | +| `account_id` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `device_id` | *Optional[int]* | :heavy_minus_sign: | N/A | 5 | \ No newline at end of file diff --git a/docs/models/operations/getsessionhistoryresponse.md b/docs/models/operations/getsessionhistoryresponse.md new file mode 100644 index 0000000..67c3d90 --- /dev/null +++ b/docs/models/operations/getsessionhistoryresponse.md @@ -0,0 +1,11 @@ +# GetSessionHistoryResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetSessionHistoryResponseBody]](../../models/operations/getsessionhistoryresponsebody.md) | :heavy_minus_sign: | List of Plex Sessions | \ No newline at end of file diff --git a/docs/models/operations/getsessionhistoryresponsebody.md b/docs/models/operations/getsessionhistoryresponsebody.md new file mode 100644 index 0000000..a2e16aa --- /dev/null +++ b/docs/models/operations/getsessionhistoryresponsebody.md @@ -0,0 +1,10 @@ +# GetSessionHistoryResponseBody + +List of Plex Sessions + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ | +| `media_container` | [Optional[operations.GetSessionHistoryMediaContainer]](../../models/operations/getsessionhistorymediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getsessionsmedia.md b/docs/models/operations/getsessionsmedia.md new file mode 100644 index 0000000..02248ca --- /dev/null +++ b/docs/models/operations/getsessionsmedia.md @@ -0,0 +1,15 @@ +# GetSessionsMedia + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `audio_channels` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `audio_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | flac | +| `bitrate` | *Optional[int]* | :heavy_minus_sign: | N/A | 1014 | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | flac | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 186240 | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | 130355 | +| `selected` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `part` | List[[operations.GetSessionsPart](../../models/operations/getsessionspart.md)] | :heavy_minus_sign: | N/A | [{"Stream":[{"albumGain":"-12.94","albumPeak":"1.000000","albumRange":"4.751014","audioChannelLayout":"stereo","bitDepth":16,"bitrate":1014,"channels":2,"codec":"flac","displayTitle":"FLAC (Stereo)","extendedDisplayTitle":"FLAC (Stereo)","gain":"-12.94","id":"352487","index":0,"location":"direct","loudness":"-5.94","lra":"1.74","peak":"1.000000","samplingRate":44100,"selected":true,"streamType":2}],"container":"flac","decision":"directplay","duration":186240,"file":"/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac","hasThumbnail":"1","id":"130625","key":"/library/parts/130625/1705543268/file.flac","selected":true,"size":23644000}] | \ No newline at end of file diff --git a/docs/models/operations/getsessionsmediacontainer.md b/docs/models/operations/getsessionsmediacontainer.md new file mode 100644 index 0000000..0f086c1 --- /dev/null +++ b/docs/models/operations/getsessionsmediacontainer.md @@ -0,0 +1,9 @@ +# GetSessionsMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `metadata` | List[[operations.GetSessionsMetadata](../../models/operations/getsessionsmetadata.md)] | :heavy_minus_sign: | N/A | [{"Media":[{"Part":[{"Stream":[{"albumGain":"-12.94","albumPeak":"1.000000","albumRange":"4.751014","audioChannelLayout":"stereo","bitDepth":16,"bitrate":1014,"channels":2,"codec":"flac","displayTitle":"FLAC (Stereo)","extendedDisplayTitle":"FLAC (Stereo)","gain":"-12.94","id":"352487","index":0,"location":"direct","loudness":"-5.94","lra":"1.74","peak":"1.000000","samplingRate":44100,"selected":true,"streamType":2}],"container":"flac","decision":"directplay","duration":186240,"file":"/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac","hasThumbnail":"1","id":"130625","key":"/library/parts/130625/1705543268/file.flac","selected":true,"size":23644000}],"audioChannels":2,"audioCodec":"flac","bitrate":1014,"container":"flac","duration":186240,"id":"130355","selected":true}],"Player":{"address":"10.10.10.171","local":true,"machineIdentifier":"3tsdzir85m2onc3qyr255aq1","model":"standalone","platform":"windows","platformVersion":"10.0.22621","product":"Plex for Windows","profile":"Plex Desktop","relayed":false,"remotePublicAddress":"68.248.140.20","secure":true,"state":"playing","title":"DESKTOP-BL80MTD","userID":1,"version":"1.85.0.4071-21128b56"},"Session":{"bandwidth":1050,"id":"93h7e00ncblxncqw9lkfaoxi","location":"lan"},"User":{"id":"1","thumb":"https://plex.tv/users/844780fc6f8a26b5/avatar?c=1705853661","title":"Blindkitty38"},"addedAt":1705543312,"art":"/library/metadata/39904/art/1705310687","duration":186240,"grandparentArt":"/library/metadata/39904/art/1705310687","grandparentGuid":"plex://artist/5d07bbfd403c6402904a6480","grandparentKey":"/library/metadata/39904","grandparentRatingKey":"39904","grandparentThumb":"/library/metadata/39904/thumb/1705310687","grandparentTitle":"Green Day","guid":"plex://track/6535834f71f22f36f71a8e8f","index":1,"key":"/library/metadata/67085","librarySectionID":"3","librarySectionKey":"/library/sections/3","librarySectionTitle":"Music","musicAnalysisVersion":"1","parentGuid":"plex://album/65394d6d472b8ab03ef47f12","parentIndex":1,"parentKey":"/library/metadata/67084","parentRatingKey":"67084","parentStudio":"Reprise Records","parentThumb":"/library/metadata/67084/thumb/1705543314","parentTitle":"Saviors","parentYear":2024,"ratingCount":45885,"ratingKey":"67085","sessionKey":"203","thumb":"/library/metadata/67084/thumb/1705543314","title":"The American Dream Is Killing Me","titleSort":"American Dream Is Killing Me","type":"track","updatedAt":1705543314,"viewOffset":1000}] | \ No newline at end of file diff --git a/docs/models/operations/getsessionsmetadata.md b/docs/models/operations/getsessionsmetadata.md new file mode 100644 index 0000000..027c11d --- /dev/null +++ b/docs/models/operations/getsessionsmetadata.md @@ -0,0 +1,44 @@ +# GetSessionsMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `added_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705543312 | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/39904/art/1705310687 | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 186240 | +| `grandparent_art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/39904/art/1705310687 | +| `grandparent_guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://artist/5d07bbfd403c6402904a6480 | +| `grandparent_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/39904 | +| `grandparent_rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 39904 | +| `grandparent_thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/39904/thumb/1705310687 | +| `grandparent_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Green Day | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://track/6535834f71f22f36f71a8e8f | +| `index` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/67085 | +| `library_section_id` | *Optional[str]* | :heavy_minus_sign: | N/A | 3 | +| `library_section_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/sections/3 | +| `library_section_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Music | +| `music_analysis_version` | *Optional[str]* | :heavy_minus_sign: | N/A | 1 | +| `parent_guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://album/65394d6d472b8ab03ef47f12 | +| `parent_index` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `parent_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/67084 | +| `parent_rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 67084 | +| `parent_studio` | *Optional[str]* | :heavy_minus_sign: | N/A | Reprise Records | +| `parent_thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/67084/thumb/1705543314 | +| `parent_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Saviors | +| `parent_year` | *Optional[int]* | :heavy_minus_sign: | N/A | 2024 | +| `rating_count` | *Optional[int]* | :heavy_minus_sign: | N/A | 45885 | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 67085 | +| `session_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 203 | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/67084/thumb/1705543314 | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | The American Dream Is Killing Me | +| `title_sort` | *Optional[str]* | :heavy_minus_sign: | N/A | American Dream Is Killing Me | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | track | +| `updated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705543314 | +| `view_offset` | *Optional[int]* | :heavy_minus_sign: | N/A | 1000 | +| `media` | List[[operations.GetSessionsMedia](../../models/operations/getsessionsmedia.md)] | :heavy_minus_sign: | N/A | [{"Part":[{"Stream":[{"albumGain":"-12.94","albumPeak":"1.000000","albumRange":"4.751014","audioChannelLayout":"stereo","bitDepth":16,"bitrate":1014,"channels":2,"codec":"flac","displayTitle":"FLAC (Stereo)","extendedDisplayTitle":"FLAC (Stereo)","gain":"-12.94","id":"352487","index":0,"location":"direct","loudness":"-5.94","lra":"1.74","peak":"1.000000","samplingRate":44100,"selected":true,"streamType":2}],"container":"flac","decision":"directplay","duration":186240,"file":"/music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac","hasThumbnail":"1","id":"130625","key":"/library/parts/130625/1705543268/file.flac","selected":true,"size":23644000}],"audioChannels":2,"audioCodec":"flac","bitrate":1014,"container":"flac","duration":186240,"id":"130355","selected":true}] | +| `user` | [Optional[operations.User]](../../models/operations/user.md) | :heavy_minus_sign: | N/A | | +| `player` | [Optional[operations.Player]](../../models/operations/player.md) | :heavy_minus_sign: | N/A | | +| `session` | [Optional[operations.Session]](../../models/operations/session.md) | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/getsessionspart.md b/docs/models/operations/getsessionspart.md new file mode 100644 index 0000000..5ce329d --- /dev/null +++ b/docs/models/operations/getsessionspart.md @@ -0,0 +1,17 @@ +# GetSessionsPart + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | flac | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 186240 | +| `file` | *Optional[str]* | :heavy_minus_sign: | N/A | /music/Green Day/Saviors (2024)/Green Day - Saviors - 01 - The American Dream Is Killing Me.flac | +| `has_thumbnail` | *Optional[str]* | :heavy_minus_sign: | N/A | 1 | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | 130625 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/parts/130625/1705543268/file.flac | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 23644000 | +| `decision` | *Optional[str]* | :heavy_minus_sign: | N/A | directplay | +| `selected` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `stream` | List[[operations.GetSessionsStream](../../models/operations/getsessionsstream.md)] | :heavy_minus_sign: | N/A | [{"albumGain":"-12.94","albumPeak":"1.000000","albumRange":"4.751014","audioChannelLayout":"stereo","bitDepth":16,"bitrate":1014,"channels":2,"codec":"flac","displayTitle":"FLAC (Stereo)","extendedDisplayTitle":"FLAC (Stereo)","gain":"-12.94","id":"352487","index":0,"location":"direct","loudness":"-5.94","lra":"1.74","peak":"1.000000","samplingRate":44100,"selected":true,"streamType":2}] | \ No newline at end of file diff --git a/docs/models/operations/getsessionsresponse.md b/docs/models/operations/getsessionsresponse.md new file mode 100644 index 0000000..b91c7bf --- /dev/null +++ b/docs/models/operations/getsessionsresponse.md @@ -0,0 +1,11 @@ +# GetSessionsResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetSessionsResponseBody]](../../models/operations/getsessionsresponsebody.md) | :heavy_minus_sign: | List of Active Plex Sessions | \ No newline at end of file diff --git a/docs/models/operations/getsessionsresponsebody.md b/docs/models/operations/getsessionsresponsebody.md new file mode 100644 index 0000000..7e87b62 --- /dev/null +++ b/docs/models/operations/getsessionsresponsebody.md @@ -0,0 +1,10 @@ +# GetSessionsResponseBody + +List of Active Plex Sessions + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `media_container` | [Optional[operations.GetSessionsMediaContainer]](../../models/operations/getsessionsmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/getsessionsstream.md b/docs/models/operations/getsessionsstream.md new file mode 100644 index 0000000..0e068ea --- /dev/null +++ b/docs/models/operations/getsessionsstream.md @@ -0,0 +1,27 @@ +# GetSessionsStream + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `album_gain` | *Optional[str]* | :heavy_minus_sign: | N/A | -12.94 | +| `album_peak` | *Optional[str]* | :heavy_minus_sign: | N/A | 1.000000 | +| `album_range` | *Optional[str]* | :heavy_minus_sign: | N/A | 4.751014 | +| `audio_channel_layout` | *Optional[str]* | :heavy_minus_sign: | N/A | stereo | +| `bit_depth` | *Optional[int]* | :heavy_minus_sign: | N/A | 16 | +| `bitrate` | *Optional[int]* | :heavy_minus_sign: | N/A | 1014 | +| `channels` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `codec` | *Optional[str]* | :heavy_minus_sign: | N/A | flac | +| `display_title` | *Optional[str]* | :heavy_minus_sign: | N/A | FLAC (Stereo) | +| `extended_display_title` | *Optional[str]* | :heavy_minus_sign: | N/A | FLAC (Stereo) | +| `gain` | *Optional[str]* | :heavy_minus_sign: | N/A | -12.94 | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | 352487 | +| `index` | *Optional[int]* | :heavy_minus_sign: | N/A | 0 | +| `loudness` | *Optional[str]* | :heavy_minus_sign: | N/A | -5.94 | +| `lra` | *Optional[str]* | :heavy_minus_sign: | N/A | 1.74 | +| `peak` | *Optional[str]* | :heavy_minus_sign: | N/A | 1.000000 | +| `sampling_rate` | *Optional[int]* | :heavy_minus_sign: | N/A | 44100 | +| `selected` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `stream_type` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `location` | *Optional[str]* | :heavy_minus_sign: | N/A | direct | \ No newline at end of file diff --git a/docs/models/operations/getsourceconnectioninformationrequest.md b/docs/models/operations/getsourceconnectioninformationrequest.md new file mode 100644 index 0000000..7c59ee6 --- /dev/null +++ b/docs/models/operations/getsourceconnectioninformationrequest.md @@ -0,0 +1,8 @@ +# GetSourceConnectionInformationRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | +| `source` | *str* | :heavy_check_mark: | The source identifier with an included prefix. | server://client-identifier | \ No newline at end of file diff --git a/docs/models/operations/getsourceconnectioninformationresponse.md b/docs/models/operations/getsourceconnectioninformationresponse.md new file mode 100644 index 0000000..f041f06 --- /dev/null +++ b/docs/models/operations/getsourceconnectioninformationresponse.md @@ -0,0 +1,10 @@ +# GetSourceConnectionInformationResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/gettimelinerequest.md b/docs/models/operations/gettimelinerequest.md new file mode 100644 index 0000000..b3fbd91 --- /dev/null +++ b/docs/models/operations/gettimelinerequest.md @@ -0,0 +1,17 @@ +# GetTimelineRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------------------- | +| `rating_key` | *float* | :heavy_check_mark: | The rating key of the media item | +| `key` | *str* | :heavy_check_mark: | The key of the media item to get the timeline for | +| `state` | [operations.State](../../models/operations/state.md) | :heavy_check_mark: | The state of the media item | +| `has_mde` | *float* | :heavy_check_mark: | Whether the media item has MDE | +| `time` | *float* | :heavy_check_mark: | The time of the media item | +| `duration` | *float* | :heavy_check_mark: | The duration of the media item | +| `context` | *str* | :heavy_check_mark: | The context of the media item | +| `play_queue_item_id` | *float* | :heavy_check_mark: | The play queue item ID of the media item | +| `play_back_time` | *float* | :heavy_check_mark: | The playback time of the media item | +| `row` | *float* | :heavy_check_mark: | The row of the media item | \ No newline at end of file diff --git a/docs/models/operations/gettimelineresponse.md b/docs/models/operations/gettimelineresponse.md new file mode 100644 index 0000000..8bb136c --- /dev/null +++ b/docs/models/operations/gettimelineresponse.md @@ -0,0 +1,10 @@ +# GetTimelineResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/gettokenrequest.md b/docs/models/operations/gettokenrequest.md new file mode 100644 index 0000000..3841b11 --- /dev/null +++ b/docs/models/operations/gettokenrequest.md @@ -0,0 +1,9 @@ +# GetTokenRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| `pin_id` | *str* | :heavy_check_mark: | The PinID to retrieve an access token for | +| `x_plex_client_identifier` | *str* | :heavy_check_mark: | Plex Authentication Token | \ No newline at end of file diff --git a/docs/models/operations/gettokenresponse.md b/docs/models/operations/gettokenresponse.md new file mode 100644 index 0000000..0652442 --- /dev/null +++ b/docs/models/operations/gettokenresponse.md @@ -0,0 +1,10 @@ +# GetTokenResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/gettranscodesessionsmediacontainer.md b/docs/models/operations/gettranscodesessionsmediacontainer.md new file mode 100644 index 0000000..a07977f --- /dev/null +++ b/docs/models/operations/gettranscodesessionsmediacontainer.md @@ -0,0 +1,9 @@ +# GetTranscodeSessionsMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `transcode_session` | List[[operations.TranscodeSession](../../models/operations/transcodesession.md)] | :heavy_minus_sign: | N/A | [{"audioChannels":1,"audioCodec":"opus","audioDecision":"transcode","complete":false,"container":"mkv","context":"streaming","duration":1445695,"error":false,"key":"vv3i2q2lax92qlzul1hbd4bx","maxOffsetAvailable":29.53,"minOffsetAvailable":3.003000020980835,"progress":1.7999999523162842,"protocol":"http","remaining":53,"size":-22,"sourceAudioCodec":"aac","sourceVideoCodec":"h264","speed":25.100000381469727,"subtitleDecision":"burn","throttled":false,"timeStamp":1705895805.4919229,"transcodeHwRequested":true,"videoCodec":"h264","videoDecision":"transcode"}] | \ No newline at end of file diff --git a/docs/models/operations/gettranscodesessionsresponse.md b/docs/models/operations/gettranscodesessionsresponse.md new file mode 100644 index 0000000..cbbbee2 --- /dev/null +++ b/docs/models/operations/gettranscodesessionsresponse.md @@ -0,0 +1,11 @@ +# GetTranscodeSessionsResponse + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetTranscodeSessionsResponseBody]](../../models/operations/gettranscodesessionsresponsebody.md) | :heavy_minus_sign: | The Transcode Sessions | \ No newline at end of file diff --git a/docs/models/operations/gettranscodesessionsresponsebody.md b/docs/models/operations/gettranscodesessionsresponsebody.md new file mode 100644 index 0000000..f98b978 --- /dev/null +++ b/docs/models/operations/gettranscodesessionsresponsebody.md @@ -0,0 +1,10 @@ +# GetTranscodeSessionsResponseBody + +The Transcode Sessions + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | +| `media_container` | [Optional[operations.GetTranscodeSessionsMediaContainer]](../../models/operations/gettranscodesessionsmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/gettransienttokenqueryparamtype.md b/docs/models/operations/gettransienttokenqueryparamtype.md new file mode 100644 index 0000000..5c33dc3 --- /dev/null +++ b/docs/models/operations/gettransienttokenqueryparamtype.md @@ -0,0 +1,10 @@ +# GetTransientTokenQueryParamType + +`delegation` - This is the only supported `type` parameter. + + +## Values + +| Name | Value | +| ------------ | ------------ | +| `DELEGATION` | delegation | \ No newline at end of file diff --git a/docs/models/operations/gettransienttokenrequest.md b/docs/models/operations/gettransienttokenrequest.md new file mode 100644 index 0000000..23ce0e9 --- /dev/null +++ b/docs/models/operations/gettransienttokenrequest.md @@ -0,0 +1,9 @@ +# GetTransientTokenRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `type` | [operations.GetTransientTokenQueryParamType](../../models/operations/gettransienttokenqueryparamtype.md) | :heavy_check_mark: | `delegation` - This is the only supported `type` parameter. | +| `scope` | [operations.Scope](../../models/operations/scope.md) | :heavy_check_mark: | `all` - This is the only supported `scope` parameter. | \ No newline at end of file diff --git a/docs/models/operations/gettransienttokenresponse.md b/docs/models/operations/gettransienttokenresponse.md new file mode 100644 index 0000000..f9d76ec --- /dev/null +++ b/docs/models/operations/gettransienttokenresponse.md @@ -0,0 +1,10 @@ +# GetTransientTokenResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/getupdatestatusmediacontainer.md b/docs/models/operations/getupdatestatusmediacontainer.md new file mode 100644 index 0000000..54ee0e5 --- /dev/null +++ b/docs/models/operations/getupdatestatusmediacontainer.md @@ -0,0 +1,13 @@ +# GetUpdateStatusMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `can_install` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `checked_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705801232 | +| `download_url` | *Optional[str]* | :heavy_minus_sign: | N/A | https://plex.tv/downloads/latest/5?channel=8&build=linux-x86_64&distro=redhat&X-Plex-Token=xxxxxxxxxxxxxxxxxxxx | +| `status` | *Optional[int]* | :heavy_minus_sign: | N/A | 0 | +| `release` | List[[operations.Release](../../models/operations/release.md)] | :heavy_minus_sign: | N/A | [{"added":"(PLEASE NOTE) This version makes changes to the database which will make it compatible only with server versions 1.31.2 or higher (released March 14). You will not be able to use your database on Plex Media Server versions lower than this after this update. Please also be patient when updating to this version if you have a very large database and allow the upgrade process to finish.\n(Collections) Items added to a collection from the item context menu will now lock the collection field on the items (#12793)\n(Music) Store track genres and add filtering options (#14653)\n(Music) Support ID3v2.4 null-separated tags for genres and release type (#14653)\n(View History) No longer create a view history entry for items marked as played (#10888)\n(Web) Updated to 4.118.0","downloadURL":"https://plex.tv/downloads/latest/5?channel=8\u0026build=linux-x86_64\u0026distro=redhat\u0026X-Plex-Token=xxxxxxxxxxxxxxxxxxxx","fixed":"(Agents) Changing a 'Other Videos' type library to the modern movie agent would fail (#14483)\n(Agents) It is possible that agents are not initialised during startup on rare occasions (#14654)\n(Agents) Remove the legacy OpenSubtitles agent which is no longer supported upstream (#14667)\n(Collection) Server could become unresponsive when collection membership changes (#14612)\n(DVR) Previously watched recordings could be deleted without being watched again (#13779)\n(Libraries) When performing fix match on items from certain music libraries the language would default to Arabic (#14501)\n(Library) The Content Rating not equal to None filter does not work (#14620)\n(Search) Album search results could contain all the album's tracks too (#14486)\n(Subtitles) In some circumstances, sidecar subtitles can show up for media when they're no longer available (#14674)\n(Transcoder) HW encoding would fail on devices with no rate control (#14222)\n(Transcoder) Software transcoding on Ubuntu could cause unexpected behavior (#14605)","key":"https://plex.tv/updater/releases/5136","state":"notify","version":"1.40.0.7775-456fbaf97"}] | \ No newline at end of file diff --git a/docs/models/operations/getupdatestatusresponse.md b/docs/models/operations/getupdatestatusresponse.md new file mode 100644 index 0000000..f609b4f --- /dev/null +++ b/docs/models/operations/getupdatestatusresponse.md @@ -0,0 +1,11 @@ +# GetUpdateStatusResponse + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.GetUpdateStatusResponseBody]](../../models/operations/getupdatestatusresponsebody.md) | :heavy_minus_sign: | The Server Updates | \ No newline at end of file diff --git a/docs/models/operations/getupdatestatusresponsebody.md b/docs/models/operations/getupdatestatusresponsebody.md new file mode 100644 index 0000000..32ed362 --- /dev/null +++ b/docs/models/operations/getupdatestatusresponsebody.md @@ -0,0 +1,10 @@ +# GetUpdateStatusResponseBody + +The Server Updates + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.GetUpdateStatusMediaContainer]](../../models/operations/getupdatestatusmediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/guids.md b/docs/models/operations/guids.md new file mode 100644 index 0000000..497e932 --- /dev/null +++ b/docs/models/operations/guids.md @@ -0,0 +1,8 @@ +# Guids + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | tvdb://2337 | \ No newline at end of file diff --git a/docs/models/operations/hub.md b/docs/models/operations/hub.md new file mode 100644 index 0000000..30754d9 --- /dev/null +++ b/docs/models/operations/hub.md @@ -0,0 +1,18 @@ +# Hub + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `hub_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/50768,65523,58188,57341,57302,57070 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /playlists/all?type=15&sort=lastViewedAt:desc&playlistType=video,audio | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Recent Playlists | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | playlist | +| `hub_identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | home.playlists | +| `context` | *Optional[str]* | :heavy_minus_sign: | N/A | hub.home.playlists | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 6 | +| `more` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `style` | *Optional[str]* | :heavy_minus_sign: | N/A | shelf | +| `promoted` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `metadata` | List[[operations.GetGlobalHubsMetadata](../../models/operations/getglobalhubsmetadata.md)] | :heavy_minus_sign: | N/A | [{"addedAt":1668779618,"composite":"/playlists/57070/composite/1668787730","duration":16873000,"guid":"com.plexapp.agents.none://9fee6c5b-3143-4923-813e-57bd0190056c","icon":"playlist://image.smart","key":"/playlists/57070/items","lastViewedAt":1668787732,"leafCount":3,"playlistType":"video","ratingKey":"57070","smart":false,"summary":"","title":"November Movie Day","titleSort":"Tracks","type":"playlist","updatedAt":1668787730,"viewCount":2}] | \ No newline at end of file diff --git a/docs/models/operations/includedetails.md b/docs/models/operations/includedetails.md new file mode 100644 index 0000000..5512941 --- /dev/null +++ b/docs/models/operations/includedetails.md @@ -0,0 +1,13 @@ +# IncludeDetails + +Whether or not to include details for a section (types, filters, and sorts). +Only exists for backwards compatibility, media providers other than the server libraries have it on always. + + + +## Values + +| Name | Value | +| ------ | ------ | +| `ZERO` | 0 | +| `ONE` | 1 | \ No newline at end of file diff --git a/docs/models/operations/level.md b/docs/models/operations/level.md new file mode 100644 index 0000000..6f8db56 --- /dev/null +++ b/docs/models/operations/level.md @@ -0,0 +1,20 @@ +# Level + +An integer log level to write to the PMS log with. +0: Error +1: Warning +2: Info +3: Debug +4: Verbose + + + +## Values + +| Name | Value | +| ------- | ------- | +| `ZERO` | 0 | +| `ONE` | 1 | +| `TWO` | 2 | +| `THREE` | 3 | +| `FOUR` | 4 | \ No newline at end of file diff --git a/docs/models/operations/location.md b/docs/models/operations/location.md new file mode 100644 index 0000000..8625984 --- /dev/null +++ b/docs/models/operations/location.md @@ -0,0 +1,17 @@ +# Location + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `code` | *Optional[str]* | :heavy_minus_sign: | N/A | US | +| `european_union_member` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `continent_code` | *Optional[str]* | :heavy_minus_sign: | N/A | NA | +| `country` | *Optional[str]* | :heavy_minus_sign: | N/A | United States | +| `city` | *Optional[str]* | :heavy_minus_sign: | N/A | Austin | +| `time_zone` | *Optional[str]* | :heavy_minus_sign: | N/A | America/Chicago | +| `postal_code` | *Optional[float]* | :heavy_minus_sign: | N/A | 78732 | +| `in_privacy_restricted_country` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `subdivisions` | *Optional[str]* | :heavy_minus_sign: | N/A | Texas | +| `coordinates` | *Optional[str]* | :heavy_minus_sign: | N/A | 30.3768 -97.8935 | \ No newline at end of file diff --git a/docs/models/operations/loglinerequest.md b/docs/models/operations/loglinerequest.md new file mode 100644 index 0000000..d332d66 --- /dev/null +++ b/docs/models/operations/loglinerequest.md @@ -0,0 +1,10 @@ +# LogLineRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| `level` | [operations.Level](../../models/operations/level.md) | :heavy_check_mark: | An integer log level to write to the PMS log with.
0: Error
1: Warning
2: Info
3: Debug
4: Verbose
| | +| `message` | *str* | :heavy_check_mark: | The text of the message to write to the log. | Test log message | +| `source` | *str* | :heavy_check_mark: | a string indicating the source of the message. | Postman | \ No newline at end of file diff --git a/docs/models/operations/loglineresponse.md b/docs/models/operations/loglineresponse.md new file mode 100644 index 0000000..fdb87bd --- /dev/null +++ b/docs/models/operations/loglineresponse.md @@ -0,0 +1,10 @@ +# LogLineResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/logmultilineresponse.md b/docs/models/operations/logmultilineresponse.md new file mode 100644 index 0000000..538bbe7 --- /dev/null +++ b/docs/models/operations/logmultilineresponse.md @@ -0,0 +1,10 @@ +# LogMultiLineResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/markplayedrequest.md b/docs/models/operations/markplayedrequest.md new file mode 100644 index 0000000..20b11eb --- /dev/null +++ b/docs/models/operations/markplayedrequest.md @@ -0,0 +1,8 @@ +# MarkPlayedRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `key` | *float* | :heavy_check_mark: | The media key to mark as played | 59398 | \ No newline at end of file diff --git a/docs/models/operations/markplayedresponse.md b/docs/models/operations/markplayedresponse.md new file mode 100644 index 0000000..d42b1e4 --- /dev/null +++ b/docs/models/operations/markplayedresponse.md @@ -0,0 +1,10 @@ +# MarkPlayedResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/markunplayedrequest.md b/docs/models/operations/markunplayedrequest.md new file mode 100644 index 0000000..7711a20 --- /dev/null +++ b/docs/models/operations/markunplayedrequest.md @@ -0,0 +1,8 @@ +# MarkUnplayedRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | +| `key` | *float* | :heavy_check_mark: | The media key to mark as Unplayed | 59398 | \ No newline at end of file diff --git a/docs/models/operations/markunplayedresponse.md b/docs/models/operations/markunplayedresponse.md new file mode 100644 index 0000000..3fd7eee --- /dev/null +++ b/docs/models/operations/markunplayedresponse.md @@ -0,0 +1,10 @@ +# MarkUnplayedResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/media.md b/docs/models/operations/media.md new file mode 100644 index 0000000..0058889 --- /dev/null +++ b/docs/models/operations/media.md @@ -0,0 +1,23 @@ +# Media + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------------------------- | +| `id` | *Optional[float]* | :heavy_minus_sign: | N/A | 120345 | +| `duration` | *Optional[float]* | :heavy_minus_sign: | N/A | 7474422 | +| `bitrate` | *Optional[float]* | :heavy_minus_sign: | N/A | 3623 | +| `width` | *Optional[float]* | :heavy_minus_sign: | N/A | 1920 | +| `height` | *Optional[float]* | :heavy_minus_sign: | N/A | 804 | +| `aspect_ratio` | *Optional[float]* | :heavy_minus_sign: | N/A | 2.35 | +| `audio_channels` | *Optional[float]* | :heavy_minus_sign: | N/A | 6 | +| `audio_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | ac3 | +| `video_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | h264 | +| `video_resolution` | *Optional[float]* | :heavy_minus_sign: | N/A | 1080 | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mp4 | +| `video_frame_rate` | *Optional[str]* | :heavy_minus_sign: | N/A | 24p | +| `optimized_for_streaming` | *Optional[float]* | :heavy_minus_sign: | N/A | 0 | +| `has64bit_offsets` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | high | +| `part` | List[[operations.Part](../../models/operations/part.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/mediacontainer.md b/docs/models/operations/mediacontainer.md new file mode 100644 index 0000000..e473252 --- /dev/null +++ b/docs/models/operations/mediacontainer.md @@ -0,0 +1,58 @@ +# MediaContainer + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | ------------------------------------------------------------------ | +| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `allow_camera_upload` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `allow_channel_access` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `allow_media_deletion` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `allow_sharing` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `allow_tuners` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `background_processing` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `certificate` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `companion_proxy` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `country_code` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `diagnostics` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `event_stream` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `friendly_name` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `hub_search` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `item_clusters` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `livetv` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `machine_identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `media_providers` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `multiuser` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `music_analysis` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `my_plex` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `my_plex_mapping_state` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `my_plex_signin_state` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `my_plex_subscription` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `my_plex_username` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `offline_transcode` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `owner_features` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `photo_auto_tag` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `platform` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `platform_version` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `plugin_host` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `push_notifications` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `read_only_libraries` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `streaming_brain_abr_version` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `streaming_brain_version` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `transcoder_active_video_sessions` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `transcoder_audio` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `transcoder_lyrics` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `transcoder_photo` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `transcoder_subtitles` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `transcoder_video` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `transcoder_video_bitrates` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `transcoder_video_qualities` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `transcoder_video_resolutions` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `updated_at` | *Optional[float]* | :heavy_minus_sign: | N/A | +| `updater` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `version` | *Optional[str]* | :heavy_minus_sign: | N/A | +| `voice_search` | *Optional[bool]* | :heavy_minus_sign: | N/A | +| `directory` | List[[operations.Directory](../../models/operations/directory.md)] | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/metadata.md b/docs/models/operations/metadata.md new file mode 100644 index 0000000..f2a9cd5 --- /dev/null +++ b/docs/models/operations/metadata.md @@ -0,0 +1,39 @@ +# Metadata + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `library_section_id` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 | +| `library_section_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Movies | +| `library_section_uuid` | *Optional[str]* | :heavy_minus_sign: | N/A | 322a231a-b7f7-49f5-920f-14c61199cd30 | +| `rating_key` | *Optional[float]* | :heavy_minus_sign: | N/A | 59398 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/59398 | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://movie/5e161a83bea6ac004126e148 | +| `studio` | *Optional[str]* | :heavy_minus_sign: | N/A | Marvel Studios | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | movie | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Ant-Man and the Wasp: Quantumania | +| `content_rating` | *Optional[str]* | :heavy_minus_sign: | N/A | PG-13 | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | Scott Lang and Hope Van Dyne along with Hank Pym and Janet Van Dyne explore the Quantum Realm where they interact with strange creatures and embark on an adventure that goes beyond the limits of what they thought was possible. | +| `rating` | *Optional[float]* | :heavy_minus_sign: | N/A | 4.7 | +| `audience_rating` | *Optional[float]* | :heavy_minus_sign: | N/A | 8.3 | +| `year` | *Optional[float]* | :heavy_minus_sign: | N/A | 2023 | +| `tagline` | *Optional[str]* | :heavy_minus_sign: | N/A | Witness the beginning of a new dynasty. | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/59398/thumb/1681888010 | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/59398/art/1681888010 | +| `duration` | *Optional[float]* | :heavy_minus_sign: | N/A | 7474422 | +| `originally_available_at` | [date](https://docs.python.org/3/library/datetime.html#date-objects) | :heavy_minus_sign: | N/A | 2023-02-15 00:00:00 +0000 UTC | +| `added_at` | *Optional[float]* | :heavy_minus_sign: | N/A | 1681803215 | +| `updated_at` | *Optional[float]* | :heavy_minus_sign: | N/A | 1681888010 | +| `audience_rating_image` | *Optional[str]* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.upright | +| `chapter_source` | *Optional[str]* | :heavy_minus_sign: | N/A | media | +| `primary_extra_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/59399 | +| `rating_image` | *Optional[str]* | :heavy_minus_sign: | N/A | rottentomatoes://image.rating.rotten | +| `media` | List[[operations.Media](../../models/operations/media.md)] | :heavy_minus_sign: | N/A | | +| `genre` | List[[operations.Genre](../../models/operations/genre.md)] | :heavy_minus_sign: | N/A | | +| `director` | List[[operations.Director](../../models/operations/director.md)] | :heavy_minus_sign: | N/A | | +| `writer` | List[[operations.Writer](../../models/operations/writer.md)] | :heavy_minus_sign: | N/A | | +| `country` | List[[operations.Country](../../models/operations/country.md)] | :heavy_minus_sign: | N/A | | +| `role` | List[[operations.Role](../../models/operations/role.md)] | :heavy_minus_sign: | N/A | | \ No newline at end of file diff --git a/docs/models/operations/minsize.md b/docs/models/operations/minsize.md new file mode 100644 index 0000000..815444c --- /dev/null +++ b/docs/models/operations/minsize.md @@ -0,0 +1,11 @@ +# MinSize + +images are always scaled proportionally. A value of '1' in minSize will make the smaller native dimension the dimension resized against. + + +## Values + +| Name | Value | +| ------ | ------ | +| `ZERO` | 0 | +| `ONE` | 1 | \ No newline at end of file diff --git a/docs/models/operations/myplex.md b/docs/models/operations/myplex.md new file mode 100644 index 0000000..c543eca --- /dev/null +++ b/docs/models/operations/myplex.md @@ -0,0 +1,19 @@ +# MyPlex + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `auth_token` | *Optional[str]* | :heavy_minus_sign: | N/A | Z5v-PrNASDFpsaCi3CPK7 | +| `username` | *Optional[str]* | :heavy_minus_sign: | N/A | example.email@mail.com | +| `mapping_state` | *Optional[str]* | :heavy_minus_sign: | N/A | mapped | +| `mapping_error` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `sign_in_state` | *Optional[str]* | :heavy_minus_sign: | N/A | ok | +| `public_address` | *Optional[str]* | :heavy_minus_sign: | N/A | 140.20.68.140 | +| `public_port` | *Optional[float]* | :heavy_minus_sign: | N/A | 32400 | +| `private_address` | *Optional[str]* | :heavy_minus_sign: | N/A | 10.10.10.47 | +| `private_port` | *Optional[float]* | :heavy_minus_sign: | N/A | 32400 | +| `subscription_features` | *Optional[str]* | :heavy_minus_sign: | N/A | federated-auth,hardware_transcoding,home,hwtranscode,item_clusters,kevin-bacon,livetv,loudness,lyrics,music-analysis,music_videos,pass,photo_autotags,photos-v5,photosV6-edit,photosV6-tv-albums,premium_music_metadata,radio,server-manager,session_bandwidth_restrictions,session_kick,shared-radio,sync,trailers,tuner-sharing,type-first,unsupportedtuners,webhooks | +| `subscription_active` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `subscription_state` | *Optional[str]* | :heavy_minus_sign: | N/A | Active | \ No newline at end of file diff --git a/docs/models/operations/one.md b/docs/models/operations/one.md new file mode 100644 index 0000000..ef8a1c0 --- /dev/null +++ b/docs/models/operations/one.md @@ -0,0 +1,16 @@ +# One + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | FriendlyName | +| `label` | *Optional[str]* | :heavy_minus_sign: | N/A | Friendly name | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | This name will be used to identify this media server to other computers on your network. If you leave it blank, your computer's name will be used instead. | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | text | +| `default` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `value` | *Optional[str]* | :heavy_minus_sign: | N/A | Hera | +| `hidden` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `advanced` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `group` | *Optional[str]* | :heavy_minus_sign: | N/A | general | \ No newline at end of file diff --git a/docs/models/operations/onlytransient.md b/docs/models/operations/onlytransient.md new file mode 100644 index 0000000..c91d3d7 --- /dev/null +++ b/docs/models/operations/onlytransient.md @@ -0,0 +1,11 @@ +# OnlyTransient + +Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added). + + +## Values + +| Name | Value | +| ------ | ------ | +| `ZERO` | 0 | +| `ONE` | 1 | \ No newline at end of file diff --git a/docs/models/operations/operator.md b/docs/models/operations/operator.md new file mode 100644 index 0000000..17f6ac2 --- /dev/null +++ b/docs/models/operations/operator.md @@ -0,0 +1,9 @@ +# Operator + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | = | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | is | \ No newline at end of file diff --git a/docs/models/operations/part.md b/docs/models/operations/part.md new file mode 100644 index 0000000..6f9f534 --- /dev/null +++ b/docs/models/operations/part.md @@ -0,0 +1,17 @@ +# Part + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `id` | *Optional[float]* | :heavy_minus_sign: | N/A | 120353 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/parts/120353/1681803203/file.mp4 | +| `duration` | *Optional[float]* | :heavy_minus_sign: | N/A | 7474422 | +| `file` | *Optional[str]* | :heavy_minus_sign: | N/A | /movies/Ant-Man and the Wasp Quantumania (2023)/Ant-Man.and.the.Wasp.Quantumania.2023.1080p.mp4 | +| `size` | *Optional[float]* | :heavy_minus_sign: | N/A | 3395307162 | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mp4 | +| `has64bit_offsets` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `has_thumbnail` | *Optional[float]* | :heavy_minus_sign: | N/A | 1 | +| `optimized_for_streaming` | *Optional[bool]* | :heavy_minus_sign: | N/A | | +| `video_profile` | *Optional[str]* | :heavy_minus_sign: | N/A | high | \ No newline at end of file diff --git a/docs/models/operations/pathparamtaskname.md b/docs/models/operations/pathparamtaskname.md new file mode 100644 index 0000000..87cffd1 --- /dev/null +++ b/docs/models/operations/pathparamtaskname.md @@ -0,0 +1,23 @@ +# PathParamTaskName + +The name of the task to be started. + + +## Values + +| Name | Value | +| ----------------------------- | ----------------------------- | +| `BACKUP_DATABASE` | BackupDatabase | +| `BUILD_GRACENOTE_COLLECTIONS` | BuildGracenoteCollections | +| `CHECK_FOR_UPDATES` | CheckForUpdates | +| `CLEAN_OLD_BUNDLES` | CleanOldBundles | +| `CLEAN_OLD_CACHE_FILES` | CleanOldCacheFiles | +| `DEEP_MEDIA_ANALYSIS` | DeepMediaAnalysis | +| `GENERATE_AUTO_TAGS` | GenerateAutoTags | +| `GENERATE_CHAPTER_THUMBS` | GenerateChapterThumbs | +| `GENERATE_MEDIA_INDEX_FILES` | GenerateMediaIndexFiles | +| `OPTIMIZE_DATABASE` | OptimizeDatabase | +| `REFRESH_LIBRARIES` | RefreshLibraries | +| `REFRESH_LOCAL_MEDIA` | RefreshLocalMedia | +| `REFRESH_PERIODIC_METADATA` | RefreshPeriodicMetadata | +| `UPGRADE_MEDIA_ANALYSIS` | UpgradeMediaAnalysis | \ No newline at end of file diff --git a/docs/models/operations/performsearchrequest.md b/docs/models/operations/performsearchrequest.md new file mode 100644 index 0000000..07e5f4a --- /dev/null +++ b/docs/models/operations/performsearchrequest.md @@ -0,0 +1,10 @@ +# PerformSearchRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `query` | *str* | :heavy_check_mark: | The query term | arnold | +| `section_id` | *Optional[float]* | :heavy_minus_sign: | This gives context to the search, and can result in re-ordering of search result hubs | | +| `limit` | *Optional[float]* | :heavy_minus_sign: | The number of items to return per hub | 5 | \ No newline at end of file diff --git a/docs/models/operations/performsearchresponse.md b/docs/models/operations/performsearchresponse.md new file mode 100644 index 0000000..707cbed --- /dev/null +++ b/docs/models/operations/performsearchresponse.md @@ -0,0 +1,10 @@ +# PerformSearchResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/performvoicesearchrequest.md b/docs/models/operations/performvoicesearchrequest.md new file mode 100644 index 0000000..dd3e597 --- /dev/null +++ b/docs/models/operations/performvoicesearchrequest.md @@ -0,0 +1,10 @@ +# PerformVoiceSearchRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `query` | *str* | :heavy_check_mark: | The query term | dead+poop | +| `section_id` | *Optional[float]* | :heavy_minus_sign: | This gives context to the search, and can result in re-ordering of search result hubs | | +| `limit` | *Optional[float]* | :heavy_minus_sign: | The number of items to return per hub | 5 | \ No newline at end of file diff --git a/docs/models/operations/performvoicesearchresponse.md b/docs/models/operations/performvoicesearchresponse.md new file mode 100644 index 0000000..f321efb --- /dev/null +++ b/docs/models/operations/performvoicesearchresponse.md @@ -0,0 +1,10 @@ +# PerformVoiceSearchResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/player.md b/docs/models/operations/player.md new file mode 100644 index 0000000..2e6b692 --- /dev/null +++ b/docs/models/operations/player.md @@ -0,0 +1,22 @@ +# Player + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `address` | *Optional[str]* | :heavy_minus_sign: | N/A | 10.10.10.171 | +| `machine_identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | 3tsdzir85m2onc3qyr255aq1 | +| `model` | *Optional[str]* | :heavy_minus_sign: | N/A | standalone | +| `platform` | *Optional[str]* | :heavy_minus_sign: | N/A | windows | +| `platform_version` | *Optional[str]* | :heavy_minus_sign: | N/A | 10.0.22621 | +| `product` | *Optional[str]* | :heavy_minus_sign: | N/A | Plex for Windows | +| `profile` | *Optional[str]* | :heavy_minus_sign: | N/A | Plex Desktop | +| `remote_public_address` | *Optional[str]* | :heavy_minus_sign: | N/A | 68.248.140.20 | +| `state` | *Optional[str]* | :heavy_minus_sign: | N/A | playing | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | DESKTOP-BL80MTD | +| `version` | *Optional[str]* | :heavy_minus_sign: | N/A | 1.85.0.4071-21128b56 | +| `local` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `relayed` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `secure` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `user_id` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | \ No newline at end of file diff --git a/docs/models/operations/playlisttype.md b/docs/models/operations/playlisttype.md new file mode 100644 index 0000000..276ac5f --- /dev/null +++ b/docs/models/operations/playlisttype.md @@ -0,0 +1,12 @@ +# PlaylistType + +limit to a type of playlist. + + +## Values + +| Name | Value | +| ------- | ------- | +| `AUDIO` | audio | +| `VIDEO` | video | +| `PHOTO` | photo | \ No newline at end of file diff --git a/docs/models/operations/producer.md b/docs/models/operations/producer.md new file mode 100644 index 0000000..842532d --- /dev/null +++ b/docs/models/operations/producer.md @@ -0,0 +1,12 @@ +# Producer + + +## Fields + +| Field | Type | Required | Description | Example | +| ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | ----------------------------------------------------------------------------- | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 221 | +| `filter_` | *Optional[str]* | :heavy_minus_sign: | N/A | producer=221 | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Barry Mendel | +| `tag_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 5d776826961905001eb90e2b | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | https://metadata-static.plex.tv/8/people/87877371326a964634d18556d94547e1.jpg | \ No newline at end of file diff --git a/docs/models/operations/provider.md b/docs/models/operations/provider.md new file mode 100644 index 0000000..f65dd4a --- /dev/null +++ b/docs/models/operations/provider.md @@ -0,0 +1,10 @@ +# Provider + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /system/search | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Local Network | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | mixed | \ No newline at end of file diff --git a/docs/models/operations/queryparamonlytransient.md b/docs/models/operations/queryparamonlytransient.md new file mode 100644 index 0000000..6c2e140 --- /dev/null +++ b/docs/models/operations/queryparamonlytransient.md @@ -0,0 +1,11 @@ +# QueryParamOnlyTransient + +Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added). + + +## Values + +| Name | Value | +| ------ | ------ | +| `ZERO` | 0 | +| `ONE` | 1 | \ No newline at end of file diff --git a/docs/models/operations/queryparamsmart.md b/docs/models/operations/queryparamsmart.md new file mode 100644 index 0000000..bb53a11 --- /dev/null +++ b/docs/models/operations/queryparamsmart.md @@ -0,0 +1,11 @@ +# QueryParamSmart + +type of playlists to return (default is all). + + +## Values + +| Name | Value | +| ------ | ------ | +| `ZERO` | 0 | +| `ONE` | 1 | \ No newline at end of file diff --git a/docs/models/operations/queryparamtype.md b/docs/models/operations/queryparamtype.md new file mode 100644 index 0000000..c72a4f7 --- /dev/null +++ b/docs/models/operations/queryparamtype.md @@ -0,0 +1,12 @@ +# QueryParamType + +type of playlist to create + + +## Values + +| Name | Value | +| ------- | ------- | +| `AUDIO` | audio | +| `VIDEO` | video | +| `PHOTO` | photo | \ No newline at end of file diff --git a/docs/models/operations/ratings.md b/docs/models/operations/ratings.md new file mode 100644 index 0000000..4c69179 --- /dev/null +++ b/docs/models/operations/ratings.md @@ -0,0 +1,10 @@ +# Ratings + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------- | ------------------------- | ------------------------- | ------------------------- | ------------------------- | +| `image` | *Optional[str]* | :heavy_minus_sign: | N/A | themoviedb://image.rating | +| `value` | *Optional[float]* | :heavy_minus_sign: | N/A | 7.4 | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | audience | \ No newline at end of file diff --git a/docs/models/operations/refreshlibraryrequest.md b/docs/models/operations/refreshlibraryrequest.md new file mode 100644 index 0000000..8f67ab3 --- /dev/null +++ b/docs/models/operations/refreshlibraryrequest.md @@ -0,0 +1,8 @@ +# RefreshLibraryRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | +| `section_id` | *float* | :heavy_check_mark: | the Id of the library to refresh | \ No newline at end of file diff --git a/docs/models/operations/refreshlibraryresponse.md b/docs/models/operations/refreshlibraryresponse.md new file mode 100644 index 0000000..d492f6c --- /dev/null +++ b/docs/models/operations/refreshlibraryresponse.md @@ -0,0 +1,10 @@ +# RefreshLibraryResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/release.md b/docs/models/operations/release.md new file mode 100644 index 0000000..892c81c --- /dev/null +++ b/docs/models/operations/release.md @@ -0,0 +1,13 @@ +# Release + + +## Fields + +| Field | Type | Required | Description | Example | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | https://plex.tv/updater/releases/5136 | +| `version` | *Optional[str]* | :heavy_minus_sign: | N/A | 1.40.0.7775-456fbaf97 | +| `added` | *Optional[str]* | :heavy_minus_sign: | N/A | (PLEASE NOTE) This version makes changes to the database which will make it compatible only with server versions 1.31.2 or higher (released March 14). You will not be able to use your database on Plex Media Server versions lower than this after this update. Please also be patient when updating to this version if you have a very large database and allow the upgrade process to finish.
(Collections) Items added to a collection from the item context menu will now lock the collection field on the items (#12793)
(Music) Store track genres and add filtering options (#14653)
(Music) Support ID3v2.4 null-separated tags for genres and release type (#14653)
(View History) No longer create a view history entry for items marked as played (#10888)
(Web) Updated to 4.118.0 | +| `fixed` | *Optional[str]* | :heavy_minus_sign: | N/A | (Agents) Changing a 'Other Videos' type library to the modern movie agent would fail (#14483)
(Agents) It is possible that agents are not initialised during startup on rare occasions (#14654)
(Agents) Remove the legacy OpenSubtitles agent which is no longer supported upstream (#14667)
(Collection) Server could become unresponsive when collection membership changes (#14612)
(DVR) Previously watched recordings could be deleted without being watched again (#13779)
(Libraries) When performing fix match on items from certain music libraries the language would default to Arabic (#14501)
(Library) The Content Rating not equal to None filter does not work (#14620)
(Search) Album search results could contain all the album's tracks too (#14486)
(Subtitles) In some circumstances, sidecar subtitles can show up for media when they're no longer available (#14674)
(Transcoder) HW encoding would fail on devices with no rate control (#14222)
(Transcoder) Software transcoding on Ubuntu could cause unexpected behavior (#14605) | +| `download_url` | *Optional[str]* | :heavy_minus_sign: | N/A | https://plex.tv/downloads/latest/5?channel=8&build=linux-x86_64&distro=redhat&X-Plex-Token=xxxxxxxxxxxxxxxxxxxx | +| `state` | *Optional[str]* | :heavy_minus_sign: | N/A | notify | \ No newline at end of file diff --git a/docs/models/operations/role.md b/docs/models/operations/role.md new file mode 100644 index 0000000..b471ce7 --- /dev/null +++ b/docs/models/operations/role.md @@ -0,0 +1,8 @@ +# Role + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Paul Rudd | \ No newline at end of file diff --git a/docs/models/operations/scope.md b/docs/models/operations/scope.md new file mode 100644 index 0000000..dfa1680 --- /dev/null +++ b/docs/models/operations/scope.md @@ -0,0 +1,10 @@ +# Scope + +`all` - This is the only supported `scope` parameter. + + +## Values + +| Name | Value | +| ----- | ----- | +| `ALL` | all | \ No newline at end of file diff --git a/docs/models/operations/searchlibrarymediacontainer.md b/docs/models/operations/searchlibrarymediacontainer.md new file mode 100644 index 0000000..05d0e5b --- /dev/null +++ b/docs/models/operations/searchlibrarymediacontainer.md @@ -0,0 +1,20 @@ +# SearchLibraryMediaContainer + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `allow_sync` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /:/resources/show-fanart.jpg | +| `identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | com.plexapp.plugins.library | +| `media_tag_prefix` | *Optional[str]* | :heavy_minus_sign: | N/A | /system/bundle/media/flags/ | +| `media_tag_version` | *Optional[int]* | :heavy_minus_sign: | N/A | 1698860922 | +| `nocache` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /:/resources/show.png | +| `title1` | *Optional[str]* | :heavy_minus_sign: | N/A | TV Shows | +| `title2` | *Optional[str]* | :heavy_minus_sign: | N/A | Search for '' | +| `view_group` | *Optional[str]* | :heavy_minus_sign: | N/A | season | +| `view_mode` | *Optional[int]* | :heavy_minus_sign: | N/A | 65593 | +| `metadata` | List[[operations.SearchLibraryMetadata](../../models/operations/searchlibrarymetadata.md)] | :heavy_minus_sign: | N/A | [{"addedAt":1705636916,"art":"/library/metadata/1/art/1705636920","guid":"plex://season/602e67e766dfdb002c0a1b5b","index":1,"key":"/library/metadata/2/children","parentGuid":"plex://show/5d9c086c7d06d9001ffd27aa","parentIndex":1,"parentKey":"/library/metadata/1","parentRatingKey":"1","parentStudio":"Mutant Enemy Productions","parentTheme":"/library/metadata/1/theme/1705636920","parentThumb":"/library/metadata/1/thumb/1705636920","parentTitle":"Firefly","parentYear":2002,"ratingKey":"2","summary":"Captain Malcolm 'Mal' Reynolds is a former galactic war veteran who is the captain of the transport ship \"Serenity\". Mal and his crew, ensign Zoe Alleyne Washburne; Zoe's husband, pilot Hoban 'Wash' Washburne; muscular mercenary Jayne Cobb; young mechanic Kaylee Frye; former Alliance medical officer Simon Tam; his disturbed teenage sister River (both on the run from the interplanetary government \"The Alliance\"); the beautiful courtesan Inara Serra; and preacher Shepherd Book do any jobs, legal or illegal, they can find as the Serenity crew travels across the outskirts of outer space.","thumb":"/library/metadata/2/thumb/1705636920","title":"Season 1","type":"season","updatedAt":1705636920}] | \ No newline at end of file diff --git a/docs/models/operations/searchlibrarymetadata.md b/docs/models/operations/searchlibrarymetadata.md new file mode 100644 index 0000000..f8802d1 --- /dev/null +++ b/docs/models/operations/searchlibrarymetadata.md @@ -0,0 +1,27 @@ +# SearchLibraryMetadata + + +## Fields + +| Field | Type | Required | Description | Example | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 2 | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/2/children | +| `parent_rating_key` | *Optional[str]* | :heavy_minus_sign: | N/A | 1 | +| `guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://season/602e67e766dfdb002c0a1b5b | +| `parent_guid` | *Optional[str]* | :heavy_minus_sign: | N/A | plex://show/5d9c086c7d06d9001ffd27aa | +| `parent_studio` | *Optional[str]* | :heavy_minus_sign: | N/A | Mutant Enemy Productions | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | season | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Season 1 | +| `parent_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/1 | +| `parent_title` | *Optional[str]* | :heavy_minus_sign: | N/A | Firefly | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | Captain Malcolm 'Mal' Reynolds is a former galactic war veteran who is the captain of the transport ship "Serenity". Mal and his crew, ensign Zoe Alleyne Washburne; Zoe's husband, pilot Hoban 'Wash' Washburne; muscular mercenary Jayne Cobb; young mechanic Kaylee Frye; former Alliance medical officer Simon Tam; his disturbed teenage sister River (both on the run from the interplanetary government "The Alliance"); the beautiful courtesan Inara Serra; and preacher Shepherd Book do any jobs, legal or illegal, they can find as the Serenity crew travels across the outskirts of outer space. | +| `index` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `parent_index` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `parent_year` | *Optional[int]* | :heavy_minus_sign: | N/A | 2002 | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/2/thumb/1705636920 | +| `art` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/1/art/1705636920 | +| `parent_thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/1/thumb/1705636920 | +| `parent_theme` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/metadata/1/theme/1705636920 | +| `added_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705636916 | +| `updated_at` | *Optional[int]* | :heavy_minus_sign: | N/A | 1705636920 | \ No newline at end of file diff --git a/docs/models/operations/searchlibraryrequest.md b/docs/models/operations/searchlibraryrequest.md new file mode 100644 index 0000000..5633bbb --- /dev/null +++ b/docs/models/operations/searchlibraryrequest.md @@ -0,0 +1,9 @@ +# SearchLibraryRequest + + +## Fields + +| Field | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `section_id` | *int* | :heavy_check_mark: | the Id of the library to query | +| `type` | [operations.Type](../../models/operations/type.md) | :heavy_check_mark: | Plex content type to search for | \ No newline at end of file diff --git a/docs/models/operations/searchlibraryresponse.md b/docs/models/operations/searchlibraryresponse.md new file mode 100644 index 0000000..996fadc --- /dev/null +++ b/docs/models/operations/searchlibraryresponse.md @@ -0,0 +1,11 @@ +# SearchLibraryResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | +| `object` | [Optional[operations.SearchLibraryResponseBody]](../../models/operations/searchlibraryresponsebody.md) | :heavy_minus_sign: | The contents of the library by section and type | \ No newline at end of file diff --git a/docs/models/operations/searchlibraryresponsebody.md b/docs/models/operations/searchlibraryresponsebody.md new file mode 100644 index 0000000..08f02bb --- /dev/null +++ b/docs/models/operations/searchlibraryresponsebody.md @@ -0,0 +1,10 @@ +# SearchLibraryResponseBody + +The contents of the library by section and type + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| `media_container` | [Optional[operations.SearchLibraryMediaContainer]](../../models/operations/searchlibrarymediacontainer.md) | :heavy_minus_sign: | N/A | \ No newline at end of file diff --git a/docs/models/operations/server.md b/docs/models/operations/server.md new file mode 100644 index 0000000..cace365 --- /dev/null +++ b/docs/models/operations/server.md @@ -0,0 +1,18 @@ +# Server + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | +| `name` | *Optional[str]* | :heavy_minus_sign: | N/A | iPad | +| `host` | *Optional[str]* | :heavy_minus_sign: | N/A | 10.10.10.102 | +| `address` | *Optional[str]* | :heavy_minus_sign: | N/A | 10.10.10.102 | +| `port` | *Optional[float]* | :heavy_minus_sign: | N/A | 32500 | +| `machine_identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | A2E901F8-E016-43A7-ADFB-EF8CA8A4AC05 | +| `version` | *Optional[str]* | :heavy_minus_sign: | N/A | 8.17 | +| `protocol` | *Optional[str]* | :heavy_minus_sign: | N/A | plex | +| `product` | *Optional[str]* | :heavy_minus_sign: | N/A | Plex for iOS | +| `device_class` | *Optional[str]* | :heavy_minus_sign: | N/A | tablet | +| `protocol_version` | *Optional[float]* | :heavy_minus_sign: | N/A | 2 | +| `protocol_capabilities` | *Optional[str]* | :heavy_minus_sign: | N/A | playback,playqueues,timeline,provider-playback | \ No newline at end of file diff --git a/docs/models/operations/session.md b/docs/models/operations/session.md new file mode 100644 index 0000000..e93edec --- /dev/null +++ b/docs/models/operations/session.md @@ -0,0 +1,10 @@ +# Session + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | 93h7e00ncblxncqw9lkfaoxi | +| `bandwidth` | *Optional[int]* | :heavy_minus_sign: | N/A | 1050 | +| `location` | *Optional[str]* | :heavy_minus_sign: | N/A | lan | \ No newline at end of file diff --git a/docs/models/operations/setting.md b/docs/models/operations/setting.md new file mode 100644 index 0000000..8455f4d --- /dev/null +++ b/docs/models/operations/setting.md @@ -0,0 +1,17 @@ +# Setting + + +## Supported Types + +### One + +```python +setting: operations.One = /* values here */ +``` + +### Two + +```python +setting: operations.Two = /* values here */ +``` + diff --git a/docs/models/operations/skip.md b/docs/models/operations/skip.md new file mode 100644 index 0000000..5e71f0e --- /dev/null +++ b/docs/models/operations/skip.md @@ -0,0 +1,11 @@ +# Skip + +Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`. + + +## Values + +| Name | Value | +| ------ | ------ | +| `ZERO` | 0 | +| `ONE` | 1 | \ No newline at end of file diff --git a/docs/models/operations/smart.md b/docs/models/operations/smart.md new file mode 100644 index 0000000..a4d5e78 --- /dev/null +++ b/docs/models/operations/smart.md @@ -0,0 +1,11 @@ +# Smart + +whether the playlist is smart or not + + +## Values + +| Name | Value | +| ------ | ------ | +| `ZERO` | 0 | +| `ONE` | 1 | \ No newline at end of file diff --git a/docs/models/operations/sort.md b/docs/models/operations/sort.md new file mode 100644 index 0000000..b7bd4c5 --- /dev/null +++ b/docs/models/operations/sort.md @@ -0,0 +1,13 @@ +# Sort + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | ---------------------------------- | +| `default` | *Optional[str]* | :heavy_minus_sign: | N/A | asc | +| `default_direction` | *Optional[str]* | :heavy_minus_sign: | N/A | desc | +| `desc_key` | *Optional[str]* | :heavy_minus_sign: | N/A | random:desc | +| `first_character_key` | *Optional[str]* | :heavy_minus_sign: | N/A | /library/sections/1/firstCharacter | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | random | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Randomly | \ No newline at end of file diff --git a/docs/models/operations/startalltasksresponse.md b/docs/models/operations/startalltasksresponse.md new file mode 100644 index 0000000..19de245 --- /dev/null +++ b/docs/models/operations/startalltasksresponse.md @@ -0,0 +1,10 @@ +# StartAllTasksResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/starttaskrequest.md b/docs/models/operations/starttaskrequest.md new file mode 100644 index 0000000..69dfaf8 --- /dev/null +++ b/docs/models/operations/starttaskrequest.md @@ -0,0 +1,8 @@ +# StartTaskRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | +| `task_name` | [operations.TaskName](../../models/operations/taskname.md) | :heavy_check_mark: | the name of the task to be started. | \ No newline at end of file diff --git a/docs/models/operations/starttaskresponse.md b/docs/models/operations/starttaskresponse.md new file mode 100644 index 0000000..f8e86f8 --- /dev/null +++ b/docs/models/operations/starttaskresponse.md @@ -0,0 +1,10 @@ +# StartTaskResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/startuniversaltranscoderequest.md b/docs/models/operations/startuniversaltranscoderequest.md new file mode 100644 index 0000000..5d12aad --- /dev/null +++ b/docs/models/operations/startuniversaltranscoderequest.md @@ -0,0 +1,23 @@ +# StartUniversalTranscodeRequest + + +## Fields + +| Field | Type | Required | Description | +| --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | --------------------------------------------- | +| `has_mde` | *float* | :heavy_check_mark: | Whether the media item has MDE | +| `path` | *str* | :heavy_check_mark: | The path to the media item to transcode | +| `media_index` | *float* | :heavy_check_mark: | The index of the media item to transcode | +| `part_index` | *float* | :heavy_check_mark: | The index of the part to transcode | +| `protocol` | *str* | :heavy_check_mark: | The protocol to use for the transcode session | +| `fast_seek` | *Optional[float]* | :heavy_minus_sign: | Whether to use fast seek or not | +| `direct_play` | *Optional[float]* | :heavy_minus_sign: | Whether to use direct play or not | +| `direct_stream` | *Optional[float]* | :heavy_minus_sign: | Whether to use direct stream or not | +| `subtitle_size` | *Optional[float]* | :heavy_minus_sign: | The size of the subtitles | +| `subtites` | *Optional[str]* | :heavy_minus_sign: | The subtitles | +| `audio_boost` | *Optional[float]* | :heavy_minus_sign: | The audio boost | +| `location` | *Optional[str]* | :heavy_minus_sign: | The location of the transcode session | +| `media_buffer_size` | *Optional[float]* | :heavy_minus_sign: | The size of the media buffer | +| `session` | *Optional[str]* | :heavy_minus_sign: | The session ID | +| `add_debug_overlay` | *Optional[float]* | :heavy_minus_sign: | Whether to add a debug overlay or not | +| `auto_adjust_quality` | *Optional[float]* | :heavy_minus_sign: | Whether to auto adjust quality or not | \ No newline at end of file diff --git a/docs/models/operations/startuniversaltranscoderesponse.md b/docs/models/operations/startuniversaltranscoderesponse.md new file mode 100644 index 0000000..91523b3 --- /dev/null +++ b/docs/models/operations/startuniversaltranscoderesponse.md @@ -0,0 +1,10 @@ +# StartUniversalTranscodeResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/state.md b/docs/models/operations/state.md new file mode 100644 index 0000000..f4f712a --- /dev/null +++ b/docs/models/operations/state.md @@ -0,0 +1,12 @@ +# State + +The state of the media item + + +## Values + +| Name | Value | +| --------- | --------- | +| `PLAYING` | playing | +| `PAUSED` | paused | +| `STOPPED` | stopped | \ No newline at end of file diff --git a/docs/models/operations/stopalltasksresponse.md b/docs/models/operations/stopalltasksresponse.md new file mode 100644 index 0000000..4ea49fb --- /dev/null +++ b/docs/models/operations/stopalltasksresponse.md @@ -0,0 +1,10 @@ +# StopAllTasksResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/stoptaskrequest.md b/docs/models/operations/stoptaskrequest.md new file mode 100644 index 0000000..e629222 --- /dev/null +++ b/docs/models/operations/stoptaskrequest.md @@ -0,0 +1,8 @@ +# StopTaskRequest + + +## Fields + +| Field | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `task_name` | [operations.PathParamTaskName](../../models/operations/pathparamtaskname.md) | :heavy_check_mark: | The name of the task to be started. | \ No newline at end of file diff --git a/docs/models/operations/stoptaskresponse.md b/docs/models/operations/stoptaskresponse.md new file mode 100644 index 0000000..e1ca15e --- /dev/null +++ b/docs/models/operations/stoptaskresponse.md @@ -0,0 +1,10 @@ +# StopTaskResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/stoptranscodesessionrequest.md b/docs/models/operations/stoptranscodesessionrequest.md new file mode 100644 index 0000000..bce70bd --- /dev/null +++ b/docs/models/operations/stoptranscodesessionrequest.md @@ -0,0 +1,8 @@ +# StopTranscodeSessionRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| `session_key` | *str* | :heavy_check_mark: | the Key of the transcode session to stop | zz7llzqlx8w9vnrsbnwhbmep | \ No newline at end of file diff --git a/docs/models/operations/stoptranscodesessionresponse.md b/docs/models/operations/stoptranscodesessionresponse.md new file mode 100644 index 0000000..0e4c505 --- /dev/null +++ b/docs/models/operations/stoptranscodesessionresponse.md @@ -0,0 +1,10 @@ +# StopTranscodeSessionResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/stream.md b/docs/models/operations/stream.md new file mode 100644 index 0000000..ca56add --- /dev/null +++ b/docs/models/operations/stream.md @@ -0,0 +1,39 @@ +# Stream + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `id` | *Optional[int]* | :heavy_minus_sign: | N/A | 29 | +| `stream_type` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `default` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `codec` | *Optional[str]* | :heavy_minus_sign: | N/A | aac | +| `index` | *Optional[int]* | :heavy_minus_sign: | N/A | 0 | +| `bitrate` | *Optional[int]* | :heavy_minus_sign: | N/A | 128 | +| `bit_depth` | *Optional[int]* | :heavy_minus_sign: | N/A | 8 | +| `chroma_location` | *Optional[str]* | :heavy_minus_sign: | N/A | left | +| `chroma_subsampling` | *Optional[str]* | :heavy_minus_sign: | N/A | 14520 | +| `coded_height` | *Optional[int]* | :heavy_minus_sign: | N/A | 816 | +| `coded_width` | *Optional[int]* | :heavy_minus_sign: | N/A | 1920 | +| `color_primaries` | *Optional[str]* | :heavy_minus_sign: | N/A | bt709 | +| `color_range` | *Optional[str]* | :heavy_minus_sign: | N/A | tv | +| `color_space` | *Optional[str]* | :heavy_minus_sign: | N/A | bt709 | +| `color_trc` | *Optional[str]* | :heavy_minus_sign: | N/A | bt709 | +| `frame_rate` | *Optional[int]* | :heavy_minus_sign: | N/A | 24 | +| `has_scaling_matrix` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `height` | *Optional[int]* | :heavy_minus_sign: | N/A | 814 | +| `level` | *Optional[int]* | :heavy_minus_sign: | N/A | 40 | +| `profile` | *Optional[str]* | :heavy_minus_sign: | N/A | lc | +| `ref_frames` | *Optional[int]* | :heavy_minus_sign: | N/A | 4 | +| `scan_type` | *Optional[str]* | :heavy_minus_sign: | N/A | progressive | +| `stream_identifier` | *Optional[str]* | :heavy_minus_sign: | N/A | 1 | +| `width` | *Optional[int]* | :heavy_minus_sign: | N/A | 1920 | +| `display_title` | *Optional[str]* | :heavy_minus_sign: | N/A | English (AAC Stereo) | +| `extended_display_title` | *Optional[str]* | :heavy_minus_sign: | N/A | English (AAC Stereo) | +| `selected` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `channels` | *Optional[int]* | :heavy_minus_sign: | N/A | 2 | +| `language` | *Optional[str]* | :heavy_minus_sign: | N/A | English | +| `language_tag` | *Optional[str]* | :heavy_minus_sign: | N/A | en | +| `language_code` | *Optional[str]* | :heavy_minus_sign: | N/A | eng | +| `sampling_rate` | *Optional[int]* | :heavy_minus_sign: | N/A | 44100 | \ No newline at end of file diff --git a/docs/models/operations/tag.md b/docs/models/operations/tag.md new file mode 100644 index 0000000..19a3a0d --- /dev/null +++ b/docs/models/operations/tag.md @@ -0,0 +1,28 @@ +# Tag + +A key representing a specific tag within the section. + + +## Values + +| Name | Value | +| ----------------- | ----------------- | +| `ALL` | all | +| `UNWATCHED` | unwatched | +| `NEWEST` | newest | +| `RECENTLY_ADDED` | recentlyAdded | +| `RECENTLY_VIEWED` | recentlyViewed | +| `ON_DECK` | onDeck | +| `COLLECTION` | collection | +| `EDITION` | edition | +| `GENRE` | genre | +| `YEAR` | year | +| `DECADE` | decade | +| `DIRECTOR` | director | +| `ACTOR` | actor | +| `COUNTRY` | country | +| `CONTENT_RATING` | contentRating | +| `RATING` | rating | +| `RESOLUTION` | resolution | +| `FIRST_CHARACTER` | firstCharacter | +| `FOLDER` | folder | \ No newline at end of file diff --git a/docs/models/operations/taskname.md b/docs/models/operations/taskname.md new file mode 100644 index 0000000..44383b3 --- /dev/null +++ b/docs/models/operations/taskname.md @@ -0,0 +1,23 @@ +# TaskName + +the name of the task to be started. + + +## Values + +| Name | Value | +| ----------------------------- | ----------------------------- | +| `BACKUP_DATABASE` | BackupDatabase | +| `BUILD_GRACENOTE_COLLECTIONS` | BuildGracenoteCollections | +| `CHECK_FOR_UPDATES` | CheckForUpdates | +| `CLEAN_OLD_BUNDLES` | CleanOldBundles | +| `CLEAN_OLD_CACHE_FILES` | CleanOldCacheFiles | +| `DEEP_MEDIA_ANALYSIS` | DeepMediaAnalysis | +| `GENERATE_AUTO_TAGS` | GenerateAutoTags | +| `GENERATE_CHAPTER_THUMBS` | GenerateChapterThumbs | +| `GENERATE_MEDIA_INDEX_FILES` | GenerateMediaIndexFiles | +| `OPTIMIZE_DATABASE` | OptimizeDatabase | +| `REFRESH_LIBRARIES` | RefreshLibraries | +| `REFRESH_LOCAL_MEDIA` | RefreshLocalMedia | +| `REFRESH_PERIODIC_METADATA` | RefreshPeriodicMetadata | +| `UPGRADE_MEDIA_ANALYSIS` | UpgradeMediaAnalysis | \ No newline at end of file diff --git a/docs/models/operations/tonight.md b/docs/models/operations/tonight.md new file mode 100644 index 0000000..7bf98ba --- /dev/null +++ b/docs/models/operations/tonight.md @@ -0,0 +1,11 @@ +# Tonight + +Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install + + +## Values + +| Name | Value | +| ------ | ------ | +| `ZERO` | 0 | +| `ONE` | 1 | \ No newline at end of file diff --git a/docs/models/operations/transcodesession.md b/docs/models/operations/transcodesession.md new file mode 100644 index 0000000..1d244f2 --- /dev/null +++ b/docs/models/operations/transcodesession.md @@ -0,0 +1,31 @@ +# TranscodeSession + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------ | ------------------------ | ------------------------ | ------------------------ | ------------------------ | +| `key` | *Optional[str]* | :heavy_minus_sign: | N/A | vv3i2q2lax92qlzul1hbd4bx | +| `throttled` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `complete` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `progress` | *Optional[float]* | :heavy_minus_sign: | N/A | 1.7999999523162842 | +| `size` | *Optional[int]* | :heavy_minus_sign: | N/A | -22 | +| `speed` | *Optional[float]* | :heavy_minus_sign: | N/A | 25.100000381469727 | +| `error` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `duration` | *Optional[int]* | :heavy_minus_sign: | N/A | 1445695 | +| `remaining` | *Optional[int]* | :heavy_minus_sign: | N/A | 53 | +| `context` | *Optional[str]* | :heavy_minus_sign: | N/A | streaming | +| `source_video_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | h264 | +| `source_audio_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | aac | +| `video_decision` | *Optional[str]* | :heavy_minus_sign: | N/A | transcode | +| `audio_decision` | *Optional[str]* | :heavy_minus_sign: | N/A | transcode | +| `subtitle_decision` | *Optional[str]* | :heavy_minus_sign: | N/A | burn | +| `protocol` | *Optional[str]* | :heavy_minus_sign: | N/A | http | +| `container` | *Optional[str]* | :heavy_minus_sign: | N/A | mkv | +| `video_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | h264 | +| `audio_codec` | *Optional[str]* | :heavy_minus_sign: | N/A | opus | +| `audio_channels` | *Optional[int]* | :heavy_minus_sign: | N/A | 1 | +| `transcode_hw_requested` | *Optional[bool]* | :heavy_minus_sign: | N/A | true | +| `time_stamp` | *Optional[float]* | :heavy_minus_sign: | N/A | 1.7058958054919229e+09 | +| `max_offset_available` | *Optional[float]* | :heavy_minus_sign: | N/A | 29.53 | +| `min_offset_available` | *Optional[float]* | :heavy_minus_sign: | N/A | 3.003000020980835 | \ No newline at end of file diff --git a/docs/models/operations/two.md b/docs/models/operations/two.md new file mode 100644 index 0000000..ed539c2 --- /dev/null +++ b/docs/models/operations/two.md @@ -0,0 +1,17 @@ +# Two + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------ | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | ScheduledLibraryUpdateInterval | +| `label` | *Optional[str]* | :heavy_minus_sign: | N/A | Library scan interval | +| `summary` | *Optional[str]* | :heavy_minus_sign: | N/A | | +| `type` | *Optional[str]* | :heavy_minus_sign: | N/A | int | +| `default` | *Optional[int]* | :heavy_minus_sign: | N/A | 3600 | +| `value` | *Optional[int]* | :heavy_minus_sign: | N/A | 3600 | +| `hidden` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `advanced` | *Optional[bool]* | :heavy_minus_sign: | N/A | false | +| `group` | *Optional[str]* | :heavy_minus_sign: | N/A | library | +| `enum_values` | *Optional[str]* | :heavy_minus_sign: | N/A | 900:every 15 minutes\|1800:every 30 minutes\|3600:hourly\|7200:every 2 hours\|21600:every 6 hours\|43200:every 12 hours\|86400:daily | \ No newline at end of file diff --git a/docs/models/operations/type.md b/docs/models/operations/type.md new file mode 100644 index 0000000..8cfa2e4 --- /dev/null +++ b/docs/models/operations/type.md @@ -0,0 +1,13 @@ +# Type + +Plex content type to search for + + +## Values + +| Name | Value | +| ------- | ------- | +| `ONE` | 1 | +| `TWO` | 2 | +| `THREE` | 3 | +| `FOUR` | 4 | \ No newline at end of file diff --git a/docs/models/operations/updateplaylistrequest.md b/docs/models/operations/updateplaylistrequest.md new file mode 100644 index 0000000..d4e75c3 --- /dev/null +++ b/docs/models/operations/updateplaylistrequest.md @@ -0,0 +1,10 @@ +# UpdatePlaylistRequest + + +## Fields + +| Field | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `playlist_id` | *float* | :heavy_check_mark: | the ID of the playlist | +| `title` | *Optional[str]* | :heavy_minus_sign: | name of the playlist | +| `summary` | *Optional[str]* | :heavy_minus_sign: | summary description of the playlist | \ No newline at end of file diff --git a/docs/models/operations/updateplaylistresponse.md b/docs/models/operations/updateplaylistresponse.md new file mode 100644 index 0000000..d30ced0 --- /dev/null +++ b/docs/models/operations/updateplaylistresponse.md @@ -0,0 +1,10 @@ +# UpdatePlaylistResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/updateplayprogressrequest.md b/docs/models/operations/updateplayprogressrequest.md new file mode 100644 index 0000000..ebc70c1 --- /dev/null +++ b/docs/models/operations/updateplayprogressrequest.md @@ -0,0 +1,10 @@ +# UpdatePlayProgressRequest + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `key` | *str* | :heavy_check_mark: | the media key | +| `time` | *float* | :heavy_check_mark: | The time, in milliseconds, used to set the media playback progress. | +| `state` | *str* | :heavy_check_mark: | The playback state of the media item. | \ No newline at end of file diff --git a/docs/models/operations/updateplayprogressresponse.md b/docs/models/operations/updateplayprogressresponse.md new file mode 100644 index 0000000..490de65 --- /dev/null +++ b/docs/models/operations/updateplayprogressresponse.md @@ -0,0 +1,10 @@ +# UpdatePlayProgressResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/uploadplaylistrequest.md b/docs/models/operations/uploadplaylistrequest.md new file mode 100644 index 0000000..2940a98 --- /dev/null +++ b/docs/models/operations/uploadplaylistrequest.md @@ -0,0 +1,9 @@ +# UploadPlaylistRequest + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `path` | *str* | :heavy_check_mark: | absolute path to a directory on the server where m3u files are stored, or the absolute path to a playlist file on the server.
If the `path` argument is a directory, that path will be scanned for playlist files to be processed.
Each file in that directory creates a separate playlist, with a name based on the filename of the file that created it.
The GUID of each playlist is based on the filename.
If the `path` argument is a file, that file will be used to create a new playlist, with the name based on the filename of the file that created it.
The GUID of each playlist is based on the filename.
| /home/barkley/playlist.m3u | +| `force` | [operations.Force](../../models/operations/force.md) | :heavy_check_mark: | Force overwriting of duplicate playlists.
By default, a playlist file uploaded with the same path will overwrite the existing playlist.
The `force` argument is used to disable overwriting.
If the `force` argument is set to 0, a new playlist will be created suffixed with the date and time that the duplicate was uploaded.
| | \ No newline at end of file diff --git a/docs/models/operations/uploadplaylistresponse.md b/docs/models/operations/uploadplaylistresponse.md new file mode 100644 index 0000000..053e065 --- /dev/null +++ b/docs/models/operations/uploadplaylistresponse.md @@ -0,0 +1,10 @@ +# UploadPlaylistResponse + + +## Fields + +| Field | Type | Required | Description | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `content_type` | *str* | :heavy_check_mark: | HTTP response content type for this operation | +| `status_code` | *int* | :heavy_check_mark: | HTTP response status code for this operation | +| `raw_response` | [requests.Response](https://requests.readthedocs.io/en/latest/api/#requests.Response) | :heavy_check_mark: | Raw HTTP response; suitable for custom response parsing | \ No newline at end of file diff --git a/docs/models/operations/upscale.md b/docs/models/operations/upscale.md new file mode 100644 index 0000000..1622f51 --- /dev/null +++ b/docs/models/operations/upscale.md @@ -0,0 +1,11 @@ +# Upscale + +allow images to be resized beyond native dimensions. + + +## Values + +| Name | Value | +| ------ | ------ | +| `ZERO` | 0 | +| `ONE` | 1 | \ No newline at end of file diff --git a/docs/models/operations/user.md b/docs/models/operations/user.md new file mode 100644 index 0000000..edba98e --- /dev/null +++ b/docs/models/operations/user.md @@ -0,0 +1,10 @@ +# User + + +## Fields + +| Field | Type | Required | Description | Example | +| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | +| `id` | *Optional[str]* | :heavy_minus_sign: | N/A | 1 | +| `thumb` | *Optional[str]* | :heavy_minus_sign: | N/A | https://plex.tv/users/844780fc6f8a26b5/avatar?c=1705853661 | +| `title` | *Optional[str]* | :heavy_minus_sign: | N/A | Blindkitty38 | \ No newline at end of file diff --git a/docs/models/operations/writer.md b/docs/models/operations/writer.md new file mode 100644 index 0000000..54f853a --- /dev/null +++ b/docs/models/operations/writer.md @@ -0,0 +1,8 @@ +# Writer + + +## Fields + +| Field | Type | Required | Description | Example | +| ------------------ | ------------------ | ------------------ | ------------------ | ------------------ | +| `tag` | *Optional[str]* | :heavy_minus_sign: | N/A | Jeff Loveness | \ No newline at end of file diff --git a/docs/sdks/activities/README.md b/docs/sdks/activities/README.md new file mode 100644 index 0000000..22c35af --- /dev/null +++ b/docs/sdks/activities/README.md @@ -0,0 +1,89 @@ +# Activities +(*activities*) + +## Overview + +Activities are awesome. They provide a way to monitor and control asynchronous operations on the server. In order to receive real-time updates for activities, a client would normally subscribe via either EventSource or Websocket endpoints. +Activities are associated with HTTP replies via a special `X-Plex-Activity` header which contains the UUID of the activity. +Activities are optional cancellable. If cancellable, they may be cancelled via the `DELETE` endpoint. Other details: +- They can contain a `progress` (from 0 to 100) marking the percent completion of the activity. +- They must contain an `type` which is used by clients to distinguish the specific activity. +- They may contain a `Context` object with attributes which associate the activity with various specific entities (items, libraries, etc.) +- The may contain a `Response` object which attributes which represent the result of the asynchronous operation. + + +### Available Operations + +* [get_server_activities](#get_server_activities) - Get Server Activities +* [cancel_server_activities](#cancel_server_activities) - Cancel Server Activities + +## get_server_activities + +Get Server Activities + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.activities.get_server_activities() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetServerActivitiesResponse](../../models/operations/getserveractivitiesresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| errors.GetServerActivitiesResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## cancel_server_activities + +Cancel Server Activities + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.activities.cancel_server_activities(activity_uuid='string') + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `activity_uuid` | *str* | :heavy_check_mark: | The UUID of the activity to cancel. | + + +### Response + +**[operations.CancelServerActivitiesResponse](../../models/operations/cancelserveractivitiesresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| errors.CancelServerActivitiesResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/docs/sdks/butler/README.md b/docs/sdks/butler/README.md new file mode 100644 index 0000000..c1bc1ea --- /dev/null +++ b/docs/sdks/butler/README.md @@ -0,0 +1,201 @@ +# Butler +(*butler*) + +## Overview + +Butler is the task manager of the Plex Media Server Ecosystem. + + +### Available Operations + +* [get_butler_tasks](#get_butler_tasks) - Get Butler tasks +* [start_all_tasks](#start_all_tasks) - Start all Butler tasks +* [stop_all_tasks](#stop_all_tasks) - Stop all Butler tasks +* [start_task](#start_task) - Start a single Butler task +* [stop_task](#stop_task) - Stop a single Butler task + +## get_butler_tasks + +Returns a list of butler tasks + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.butler.get_butler_tasks() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetButlerTasksResponse](../../models/operations/getbutlertasksresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------------- | --------------------------------- | --------------------------------- | +| errors.GetButlerTasksResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## start_all_tasks + +This endpoint will attempt to start all Butler tasks that are enabled in the settings. Butler tasks normally run automatically during a time window configured on the server's Settings page but can be manually started using this endpoint. Tasks will run with the following criteria: +1. Any tasks not scheduled to run on the current day will be skipped. +2. If a task is configured to run at a random time during the configured window and we are outside that window, the task will start immediately. +3. If a task is configured to run at a random time during the configured window and we are within that window, the task will be scheduled at a random time within the window. +4. If we are outside the configured window, the task will start immediately. + + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.butler.start_all_tasks() + +if res.status_code == 200: + # handle response + pass +``` + + +### Response + +**[operations.StartAllTasksResponse](../../models/operations/startalltasksresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------- | -------------------------------- | -------------------------------- | +| errors.StartAllTasksResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## stop_all_tasks + +This endpoint will stop all currently running tasks and remove any scheduled tasks from the queue. + + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.butler.stop_all_tasks() + +if res.status_code == 200: + # handle response + pass +``` + + +### Response + +**[operations.StopAllTasksResponse](../../models/operations/stopalltasksresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------- | ------------------------------- | ------------------------------- | +| errors.StopAllTasksResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## start_task + +This endpoint will attempt to start a single Butler task that is enabled in the settings. Butler tasks normally run automatically during a time window configured on the server's Settings page but can be manually started using this endpoint. Tasks will run with the following criteria: +1. Any tasks not scheduled to run on the current day will be skipped. +2. If a task is configured to run at a random time during the configured window and we are outside that window, the task will start immediately. +3. If a task is configured to run at a random time during the configured window and we are within that window, the task will be scheduled at a random time within the window. +4. If we are outside the configured window, the task will start immediately. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.butler.start_task(task_name=operations.TaskName.CLEAN_OLD_BUNDLES) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | ---------------------------------------------------------- | +| `task_name` | [operations.TaskName](../../models/operations/taskname.md) | :heavy_check_mark: | the name of the task to be started. | + + +### Response + +**[operations.StartTaskResponse](../../models/operations/starttaskresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ---------------------------- | ---------------------------- | ---------------------------- | +| errors.StartTaskResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## stop_task + +This endpoint will stop a currently running task by name, or remove it from the list of scheduled tasks if it exists. See the section above for a list of task names for this endpoint. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.butler.stop_task(task_name=operations.PathParamTaskName.BACKUP_DATABASE) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | +| `task_name` | [operations.PathParamTaskName](../../models/operations/pathparamtaskname.md) | :heavy_check_mark: | The name of the task to be started. | + + +### Response + +**[operations.StopTaskResponse](../../models/operations/stoptaskresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------- | --------------------------- | --------------------------- | +| errors.StopTaskResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/docs/sdks/hubs/README.md b/docs/sdks/hubs/README.md new file mode 100644 index 0000000..8427eaf --- /dev/null +++ b/docs/sdks/hubs/README.md @@ -0,0 +1,94 @@ +# Hubs +(*hubs*) + +## Overview + +Hubs are a structured two-dimensional container for media, generally represented by multiple horizontal rows. + + +### Available Operations + +* [get_global_hubs](#get_global_hubs) - Get Global Hubs +* [get_library_hubs](#get_library_hubs) - Get library specific hubs + +## get_global_hubs + +Get Global Hubs filtered by the parameters provided. + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.hubs.get_global_hubs(count=1262.49, only_transient=operations.OnlyTransient.ONE) + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| `count` | *Optional[float]* | :heavy_minus_sign: | The number of items to return with each hub. | +| `only_transient` | [Optional[operations.OnlyTransient]](../../models/operations/onlytransient.md) | :heavy_minus_sign: | Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added). | + + +### Response + +**[operations.GetGlobalHubsResponse](../../models/operations/getglobalhubsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------- | -------------------------------- | -------------------------------- | +| errors.GetGlobalHubsResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_library_hubs + +This endpoint will return a list of library specific hubs + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.hubs.get_library_hubs(section_id=6728.76, count=9010.22, only_transient=operations.QueryParamOnlyTransient.ZERO) + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| `section_id` | *float* | :heavy_check_mark: | the Id of the library to query | +| `count` | *Optional[float]* | :heavy_minus_sign: | The number of items to return with each hub. | +| `only_transient` | [Optional[operations.QueryParamOnlyTransient]](../../models/operations/queryparamonlytransient.md) | :heavy_minus_sign: | Only return hubs which are "transient", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added). | + + +### Response + +**[operations.GetLibraryHubsResponse](../../models/operations/getlibraryhubsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------------- | --------------------------------- | --------------------------------- | +| errors.GetLibraryHubsResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/docs/sdks/library/README.md b/docs/sdks/library/README.md new file mode 100644 index 0000000..be4f957 --- /dev/null +++ b/docs/sdks/library/README.md @@ -0,0 +1,519 @@ +# Library +(*library*) + +## Overview + +API Calls interacting with Plex Media Server Libraries + + +### Available Operations + +* [get_file_hash](#get_file_hash) - Get Hash Value +* [get_recently_added](#get_recently_added) - Get Recently Added +* [get_libraries](#get_libraries) - Get All Libraries +* [get_library](#get_library) - Get Library Details +* [delete_library](#delete_library) - Delete Library Section +* [get_library_items](#get_library_items) - Get Library Items +* [refresh_library](#refresh_library) - Refresh Library +* [search_library](#search_library) - Search Library +* [get_metadata](#get_metadata) - Get Items Metadata +* [get_metadata_children](#get_metadata_children) - Get Items Children +* [get_on_deck](#get_on_deck) - Get On Deck + +## get_file_hash + +This resource returns hash values for local files + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.library.get_file_hash(url='file://C:\Image.png&type=13', type=4462.17) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------------------------------- | +| `url` | *str* | :heavy_check_mark: | This is the path to the local file, must be prefixed by `file://` | file://C:\Image.png&type=13 | +| `type` | *Optional[float]* | :heavy_minus_sign: | Item type | | + + +### Response + +**[operations.GetFileHashResponse](../../models/operations/getfilehashresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------ | ------------------------------ | ------------------------------ | +| errors.GetFileHashResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_recently_added + +This endpoint will return the recently added content. + + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.library.get_recently_added() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetRecentlyAddedResponse](../../models/operations/getrecentlyaddedresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | +| errors.GetRecentlyAddedResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_libraries + +A library section (commonly referred to as just a library) is a collection of media. +Libraries are typed, and depending on their type provide either a flat or a hierarchical view of the media. +For example, a music library has an artist > albums > tracks structure, whereas a movie library is flat. + +Libraries have features beyond just being a collection of media; for starters, they include information about supported types, filters and sorts. +This allows a client to provide a rich interface around the media (e.g. allow sorting movies by release year). + + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.library.get_libraries() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetLibrariesResponse](../../models/operations/getlibrariesresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------- | ------------------------------- | ------------------------------- | +| errors.GetLibrariesResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_library + +## Library Details Endpoint + +This endpoint provides comprehensive details about the library, focusing on organizational aspects rather than the content itself. + +The details include: + +### Directories +Organized into three categories: + +- **Primary Directories**: + - Used in some clients for quick access to media subsets (e.g., "All", "On Deck"). + - Most can be replicated via media queries. + - Customizable by users. + +- **Secondary Directories**: + - Marked with `secondary="1"`. + - Used in older clients for structured navigation. + +- **Special Directories**: + - Includes a "By Folder" entry for filesystem-based browsing. + - Contains an obsolete `search="1"` entry for on-the-fly search dialog creation. + +### Types +Each type in the library comes with a set of filters and sorts, aiding in building dynamic media controls: + +- **Type Object Attributes**: + - `key`: Endpoint for the media list of this type. + - `type`: Metadata type (if standard Plex type). + - `title`: Title for this content type (e.g., "Movies"). + +- **Filter Objects**: + - Subset of the media query language. + - Attributes include `filter` (name), `filterType` (data type), `key` (endpoint for value range), and `title`. + +- **Sort Objects**: + - Description of sort fields. + - Attributes include `defaultDirection` (asc/desc), `descKey` and `key` (sort parameters), and `title`. + +> **Note**: Filters and sorts are optional; without them, no filtering controls are rendered. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.library.get_library(section_id=1000, include_details=operations.IncludeDetails.ZERO) + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `section_id` | *float* | :heavy_check_mark: | the Id of the library to query | 1000 | +| `include_details` | [Optional[operations.IncludeDetails]](../../models/operations/includedetails.md) | :heavy_minus_sign: | Whether or not to include details for a section (types, filters, and sorts).
Only exists for backwards compatibility, media providers other than the server libraries have it on always.
| | + + +### Response + +**[operations.GetLibraryResponse](../../models/operations/getlibraryresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ----------------------------- | ----------------------------- | ----------------------------- | +| errors.GetLibraryResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## delete_library + +Delate a library using a specific section + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.library.delete_library(section_id=1000) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `section_id` | *float* | :heavy_check_mark: | the Id of the library to query | 1000 | + + +### Response + +**[operations.DeleteLibraryResponse](../../models/operations/deletelibraryresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------- | -------------------------------- | -------------------------------- | +| errors.DeleteLibraryResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_library_items + +Fetches details from a specific section of the library identified by a section key and a tag. The tag parameter accepts the following values: +- `all`: All items in the section. +- `unwatched`: Items that have not been played. +- `newest`: Items that are recently released. +- `recentlyAdded`: Items that are recently added to the library. +- `recentlyViewed`: Items that were recently viewed. +- `onDeck`: Items to continue watching. +- `collection`: Items categorized by collection. +- `edition`: Items categorized by edition. +- `genre`: Items categorized by genre. +- `year`: Items categorized by year of release. +- `decade`: Items categorized by decade. +- `director`: Items categorized by director. +- `actor`: Items categorized by starring actor. +- `country`: Items categorized by country of origin. +- `contentRating`: Items categorized by content rating. +- `rating`: Items categorized by rating. +- `resolution`: Items categorized by resolution. +- `firstCharacter`: Items categorized by the first letter. +- `folder`: Items categorized by folder. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.library.get_library_items(section_id=451092, tag=operations.Tag.UNWATCHED) + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `section_id` | *int* | :heavy_check_mark: | the Id of the library to query | +| `tag` | [operations.Tag](../../models/operations/tag.md) | :heavy_check_mark: | A key representing a specific tag within the section. | + + +### Response + +**[operations.GetLibraryItemsResponse](../../models/operations/getlibraryitemsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4x-5xx | */* | + +## refresh_library + +This endpoint Refreshes the library. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.library.refresh_library(section_id=934.16) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------- | -------------------------------- | -------------------------------- | -------------------------------- | +| `section_id` | *float* | :heavy_check_mark: | the Id of the library to refresh | + + +### Response + +**[operations.RefreshLibraryResponse](../../models/operations/refreshlibraryresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------------- | --------------------------------- | --------------------------------- | +| errors.RefreshLibraryResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## search_library + +Search for content within a specific section of the library. + +### Types +Each type in the library comes with a set of filters and sorts, aiding in building dynamic media controls: + +- **Type Object Attributes**: + - `type`: Metadata type (if standard Plex type). + - `title`: Title for this content type (e.g., "Movies"). + +- **Filter Objects**: + - Subset of the media query language. + - Attributes include `filter` (name), `filterType` (data type), `key` (endpoint for value range), and `title`. + +- **Sort Objects**: + - Description of sort fields. + - Attributes include `defaultDirection` (asc/desc), `descKey` and `key` (sort parameters), and `title`. + +> **Note**: Filters and sorts are optional; without them, no filtering controls are rendered. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.library.search_library(section_id=933505, type=operations.Type.FOUR) + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------- | +| `section_id` | *int* | :heavy_check_mark: | the Id of the library to query | +| `type` | [operations.Type](../../models/operations/type.md) | :heavy_check_mark: | Plex content type to search for | + + +### Response + +**[operations.SearchLibraryResponse](../../models/operations/searchlibraryresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------- | --------------- | --------------- | +| errors.SDKError | 4x-5xx | */* | + +## get_metadata + +This endpoint will return the metadata of a library item specified with the ratingKey. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.library.get_metadata(rating_key=8382.31) + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `rating_key` | *float* | :heavy_check_mark: | the id of the library item to return the children of. | + + +### Response + +**[operations.GetMetadataResponse](../../models/operations/getmetadataresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------ | ------------------------------ | ------------------------------ | +| errors.GetMetadataResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_metadata_children + +This endpoint will return the children of of a library item specified with the ratingKey. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.library.get_metadata_children(rating_key=1539.14) + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------------------------- | +| `rating_key` | *float* | :heavy_check_mark: | the id of the library item to return the children of. | + + +### Response + +**[operations.GetMetadataChildrenResponse](../../models/operations/getmetadatachildrenresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| errors.GetMetadataChildrenResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_on_deck + +This endpoint will return the on deck content. + + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.library.get_on_deck() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetOnDeckResponse](../../models/operations/getondeckresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ---------------------------- | ---------------------------- | ---------------------------- | +| errors.GetOnDeckResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/docs/sdks/log/README.md b/docs/sdks/log/README.md new file mode 100644 index 0000000..f268aa7 --- /dev/null +++ b/docs/sdks/log/README.md @@ -0,0 +1,150 @@ +# Log +(*log*) + +## Overview + +Submit logs to the Log Handler for Plex Media Server + + +### Available Operations + +* [log_line](#log_line) - Logging a single line message. +* [log_multi_line](#log_multi_line) - Logging a multi-line message +* [enable_paper_trail](#enable_paper_trail) - Enabling Papertrail + +## log_line + +This endpoint will write a single-line log message, including a level and source to the main Plex Media Server log. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.log.log_line(level=operations.Level.THREE, message='Test log message', source='Postman') + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- | +| `level` | [operations.Level](../../models/operations/level.md) | :heavy_check_mark: | An integer log level to write to the PMS log with.
0: Error
1: Warning
2: Info
3: Debug
4: Verbose
| | +| `message` | *str* | :heavy_check_mark: | The text of the message to write to the log. | Test log message | +| `source` | *str* | :heavy_check_mark: | a string indicating the source of the message. | Postman | + + +### Response + +**[operations.LogLineResponse](../../models/operations/loglineresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------- | -------------------------- | -------------------------- | +| errors.LogLineResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## log_multi_line + +This endpoint allows for the batch addition of log entries to the main Plex Media Server log. +It accepts a text/plain request body, where each line represents a distinct log entry. +Each log entry consists of URL-encoded key-value pairs, specifying log attributes such as 'level', 'message', and 'source'. + +Log entries are separated by a newline character (`\n`). +Each entry's parameters should be URL-encoded to ensure accurate parsing and handling of special characters. +This method is efficient for logging multiple entries in a single API call, reducing the overhead of multiple individual requests. + +The 'level' parameter specifies the log entry's severity or importance, with the following integer values: +- `0`: Error - Critical issues that require immediate attention. +- `1`: Warning - Important events that are not critical but may indicate potential issues. +- `2`: Info - General informational messages about system operation. +- `3`: Debug - Detailed information useful for debugging purposes. +- `4`: Verbose - Highly detailed diagnostic information for in-depth analysis. + +The 'message' parameter contains the log text, and 'source' identifies the log message's origin (e.g., an application name or module). + +Example of a single log entry format: +`level=4&message=Sample%20log%20entry&source=applicationName` + +Ensure each parameter is properly URL-encoded to avoid interpretation issues. + + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + +req = 'level=4&message=Test%20message%201&source=postman +level=3&message=Test%20message%202&source=postman +level=1&message=Test%20message%203&source=postman' + +res = s.log.log_multi_line(req) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | +| `request` | [str](../../models/.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.LogMultiLineResponse](../../models/operations/logmultilineresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------- | ------------------------------- | ------------------------------- | +| errors.LogMultiLineResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## enable_paper_trail + +This endpoint will enable all Plex Media Serverlogs to be sent to the Papertrail networked logging site for a period of time. + + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.log.enable_paper_trail() + +if res.status_code == 200: + # handle response + pass +``` + + +### Response + +**[operations.EnablePaperTrailResponse](../../models/operations/enablepapertrailresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | +| errors.EnablePaperTrailResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/docs/sdks/media/README.md b/docs/sdks/media/README.md new file mode 100644 index 0000000..ff969ab --- /dev/null +++ b/docs/sdks/media/README.md @@ -0,0 +1,133 @@ +# Media +(*media*) + +## Overview + +API Calls interacting with Plex Media Server Media + + +### Available Operations + +* [mark_played](#mark_played) - Mark Media Played +* [mark_unplayed](#mark_unplayed) - Mark Media Unplayed +* [update_play_progress](#update_play_progress) - Update Media Play Progress + +## mark_played + +This will mark the provided media key as Played. + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.media.mark_played(key=59398) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | ------------------------------- | +| `key` | *float* | :heavy_check_mark: | The media key to mark as played | 59398 | + + +### Response + +**[operations.MarkPlayedResponse](../../models/operations/markplayedresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ----------------------------- | ----------------------------- | ----------------------------- | +| errors.MarkPlayedResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## mark_unplayed + +This will mark the provided media key as Unplayed. + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.media.mark_unplayed(key=59398) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | --------------------------------- | +| `key` | *float* | :heavy_check_mark: | The media key to mark as Unplayed | 59398 | + + +### Response + +**[operations.MarkUnplayedResponse](../../models/operations/markunplayedresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------- | ------------------------------- | ------------------------------- | +| errors.MarkUnplayedResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## update_play_progress + +This API command can be used to update the play progress of a media item. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.media.update_play_progress(key='string', time=6900.91, state='string') + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | ------------------------------------------------------------------- | +| `key` | *str* | :heavy_check_mark: | the media key | +| `time` | *float* | :heavy_check_mark: | The time, in milliseconds, used to set the media playback progress. | +| `state` | *str* | :heavy_check_mark: | The playback state of the media item. | + + +### Response + +**[operations.UpdatePlayProgressResponse](../../models/operations/updateplayprogressresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------------- | ------------------------------------- | ------------------------------------- | +| errors.UpdatePlayProgressResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/docs/sdks/playlists/README.md b/docs/sdks/playlists/README.md new file mode 100644 index 0000000..6891af1 --- /dev/null +++ b/docs/sdks/playlists/README.md @@ -0,0 +1,401 @@ +# Playlists +(*playlists*) + +## Overview + +Playlists are ordered collections of media. They can be dumb (just a list of media) or smart (based on a media query, such as "all albums from 2017"). +They can be organized in (optionally nesting) folders. +Retrieving a playlist, or its items, will trigger a refresh of its metadata. +This may cause the duration and number of items to change. + + +### Available Operations + +* [create_playlist](#create_playlist) - Create a Playlist +* [get_playlists](#get_playlists) - Get All Playlists +* [get_playlist](#get_playlist) - Retrieve Playlist +* [delete_playlist](#delete_playlist) - Deletes a Playlist +* [update_playlist](#update_playlist) - Update a Playlist +* [get_playlist_contents](#get_playlist_contents) - Retrieve Playlist Contents +* [clear_playlist_contents](#clear_playlist_contents) - Delete Playlist Contents +* [add_playlist_contents](#add_playlist_contents) - Adding to a Playlist +* [upload_playlist](#upload_playlist) - Upload Playlist + +## create_playlist + +Create a new playlist. By default the playlist is blank. To create a playlist along with a first item, pass: +- `uri` - The content URI for what we're playing (e.g. `server://1234/com.plexapp.plugins.library/library/metadata/1`). +- `playQueueID` - To create a playlist from an existing play queue. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + +req = operations.CreatePlaylistRequest( + title='string', + type=operations.QueryParamType.PHOTO, + smart=operations.Smart.ONE, + uri='https://inborn-brochure.biz', +) + +res = s.playlists.create_playlist(req) + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------ | +| `request` | [operations.CreatePlaylistRequest](../../models/operations/createplaylistrequest.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.CreatePlaylistResponse](../../models/operations/createplaylistresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------------- | --------------------------------- | --------------------------------- | +| errors.CreatePlaylistResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_playlists + +Get All Playlists given the specified filters. + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.playlists.get_playlists(playlist_type=operations.PlaylistType.AUDIO, smart=operations.QueryParamSmart.ZERO) + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | +| `playlist_type` | [Optional[operations.PlaylistType]](../../models/operations/playlisttype.md) | :heavy_minus_sign: | limit to a type of playlist. | +| `smart` | [Optional[operations.QueryParamSmart]](../../models/operations/queryparamsmart.md) | :heavy_minus_sign: | type of playlists to return (default is all). | + + +### Response + +**[operations.GetPlaylistsResponse](../../models/operations/getplaylistsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------- | ------------------------------- | ------------------------------- | +| errors.GetPlaylistsResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_playlist + +Gets detailed metadata for a playlist. A playlist for many purposes (rating, editing metadata, tagging), can be treated like a regular metadata item: +Smart playlist details contain the `content` attribute. This is the content URI for the generator. This can then be parsed by a client to provide smart playlist editing. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.playlists.get_playlist(playlist_id=4109.48) + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------- | ---------------------- | ---------------------- | ---------------------- | +| `playlist_id` | *float* | :heavy_check_mark: | the ID of the playlist | + + +### Response + +**[operations.GetPlaylistResponse](../../models/operations/getplaylistresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------ | ------------------------------ | ------------------------------ | +| errors.GetPlaylistResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## delete_playlist + +This endpoint will delete a playlist + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.playlists.delete_playlist(playlist_id=216.22) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------- | ---------------------- | ---------------------- | ---------------------- | +| `playlist_id` | *float* | :heavy_check_mark: | the ID of the playlist | + + +### Response + +**[operations.DeletePlaylistResponse](../../models/operations/deleteplaylistresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------------- | --------------------------------- | --------------------------------- | +| errors.DeletePlaylistResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## update_playlist + +From PMS version 1.9.1 clients can also edit playlist metadata using this endpoint as they would via `PUT /library/metadata/{playlistID}` + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.playlists.update_playlist(playlist_id=3915, title='string', summary='string') + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | ----------------------------------- | +| `playlist_id` | *float* | :heavy_check_mark: | the ID of the playlist | +| `title` | *Optional[str]* | :heavy_minus_sign: | name of the playlist | +| `summary` | *Optional[str]* | :heavy_minus_sign: | summary description of the playlist | + + +### Response + +**[operations.UpdatePlaylistResponse](../../models/operations/updateplaylistresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------------- | --------------------------------- | --------------------------------- | +| errors.UpdatePlaylistResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_playlist_contents + +Gets the contents of a playlist. Should be paged by clients via standard mechanisms. +By default leaves are returned (e.g. episodes, movies). In order to return other types you can use the `type` parameter. +For example, you could use this to display a list of recently added albums vis a smart playlist. +Note that for dumb playlists, items have a `playlistItemID` attribute which is used for deleting or moving items. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.playlists.get_playlist_contents(playlist_id=5004.46, type=9403.59) + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| --------------------------------------- | --------------------------------------- | --------------------------------------- | --------------------------------------- | +| `playlist_id` | *float* | :heavy_check_mark: | the ID of the playlist | +| `type` | *float* | :heavy_check_mark: | the metadata type of the item to return | + + +### Response + +**[operations.GetPlaylistContentsResponse](../../models/operations/getplaylistcontentsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| errors.GetPlaylistContentsResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## clear_playlist_contents + +Clears a playlist, only works with dumb playlists. Returns the playlist. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.playlists.clear_playlist_contents(playlist_id=1893.18) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ---------------------- | ---------------------- | ---------------------- | ---------------------- | +| `playlist_id` | *float* | :heavy_check_mark: | the ID of the playlist | + + +### Response + +**[operations.ClearPlaylistContentsResponse](../../models/operations/clearplaylistcontentsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| errors.ClearPlaylistContentsResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## add_playlist_contents + +Adds a generator to a playlist, same parameters as the POST to create. With a dumb playlist, this adds the specified items to the playlist. +With a smart playlist, passing a new `uri` parameter replaces the rules for the playlist. Returns the playlist. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.playlists.add_playlist_contents(playlist_id=8502.01, uri='server://12345/com.plexapp.plugins.library/library/metadata/1', play_queue_id=123) + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------- | +| `playlist_id` | *float* | :heavy_check_mark: | the ID of the playlist | | +| `uri` | *str* | :heavy_check_mark: | the content URI for the playlist | server://12345/com.plexapp.plugins.library/library/metadata/1 | +| `play_queue_id` | *Optional[float]* | :heavy_minus_sign: | the play queue to add to a playlist | 123 | + + +### Response + +**[operations.AddPlaylistContentsResponse](../../models/operations/addplaylistcontentsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| errors.AddPlaylistContentsResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## upload_playlist + +Imports m3u playlists by passing a path on the server to scan for m3u-formatted playlist files, or a path to a single playlist file. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.playlists.upload_playlist(path='/home/barkley/playlist.m3u', force=operations.Force.ZERO) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `path` | *str* | :heavy_check_mark: | absolute path to a directory on the server where m3u files are stored, or the absolute path to a playlist file on the server.
If the `path` argument is a directory, that path will be scanned for playlist files to be processed.
Each file in that directory creates a separate playlist, with a name based on the filename of the file that created it.
The GUID of each playlist is based on the filename.
If the `path` argument is a file, that file will be used to create a new playlist, with the name based on the filename of the file that created it.
The GUID of each playlist is based on the filename.
| /home/barkley/playlist.m3u | +| `force` | [operations.Force](../../models/operations/force.md) | :heavy_check_mark: | Force overwriting of duplicate playlists.
By default, a playlist file uploaded with the same path will overwrite the existing playlist.
The `force` argument is used to disable overwriting.
If the `force` argument is set to 0, a new playlist will be created suffixed with the date and time that the duplicate was uploaded.
| | + + +### Response + +**[operations.UploadPlaylistResponse](../../models/operations/uploadplaylistresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------------- | --------------------------------- | --------------------------------- | +| errors.UploadPlaylistResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/docs/sdks/plex/README.md b/docs/sdks/plex/README.md new file mode 100644 index 0000000..b5da55d --- /dev/null +++ b/docs/sdks/plex/README.md @@ -0,0 +1,5 @@ +# Plex +(*plex*) + +### Available Operations + diff --git a/docs/sdks/plexapi/README.md b/docs/sdks/plexapi/README.md new file mode 100644 index 0000000..8ee580c --- /dev/null +++ b/docs/sdks/plexapi/README.md @@ -0,0 +1,9 @@ +# PlexAPI SDK + + +## Overview + +An Open API Spec for interacting with Plex.tv and Plex Servers + +### Available Operations + diff --git a/docs/sdks/search/README.md b/docs/sdks/search/README.md new file mode 100644 index 0000000..bb43910 --- /dev/null +++ b/docs/sdks/search/README.md @@ -0,0 +1,150 @@ +# Search +(*search*) + +## Overview + +API Calls that perform search operations with Plex Media Server + + +### Available Operations + +* [perform_search](#perform_search) - Perform a search +* [perform_voice_search](#perform_voice_search) - Perform a voice search +* [get_search_results](#get_search_results) - Get Search Results + +## perform_search + +This endpoint performs a search across all library sections, or a single section, and returns matches as hubs, split up by type. It performs spell checking, looks for partial matches, and orders the hubs based on quality of results. In addition, based on matches, it will return other related matches (e.g. for a genre match, it may return movies in that genre, or for an actor match, movies with that actor). + +In the response's items, the following extra attributes are returned to further describe or disambiguate the result: + +- `reason`: The reason for the result, if not because of a direct search term match; can be either: + - `section`: There are multiple identical results from different sections. + - `originalTitle`: There was a search term match from the original title field (sometimes those can be very different or in a foreign language). + - ``: If the reason for the result is due to a result in another hub, the source hub identifier is returned. For example, if the search is for "dylan" then Bob Dylan may be returned as an artist result, an a few of his albums returned as album results with a reason code of `artist` (the identifier of that particular hub). Or if the search is for "arnold", there might be movie results returned with a reason of `actor` +- `reasonTitle`: The string associated with the reason code. For a section reason, it'll be the section name; For a hub identifier, it'll be a string associated with the match (e.g. `Arnold Schwarzenegger` for movies which were returned because the search was for "arnold"). +- `reasonID`: The ID of the item associated with the reason for the result. This might be a section ID, a tag ID, an artist ID, or a show ID. + +This request is intended to be very fast, and called as the user types. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.search.perform_search(query='dylan', section_id=1516.53, limit=5) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `query` | *str* | :heavy_check_mark: | The query term | arnold | +| `section_id` | *Optional[float]* | :heavy_minus_sign: | This gives context to the search, and can result in re-ordering of search result hubs | | +| `limit` | *Optional[float]* | :heavy_minus_sign: | The number of items to return per hub | 5 | + + +### Response + +**[operations.PerformSearchResponse](../../models/operations/performsearchresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------- | -------------------------------- | -------------------------------- | +| errors.PerformSearchResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## perform_voice_search + +This endpoint performs a search specifically tailored towards voice or other imprecise input which may work badly with the substring and spell-checking heuristics used by the `/hubs/search` endpoint. +It uses a [Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance) heuristic to search titles, and as such is much slower than the other search endpoint. +Whenever possible, clients should limit the search to the appropriate type. +Results, as well as their containing per-type hubs, contain a `distance` attribute which can be used to judge result quality. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.search.perform_voice_search(query='dead+poop', section_id=4094.8, limit=5) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- | +| `query` | *str* | :heavy_check_mark: | The query term | dead+poop | +| `section_id` | *Optional[float]* | :heavy_minus_sign: | This gives context to the search, and can result in re-ordering of search result hubs | | +| `limit` | *Optional[float]* | :heavy_minus_sign: | The number of items to return per hub | 5 | + + +### Response + +**[operations.PerformVoiceSearchResponse](../../models/operations/performvoicesearchresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------------- | ------------------------------------- | ------------------------------------- | +| errors.PerformVoiceSearchResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_search_results + +This will search the database for the string provided. + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.search.get_search_results(query='110') + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | ------------------------------ | +| `query` | *str* | :heavy_check_mark: | The search query string to use | 110 | + + +### Response + +**[operations.GetSearchResultsResponse](../../models/operations/getsearchresultsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | +| errors.GetSearchResultsResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/docs/sdks/security/README.md b/docs/sdks/security/README.md new file mode 100644 index 0000000..2c7ba5a --- /dev/null +++ b/docs/sdks/security/README.md @@ -0,0 +1,94 @@ +# Security +(*security*) + +## Overview + +API Calls against Security for Plex Media Server + + +### Available Operations + +* [get_transient_token](#get_transient_token) - Get a Transient Token. +* [get_source_connection_information](#get_source_connection_information) - Get Source Connection Information + +## get_transient_token + +This endpoint provides the caller with a temporary token with the same access level as the caller's token. These tokens are valid for up to 48 hours and are destroyed if the server instance is restarted. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.security.get_transient_token(type=operations.GetTransientTokenQueryParamType.DELEGATION, scope=operations.Scope.ALL) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- | +| `type` | [operations.GetTransientTokenQueryParamType](../../models/operations/gettransienttokenqueryparamtype.md) | :heavy_check_mark: | `delegation` - This is the only supported `type` parameter. | +| `scope` | [operations.Scope](../../models/operations/scope.md) | :heavy_check_mark: | `all` - This is the only supported `scope` parameter. | + + +### Response + +**[operations.GetTransientTokenResponse](../../models/operations/gettransienttokenresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | +| errors.GetTransientTokenResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_source_connection_information + +If a caller requires connection details and a transient token for a source that is known to the server, for example a cloud media provider or shared PMS, then this endpoint can be called. This endpoint is only accessible with either an admin token or a valid transient token generated from an admin token. +Note: requires Plex Media Server >= 1.15.4. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.security.get_source_connection_information(source='server://client-identifier') + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | ---------------------------------------------- | +| `source` | *str* | :heavy_check_mark: | The source identifier with an included prefix. | server://client-identifier | + + +### Response + +**[operations.GetSourceConnectionInformationResponse](../../models/operations/getsourceconnectioninformationresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------------------------- | ------------------------------------------------- | ------------------------------------------------- | +| errors.GetSourceConnectionInformationResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/docs/sdks/server/README.md b/docs/sdks/server/README.md new file mode 100644 index 0000000..22f4cbc --- /dev/null +++ b/docs/sdks/server/README.md @@ -0,0 +1,291 @@ +# Server +(*server*) + +## Overview + +Operations against the Plex Media Server System. + + +### Available Operations + +* [get_server_capabilities](#get_server_capabilities) - Server Capabilities +* [get_server_preferences](#get_server_preferences) - Get Server Preferences +* [get_available_clients](#get_available_clients) - Get Available Clients +* [get_devices](#get_devices) - Get Devices +* [get_server_identity](#get_server_identity) - Get Server Identity +* [get_my_plex_account](#get_my_plex_account) - Get MyPlex Account +* [get_resized_photo](#get_resized_photo) - Get a Resized Photo +* [get_server_list](#get_server_list) - Get Server List + +## get_server_capabilities + +Server Capabilities + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.server.get_server_capabilities() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetServerCapabilitiesResponse](../../models/operations/getservercapabilitiesresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| errors.GetServerCapabilitiesResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_server_preferences + +Get Server Preferences + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.server.get_server_preferences() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetServerPreferencesResponse](../../models/operations/getserverpreferencesresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------------------- | --------------------------------------- | --------------------------------------- | +| errors.GetServerPreferencesResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_available_clients + +Get Available Clients + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.server.get_available_clients() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetAvailableClientsResponse](../../models/operations/getavailableclientsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------------- | -------------------------------------- | -------------------------------------- | +| errors.GetAvailableClientsResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_devices + +Get Devices + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.server.get_devices() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetDevicesResponse](../../models/operations/getdevicesresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ----------------------------- | ----------------------------- | ----------------------------- | +| errors.GetDevicesResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_server_identity + +Get Server Identity + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.server.get_server_identity() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetServerIdentityResponse](../../models/operations/getserveridentityresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | +| errors.GetServerIdentityResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_my_plex_account + +Returns MyPlex Account Information + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.server.get_my_plex_account() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetMyPlexAccountResponse](../../models/operations/getmyplexaccountresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ----------------------------------- | ----------------------------------- | ----------------------------------- | +| errors.GetMyPlexAccountResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_resized_photo + +Plex's Photo transcoder is used throughout the service to serve images at specified sizes. + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + +req = operations.GetResizedPhotoRequest( + width=110, + height=165, + opacity=643869, + blur=4000, + min_size=operations.MinSize.ZERO, + upscale=operations.Upscale.ZERO, + url='/library/metadata/49564/thumb/1654258204', +) + +res = s.server.get_resized_photo(req) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| `request` | [operations.GetResizedPhotoRequest](../../models/operations/getresizedphotorequest.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.GetResizedPhotoResponse](../../models/operations/getresizedphotoresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | +| errors.GetResizedPhotoResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_server_list + +Get Server List + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.server.get_server_list() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetServerListResponse](../../models/operations/getserverlistresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| -------------------------------- | -------------------------------- | -------------------------------- | +| errors.GetServerListResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/docs/sdks/sessions/README.md b/docs/sdks/sessions/README.md new file mode 100644 index 0000000..4959625 --- /dev/null +++ b/docs/sdks/sessions/README.md @@ -0,0 +1,149 @@ +# Sessions +(*sessions*) + +## Overview + +API Calls that perform search operations with Plex Media Server Sessions + + +### Available Operations + +* [get_sessions](#get_sessions) - Get Active Sessions +* [get_session_history](#get_session_history) - Get Session History +* [get_transcode_sessions](#get_transcode_sessions) - Get Transcode Sessions +* [stop_transcode_session](#stop_transcode_session) - Stop a Transcode Session + +## get_sessions + +This will retrieve the "Now Playing" Information of the PMS. + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.sessions.get_sessions() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetSessionsResponse](../../models/operations/getsessionsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------ | ------------------------------ | ------------------------------ | +| errors.GetSessionsResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_session_history + +This will Retrieve a listing of all history views. + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.sessions.get_session_history() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetSessionHistoryResponse](../../models/operations/getsessionhistoryresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------------ | ------------------------------------ | ------------------------------------ | +| errors.GetSessionHistoryResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_transcode_sessions + +Get Transcode Sessions + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.sessions.get_transcode_sessions() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetTranscodeSessionsResponse](../../models/operations/gettranscodesessionsresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------------------- | --------------------------------------- | --------------------------------------- | +| errors.GetTranscodeSessionsResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## stop_transcode_session + +Stop a Transcode Session + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.sessions.stop_transcode_session(session_key='zz7llzqlx8w9vnrsbnwhbmep') + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | Example | +| ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | ---------------------------------------- | +| `session_key` | *str* | :heavy_check_mark: | the Key of the transcode session to stop | zz7llzqlx8w9vnrsbnwhbmep | + + +### Response + +**[operations.StopTranscodeSessionResponse](../../models/operations/stoptranscodesessionresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------------------- | --------------------------------------- | --------------------------------------- | +| errors.StopTranscodeSessionResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/docs/sdks/tv/README.md b/docs/sdks/tv/README.md new file mode 100644 index 0000000..7c3c92a --- /dev/null +++ b/docs/sdks/tv/README.md @@ -0,0 +1,89 @@ +# Tv +(*plex.tv*) + +### Available Operations + +* [get_pin](#get_pin) - Get a Pin +* [get_token](#get_token) - Get Access Token + +## get_pin + +Retrieve a Pin from Plex.tv for authentication flows + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.plex.tv.get_pin(x_plex_client_identifier='string', strong=False) + +if res.object is not None: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | +| `x_plex_client_identifier` | *str* | :heavy_check_mark: | Plex Authentication Token | +| `strong` | *Optional[bool]* | :heavy_minus_sign: | Determines the kind of code returned by the API call
Strong codes are used for Pin authentication flows
Non-Strong codes are used for `Plex.tv/link`
| +| `server_url` | *Optional[str]* | :heavy_minus_sign: | An optional server URL to use. | + + +### Response + +**[operations.GetPinResponse](../../models/operations/getpinresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------- | ------------------------- | ------------------------- | +| errors.GetPinResponseBody | 400 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_token + +Retrieve an Access Token from Plex.tv after the Pin has already been authenticated + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.plex.tv.get_token(pin_id='string', x_plex_client_identifier='string') + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | ----------------------------------------- | +| `pin_id` | *str* | :heavy_check_mark: | The PinID to retrieve an access token for | +| `x_plex_client_identifier` | *str* | :heavy_check_mark: | Plex Authentication Token | +| `server_url` | *Optional[str]* | :heavy_minus_sign: | An optional server URL to use. | + + +### Response + +**[operations.GetTokenResponse](../../models/operations/gettokenresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| --------------------------- | --------------------------- | --------------------------- | +| errors.GetTokenResponseBody | 400 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/docs/sdks/updater/README.md b/docs/sdks/updater/README.md new file mode 100644 index 0000000..b7b2a81 --- /dev/null +++ b/docs/sdks/updater/README.md @@ -0,0 +1,126 @@ +# Updater +(*updater*) + +## Overview + +This describes the API for searching and applying updates to the Plex Media Server. +Updates to the status can be observed via the Event API. + + +### Available Operations + +* [get_update_status](#get_update_status) - Querying status of updates +* [check_for_updates](#check_for_updates) - Checking for updates +* [apply_updates](#apply_updates) - Apply Updates + +## get_update_status + +Querying status of updates + +### Example Usage + +```python +import plex_api + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.updater.get_update_status() + +if res.object is not None: + # handle response + pass +``` + + +### Response + +**[operations.GetUpdateStatusResponse](../../models/operations/getupdatestatusresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | +| errors.GetUpdateStatusResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## check_for_updates + +Checking for updates + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.updater.check_for_updates(download=operations.Download.ONE) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------- | +| `download` | [Optional[operations.Download]](../../models/operations/download.md) | :heavy_minus_sign: | Indicate that you want to start download any updates found. | + + +### Response + +**[operations.CheckForUpdatesResponse](../../models/operations/checkforupdatesresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ---------------------------------- | ---------------------------------- | ---------------------------------- | +| errors.CheckForUpdatesResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## apply_updates + +Note that these two parameters are effectively mutually exclusive. The `tonight` parameter takes precedence and `skip` will be ignored if `tonight` is also passed + + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + + +res = s.updater.apply_updates(tonight=operations.Tonight.ONE, skip=operations.Skip.ZERO) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `tonight` | [Optional[operations.Tonight]](../../models/operations/tonight.md) | :heavy_minus_sign: | Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install | +| `skip` | [Optional[operations.Skip]](../../models/operations/skip.md) | :heavy_minus_sign: | Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`. | + + +### Response + +**[operations.ApplyUpdatesResponse](../../models/operations/applyupdatesresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------- | ------------------------------- | ------------------------------- | +| errors.ApplyUpdatesResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/docs/sdks/video/README.md b/docs/sdks/video/README.md new file mode 100644 index 0000000..c1cec89 --- /dev/null +++ b/docs/sdks/video/README.md @@ -0,0 +1,109 @@ +# Video +(*video*) + +## Overview + +API Calls that perform operations with Plex Media Server Videos + + +### Available Operations + +* [start_universal_transcode](#start_universal_transcode) - Start Universal Transcode +* [get_timeline](#get_timeline) - Get the timeline for a media item + +## start_universal_transcode + +Begin a Universal Transcode Session + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + +req = operations.StartUniversalTranscodeRequest( + has_mde=8924.99, + path='/etc/mail', + media_index=9962.95, + part_index=1232.82, + protocol='string', +) + +res = s.video.start_universal_transcode(req) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------ | +| `request` | [operations.StartUniversalTranscodeRequest](../../models/operations/startuniversaltranscoderequest.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.StartUniversalTranscodeResponse](../../models/operations/startuniversaltranscoderesponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------------------ | ------------------------------------------ | ------------------------------------------ | +| errors.StartUniversalTranscodeResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | + +## get_timeline + +Get the timeline for a media item + +### Example Usage + +```python +import plex_api +from plex_api.models import operations + +s = plex_api.PlexAPI( + access_token="", +) + +req = operations.GetTimelineRequest( + rating_key=716.56, + key='', + state=operations.State.PAUSED, + has_mde=7574.33, + time=3327.51, + duration=7585.39, + context='string', + play_queue_item_id=1406.21, + play_back_time=2699.34, + row=3536.42, +) + +res = s.video.get_timeline(req) + +if res.status_code == 200: + # handle response + pass +``` + +### Parameters + +| Parameter | Type | Required | Description | +| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | +| `request` | [operations.GetTimelineRequest](../../models/operations/gettimelinerequest.md) | :heavy_check_mark: | The request object to use for the request. | + + +### Response + +**[operations.GetTimelineResponse](../../models/operations/gettimelineresponse.md)** +### Errors + +| Error Object | Status Code | Content Type | +| ------------------------------ | ------------------------------ | ------------------------------ | +| errors.GetTimelineResponseBody | 401 | application/json | +| errors.SDKError | 4x-5xx | */* | diff --git a/pylintrc b/pylintrc new file mode 100644 index 0000000..4bc02a1 --- /dev/null +++ b/pylintrc @@ -0,0 +1,647 @@ +[MAIN] + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Clear in-memory caches upon conclusion of linting. Useful if running pylint +# in a server-like mode. +clear-cache-post-run=no + +# Load and enable all available extensions. Use --list-extensions to see a list +# all available extensions. +#enable-all-extensions= + +# In error mode, messages with a category besides ERROR or FATAL are +# suppressed, and no reports are done by default. Error mode is compatible with +# disabling specific errors. +#errors-only= + +# Always return a 0 (non-error) status code, even if lint errors are found. +# This is primarily useful in continuous integration scripts. +#exit-zero= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +extension-pkg-allow-list= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. (This is an alternative name to extension-pkg-allow-list +# for backward compatibility.) +extension-pkg-whitelist= + +# Return non-zero exit code if any of these messages/categories are detected, +# even if score is above --fail-under value. Syntax same as enable. Messages +# specified are enabled, while categories only check already-enabled messages. +fail-on= + +# Specify a score threshold under which the program will exit with error. +fail-under=10 + +# Interpret the stdin as a python script, whose filename needs to be passed as +# the module_or_package argument. +#from-stdin= + +# Files or directories to be skipped. They should be base names, not paths. +ignore=CVS + +# Add files or directories matching the regular expressions patterns to the +# ignore-list. The regex matches against paths and can be in Posix or Windows +# format. Because '\\' represents the directory delimiter on Windows systems, +# it can't be used as an escape character. +ignore-paths= + +# Files or directories matching the regular expression patterns are skipped. +# The regex matches against base names, not paths. The default value ignores +# Emacs file locks +ignore-patterns=^\.# + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis). It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use, and will cap the count on Windows to +# avoid hangs. +jobs=1 + +# Control the amount of potential inferred values when inferring a single +# object. This can help the performance when dealing with large functions or +# complex, nested conditions. +limit-inference-results=100 + +# List of plugins (as comma separated values of python module names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Minimum Python version to use for version dependent checks. Will default to +# the version used to run pylint. +py-version=3.8 + +# Discover python modules and packages in the file system subtree. +recursive=no + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + +# In verbose mode, extra non-checker-related info will be displayed. +#verbose= + + +[BASIC] + +# Naming style matching correct argument names. +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style. If left empty, argument names will be checked with the set +# naming style. +#argument-rgx= + +# Naming style matching correct attribute names. +#attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. If left empty, attribute names will be checked with the set naming +# style. +attr-rgx=[^\W\d][^\W]*|__.*__$ + +# Bad variable names which should always be refused, separated by a comma. +bad-names= + +# Bad variable names regexes, separated by a comma. If names match any regex, +# they will always be refused +bad-names-rgxs= + +# Naming style matching correct class attribute names. +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. If left empty, class attribute names will be checked +# with the set naming style. +#class-attribute-rgx= + +# Naming style matching correct class constant names. +class-const-naming-style=UPPER_CASE + +# Regular expression matching correct class constant names. Overrides class- +# const-naming-style. If left empty, class constant names will be checked with +# the set naming style. +#class-const-rgx= + +# Naming style matching correct class names. +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming- +# style. If left empty, class names will be checked with the set naming style. +#class-rgx= + +# Naming style matching correct constant names. +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style. If left empty, constant names will be checked with the set naming +# style. +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names. +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style. If left empty, function names will be checked with the set +# naming style. +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma. +good-names=i, + j, + k, + ex, + Run, + _, + ip, + tv, + id, + qr + +# Good variable names regexes, separated by a comma. If names match any regex, +# they will always be accepted +good-names-rgxs= + +# Include a hint for the correct naming format with invalid-name. +include-naming-hint=no + +# Naming style matching correct inline iteration names. +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. If left empty, inline iteration names will be checked +# with the set naming style. +#inlinevar-rgx= + +# Naming style matching correct method names. +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style. If left empty, method names will be checked with the set naming style. +#method-rgx= + +# Naming style matching correct module names. +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style. If left empty, module names will be checked with the set naming style. +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +# These decorators are taken in consideration only for invalid-name. +property-classes=abc.abstractproperty + +# Regular expression matching correct type variable names. If left empty, type +# variable names will be checked with the set naming style. +#typevar-rgx= + +# Naming style matching correct variable names. +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style. If left empty, variable names will be checked with the set +# naming style. +#variable-rgx= + + +[CLASSES] + +# Warn about protected attribute access inside special methods +check-protected-access-in-special-methods=no + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp, + __post_init__ + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[DESIGN] + +# List of regular expressions of class ancestor names to ignore when counting +# public methods (see R0903) +exclude-too-few-public-methods= + +# List of qualified class names to ignore when counting class parents (see +# R0901) +ignored-parents= + +# Maximum number of arguments for function / method. +max-args=5 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in an if statement (see R0916). +max-bool-expr=5 + +# Maximum number of branch for function / method body. +max-branches=12 + +# Maximum number of locals for function / method body. +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=25 + +# Maximum number of return / yield for function / method body. +max-returns=6 + +# Maximum number of statements in function / method body. +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when caught. +overgeneral-exceptions=builtins.BaseException,builtins.Exception + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module. +max-module-lines=1000 + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[IMPORTS] + +# List of modules that can be imported at any level, not just the top level +# one. +allow-any-import-level= + +# Allow explicit reexports by alias from a package __init__. +allow-reexport-from-package=no + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Deprecated modules which should not be used, separated by a comma. +deprecated-modules= + +# Output a graph (.gv or any supported image format) of external dependencies +# to the given file (report RP0402 must not be disabled). +ext-import-graph= + +# Output a graph (.gv or any supported image format) of all (i.e. internal and +# external) dependencies to the given file (report RP0402 must not be +# disabled). +import-graph= + +# Output a graph (.gv or any supported image format) of internal dependencies +# to the given file (report RP0402 must not be disabled). +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + +# Couples of modules and preferred modules, separated by a comma. +preferred-modules= + + +[LOGGING] + +# The type of string formatting that logging methods do. `old` means using % +# formatting, `new` is for `{}` formatting. +logging-format-style=old + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules=logging + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, +# UNDEFINED. +confidence=HIGH, + CONTROL_FLOW, + INFERENCE, + INFERENCE_FAILURE, + UNDEFINED + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then re-enable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=raw-checker-failed, + bad-inline-option, + locally-disabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-symbolic-message-instead, + trailing-whitespace, + line-too-long, + missing-class-docstring, + missing-module-docstring, + missing-function-docstring, + too-many-instance-attributes, + wrong-import-order, + too-many-arguments, + broad-exception-raised, + too-few-public-methods, + too-many-branches, + chained-comparison, + duplicate-code, + trailing-newlines, + too-many-public-methods, + too-many-locals, + too-many-lines, + using-constant-test, + too-many-statements, + cyclic-import, + too-many-nested-blocks, + too-many-boolean-expressions, + no-else-raise, + bare-except + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[METHOD_ARGS] + +# List of qualified names (i.e., library.method) which require a timeout +# parameter e.g. 'requests.api.get,requests.api.post' +timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + +# Regular expression of note tags to take in consideration. +notes-rgx= + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=sys.exit,argparse.parse_error + + +[REPORTS] + +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each +# category, as well as 'statement' which is the total number of statements +# analyzed. This score is used by the global evaluation report (RP0004). +evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio). You can also give a reporter class, e.g. +# mypackage.mymodule.MyReporterClass. +#output-format= + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes + + +[SIMILARITIES] + +# Comments are removed from the similarity computation +ignore-comments=yes + +# Docstrings are removed from the similarity computation +ignore-docstrings=yes + +# Imports are removed from the similarity computation +ignore-imports=yes + +# Signatures are removed from the similarity computation +ignore-signatures=yes + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it work, +# install the 'python-enchant' package. +spelling-dict= + +# List of comma separated words that should be considered directives if they +# appear at the beginning of a comment and should not be checked. +spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains the private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to the private dictionary (see the +# --spelling-private-dict-file option) instead of raising a message. +spelling-store-unknown-words=no + + +[STRING] + +# This flag controls whether inconsistent-quotes generates a warning when the +# character used as a quote delimiter is used inconsistently within a module. +check-quote-consistency=no + +# This flag controls whether the implicit-str-concat should generate a warning +# on implicit string concatenation in sequences defined over several lines. +check-str-concat-over-line-jumps=no + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether to warn about missing members when the owner of the attribute +# is inferred to be None. +ignore-none=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of symbolic message names to ignore for Mixin members. +ignored-checks-for-mixins=no-member, + not-async-context-manager, + not-context-manager, + attribute-defined-outside-init + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + +# Regex pattern to define which classes are considered mixins. +mixin-class-rgx=.*[Mm]ixin + +# List of decorators that change the signature of a decorated function. +signature-mutators= + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid defining new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of names allowed to shadow builtins +allowed-redefined-builtins=id,object + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expected to +# not be used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..fdebac1 --- /dev/null +++ b/setup.py @@ -0,0 +1,41 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import setuptools + +try: + with open("README.md", "r") as fh: + long_description = fh.read() +except FileNotFoundError: + long_description = "" + +setuptools.setup( + name="plexpy", + version="0.0.1", + author="LukeHagar", + description="Python Client SDK Generated by Speakeasy", + long_description=long_description, + long_description_content_type="text/markdown", + packages=setuptools.find_packages(where="src"), + install_requires=[ + "certifi>=2023.7.22", + "charset-normalizer>=3.2.0", + "dataclasses-json @ git+https://github.com/speakeasy-api/dataclasses-json@fix-union-deserialization", + "idna>=3.4", + "jsonpath-python>=1.0.6 ", + "marshmallow>=3.19.0", + "mypy-extensions>=1.0.0", + "packaging>=23.1", + "python-dateutil>=2.8.2", + "requests>=2.31.0", + "six>=1.16.0", + "typing-inspect>=0.9.0", + "typing_extensions>=4.7.1", + "urllib3>=1.26.18", + ], + extras_require={ + "dev":["pylint==2.16.2"] + }, + package_dir={'': 'src'}, + python_requires='>=3.8', + package_data={"plexpy": ["py.typed"]}, +) diff --git a/src/plex_api/__init__.py b/src/plex_api/__init__.py new file mode 100644 index 0000000..e6c0dee --- /dev/null +++ b/src/plex_api/__init__.py @@ -0,0 +1,4 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdk import * +from .sdkconfiguration import * diff --git a/src/plex_api/activities.py b/src/plex_api/activities.py new file mode 100644 index 0000000..c46d7ac --- /dev/null +++ b/src/plex_api/activities.py @@ -0,0 +1,104 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations +from typing import Optional + +class Activities: + r"""Activities are awesome. They provide a way to monitor and control asynchronous operations on the server. In order to receive real-time updates for activities, a client would normally subscribe via either EventSource or Websocket endpoints. + Activities are associated with HTTP replies via a special `X-Plex-Activity` header which contains the UUID of the activity. + Activities are optional cancellable. If cancellable, they may be cancelled via the `DELETE` endpoint. Other details: + - They can contain a `progress` (from 0 to 100) marking the percent completion of the activity. + - They must contain an `type` which is used by clients to distinguish the specific activity. + - They may contain a `Context` object with attributes which associate the activity with various specific entities (items, libraries, etc.) + - The may contain a `Response` object which attributes which represent the result of the asynchronous operation. + """ + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_server_activities(self) -> operations.GetServerActivitiesResponse: + r"""Get Server Activities + Get Server Activities + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/activities' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetServerActivitiesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetServerActivitiesResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetServerActivitiesResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def cancel_server_activities(self, activity_uuid: str) -> operations.CancelServerActivitiesResponse: + r"""Cancel Server Activities + Cancel Server Activities + """ + request = operations.CancelServerActivitiesRequest( + activity_uuid=activity_uuid, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.CancelServerActivitiesRequest, base_url, '/activities/{activityUUID}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('DELETE', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.CancelServerActivitiesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.CancelServerActivitiesResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/plex_api/butler.py b/src/plex_api/butler.py new file mode 100644 index 0000000..76cba3a --- /dev/null +++ b/src/plex_api/butler.py @@ -0,0 +1,220 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations +from typing import Optional + +class Butler: + r"""Butler is the task manager of the Plex Media Server Ecosystem.""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_butler_tasks(self) -> operations.GetButlerTasksResponse: + r"""Get Butler tasks + Returns a list of butler tasks + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/butler' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetButlerTasksResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetButlerTasksResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetButlerTasksResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def start_all_tasks(self) -> operations.StartAllTasksResponse: + r"""Start all Butler tasks + This endpoint will attempt to start all Butler tasks that are enabled in the settings. Butler tasks normally run automatically during a time window configured on the server's Settings page but can be manually started using this endpoint. Tasks will run with the following criteria: + 1. Any tasks not scheduled to run on the current day will be skipped. + 2. If a task is configured to run at a random time during the configured window and we are outside that window, the task will start immediately. + 3. If a task is configured to run at a random time during the configured window and we are within that window, the task will be scheduled at a random time within the window. + 4. If we are outside the configured window, the task will start immediately. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/butler' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.StartAllTasksResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.StartAllTasksResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def stop_all_tasks(self) -> operations.StopAllTasksResponse: + r"""Stop all Butler tasks + This endpoint will stop all currently running tasks and remove any scheduled tasks from the queue. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/butler' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('DELETE', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.StopAllTasksResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.StopAllTasksResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def start_task(self, task_name: operations.TaskName) -> operations.StartTaskResponse: + r"""Start a single Butler task + This endpoint will attempt to start a single Butler task that is enabled in the settings. Butler tasks normally run automatically during a time window configured on the server's Settings page but can be manually started using this endpoint. Tasks will run with the following criteria: + 1. Any tasks not scheduled to run on the current day will be skipped. + 2. If a task is configured to run at a random time during the configured window and we are outside that window, the task will start immediately. + 3. If a task is configured to run at a random time during the configured window and we are within that window, the task will be scheduled at a random time within the window. + 4. If we are outside the configured window, the task will start immediately. + """ + request = operations.StartTaskRequest( + task_name=task_name, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.StartTaskRequest, base_url, '/butler/{taskName}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.StartTaskResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code in [200, 202]: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.StartTaskResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def stop_task(self, task_name: operations.PathParamTaskName) -> operations.StopTaskResponse: + r"""Stop a single Butler task + This endpoint will stop a currently running task by name, or remove it from the list of scheduled tasks if it exists. See the section above for a list of task names for this endpoint. + """ + request = operations.StopTaskRequest( + task_name=task_name, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.StopTaskRequest, base_url, '/butler/{taskName}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('DELETE', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.StopTaskResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code == 404 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.StopTaskResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/plex_api/hubs.py b/src/plex_api/hubs.py new file mode 100644 index 0000000..fecafa1 --- /dev/null +++ b/src/plex_api/hubs.py @@ -0,0 +1,110 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations +from typing import Optional + +class Hubs: + r"""Hubs are a structured two-dimensional container for media, generally represented by multiple horizontal rows.""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_global_hubs(self, count: Optional[float] = None, only_transient: Optional[operations.OnlyTransient] = None) -> operations.GetGlobalHubsResponse: + r"""Get Global Hubs + Get Global Hubs filtered by the parameters provided. + """ + request = operations.GetGlobalHubsRequest( + count=count, + only_transient=only_transient, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/hubs' + headers = {} + query_params = utils.get_query_params(operations.GetGlobalHubsRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetGlobalHubsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetGlobalHubsResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetGlobalHubsResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_library_hubs(self, section_id: float, count: Optional[float] = None, only_transient: Optional[operations.QueryParamOnlyTransient] = None) -> operations.GetLibraryHubsResponse: + r"""Get library specific hubs + This endpoint will return a list of library specific hubs + """ + request = operations.GetLibraryHubsRequest( + section_id=section_id, + count=count, + only_transient=only_transient, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetLibraryHubsRequest, base_url, '/hubs/sections/{sectionId}', request) + headers = {} + query_params = utils.get_query_params(operations.GetLibraryHubsRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetLibraryHubsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetLibraryHubsResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetLibraryHubsResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/plex_api/library.py b/src/plex_api/library.py new file mode 100644 index 0000000..b55697b --- /dev/null +++ b/src/plex_api/library.py @@ -0,0 +1,558 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations +from typing import Optional + +class Library: + r"""API Calls interacting with Plex Media Server Libraries""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_file_hash(self, url: str, type_: Optional[float] = None) -> operations.GetFileHashResponse: + r"""Get Hash Value + This resource returns hash values for local files + """ + request = operations.GetFileHashRequest( + url=url, + type=type_, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/library/hashes' + headers = {} + query_params = utils.get_query_params(operations.GetFileHashRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetFileHashResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetFileHashResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_recently_added(self) -> operations.GetRecentlyAddedResponse: + r"""Get Recently Added + This endpoint will return the recently added content. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/library/recentlyAdded' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetRecentlyAddedResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetRecentlyAddedResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetRecentlyAddedResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_libraries(self) -> operations.GetLibrariesResponse: + r"""Get All Libraries + A library section (commonly referred to as just a library) is a collection of media. + Libraries are typed, and depending on their type provide either a flat or a hierarchical view of the media. + For example, a music library has an artist > albums > tracks structure, whereas a movie library is flat. + + Libraries have features beyond just being a collection of media; for starters, they include information about supported types, filters and sorts. + This allows a client to provide a rich interface around the media (e.g. allow sorting movies by release year). + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/library/sections' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetLibrariesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetLibrariesResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetLibrariesResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_library(self, section_id: float, include_details: Optional[operations.IncludeDetails] = None) -> operations.GetLibraryResponse: + r"""Get Library Details + ## Library Details Endpoint + + This endpoint provides comprehensive details about the library, focusing on organizational aspects rather than the content itself. + + The details include: + + ### Directories + Organized into three categories: + + - **Primary Directories**: + - Used in some clients for quick access to media subsets (e.g., \"All\", \"On Deck\"). + - Most can be replicated via media queries. + - Customizable by users. + + - **Secondary Directories**: + - Marked with `secondary=\"1\"`. + - Used in older clients for structured navigation. + + - **Special Directories**: + - Includes a \"By Folder\" entry for filesystem-based browsing. + - Contains an obsolete `search=\"1\"` entry for on-the-fly search dialog creation. + + ### Types + Each type in the library comes with a set of filters and sorts, aiding in building dynamic media controls: + + - **Type Object Attributes**: + - `key`: Endpoint for the media list of this type. + - `type`: Metadata type (if standard Plex type). + - `title`: Title for this content type (e.g., \"Movies\"). + + - **Filter Objects**: + - Subset of the media query language. + - Attributes include `filter` (name), `filterType` (data type), `key` (endpoint for value range), and `title`. + + - **Sort Objects**: + - Description of sort fields. + - Attributes include `defaultDirection` (asc/desc), `descKey` and `key` (sort parameters), and `title`. + + > **Note**: Filters and sorts are optional; without them, no filtering controls are rendered. + """ + request = operations.GetLibraryRequest( + section_id=section_id, + include_details=include_details, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetLibraryRequest, base_url, '/library/sections/{sectionId}', request) + headers = {} + query_params = utils.get_query_params(operations.GetLibraryRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetLibraryResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetLibraryResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetLibraryResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def delete_library(self, section_id: float) -> operations.DeleteLibraryResponse: + r"""Delete Library Section + Delate a library using a specific section + """ + request = operations.DeleteLibraryRequest( + section_id=section_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.DeleteLibraryRequest, base_url, '/library/sections/{sectionId}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('DELETE', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.DeleteLibraryResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.DeleteLibraryResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_library_items(self, section_id: int, tag: operations.Tag) -> operations.GetLibraryItemsResponse: + r"""Get Library Items + Fetches details from a specific section of the library identified by a section key and a tag. The tag parameter accepts the following values: + - `all`: All items in the section. + - `unwatched`: Items that have not been played. + - `newest`: Items that are recently released. + - `recentlyAdded`: Items that are recently added to the library. + - `recentlyViewed`: Items that were recently viewed. + - `onDeck`: Items to continue watching. + - `collection`: Items categorized by collection. + - `edition`: Items categorized by edition. + - `genre`: Items categorized by genre. + - `year`: Items categorized by year of release. + - `decade`: Items categorized by decade. + - `director`: Items categorized by director. + - `actor`: Items categorized by starring actor. + - `country`: Items categorized by country of origin. + - `contentRating`: Items categorized by content rating. + - `rating`: Items categorized by rating. + - `resolution`: Items categorized by resolution. + - `firstCharacter`: Items categorized by the first letter. + - `folder`: Items categorized by folder. + """ + request = operations.GetLibraryItemsRequest( + section_id=section_id, + tag=tag, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetLibraryItemsRequest, base_url, '/library/sections/{sectionId}/{tag}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetLibraryItemsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetLibraryItemsResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def refresh_library(self, section_id: float) -> operations.RefreshLibraryResponse: + r"""Refresh Library + This endpoint Refreshes the library. + """ + request = operations.RefreshLibraryRequest( + section_id=section_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.RefreshLibraryRequest, base_url, '/library/sections/{sectionId}/refresh', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.RefreshLibraryResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.RefreshLibraryResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def search_library(self, section_id: int, type_: operations.Type) -> operations.SearchLibraryResponse: + r"""Search Library + Search for content within a specific section of the library. + + ### Types + Each type in the library comes with a set of filters and sorts, aiding in building dynamic media controls: + + - **Type Object Attributes**: + - `type`: Metadata type (if standard Plex type). + - `title`: Title for this content type (e.g., \"Movies\"). + + - **Filter Objects**: + - Subset of the media query language. + - Attributes include `filter` (name), `filterType` (data type), `key` (endpoint for value range), and `title`. + + - **Sort Objects**: + - Description of sort fields. + - Attributes include `defaultDirection` (asc/desc), `descKey` and `key` (sort parameters), and `title`. + + > **Note**: Filters and sorts are optional; without them, no filtering controls are rendered. + """ + request = operations.SearchLibraryRequest( + section_id=section_id, + type=type_, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.SearchLibraryRequest, base_url, '/library/sections/{sectionId}/search', request) + headers = {} + query_params = utils.get_query_params(operations.SearchLibraryRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.SearchLibraryResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.SearchLibraryResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_metadata(self, rating_key: float) -> operations.GetMetadataResponse: + r"""Get Items Metadata + This endpoint will return the metadata of a library item specified with the ratingKey. + """ + request = operations.GetMetadataRequest( + rating_key=rating_key, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetMetadataRequest, base_url, '/library/metadata/{ratingKey}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetMetadataResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetMetadataResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetMetadataResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_metadata_children(self, rating_key: float) -> operations.GetMetadataChildrenResponse: + r"""Get Items Children + This endpoint will return the children of of a library item specified with the ratingKey. + """ + request = operations.GetMetadataChildrenRequest( + rating_key=rating_key, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetMetadataChildrenRequest, base_url, '/library/metadata/{ratingKey}/children', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetMetadataChildrenResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetMetadataChildrenResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetMetadataChildrenResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_on_deck(self) -> operations.GetOnDeckResponse: + r"""Get On Deck + This endpoint will return the on deck content. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/library/onDeck' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetOnDeckResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetOnDeckResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetOnDeckResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/plex_api/log.py b/src/plex_api/log.py new file mode 100644 index 0000000..6ce48fe --- /dev/null +++ b/src/plex_api/log.py @@ -0,0 +1,157 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations + +class Log: + r"""Submit logs to the Log Handler for Plex Media Server""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def log_line(self, level: operations.Level, message: str, source: str) -> operations.LogLineResponse: + r"""Logging a single line message. + This endpoint will write a single-line log message, including a level and source to the main Plex Media Server log. + """ + request = operations.LogLineRequest( + level=level, + message=message, + source=source, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/log' + headers = {} + query_params = utils.get_query_params(operations.LogLineRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.LogLineResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.LogLineResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def log_multi_line(self, request: str) -> operations.LogMultiLineResponse: + r"""Logging a multi-line message + This endpoint allows for the batch addition of log entries to the main Plex Media Server log. + It accepts a text/plain request body, where each line represents a distinct log entry. + Each log entry consists of URL-encoded key-value pairs, specifying log attributes such as 'level', 'message', and 'source'. + + Log entries are separated by a newline character (`\n`). + Each entry's parameters should be URL-encoded to ensure accurate parsing and handling of special characters. + This method is efficient for logging multiple entries in a single API call, reducing the overhead of multiple individual requests. + + The 'level' parameter specifies the log entry's severity or importance, with the following integer values: + - `0`: Error - Critical issues that require immediate attention. + - `1`: Warning - Important events that are not critical but may indicate potential issues. + - `2`: Info - General informational messages about system operation. + - `3`: Debug - Detailed information useful for debugging purposes. + - `4`: Verbose - Highly detailed diagnostic information for in-depth analysis. + + The 'message' parameter contains the log text, and 'source' identifies the log message's origin (e.g., an application name or module). + + Example of a single log entry format: + `level=4&message=Sample%20log%20entry&source=applicationName` + + Ensure each parameter is properly URL-encoded to avoid interpretation issues. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/log' + headers = {} + req_content_type, data, form = utils.serialize_request_body(request, str, "request", False, False, 'string') + if req_content_type not in ('multipart/form-data', 'multipart/mixed'): + headers['content-type'] = req_content_type + if data is None and form is None: + raise Exception('request body is required') + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, data=data, files=form, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.LogMultiLineResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.LogMultiLineResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def enable_paper_trail(self) -> operations.EnablePaperTrailResponse: + r"""Enabling Papertrail + This endpoint will enable all Plex Media Serverlogs to be sent to the Papertrail networked logging site for a period of time. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/log/networked' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.EnablePaperTrailResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code == 403 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.EnablePaperTrailResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/plex_api/media.py b/src/plex_api/media.py new file mode 100644 index 0000000..2d7be00 --- /dev/null +++ b/src/plex_api/media.py @@ -0,0 +1,142 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations + +class Media: + r"""API Calls interacting with Plex Media Server Media""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def mark_played(self, key: float) -> operations.MarkPlayedResponse: + r"""Mark Media Played + This will mark the provided media key as Played. + """ + request = operations.MarkPlayedRequest( + key=key, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/:/scrobble' + headers = {} + query_params = utils.get_query_params(operations.MarkPlayedRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.MarkPlayedResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.MarkPlayedResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def mark_unplayed(self, key: float) -> operations.MarkUnplayedResponse: + r"""Mark Media Unplayed + This will mark the provided media key as Unplayed. + """ + request = operations.MarkUnplayedRequest( + key=key, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/:/unscrobble' + headers = {} + query_params = utils.get_query_params(operations.MarkUnplayedRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.MarkUnplayedResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.MarkUnplayedResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def update_play_progress(self, key: str, time: float, state: str) -> operations.UpdatePlayProgressResponse: + r"""Update Media Play Progress + This API command can be used to update the play progress of a media item. + """ + request = operations.UpdatePlayProgressRequest( + key=key, + time=time, + state=state, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/:/progress' + headers = {} + query_params = utils.get_query_params(operations.UpdatePlayProgressRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.UpdatePlayProgressResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.UpdatePlayProgressResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/plex_api/models/__init__.py b/src/plex_api/models/__init__.py new file mode 100644 index 0000000..722bb99 --- /dev/null +++ b/src/plex_api/models/__init__.py @@ -0,0 +1,4 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + + +# package diff --git a/src/plex_api/models/components/__init__.py b/src/plex_api/models/components/__init__.py new file mode 100644 index 0000000..4e48d07 --- /dev/null +++ b/src/plex_api/models/components/__init__.py @@ -0,0 +1,5 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .security import * + +__all__ = ["Security"] diff --git a/src/plex_api/models/components/security.py b/src/plex_api/models/components/security.py new file mode 100644 index 0000000..da6694a --- /dev/null +++ b/src/plex_api/models/components/security.py @@ -0,0 +1,11 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses + + +@dataclasses.dataclass +class Security: + access_token: str = dataclasses.field(metadata={'security': { 'scheme': True, 'type': 'apiKey', 'sub_type': 'header', 'field_name': 'X-Plex-Token' }}) + + diff --git a/src/plex_api/models/errors/__init__.py b/src/plex_api/models/errors/__init__.py new file mode 100644 index 0000000..846ef64 --- /dev/null +++ b/src/plex_api/models/errors/__init__.py @@ -0,0 +1,62 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .addplaylistcontents import * +from .applyupdates import * +from .cancelserveractivities import * +from .checkforupdates import * +from .clearplaylistcontents import * +from .createplaylist import * +from .deletelibrary import * +from .deleteplaylist import * +from .enablepapertrail import * +from .getavailableclients import * +from .getbutlertasks import * +from .getdevices import * +from .getfilehash import * +from .getglobalhubs import * +from .getlibraries import * +from .getlibrary import * +from .getlibraryhubs import * +from .getmetadata import * +from .getmetadatachildren import * +from .getmyplexaccount import * +from .getondeck import * +from .getpin import * +from .getplaylist import * +from .getplaylistcontents import * +from .getplaylists import * +from .getrecentlyadded import * +from .getresizedphoto import * +from .getsearchresults import * +from .getserveractivities import * +from .getservercapabilities import * +from .getserveridentity import * +from .getserverlist import * +from .getserverpreferences import * +from .getsessionhistory import * +from .getsessions import * +from .getsourceconnectioninformation import * +from .gettimeline import * +from .gettoken import * +from .gettranscodesessions import * +from .gettransienttoken import * +from .getupdatestatus import * +from .logline import * +from .logmultiline import * +from .markplayed import * +from .markunplayed import * +from .performsearch import * +from .performvoicesearch import * +from .refreshlibrary import * +from .sdkerror import * +from .startalltasks import * +from .starttask import * +from .startuniversaltranscode import * +from .stopalltasks import * +from .stoptask import * +from .stoptranscodesession import * +from .updateplaylist import * +from .updateplayprogress import * +from .uploadplaylist import * + +__all__ = ["AddPlaylistContentsErrors","AddPlaylistContentsResponseBody","ApplyUpdatesErrors","ApplyUpdatesResponseBody","CancelServerActivitiesErrors","CancelServerActivitiesResponseBody","CheckForUpdatesErrors","CheckForUpdatesResponseBody","ClearPlaylistContentsErrors","ClearPlaylistContentsResponseBody","CreatePlaylistErrors","CreatePlaylistResponseBody","DeleteLibraryErrors","DeleteLibraryResponseBody","DeletePlaylistErrors","DeletePlaylistResponseBody","EnablePaperTrailErrors","EnablePaperTrailResponseBody","Errors","GetAvailableClientsErrors","GetAvailableClientsResponseBody","GetButlerTasksErrors","GetButlerTasksResponseBody","GetDevicesErrors","GetDevicesResponseBody","GetFileHashErrors","GetFileHashResponseBody","GetGlobalHubsErrors","GetGlobalHubsResponseBody","GetLibrariesErrors","GetLibrariesResponseBody","GetLibraryErrors","GetLibraryHubsErrors","GetLibraryHubsResponseBody","GetLibraryResponseBody","GetMetadataChildrenErrors","GetMetadataChildrenResponseBody","GetMetadataErrors","GetMetadataResponseBody","GetMyPlexAccountErrors","GetMyPlexAccountResponseBody","GetOnDeckErrors","GetOnDeckResponseBody","GetPinErrors","GetPinResponseBody","GetPlaylistContentsErrors","GetPlaylistContentsResponseBody","GetPlaylistErrors","GetPlaylistResponseBody","GetPlaylistsErrors","GetPlaylistsResponseBody","GetRecentlyAddedErrors","GetRecentlyAddedResponseBody","GetResizedPhotoErrors","GetResizedPhotoResponseBody","GetSearchResultsErrors","GetSearchResultsResponseBody","GetServerActivitiesErrors","GetServerActivitiesResponseBody","GetServerCapabilitiesResponseBody","GetServerIdentityErrors","GetServerIdentityResponseBody","GetServerListErrors","GetServerListResponseBody","GetServerPreferencesErrors","GetServerPreferencesResponseBody","GetSessionHistoryErrors","GetSessionHistoryResponseBody","GetSessionsErrors","GetSessionsResponseBody","GetSourceConnectionInformationErrors","GetSourceConnectionInformationResponseBody","GetTimelineErrors","GetTimelineResponseBody","GetTokenErrors","GetTokenResponseBody","GetTranscodeSessionsErrors","GetTranscodeSessionsResponseBody","GetTransientTokenErrors","GetTransientTokenResponseBody","GetUpdateStatusErrors","GetUpdateStatusResponseBody","LogLineErrors","LogLineResponseBody","LogMultiLineErrors","LogMultiLineResponseBody","MarkPlayedErrors","MarkPlayedResponseBody","MarkUnplayedErrors","MarkUnplayedResponseBody","PerformSearchErrors","PerformSearchResponseBody","PerformVoiceSearchErrors","PerformVoiceSearchResponseBody","RefreshLibraryErrors","RefreshLibraryResponseBody","SDKError","StartAllTasksErrors","StartAllTasksResponseBody","StartTaskErrors","StartTaskResponseBody","StartUniversalTranscodeErrors","StartUniversalTranscodeResponseBody","StopAllTasksErrors","StopAllTasksResponseBody","StopTaskErrors","StopTaskResponseBody","StopTranscodeSessionErrors","StopTranscodeSessionResponseBody","UpdatePlayProgressErrors","UpdatePlayProgressResponseBody","UpdatePlaylistErrors","UpdatePlaylistResponseBody","UploadPlaylistErrors","UploadPlaylistResponseBody"] diff --git a/src/plex_api/models/errors/addplaylistcontents.py b/src/plex_api/models/errors/addplaylistcontents.py new file mode 100644 index 0000000..1033ad7 --- /dev/null +++ b/src/plex_api/models/errors/addplaylistcontents.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AddPlaylistContentsErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class AddPlaylistContentsResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[AddPlaylistContentsErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/applyupdates.py b/src/plex_api/models/errors/applyupdates.py new file mode 100644 index 0000000..bcba7df --- /dev/null +++ b/src/plex_api/models/errors/applyupdates.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ApplyUpdatesErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class ApplyUpdatesResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[ApplyUpdatesErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/cancelserveractivities.py b/src/plex_api/models/errors/cancelserveractivities.py new file mode 100644 index 0000000..f6c70bd --- /dev/null +++ b/src/plex_api/models/errors/cancelserveractivities.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class CancelServerActivitiesErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class CancelServerActivitiesResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[CancelServerActivitiesErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/checkforupdates.py b/src/plex_api/models/errors/checkforupdates.py new file mode 100644 index 0000000..0b7aebe --- /dev/null +++ b/src/plex_api/models/errors/checkforupdates.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class CheckForUpdatesErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class CheckForUpdatesResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[CheckForUpdatesErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/clearplaylistcontents.py b/src/plex_api/models/errors/clearplaylistcontents.py new file mode 100644 index 0000000..96e2339 --- /dev/null +++ b/src/plex_api/models/errors/clearplaylistcontents.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ClearPlaylistContentsErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class ClearPlaylistContentsResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[ClearPlaylistContentsErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/createplaylist.py b/src/plex_api/models/errors/createplaylist.py new file mode 100644 index 0000000..b0f5402 --- /dev/null +++ b/src/plex_api/models/errors/createplaylist.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class CreatePlaylistErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class CreatePlaylistResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[CreatePlaylistErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/deletelibrary.py b/src/plex_api/models/errors/deletelibrary.py new file mode 100644 index 0000000..1dcd69e --- /dev/null +++ b/src/plex_api/models/errors/deletelibrary.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class DeleteLibraryErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class DeleteLibraryResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[DeleteLibraryErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/deleteplaylist.py b/src/plex_api/models/errors/deleteplaylist.py new file mode 100644 index 0000000..312bc63 --- /dev/null +++ b/src/plex_api/models/errors/deleteplaylist.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class DeletePlaylistErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class DeletePlaylistResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[DeletePlaylistErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/enablepapertrail.py b/src/plex_api/models/errors/enablepapertrail.py new file mode 100644 index 0000000..a7d6318 --- /dev/null +++ b/src/plex_api/models/errors/enablepapertrail.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class EnablePaperTrailErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class EnablePaperTrailResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[EnablePaperTrailErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getavailableclients.py b/src/plex_api/models/errors/getavailableclients.py new file mode 100644 index 0000000..c480687 --- /dev/null +++ b/src/plex_api/models/errors/getavailableclients.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetAvailableClientsErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetAvailableClientsResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetAvailableClientsErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getbutlertasks.py b/src/plex_api/models/errors/getbutlertasks.py new file mode 100644 index 0000000..1041c0c --- /dev/null +++ b/src/plex_api/models/errors/getbutlertasks.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetButlerTasksErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetButlerTasksResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetButlerTasksErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getdevices.py b/src/plex_api/models/errors/getdevices.py new file mode 100644 index 0000000..d0cf474 --- /dev/null +++ b/src/plex_api/models/errors/getdevices.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetDevicesErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetDevicesResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetDevicesErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getfilehash.py b/src/plex_api/models/errors/getfilehash.py new file mode 100644 index 0000000..2fa16d8 --- /dev/null +++ b/src/plex_api/models/errors/getfilehash.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetFileHashErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetFileHashResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetFileHashErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getglobalhubs.py b/src/plex_api/models/errors/getglobalhubs.py new file mode 100644 index 0000000..2f90c28 --- /dev/null +++ b/src/plex_api/models/errors/getglobalhubs.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetGlobalHubsErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetGlobalHubsResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetGlobalHubsErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getlibraries.py b/src/plex_api/models/errors/getlibraries.py new file mode 100644 index 0000000..88de3b6 --- /dev/null +++ b/src/plex_api/models/errors/getlibraries.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibrariesErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetLibrariesResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetLibrariesErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getlibrary.py b/src/plex_api/models/errors/getlibrary.py new file mode 100644 index 0000000..0f9f501 --- /dev/null +++ b/src/plex_api/models/errors/getlibrary.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetLibraryResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetLibraryErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getlibraryhubs.py b/src/plex_api/models/errors/getlibraryhubs.py new file mode 100644 index 0000000..0b3321e --- /dev/null +++ b/src/plex_api/models/errors/getlibraryhubs.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryHubsErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetLibraryHubsResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetLibraryHubsErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getmetadata.py b/src/plex_api/models/errors/getmetadata.py new file mode 100644 index 0000000..c4dee66 --- /dev/null +++ b/src/plex_api/models/errors/getmetadata.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetMetadataResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetMetadataErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getmetadatachildren.py b/src/plex_api/models/errors/getmetadatachildren.py new file mode 100644 index 0000000..c3befc6 --- /dev/null +++ b/src/plex_api/models/errors/getmetadatachildren.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataChildrenErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetMetadataChildrenResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetMetadataChildrenErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getmyplexaccount.py b/src/plex_api/models/errors/getmyplexaccount.py new file mode 100644 index 0000000..fb2cedb --- /dev/null +++ b/src/plex_api/models/errors/getmyplexaccount.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMyPlexAccountErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetMyPlexAccountResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetMyPlexAccountErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getondeck.py b/src/plex_api/models/errors/getondeck.py new file mode 100644 index 0000000..c99efd9 --- /dev/null +++ b/src/plex_api/models/errors/getondeck.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetOnDeckErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetOnDeckResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetOnDeckErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getpin.py b/src/plex_api/models/errors/getpin.py new file mode 100644 index 0000000..8aedc57 --- /dev/null +++ b/src/plex_api/models/errors/getpin.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPinErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetPinResponseBody(Exception): + r"""X-Plex-Client-Identifier is missing""" + errors: Optional[List[GetPinErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getplaylist.py b/src/plex_api/models/errors/getplaylist.py new file mode 100644 index 0000000..3fd7a13 --- /dev/null +++ b/src/plex_api/models/errors/getplaylist.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetPlaylistResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetPlaylistErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getplaylistcontents.py b/src/plex_api/models/errors/getplaylistcontents.py new file mode 100644 index 0000000..f8d24cf --- /dev/null +++ b/src/plex_api/models/errors/getplaylistcontents.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistContentsErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetPlaylistContentsResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetPlaylistContentsErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getplaylists.py b/src/plex_api/models/errors/getplaylists.py new file mode 100644 index 0000000..9f44277 --- /dev/null +++ b/src/plex_api/models/errors/getplaylists.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistsErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetPlaylistsResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetPlaylistsErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getrecentlyadded.py b/src/plex_api/models/errors/getrecentlyadded.py new file mode 100644 index 0000000..a71f7a1 --- /dev/null +++ b/src/plex_api/models/errors/getrecentlyadded.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetRecentlyAddedErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetRecentlyAddedResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetRecentlyAddedErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getresizedphoto.py b/src/plex_api/models/errors/getresizedphoto.py new file mode 100644 index 0000000..5c9be7f --- /dev/null +++ b/src/plex_api/models/errors/getresizedphoto.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetResizedPhotoErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetResizedPhotoResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetResizedPhotoErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getsearchresults.py b/src/plex_api/models/errors/getsearchresults.py new file mode 100644 index 0000000..6030d8f --- /dev/null +++ b/src/plex_api/models/errors/getsearchresults.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSearchResultsErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetSearchResultsResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetSearchResultsErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getserveractivities.py b/src/plex_api/models/errors/getserveractivities.py new file mode 100644 index 0000000..067b9fc --- /dev/null +++ b/src/plex_api/models/errors/getserveractivities.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerActivitiesErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetServerActivitiesResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetServerActivitiesErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getservercapabilities.py b/src/plex_api/models/errors/getservercapabilities.py new file mode 100644 index 0000000..7712afc --- /dev/null +++ b/src/plex_api/models/errors/getservercapabilities.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Errors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetServerCapabilitiesResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[Errors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getserveridentity.py b/src/plex_api/models/errors/getserveridentity.py new file mode 100644 index 0000000..39d34d4 --- /dev/null +++ b/src/plex_api/models/errors/getserveridentity.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerIdentityErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetServerIdentityResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetServerIdentityErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getserverlist.py b/src/plex_api/models/errors/getserverlist.py new file mode 100644 index 0000000..00fe51e --- /dev/null +++ b/src/plex_api/models/errors/getserverlist.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerListErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetServerListResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetServerListErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getserverpreferences.py b/src/plex_api/models/errors/getserverpreferences.py new file mode 100644 index 0000000..7117505 --- /dev/null +++ b/src/plex_api/models/errors/getserverpreferences.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerPreferencesErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetServerPreferencesResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetServerPreferencesErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getsessionhistory.py b/src/plex_api/models/errors/getsessionhistory.py new file mode 100644 index 0000000..1625ed9 --- /dev/null +++ b/src/plex_api/models/errors/getsessionhistory.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSessionHistoryErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetSessionHistoryResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetSessionHistoryErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getsessions.py b/src/plex_api/models/errors/getsessions.py new file mode 100644 index 0000000..ff5f743 --- /dev/null +++ b/src/plex_api/models/errors/getsessions.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSessionsErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetSessionsResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetSessionsErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getsourceconnectioninformation.py b/src/plex_api/models/errors/getsourceconnectioninformation.py new file mode 100644 index 0000000..9e2a07b --- /dev/null +++ b/src/plex_api/models/errors/getsourceconnectioninformation.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSourceConnectionInformationErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetSourceConnectionInformationResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetSourceConnectionInformationErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/gettimeline.py b/src/plex_api/models/errors/gettimeline.py new file mode 100644 index 0000000..b1fbe15 --- /dev/null +++ b/src/plex_api/models/errors/gettimeline.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetTimelineErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetTimelineResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetTimelineErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/gettoken.py b/src/plex_api/models/errors/gettoken.py new file mode 100644 index 0000000..826a92d --- /dev/null +++ b/src/plex_api/models/errors/gettoken.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetTokenErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetTokenResponseBody(Exception): + r"""X-Plex-Client-Identifier is missing""" + errors: Optional[List[GetTokenErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/gettranscodesessions.py b/src/plex_api/models/errors/gettranscodesessions.py new file mode 100644 index 0000000..2f0f105 --- /dev/null +++ b/src/plex_api/models/errors/gettranscodesessions.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetTranscodeSessionsErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetTranscodeSessionsResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetTranscodeSessionsErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/gettransienttoken.py b/src/plex_api/models/errors/gettransienttoken.py new file mode 100644 index 0000000..78dd069 --- /dev/null +++ b/src/plex_api/models/errors/gettransienttoken.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetTransientTokenErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetTransientTokenResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetTransientTokenErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/getupdatestatus.py b/src/plex_api/models/errors/getupdatestatus.py new file mode 100644 index 0000000..4173dcb --- /dev/null +++ b/src/plex_api/models/errors/getupdatestatus.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetUpdateStatusErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class GetUpdateStatusResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[GetUpdateStatusErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/logline.py b/src/plex_api/models/errors/logline.py new file mode 100644 index 0000000..4dc73c1 --- /dev/null +++ b/src/plex_api/models/errors/logline.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class LogLineErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class LogLineResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[LogLineErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/logmultiline.py b/src/plex_api/models/errors/logmultiline.py new file mode 100644 index 0000000..218022e --- /dev/null +++ b/src/plex_api/models/errors/logmultiline.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class LogMultiLineErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class LogMultiLineResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[LogMultiLineErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/markplayed.py b/src/plex_api/models/errors/markplayed.py new file mode 100644 index 0000000..5106a52 --- /dev/null +++ b/src/plex_api/models/errors/markplayed.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class MarkPlayedErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class MarkPlayedResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[MarkPlayedErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/markunplayed.py b/src/plex_api/models/errors/markunplayed.py new file mode 100644 index 0000000..319b7bc --- /dev/null +++ b/src/plex_api/models/errors/markunplayed.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class MarkUnplayedErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class MarkUnplayedResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[MarkUnplayedErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/performsearch.py b/src/plex_api/models/errors/performsearch.py new file mode 100644 index 0000000..b93eb5e --- /dev/null +++ b/src/plex_api/models/errors/performsearch.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PerformSearchErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class PerformSearchResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[PerformSearchErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/performvoicesearch.py b/src/plex_api/models/errors/performvoicesearch.py new file mode 100644 index 0000000..8bba659 --- /dev/null +++ b/src/plex_api/models/errors/performvoicesearch.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class PerformVoiceSearchErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class PerformVoiceSearchResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[PerformVoiceSearchErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/refreshlibrary.py b/src/plex_api/models/errors/refreshlibrary.py new file mode 100644 index 0000000..f4089b7 --- /dev/null +++ b/src/plex_api/models/errors/refreshlibrary.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class RefreshLibraryErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class RefreshLibraryResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[RefreshLibraryErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/sdkerror.py b/src/plex_api/models/errors/sdkerror.py new file mode 100644 index 0000000..6bb02bb --- /dev/null +++ b/src/plex_api/models/errors/sdkerror.py @@ -0,0 +1,24 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http + + +class SDKError(Exception): + """Represents an error returned by the API.""" + message: str + status_code: int + body: str + raw_response: requests_http.Response + + def __init__(self, message: str, status_code: int, body: str, raw_response: requests_http.Response): + self.message = message + self.status_code = status_code + self.body = body + self.raw_response = raw_response + + def __str__(self): + body = '' + if len(self.body) > 0: + body = f'\n{self.body}' + + return f'{self.message}: Status {self.status_code}{body}' diff --git a/src/plex_api/models/errors/startalltasks.py b/src/plex_api/models/errors/startalltasks.py new file mode 100644 index 0000000..e27c660 --- /dev/null +++ b/src/plex_api/models/errors/startalltasks.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class StartAllTasksErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class StartAllTasksResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[StartAllTasksErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/starttask.py b/src/plex_api/models/errors/starttask.py new file mode 100644 index 0000000..221ab73 --- /dev/null +++ b/src/plex_api/models/errors/starttask.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class StartTaskErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class StartTaskResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[StartTaskErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/startuniversaltranscode.py b/src/plex_api/models/errors/startuniversaltranscode.py new file mode 100644 index 0000000..f55cae5 --- /dev/null +++ b/src/plex_api/models/errors/startuniversaltranscode.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class StartUniversalTranscodeErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class StartUniversalTranscodeResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[StartUniversalTranscodeErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/stopalltasks.py b/src/plex_api/models/errors/stopalltasks.py new file mode 100644 index 0000000..b5e7f43 --- /dev/null +++ b/src/plex_api/models/errors/stopalltasks.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class StopAllTasksErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class StopAllTasksResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[StopAllTasksErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/stoptask.py b/src/plex_api/models/errors/stoptask.py new file mode 100644 index 0000000..693e724 --- /dev/null +++ b/src/plex_api/models/errors/stoptask.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class StopTaskErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class StopTaskResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[StopTaskErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/stoptranscodesession.py b/src/plex_api/models/errors/stoptranscodesession.py new file mode 100644 index 0000000..ae41d7c --- /dev/null +++ b/src/plex_api/models/errors/stoptranscodesession.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class StopTranscodeSessionErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class StopTranscodeSessionResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[StopTranscodeSessionErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/updateplaylist.py b/src/plex_api/models/errors/updateplaylist.py new file mode 100644 index 0000000..e1109a2 --- /dev/null +++ b/src/plex_api/models/errors/updateplaylist.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class UpdatePlaylistErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class UpdatePlaylistResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[UpdatePlaylistErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/updateplayprogress.py b/src/plex_api/models/errors/updateplayprogress.py new file mode 100644 index 0000000..8935e76 --- /dev/null +++ b/src/plex_api/models/errors/updateplayprogress.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class UpdatePlayProgressErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class UpdatePlayProgressResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[UpdatePlayProgressErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/errors/uploadplaylist.py b/src/plex_api/models/errors/uploadplaylist.py new file mode 100644 index 0000000..a1aacbf --- /dev/null +++ b/src/plex_api/models/errors/uploadplaylist.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class UploadPlaylistErrors: + code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + message: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('message'), 'exclude': lambda f: f is None }}) + status: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) + +@dataclasses.dataclass +class UploadPlaylistResponseBody(Exception): + r"""Unauthorized - Returned if the X-Plex-Token is missing from the header or query.""" + errors: Optional[List[UploadPlaylistErrors]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('errors'), 'exclude': lambda f: f is None }}) + raw_response: Optional[requests_http.Response] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'exclude': lambda f: True }}) + r"""Raw HTTP response; suitable for custom response parsing""" + + + def __str__(self) -> str: + return utils.marshal_json(self, type(self)) diff --git a/src/plex_api/models/operations/__init__.py b/src/plex_api/models/operations/__init__.py new file mode 100644 index 0000000..fb180db --- /dev/null +++ b/src/plex_api/models/operations/__init__.py @@ -0,0 +1,63 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .addplaylistcontents import * +from .applyupdates import * +from .cancelserveractivities import * +from .checkforupdates import * +from .clearplaylistcontents import * +from .createplaylist import * +from .deletelibrary import * +from .deleteplaylist import * +from .enablepapertrail import * +from .getavailableclients import * +from .getbutlertasks import * +from .getdevices import * +from .getfilehash import * +from .getglobalhubs import * +from .getlibraries import * +from .getlibrary import * +from .getlibraryhubs import * +from .getlibraryitems import * +from .getmetadata import * +from .getmetadatachildren import * +from .getmyplexaccount import * +from .getondeck import * +from .getpin import * +from .getplaylist import * +from .getplaylistcontents import * +from .getplaylists import * +from .getrecentlyadded import * +from .getresizedphoto import * +from .getsearchresults import * +from .getserveractivities import * +from .getservercapabilities import * +from .getserveridentity import * +from .getserverlist import * +from .getserverpreferences import * +from .getsessionhistory import * +from .getsessions import * +from .getsourceconnectioninformation import * +from .gettimeline import * +from .gettoken import * +from .gettranscodesessions import * +from .gettransienttoken import * +from .getupdatestatus import * +from .logline import * +from .logmultiline import * +from .markplayed import * +from .markunplayed import * +from .performsearch import * +from .performvoicesearch import * +from .refreshlibrary import * +from .searchlibrary import * +from .startalltasks import * +from .starttask import * +from .startuniversaltranscode import * +from .stopalltasks import * +from .stoptask import * +from .stoptranscodesession import * +from .updateplaylist import * +from .updateplayprogress import * +from .uploadplaylist import * + +__all__ = ["Activity","AddPlaylistContentsMediaContainer","AddPlaylistContentsMetadata","AddPlaylistContentsRequest","AddPlaylistContentsResponse","AddPlaylistContentsResponseBody","ApplyUpdatesRequest","ApplyUpdatesResponse","ButlerTask","ButlerTasks","CancelServerActivitiesRequest","CancelServerActivitiesResponse","CheckForUpdatesRequest","CheckForUpdatesResponse","ClearPlaylistContentsRequest","ClearPlaylistContentsResponse","Context","Country","CreatePlaylistMediaContainer","CreatePlaylistMetadata","CreatePlaylistRequest","CreatePlaylistResponse","CreatePlaylistResponseBody","DeleteLibraryRequest","DeleteLibraryResponse","DeletePlaylistRequest","DeletePlaylistResponse","Device","Director","Directory","Download","EnablePaperTrailResponse","Field","FieldType","Filter","Force","GET_PIN_SERVERS","GET_TOKEN_SERVERS","Genre","GetAvailableClientsMediaContainer","GetAvailableClientsResponse","GetAvailableClientsResponseBody","GetButlerTasksResponse","GetButlerTasksResponseBody","GetDevicesMediaContainer","GetDevicesResponse","GetDevicesResponseBody","GetFileHashRequest","GetFileHashResponse","GetGlobalHubsMediaContainer","GetGlobalHubsMetadata","GetGlobalHubsRequest","GetGlobalHubsResponse","GetGlobalHubsResponseBody","GetLibrariesDirectory","GetLibrariesLocation","GetLibrariesMediaContainer","GetLibrariesResponse","GetLibrariesResponseBody","GetLibraryDirectory","GetLibraryHubsCountry","GetLibraryHubsDirector","GetLibraryHubsGenre","GetLibraryHubsHub","GetLibraryHubsMedia","GetLibraryHubsMediaContainer","GetLibraryHubsMetadata","GetLibraryHubsPart","GetLibraryHubsRequest","GetLibraryHubsResponse","GetLibraryHubsResponseBody","GetLibraryHubsRole","GetLibraryHubsWriter","GetLibraryItemsCountry","GetLibraryItemsDirector","GetLibraryItemsGenre","GetLibraryItemsMedia","GetLibraryItemsMediaContainer","GetLibraryItemsMetadata","GetLibraryItemsPart","GetLibraryItemsRequest","GetLibraryItemsResponse","GetLibraryItemsResponseBody","GetLibraryItemsRole","GetLibraryItemsWriter","GetLibraryMediaContainer","GetLibraryRequest","GetLibraryResponse","GetLibraryResponseBody","GetLibraryType","GetMetadataChildrenDirectory","GetMetadataChildrenMediaContainer","GetMetadataChildrenMetadata","GetMetadataChildrenRequest","GetMetadataChildrenResponse","GetMetadataChildrenResponseBody","GetMetadataCountry","GetMetadataDirector","GetMetadataGenre","GetMetadataMedia","GetMetadataMediaContainer","GetMetadataMetadata","GetMetadataPart","GetMetadataRequest","GetMetadataResponse","GetMetadataResponseBody","GetMetadataRole","GetMetadataWriter","GetMyPlexAccountResponse","GetMyPlexAccountResponseBody","GetOnDeckGuids","GetOnDeckMedia","GetOnDeckMediaContainer","GetOnDeckMetadata","GetOnDeckPart","GetOnDeckResponse","GetOnDeckResponseBody","GetOnDeckStream","GetPinRequest","GetPinResponse","GetPinResponseBody","GetPlaylistContentsCountry","GetPlaylistContentsDirector","GetPlaylistContentsGenre","GetPlaylistContentsMedia","GetPlaylistContentsMediaContainer","GetPlaylistContentsMetadata","GetPlaylistContentsPart","GetPlaylistContentsRequest","GetPlaylistContentsResponse","GetPlaylistContentsResponseBody","GetPlaylistContentsRole","GetPlaylistContentsWriter","GetPlaylistMediaContainer","GetPlaylistMetadata","GetPlaylistRequest","GetPlaylistResponse","GetPlaylistResponseBody","GetPlaylistsMediaContainer","GetPlaylistsMetadata","GetPlaylistsRequest","GetPlaylistsResponse","GetPlaylistsResponseBody","GetRecentlyAddedMediaContainer","GetRecentlyAddedResponse","GetRecentlyAddedResponseBody","GetResizedPhotoRequest","GetResizedPhotoResponse","GetSearchResultsCountry","GetSearchResultsDirector","GetSearchResultsGenre","GetSearchResultsMedia","GetSearchResultsMediaContainer","GetSearchResultsMetadata","GetSearchResultsPart","GetSearchResultsRequest","GetSearchResultsResponse","GetSearchResultsResponseBody","GetSearchResultsRole","GetSearchResultsWriter","GetServerActivitiesMediaContainer","GetServerActivitiesResponse","GetServerActivitiesResponseBody","GetServerCapabilitiesResponse","GetServerCapabilitiesResponseBody","GetServerIdentityMediaContainer","GetServerIdentityResponse","GetServerIdentityResponseBody","GetServerListMediaContainer","GetServerListResponse","GetServerListResponseBody","GetServerListServer","GetServerPreferencesMediaContainer","GetServerPreferencesResponse","GetServerPreferencesResponseBody","GetSessionHistoryMediaContainer","GetSessionHistoryMetadata","GetSessionHistoryResponse","GetSessionHistoryResponseBody","GetSessionsMedia","GetSessionsMediaContainer","GetSessionsMetadata","GetSessionsPart","GetSessionsResponse","GetSessionsResponseBody","GetSessionsStream","GetSourceConnectionInformationRequest","GetSourceConnectionInformationResponse","GetTimelineRequest","GetTimelineResponse","GetTokenRequest","GetTokenResponse","GetTranscodeSessionsMediaContainer","GetTranscodeSessionsResponse","GetTranscodeSessionsResponseBody","GetTransientTokenQueryParamType","GetTransientTokenRequest","GetTransientTokenResponse","GetUpdateStatusMediaContainer","GetUpdateStatusResponse","GetUpdateStatusResponseBody","Guids","Hub","IncludeDetails","Level","Location","LogLineRequest","LogLineResponse","LogMultiLineResponse","MarkPlayedRequest","MarkPlayedResponse","MarkUnplayedRequest","MarkUnplayedResponse","Media","MediaContainer","Metadata","MinSize","MyPlex","One","OnlyTransient","Operator","Part","PathParamTaskName","PerformSearchRequest","PerformSearchResponse","PerformVoiceSearchRequest","PerformVoiceSearchResponse","Player","PlaylistType","Producer","Provider","QueryParamOnlyTransient","QueryParamSmart","QueryParamType","Ratings","RefreshLibraryRequest","RefreshLibraryResponse","Release","Role","Scope","SearchLibraryMediaContainer","SearchLibraryMetadata","SearchLibraryRequest","SearchLibraryResponse","SearchLibraryResponseBody","Server","Session","Skip","Smart","Sort","StartAllTasksResponse","StartTaskRequest","StartTaskResponse","StartUniversalTranscodeRequest","StartUniversalTranscodeResponse","State","StopAllTasksResponse","StopTaskRequest","StopTaskResponse","StopTranscodeSessionRequest","StopTranscodeSessionResponse","Stream","Tag","TaskName","Tonight","TranscodeSession","Two","Type","UpdatePlayProgressRequest","UpdatePlayProgressResponse","UpdatePlaylistRequest","UpdatePlaylistResponse","UploadPlaylistRequest","UploadPlaylistResponse","Upscale","User","Writer"] diff --git a/src/plex_api/models/operations/addplaylistcontents.py b/src/plex_api/models/operations/addplaylistcontents.py new file mode 100644 index 0000000..64f5e81 --- /dev/null +++ b/src/plex_api/models/operations/addplaylistcontents.py @@ -0,0 +1,74 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclasses.dataclass +class AddPlaylistContentsRequest: + playlist_id: float = dataclasses.field(metadata={'path_param': { 'field_name': 'playlistID', 'style': 'simple', 'explode': False }}) + r"""the ID of the playlist""" + uri: str = dataclasses.field(metadata={'query_param': { 'field_name': 'uri', 'style': 'form', 'explode': True }}) + r"""the content URI for the playlist""" + play_queue_id: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'playQueueID', 'style': 'form', 'explode': True }}) + r"""the play queue to add to a playlist""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AddPlaylistContentsMetadata: + added_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + composite: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('composite'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + leaf_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('leafCount'), 'exclude': lambda f: f is None }}) + playlist_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playlistType'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + smart: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('smart'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AddPlaylistContentsMediaContainer: + leaf_count_added: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('leafCountAdded'), 'exclude': lambda f: f is None }}) + leaf_count_requested: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('leafCountRequested'), 'exclude': lambda f: f is None }}) + metadata: Optional[List[AddPlaylistContentsMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class AddPlaylistContentsResponseBody: + r"""Playlist Updated""" + media_container: Optional[AddPlaylistContentsMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class AddPlaylistContentsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[AddPlaylistContentsResponseBody] = dataclasses.field(default=None) + r"""Playlist Updated""" + + diff --git a/src/plex_api/models/operations/applyupdates.py b/src/plex_api/models/operations/applyupdates.py new file mode 100644 index 0000000..ee53227 --- /dev/null +++ b/src/plex_api/models/operations/applyupdates.py @@ -0,0 +1,39 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from enum import Enum +from typing import Optional + +class Tonight(int, Enum): + r"""Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install""" + ZERO = 0 + ONE = 1 + +class Skip(int, Enum): + r"""Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`.""" + ZERO = 0 + ONE = 1 + + +@dataclasses.dataclass +class ApplyUpdatesRequest: + skip: Optional[Skip] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'skip', 'style': 'form', 'explode': True }}) + r"""Indicate that the latest version should be marked as skipped. The entry for this version will have the `state` set to `skipped`.""" + tonight: Optional[Tonight] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'tonight', 'style': 'form', 'explode': True }}) + r"""Indicate that you want the update to run during the next Butler execution. Omitting this or setting it to false indicates that the update should install""" + + + + +@dataclasses.dataclass +class ApplyUpdatesResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/cancelserveractivities.py b/src/plex_api/models/operations/cancelserveractivities.py new file mode 100644 index 0000000..d5cdcb5 --- /dev/null +++ b/src/plex_api/models/operations/cancelserveractivities.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class CancelServerActivitiesRequest: + activity_uuid: str = dataclasses.field(metadata={'path_param': { 'field_name': 'activityUUID', 'style': 'simple', 'explode': False }}) + r"""The UUID of the activity to cancel.""" + + + + +@dataclasses.dataclass +class CancelServerActivitiesResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/checkforupdates.py b/src/plex_api/models/operations/checkforupdates.py new file mode 100644 index 0000000..cf3fd14 --- /dev/null +++ b/src/plex_api/models/operations/checkforupdates.py @@ -0,0 +1,32 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from enum import Enum +from typing import Optional + +class Download(int, Enum): + r"""Indicate that you want to start download any updates found.""" + ZERO = 0 + ONE = 1 + + +@dataclasses.dataclass +class CheckForUpdatesRequest: + download: Optional[Download] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'download', 'style': 'form', 'explode': True }}) + r"""Indicate that you want to start download any updates found.""" + + + + +@dataclasses.dataclass +class CheckForUpdatesResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/clearplaylistcontents.py b/src/plex_api/models/operations/clearplaylistcontents.py new file mode 100644 index 0000000..427c5fa --- /dev/null +++ b/src/plex_api/models/operations/clearplaylistcontents.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class ClearPlaylistContentsRequest: + playlist_id: float = dataclasses.field(metadata={'path_param': { 'field_name': 'playlistID', 'style': 'simple', 'explode': False }}) + r"""the ID of the playlist""" + + + + +@dataclasses.dataclass +class ClearPlaylistContentsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/createplaylist.py b/src/plex_api/models/operations/createplaylist.py new file mode 100644 index 0000000..bb3fb7f --- /dev/null +++ b/src/plex_api/models/operations/createplaylist.py @@ -0,0 +1,91 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from plex_api import utils +from typing import List, Optional + +class QueryParamType(str, Enum): + r"""type of playlist to create""" + AUDIO = 'audio' + VIDEO = 'video' + PHOTO = 'photo' + +class Smart(int, Enum): + r"""whether the playlist is smart or not""" + ZERO = 0 + ONE = 1 + + +@dataclasses.dataclass +class CreatePlaylistRequest: + smart: Smart = dataclasses.field(metadata={'query_param': { 'field_name': 'smart', 'style': 'form', 'explode': True }}) + r"""whether the playlist is smart or not""" + title: str = dataclasses.field(metadata={'query_param': { 'field_name': 'title', 'style': 'form', 'explode': True }}) + r"""name of the playlist""" + type: QueryParamType = dataclasses.field(metadata={'query_param': { 'field_name': 'type', 'style': 'form', 'explode': True }}) + r"""type of playlist to create""" + uri: str = dataclasses.field(metadata={'query_param': { 'field_name': 'uri', 'style': 'form', 'explode': True }}) + r"""the content URI for the playlist""" + play_queue_id: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'playQueueID', 'style': 'form', 'explode': True }}) + r"""the play queue to copy to a playlist""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class CreatePlaylistMetadata: + added_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + composite: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('composite'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + last_viewed_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastViewedAt'), 'exclude': lambda f: f is None }}) + leaf_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('leafCount'), 'exclude': lambda f: f is None }}) + playlist_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playlistType'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + smart: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('smart'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + view_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewCount'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class CreatePlaylistMediaContainer: + metadata: Optional[List[CreatePlaylistMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class CreatePlaylistResponseBody: + r"""returns all playlists""" + media_container: Optional[CreatePlaylistMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class CreatePlaylistResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[CreatePlaylistResponseBody] = dataclasses.field(default=None) + r"""returns all playlists""" + + diff --git a/src/plex_api/models/operations/deletelibrary.py b/src/plex_api/models/operations/deletelibrary.py new file mode 100644 index 0000000..eaa8c93 --- /dev/null +++ b/src/plex_api/models/operations/deletelibrary.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class DeleteLibraryRequest: + section_id: float = dataclasses.field(metadata={'path_param': { 'field_name': 'sectionId', 'style': 'simple', 'explode': False }}) + r"""the Id of the library to query""" + + + + +@dataclasses.dataclass +class DeleteLibraryResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/deleteplaylist.py b/src/plex_api/models/operations/deleteplaylist.py new file mode 100644 index 0000000..af5cf51 --- /dev/null +++ b/src/plex_api/models/operations/deleteplaylist.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class DeletePlaylistRequest: + playlist_id: float = dataclasses.field(metadata={'path_param': { 'field_name': 'playlistID', 'style': 'simple', 'explode': False }}) + r"""the ID of the playlist""" + + + + +@dataclasses.dataclass +class DeletePlaylistResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/enablepapertrail.py b/src/plex_api/models/operations/enablepapertrail.py new file mode 100644 index 0000000..787b157 --- /dev/null +++ b/src/plex_api/models/operations/enablepapertrail.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class EnablePaperTrailResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/getavailableclients.py b/src/plex_api/models/operations/getavailableclients.py new file mode 100644 index 0000000..6d735ac --- /dev/null +++ b/src/plex_api/models/operations/getavailableclients.py @@ -0,0 +1,58 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Server: + address: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('address'), 'exclude': lambda f: f is None }}) + device_class: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deviceClass'), 'exclude': lambda f: f is None }}) + host: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host'), 'exclude': lambda f: f is None }}) + machine_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machineIdentifier'), 'exclude': lambda f: f is None }}) + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + port: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port'), 'exclude': lambda f: f is None }}) + product: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('product'), 'exclude': lambda f: f is None }}) + protocol: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protocol'), 'exclude': lambda f: f is None }}) + protocol_capabilities: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protocolCapabilities'), 'exclude': lambda f: f is None }}) + protocol_version: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protocolVersion'), 'exclude': lambda f: f is None }}) + version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetAvailableClientsMediaContainer: + server: Optional[List[Server]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Server'), 'exclude': lambda f: f is None }}) + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetAvailableClientsResponseBody: + r"""Available Clients""" + media_container: Optional[GetAvailableClientsMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetAvailableClientsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetAvailableClientsResponseBody] = dataclasses.field(default=None) + r"""Available Clients""" + + diff --git a/src/plex_api/models/operations/getbutlertasks.py b/src/plex_api/models/operations/getbutlertasks.py new file mode 100644 index 0000000..048e031 --- /dev/null +++ b/src/plex_api/models/operations/getbutlertasks.py @@ -0,0 +1,52 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ButlerTask: + description: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('description'), 'exclude': lambda f: f is None }}) + enabled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enabled'), 'exclude': lambda f: f is None }}) + interval: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('interval'), 'exclude': lambda f: f is None }}) + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + schedule_randomized: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('scheduleRandomized'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class ButlerTasks: + butler_task: Optional[List[ButlerTask]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ButlerTask'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetButlerTasksResponseBody: + r"""All butler tasks""" + butler_tasks: Optional[ButlerTasks] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ButlerTasks'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetButlerTasksResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetButlerTasksResponseBody] = dataclasses.field(default=None) + r"""All butler tasks""" + + diff --git a/src/plex_api/models/operations/getdevices.py b/src/plex_api/models/operations/getdevices.py new file mode 100644 index 0000000..fb57524 --- /dev/null +++ b/src/plex_api/models/operations/getdevices.py @@ -0,0 +1,53 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Device: + client_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('clientIdentifier'), 'exclude': lambda f: f is None }}) + created_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdAt'), 'exclude': lambda f: f is None }}) + id: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + platform: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('platform'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetDevicesMediaContainer: + device: Optional[List[Device]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Device'), 'exclude': lambda f: f is None }}) + identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('identifier'), 'exclude': lambda f: f is None }}) + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetDevicesResponseBody: + r"""Devices""" + media_container: Optional[GetDevicesMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetDevicesResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetDevicesResponseBody] = dataclasses.field(default=None) + r"""Devices""" + + diff --git a/src/plex_api/models/operations/getfilehash.py b/src/plex_api/models/operations/getfilehash.py new file mode 100644 index 0000000..08acf1f --- /dev/null +++ b/src/plex_api/models/operations/getfilehash.py @@ -0,0 +1,28 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from typing import Optional + + +@dataclasses.dataclass +class GetFileHashRequest: + url: str = dataclasses.field(metadata={'query_param': { 'field_name': 'url', 'style': 'form', 'explode': True }}) + r"""This is the path to the local file, must be prefixed by `file://`""" + type: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'type', 'style': 'form', 'explode': True }}) + r"""Item type""" + + + + +@dataclasses.dataclass +class GetFileHashResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/getglobalhubs.py b/src/plex_api/models/operations/getglobalhubs.py new file mode 100644 index 0000000..530f53a --- /dev/null +++ b/src/plex_api/models/operations/getglobalhubs.py @@ -0,0 +1,100 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from plex_api import utils +from typing import List, Optional + +class OnlyTransient(int, Enum): + r"""Only return hubs which are \\"transient\\", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added).""" + ZERO = 0 + ONE = 1 + + +@dataclasses.dataclass +class GetGlobalHubsRequest: + count: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'count', 'style': 'form', 'explode': True }}) + r"""The number of items to return with each hub.""" + only_transient: Optional[OnlyTransient] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'onlyTransient', 'style': 'form', 'explode': True }}) + r"""Only return hubs which are \\"transient\\", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added).""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetGlobalHubsMetadata: + added_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + composite: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('composite'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + last_viewed_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastViewedAt'), 'exclude': lambda f: f is None }}) + leaf_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('leafCount'), 'exclude': lambda f: f is None }}) + playlist_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playlistType'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + smart: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('smart'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + title_sort: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('titleSort'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + view_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewCount'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Hub: + context: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('context'), 'exclude': lambda f: f is None }}) + hub_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hubIdentifier'), 'exclude': lambda f: f is None }}) + hub_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hubKey'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + metadata: Optional[List[GetGlobalHubsMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + more: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('more'), 'exclude': lambda f: f is None }}) + promoted: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('promoted'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + style: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('style'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetGlobalHubsMediaContainer: + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + hub: Optional[List[Hub]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Hub'), 'exclude': lambda f: f is None }}) + identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('identifier'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetGlobalHubsResponseBody: + r"""returns global hubs""" + media_container: Optional[GetGlobalHubsMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetGlobalHubsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetGlobalHubsResponseBody] = dataclasses.field(default=None) + r"""returns global hubs""" + + diff --git a/src/plex_api/models/operations/getlibraries.py b/src/plex_api/models/operations/getlibraries.py new file mode 100644 index 0000000..a66fea7 --- /dev/null +++ b/src/plex_api/models/operations/getlibraries.py @@ -0,0 +1,79 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibrariesLocation: + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + path: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('path'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibrariesDirectory: + agent: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('agent'), 'exclude': lambda f: f is None }}) + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + composite: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('composite'), 'exclude': lambda f: f is None }}) + content: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('content'), 'exclude': lambda f: f is None }}) + content_changed_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contentChangedAt'), 'exclude': lambda f: f is None }}) + created_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdAt'), 'exclude': lambda f: f is None }}) + directory: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('directory'), 'exclude': lambda f: f is None }}) + filters: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filters'), 'exclude': lambda f: f is None }}) + hidden: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + language: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('language'), 'exclude': lambda f: f is None }}) + location: Optional[List[GetLibrariesLocation]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Location'), 'exclude': lambda f: f is None }}) + refreshing: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refreshing'), 'exclude': lambda f: f is None }}) + scanned_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('scannedAt'), 'exclude': lambda f: f is None }}) + scanner: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('scanner'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + uuid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('uuid'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibrariesMediaContainer: + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + directory: Optional[List[GetLibrariesDirectory]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Directory'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + title1: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title1'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibrariesResponseBody: + r"""The libraries available on the Server""" + media_container: Optional[GetLibrariesMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetLibrariesResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetLibrariesResponseBody] = dataclasses.field(default=None) + r"""The libraries available on the Server""" + + diff --git a/src/plex_api/models/operations/getlibrary.py b/src/plex_api/models/operations/getlibrary.py new file mode 100644 index 0000000..4807575 --- /dev/null +++ b/src/plex_api/models/operations/getlibrary.py @@ -0,0 +1,153 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from plex_api import utils +from typing import List, Optional + +class IncludeDetails(int, Enum): + r"""Whether or not to include details for a section (types, filters, and sorts). + Only exists for backwards compatibility, media providers other than the server libraries have it on always. + """ + ZERO = 0 + ONE = 1 + + +@dataclasses.dataclass +class GetLibraryRequest: + section_id: float = dataclasses.field(metadata={'path_param': { 'field_name': 'sectionId', 'style': 'simple', 'explode': False }}) + r"""the Id of the library to query""" + include_details: Optional[IncludeDetails] = dataclasses.field(default=IncludeDetails.ZERO, metadata={'query_param': { 'field_name': 'includeDetails', 'style': 'form', 'explode': True }}) + r"""Whether or not to include details for a section (types, filters, and sorts). + Only exists for backwards compatibility, media providers other than the server libraries have it on always. + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryDirectory: + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + prompt: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('prompt'), 'exclude': lambda f: f is None }}) + search: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('search'), 'exclude': lambda f: f is None }}) + secondary: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secondary'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Filter: + filter_: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filter'), 'exclude': lambda f: f is None }}) + filter_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filterType'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Sort: + default: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default'), 'exclude': lambda f: f is None }}) + default_direction: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('defaultDirection'), 'exclude': lambda f: f is None }}) + desc_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('descKey'), 'exclude': lambda f: f is None }}) + first_character_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('firstCharacterKey'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Field: + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + sub_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subType'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryType: + active: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('active'), 'exclude': lambda f: f is None }}) + field: Optional[List[Field]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Field'), 'exclude': lambda f: f is None }}) + filter_: Optional[List[Filter]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Filter'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + sort: Optional[List[Sort]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Sort'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Operator: + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class FieldType: + operator: Optional[List[Operator]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Operator'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryMediaContainer: + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + content: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('content'), 'exclude': lambda f: f is None }}) + directory: Optional[List[GetLibraryDirectory]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Directory'), 'exclude': lambda f: f is None }}) + field_type: Optional[List[FieldType]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('FieldType'), 'exclude': lambda f: f is None }}) + identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('identifier'), 'exclude': lambda f: f is None }}) + library_section_id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + media_tag_prefix: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagPrefix'), 'exclude': lambda f: f is None }}) + media_tag_version: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagVersion'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title1: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title1'), 'exclude': lambda f: f is None }}) + type: Optional[List[GetLibraryType]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Type'), 'exclude': lambda f: f is None }}) + view_group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewGroup'), 'exclude': lambda f: f is None }}) + view_mode: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewMode'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryResponseBody: + r"""The details of the library""" + media_container: Optional[GetLibraryMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetLibraryResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetLibraryResponseBody] = dataclasses.field(default=None) + r"""The details of the library""" + + diff --git a/src/plex_api/models/operations/getlibraryhubs.py b/src/plex_api/models/operations/getlibraryhubs.py new file mode 100644 index 0000000..c7671ab --- /dev/null +++ b/src/plex_api/models/operations/getlibraryhubs.py @@ -0,0 +1,205 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from datetime import date +from enum import Enum +from plex_api import utils +from typing import List, Optional + +class QueryParamOnlyTransient(int, Enum): + r"""Only return hubs which are \\"transient\\", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added).""" + ZERO = 0 + ONE = 1 + + +@dataclasses.dataclass +class GetLibraryHubsRequest: + section_id: float = dataclasses.field(metadata={'path_param': { 'field_name': 'sectionId', 'style': 'simple', 'explode': False }}) + r"""the Id of the library to query""" + count: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'count', 'style': 'form', 'explode': True }}) + r"""The number of items to return with each hub.""" + only_transient: Optional[QueryParamOnlyTransient] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'onlyTransient', 'style': 'form', 'explode': True }}) + r"""Only return hubs which are \\"transient\\", meaning those which are prone to changing after media playback or addition (e.g. On Deck, or Recently Added).""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryHubsPart: + audio_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioProfile'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + file: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file'), 'exclude': lambda f: f is None }}) + has64bit_offsets: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has64bitOffsets'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + optimized_for_streaming: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('optimizedForStreaming'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryHubsMedia: + aspect_ratio: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aspectRatio'), 'exclude': lambda f: f is None }}) + audio_channels: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioChannels'), 'exclude': lambda f: f is None }}) + audio_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioCodec'), 'exclude': lambda f: f is None }}) + audio_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioProfile'), 'exclude': lambda f: f is None }}) + bitrate: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + has64bit_offsets: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has64bitOffsets'), 'exclude': lambda f: f is None }}) + height: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('height'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + optimized_for_streaming: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('optimizedForStreaming'), 'exclude': lambda f: f is None }}) + part: Optional[List[GetLibraryHubsPart]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Part'), 'exclude': lambda f: f is None }}) + video_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoCodec'), 'exclude': lambda f: f is None }}) + video_frame_rate: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFrameRate'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + video_resolution: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoResolution'), 'exclude': lambda f: f is None }}) + width: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('width'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryHubsGenre: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryHubsCountry: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryHubsDirector: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryHubsRole: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryHubsWriter: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryHubsMetadata: + added_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + audience_rating: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audienceRating'), 'exclude': lambda f: f is None }}) + audience_rating_image: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audienceRatingImage'), 'exclude': lambda f: f is None }}) + chapter_source: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('chapterSource'), 'exclude': lambda f: f is None }}) + content_rating: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contentRating'), 'exclude': lambda f: f is None }}) + country: Optional[List[GetLibraryHubsCountry]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Country'), 'exclude': lambda f: f is None }}) + director: Optional[List[GetLibraryHubsDirector]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Director'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + genre: Optional[List[GetLibraryHubsGenre]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Genre'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + last_viewed_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastViewedAt'), 'exclude': lambda f: f is None }}) + library_section_id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + library_section_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionKey'), 'exclude': lambda f: f is None }}) + library_section_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionTitle'), 'exclude': lambda f: f is None }}) + media: Optional[List[GetLibraryHubsMedia]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Media'), 'exclude': lambda f: f is None }}) + originally_available_at: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('originallyAvailableAt'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'exclude': lambda f: f is None }}) + primary_extra_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('primaryExtraKey'), 'exclude': lambda f: f is None }}) + rating: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('rating'), 'exclude': lambda f: f is None }}) + rating_image: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingImage'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + role: Optional[List[GetLibraryHubsRole]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Role'), 'exclude': lambda f: f is None }}) + skip_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('skipCount'), 'exclude': lambda f: f is None }}) + studio: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('studio'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + tagline: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tagline'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + view_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewCount'), 'exclude': lambda f: f is None }}) + writer: Optional[List[GetLibraryHubsWriter]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Writer'), 'exclude': lambda f: f is None }}) + year: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('year'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryHubsHub: + context: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('context'), 'exclude': lambda f: f is None }}) + hub_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hubIdentifier'), 'exclude': lambda f: f is None }}) + hub_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hubKey'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + metadata: Optional[List[GetLibraryHubsMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + more: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('more'), 'exclude': lambda f: f is None }}) + promoted: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('promoted'), 'exclude': lambda f: f is None }}) + random: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('random'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + style: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('style'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryHubsMediaContainer: + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + hub: Optional[List[GetLibraryHubsHub]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Hub'), 'exclude': lambda f: f is None }}) + identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('identifier'), 'exclude': lambda f: f is None }}) + library_section_id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + library_section_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionTitle'), 'exclude': lambda f: f is None }}) + library_section_uuid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionUUID'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryHubsResponseBody: + r"""The hubs specific to the library""" + media_container: Optional[GetLibraryHubsMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetLibraryHubsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetLibraryHubsResponseBody] = dataclasses.field(default=None) + r"""The hubs specific to the library""" + + diff --git a/src/plex_api/models/operations/getlibraryitems.py b/src/plex_api/models/operations/getlibraryitems.py new file mode 100644 index 0000000..29d6c4f --- /dev/null +++ b/src/plex_api/models/operations/getlibraryitems.py @@ -0,0 +1,227 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from datetime import date +from enum import Enum +from plex_api import utils +from typing import List, Optional + +class Tag(str, Enum): + r"""A key representing a specific tag within the section.""" + ALL = 'all' + UNWATCHED = 'unwatched' + NEWEST = 'newest' + RECENTLY_ADDED = 'recentlyAdded' + RECENTLY_VIEWED = 'recentlyViewed' + ON_DECK = 'onDeck' + COLLECTION = 'collection' + EDITION = 'edition' + GENRE = 'genre' + YEAR = 'year' + DECADE = 'decade' + DIRECTOR = 'director' + ACTOR = 'actor' + COUNTRY = 'country' + CONTENT_RATING = 'contentRating' + RATING = 'rating' + RESOLUTION = 'resolution' + FIRST_CHARACTER = 'firstCharacter' + FOLDER = 'folder' + + +@dataclasses.dataclass +class GetLibraryItemsRequest: + section_id: int = dataclasses.field(metadata={'path_param': { 'field_name': 'sectionId', 'style': 'simple', 'explode': False }}) + r"""the Id of the library to query""" + tag: Tag = dataclasses.field(metadata={'path_param': { 'field_name': 'tag', 'style': 'simple', 'explode': False }}) + r"""A key representing a specific tag within the section.""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryItemsPart: + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + file: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryItemsMedia: + aspect_ratio: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aspectRatio'), 'exclude': lambda f: f is None }}) + audio_channels: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioChannels'), 'exclude': lambda f: f is None }}) + audio_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioCodec'), 'exclude': lambda f: f is None }}) + bitrate: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + height: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('height'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + part: Optional[List[GetLibraryItemsPart]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Part'), 'exclude': lambda f: f is None }}) + video_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoCodec'), 'exclude': lambda f: f is None }}) + video_frame_rate: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFrameRate'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + video_resolution: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoResolution'), 'exclude': lambda f: f is None }}) + width: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('width'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryItemsGenre: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryItemsCountry: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryItemsDirector: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryItemsWriter: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryItemsRole: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryItemsMetadata: + added_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + audience_rating: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audienceRating'), 'exclude': lambda f: f is None }}) + audience_rating_image: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audienceRatingImage'), 'exclude': lambda f: f is None }}) + chapter_source: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('chapterSource'), 'exclude': lambda f: f is None }}) + child_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('childCount'), 'exclude': lambda f: f is None }}) + content_rating: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contentRating'), 'exclude': lambda f: f is None }}) + country: Optional[List[GetLibraryItemsCountry]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Country'), 'exclude': lambda f: f is None }}) + director: Optional[List[GetLibraryItemsDirector]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Director'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + genre: Optional[List[GetLibraryItemsGenre]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Genre'), 'exclude': lambda f: f is None }}) + grandparent_art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentArt'), 'exclude': lambda f: f is None }}) + grandparent_guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentGuid'), 'exclude': lambda f: f is None }}) + grandparent_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentKey'), 'exclude': lambda f: f is None }}) + grandparent_rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentRatingKey'), 'exclude': lambda f: f is None }}) + grandparent_theme: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentTheme'), 'exclude': lambda f: f is None }}) + grandparent_thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentThumb'), 'exclude': lambda f: f is None }}) + grandparent_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentTitle'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + has_premium_extras: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hasPremiumExtras'), 'exclude': lambda f: f is None }}) + has_premium_primary_extra: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hasPremiumPrimaryExtra'), 'exclude': lambda f: f is None }}) + index: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('index'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + last_viewed_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastViewedAt'), 'exclude': lambda f: f is None }}) + leaf_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('leafCount'), 'exclude': lambda f: f is None }}) + media: Optional[List[GetLibraryItemsMedia]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Media'), 'exclude': lambda f: f is None }}) + originally_available_at: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('originallyAvailableAt'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'exclude': lambda f: f is None }}) + original_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('originalTitle'), 'exclude': lambda f: f is None }}) + parent_guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentGuid'), 'exclude': lambda f: f is None }}) + parent_index: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentIndex'), 'exclude': lambda f: f is None }}) + parent_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentKey'), 'exclude': lambda f: f is None }}) + parent_rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentRatingKey'), 'exclude': lambda f: f is None }}) + parent_studio: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentStudio'), 'exclude': lambda f: f is None }}) + parent_theme: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentTheme'), 'exclude': lambda f: f is None }}) + parent_thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentThumb'), 'exclude': lambda f: f is None }}) + parent_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentTitle'), 'exclude': lambda f: f is None }}) + parent_year: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentYear'), 'exclude': lambda f: f is None }}) + primary_extra_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('primaryExtraKey'), 'exclude': lambda f: f is None }}) + rating: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('rating'), 'exclude': lambda f: f is None }}) + rating_image: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingImage'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + role: Optional[List[GetLibraryItemsRole]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Role'), 'exclude': lambda f: f is None }}) + skip_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('skipCount'), 'exclude': lambda f: f is None }}) + studio: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('studio'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + tagline: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tagline'), 'exclude': lambda f: f is None }}) + theme: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('theme'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + title_sort: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('titleSort'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + view_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewCount'), 'exclude': lambda f: f is None }}) + viewed_leaf_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewedLeafCount'), 'exclude': lambda f: f is None }}) + view_offset: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewOffset'), 'exclude': lambda f: f is None }}) + writer: Optional[List[GetLibraryItemsWriter]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Writer'), 'exclude': lambda f: f is None }}) + year: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('year'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryItemsMediaContainer: + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('identifier'), 'exclude': lambda f: f is None }}) + library_section_id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + library_section_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionTitle'), 'exclude': lambda f: f is None }}) + library_section_uuid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionUUID'), 'exclude': lambda f: f is None }}) + media_tag_prefix: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagPrefix'), 'exclude': lambda f: f is None }}) + media_tag_version: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagVersion'), 'exclude': lambda f: f is None }}) + metadata: Optional[List[GetLibraryItemsMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + mixed_parents: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mixedParents'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title1: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title1'), 'exclude': lambda f: f is None }}) + title2: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title2'), 'exclude': lambda f: f is None }}) + view_group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewGroup'), 'exclude': lambda f: f is None }}) + view_mode: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewMode'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetLibraryItemsResponseBody: + r"""The contents of the library by section and tag""" + media_container: Optional[GetLibraryItemsMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetLibraryItemsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetLibraryItemsResponseBody] = dataclasses.field(default=None) + r"""The contents of the library by section and tag""" + + diff --git a/src/plex_api/models/operations/getmetadata.py b/src/plex_api/models/operations/getmetadata.py new file mode 100644 index 0000000..67a5d2f --- /dev/null +++ b/src/plex_api/models/operations/getmetadata.py @@ -0,0 +1,264 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from datetime import date +from plex_api import utils +from typing import List, Optional + + +@dataclasses.dataclass +class GetMetadataRequest: + rating_key: float = dataclasses.field(metadata={'path_param': { 'field_name': 'ratingKey', 'style': 'simple', 'explode': False }}) + r"""the id of the library item to return the children of.""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Stream: + bit_depth: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitDepth'), 'exclude': lambda f: f is None }}) + bitrate: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + channels: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('channels'), 'exclude': lambda f: f is None }}) + chroma_location: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('chromaLocation'), 'exclude': lambda f: f is None }}) + chroma_subsampling: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('chromaSubsampling'), 'exclude': lambda f: f is None }}) + codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec'), 'exclude': lambda f: f is None }}) + coded_height: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codedHeight'), 'exclude': lambda f: f is None }}) + coded_width: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codedWidth'), 'exclude': lambda f: f is None }}) + color_primaries: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('colorPrimaries'), 'exclude': lambda f: f is None }}) + color_range: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('colorRange'), 'exclude': lambda f: f is None }}) + color_space: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('colorSpace'), 'exclude': lambda f: f is None }}) + color_trc: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('colorTrc'), 'exclude': lambda f: f is None }}) + default: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default'), 'exclude': lambda f: f is None }}) + display_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('displayTitle'), 'exclude': lambda f: f is None }}) + extended_display_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('extendedDisplayTitle'), 'exclude': lambda f: f is None }}) + frame_rate: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('frameRate'), 'exclude': lambda f: f is None }}) + has_scaling_matrix: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hasScalingMatrix'), 'exclude': lambda f: f is None }}) + height: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('height'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + index: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('index'), 'exclude': lambda f: f is None }}) + language: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('language'), 'exclude': lambda f: f is None }}) + language_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('languageCode'), 'exclude': lambda f: f is None }}) + language_tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('languageTag'), 'exclude': lambda f: f is None }}) + level: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('level'), 'exclude': lambda f: f is None }}) + profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('profile'), 'exclude': lambda f: f is None }}) + ref_frames: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refFrames'), 'exclude': lambda f: f is None }}) + sampling_rate: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('samplingRate'), 'exclude': lambda f: f is None }}) + scan_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('scanType'), 'exclude': lambda f: f is None }}) + selected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('selected'), 'exclude': lambda f: f is None }}) + stream_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('streamIdentifier'), 'exclude': lambda f: f is None }}) + stream_type: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('streamType'), 'exclude': lambda f: f is None }}) + width: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('width'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataPart: + audio_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioProfile'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + file: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file'), 'exclude': lambda f: f is None }}) + has64bit_offsets: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has64bitOffsets'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + optimized_for_streaming: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('optimizedForStreaming'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + stream: Optional[List[Stream]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Stream'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataMedia: + aspect_ratio: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aspectRatio'), 'exclude': lambda f: f is None }}) + audio_channels: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioChannels'), 'exclude': lambda f: f is None }}) + audio_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioCodec'), 'exclude': lambda f: f is None }}) + audio_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioProfile'), 'exclude': lambda f: f is None }}) + bitrate: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + has64bit_offsets: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has64bitOffsets'), 'exclude': lambda f: f is None }}) + height: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('height'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + optimized_for_streaming: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('optimizedForStreaming'), 'exclude': lambda f: f is None }}) + part: Optional[List[GetMetadataPart]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Part'), 'exclude': lambda f: f is None }}) + video_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoCodec'), 'exclude': lambda f: f is None }}) + video_frame_rate: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFrameRate'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + video_resolution: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoResolution'), 'exclude': lambda f: f is None }}) + width: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('width'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataGenre: + filter_: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filter'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataCountry: + filter_: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filter'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Guids: + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Ratings: + image: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('image'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + value: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataDirector: + filter_: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filter'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + tag_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tagKey'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataWriter: + filter_: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filter'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + tag_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tagKey'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataRole: + filter_: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filter'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + role: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('role'), 'exclude': lambda f: f is None }}) + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + tag_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tagKey'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Producer: + filter_: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('filter'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + tag_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tagKey'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataMetadata: + added_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + audience_rating: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audienceRating'), 'exclude': lambda f: f is None }}) + audience_rating_image: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audienceRatingImage'), 'exclude': lambda f: f is None }}) + content_rating: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contentRating'), 'exclude': lambda f: f is None }}) + country: Optional[List[GetMetadataCountry]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Country'), 'exclude': lambda f: f is None }}) + director: Optional[List[GetMetadataDirector]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Director'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + genre: Optional[List[GetMetadataGenre]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Genre'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + guids: Optional[List[Guids]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Guid'), 'exclude': lambda f: f is None }}) + has_premium_primary_extra: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hasPremiumPrimaryExtra'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + library_section_id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + library_section_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionKey'), 'exclude': lambda f: f is None }}) + library_section_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionTitle'), 'exclude': lambda f: f is None }}) + media: Optional[List[GetMetadataMedia]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Media'), 'exclude': lambda f: f is None }}) + originally_available_at: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('originallyAvailableAt'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'exclude': lambda f: f is None }}) + producer: Optional[List[Producer]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Producer'), 'exclude': lambda f: f is None }}) + rating: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('rating'), 'exclude': lambda f: f is None }}) + rating_image: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingImage'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + ratings: Optional[List[Ratings]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Rating'), 'exclude': lambda f: f is None }}) + role: Optional[List[GetMetadataRole]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Role'), 'exclude': lambda f: f is None }}) + studio: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('studio'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + tagline: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tagline'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + writer: Optional[List[GetMetadataWriter]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Writer'), 'exclude': lambda f: f is None }}) + year: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('year'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataMediaContainer: + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('identifier'), 'exclude': lambda f: f is None }}) + library_section_id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + library_section_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionTitle'), 'exclude': lambda f: f is None }}) + library_section_uuid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionUUID'), 'exclude': lambda f: f is None }}) + media_tag_prefix: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagPrefix'), 'exclude': lambda f: f is None }}) + media_tag_version: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagVersion'), 'exclude': lambda f: f is None }}) + metadata: Optional[List[GetMetadataMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataResponseBody: + r"""The metadata of the library item.""" + media_container: Optional[GetMetadataMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetMetadataResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetMetadataResponseBody] = dataclasses.field(default=None) + r"""The metadata of the library item.""" + + diff --git a/src/plex_api/models/operations/getmetadatachildren.py b/src/plex_api/models/operations/getmetadatachildren.py new file mode 100644 index 0000000..334bcda --- /dev/null +++ b/src/plex_api/models/operations/getmetadatachildren.py @@ -0,0 +1,115 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclasses.dataclass +class GetMetadataChildrenRequest: + rating_key: float = dataclasses.field(metadata={'path_param': { 'field_name': 'ratingKey', 'style': 'simple', 'explode': False }}) + r"""the id of the library item to return the children of.""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataChildrenDirectory: + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + leaf_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('leafCount'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + viewed_leaf_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewedLeafCount'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataChildrenMetadata: + added_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + index: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('index'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + last_rated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastRatedAt'), 'exclude': lambda f: f is None }}) + last_viewed_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastViewedAt'), 'exclude': lambda f: f is None }}) + leaf_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('leafCount'), 'exclude': lambda f: f is None }}) + parent_guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentGuid'), 'exclude': lambda f: f is None }}) + parent_index: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentIndex'), 'exclude': lambda f: f is None }}) + parent_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentKey'), 'exclude': lambda f: f is None }}) + parent_rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentRatingKey'), 'exclude': lambda f: f is None }}) + parent_studio: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentStudio'), 'exclude': lambda f: f is None }}) + parent_theme: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentTheme'), 'exclude': lambda f: f is None }}) + parent_thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentThumb'), 'exclude': lambda f: f is None }}) + parent_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentTitle'), 'exclude': lambda f: f is None }}) + parent_year: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentYear'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + skip_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('skipCount'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + user_rating: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('userRating'), 'exclude': lambda f: f is None }}) + view_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewCount'), 'exclude': lambda f: f is None }}) + viewed_leaf_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewedLeafCount'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataChildrenMediaContainer: + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + directory: Optional[List[GetMetadataChildrenDirectory]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Directory'), 'exclude': lambda f: f is None }}) + identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('identifier'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + library_section_id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + library_section_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionTitle'), 'exclude': lambda f: f is None }}) + library_section_uuid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionUUID'), 'exclude': lambda f: f is None }}) + media_tag_prefix: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagPrefix'), 'exclude': lambda f: f is None }}) + media_tag_version: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagVersion'), 'exclude': lambda f: f is None }}) + metadata: Optional[List[GetMetadataChildrenMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + nocache: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nocache'), 'exclude': lambda f: f is None }}) + parent_index: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentIndex'), 'exclude': lambda f: f is None }}) + parent_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentTitle'), 'exclude': lambda f: f is None }}) + parent_year: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentYear'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + theme: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('theme'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title1: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title1'), 'exclude': lambda f: f is None }}) + title2: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title2'), 'exclude': lambda f: f is None }}) + view_group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewGroup'), 'exclude': lambda f: f is None }}) + view_mode: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewMode'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMetadataChildrenResponseBody: + r"""The children of the library item.""" + media_container: Optional[GetMetadataChildrenMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetMetadataChildrenResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetMetadataChildrenResponseBody] = dataclasses.field(default=None) + r"""The children of the library item.""" + + diff --git a/src/plex_api/models/operations/getmyplexaccount.py b/src/plex_api/models/operations/getmyplexaccount.py new file mode 100644 index 0000000..82be17b --- /dev/null +++ b/src/plex_api/models/operations/getmyplexaccount.py @@ -0,0 +1,50 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class MyPlex: + auth_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('authToken'), 'exclude': lambda f: f is None }}) + mapping_error: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mappingError'), 'exclude': lambda f: f is None }}) + mapping_state: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mappingState'), 'exclude': lambda f: f is None }}) + private_address: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('privateAddress'), 'exclude': lambda f: f is None }}) + private_port: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('privatePort'), 'exclude': lambda f: f is None }}) + public_address: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('publicAddress'), 'exclude': lambda f: f is None }}) + public_port: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('publicPort'), 'exclude': lambda f: f is None }}) + sign_in_state: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('signInState'), 'exclude': lambda f: f is None }}) + subscription_active: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subscriptionActive'), 'exclude': lambda f: f is None }}) + subscription_features: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subscriptionFeatures'), 'exclude': lambda f: f is None }}) + subscription_state: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subscriptionState'), 'exclude': lambda f: f is None }}) + username: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('username'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetMyPlexAccountResponseBody: + r"""MyPlex Account""" + my_plex: Optional[MyPlex] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MyPlex'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetMyPlexAccountResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetMyPlexAccountResponseBody] = dataclasses.field(default=None) + r"""MyPlex Account""" + + diff --git a/src/plex_api/models/operations/getondeck.py b/src/plex_api/models/operations/getondeck.py new file mode 100644 index 0000000..cc1f750 --- /dev/null +++ b/src/plex_api/models/operations/getondeck.py @@ -0,0 +1,166 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import dateutil.parser +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from datetime import datetime +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetOnDeckStream: + bit_depth: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitDepth'), 'exclude': lambda f: f is None }}) + bitrate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + chroma_location: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('chromaLocation'), 'exclude': lambda f: f is None }}) + chroma_subsampling: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('chromaSubsampling'), 'exclude': lambda f: f is None }}) + codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec'), 'exclude': lambda f: f is None }}) + coded_height: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codedHeight'), 'exclude': lambda f: f is None }}) + coded_width: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codedWidth'), 'exclude': lambda f: f is None }}) + color_range: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('colorRange'), 'exclude': lambda f: f is None }}) + default: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default'), 'exclude': lambda f: f is None }}) + display_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('displayTitle'), 'exclude': lambda f: f is None }}) + extended_display_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('extendedDisplayTitle'), 'exclude': lambda f: f is None }}) + frame_rate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('frameRate'), 'exclude': lambda f: f is None }}) + height: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('height'), 'exclude': lambda f: f is None }}) + id: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + index: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('index'), 'exclude': lambda f: f is None }}) + language: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('language'), 'exclude': lambda f: f is None }}) + language_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('languageCode'), 'exclude': lambda f: f is None }}) + language_tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('languageTag'), 'exclude': lambda f: f is None }}) + level: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('level'), 'exclude': lambda f: f is None }}) + profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('profile'), 'exclude': lambda f: f is None }}) + ref_frames: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('refFrames'), 'exclude': lambda f: f is None }}) + stream_type: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('streamType'), 'exclude': lambda f: f is None }}) + width: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('width'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetOnDeckPart: + audio_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioProfile'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + file: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file'), 'exclude': lambda f: f is None }}) + id: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + stream: Optional[List[GetOnDeckStream]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Stream'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetOnDeckMedia: + aspect_ratio: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aspectRatio'), 'exclude': lambda f: f is None }}) + audio_channels: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioChannels'), 'exclude': lambda f: f is None }}) + audio_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioCodec'), 'exclude': lambda f: f is None }}) + audio_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioProfile'), 'exclude': lambda f: f is None }}) + bitrate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + height: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('height'), 'exclude': lambda f: f is None }}) + id: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + part: Optional[List[GetOnDeckPart]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Part'), 'exclude': lambda f: f is None }}) + video_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoCodec'), 'exclude': lambda f: f is None }}) + video_frame_rate: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFrameRate'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + video_resolution: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoResolution'), 'exclude': lambda f: f is None }}) + width: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('width'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetOnDeckGuids: + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetOnDeckMetadata: + added_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + content_rating: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contentRating'), 'exclude': lambda f: f is None }}) + duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + grandparent_art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentArt'), 'exclude': lambda f: f is None }}) + grandparent_guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentGuid'), 'exclude': lambda f: f is None }}) + grandparent_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentKey'), 'exclude': lambda f: f is None }}) + grandparent_rating_key: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentRatingKey'), 'exclude': lambda f: f is None }}) + grandparent_theme: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentTheme'), 'exclude': lambda f: f is None }}) + grandparent_thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentThumb'), 'exclude': lambda f: f is None }}) + grandparent_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentTitle'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + guids: Optional[List[GetOnDeckGuids]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Guid'), 'exclude': lambda f: f is None }}) + index: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('index'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + last_viewed_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastViewedAt'), 'exclude': lambda f: f is None }}) + library_section_id: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + library_section_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionKey'), 'exclude': lambda f: f is None }}) + library_section_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionTitle'), 'exclude': lambda f: f is None }}) + library_section_uuid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionUUID'), 'exclude': lambda f: f is None }}) + media: Optional[List[GetOnDeckMedia]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Media'), 'exclude': lambda f: f is None }}) + originally_available_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('originallyAvailableAt'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'exclude': lambda f: f is None }}) + parent_guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentGuid'), 'exclude': lambda f: f is None }}) + parent_index: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentIndex'), 'exclude': lambda f: f is None }}) + parent_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentKey'), 'exclude': lambda f: f is None }}) + parent_rating_key: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentRatingKey'), 'exclude': lambda f: f is None }}) + parent_thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentThumb'), 'exclude': lambda f: f is None }}) + parent_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentTitle'), 'exclude': lambda f: f is None }}) + rating_key: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + year: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('year'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetOnDeckMediaContainer: + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('identifier'), 'exclude': lambda f: f is None }}) + media_tag_prefix: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagPrefix'), 'exclude': lambda f: f is None }}) + media_tag_version: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagVersion'), 'exclude': lambda f: f is None }}) + metadata: Optional[List[GetOnDeckMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + mixed_parents: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mixedParents'), 'exclude': lambda f: f is None }}) + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetOnDeckResponseBody: + r"""The on Deck content""" + media_container: Optional[GetOnDeckMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetOnDeckResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetOnDeckResponseBody] = dataclasses.field(default=None) + r"""The on Deck content""" + + diff --git a/src/plex_api/models/operations/getpin.py b/src/plex_api/models/operations/getpin.py new file mode 100644 index 0000000..c5ebe5b --- /dev/null +++ b/src/plex_api/models/operations/getpin.py @@ -0,0 +1,83 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import dateutil.parser +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from datetime import datetime +from plex_api import utils +from typing import Optional + +GET_PIN_SERVERS = [ + "https://plex.tv/api/v2", +] + + +@dataclasses.dataclass +class GetPinRequest: + x_plex_client_identifier: str = dataclasses.field(metadata={'header': { 'field_name': 'X-Plex-Client-Identifier', 'style': 'simple', 'explode': False }}) + r"""Plex Authentication Token""" + strong: Optional[bool] = dataclasses.field(default=False, metadata={'query_param': { 'field_name': 'strong', 'style': 'form', 'explode': True }}) + r"""Determines the kind of code returned by the API call + Strong codes are used for Pin authentication flows + Non-Strong codes are used for `Plex.tv/link` + """ + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Location: + city: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('city'), 'exclude': lambda f: f is None }}) + code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + continent_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('continent_code'), 'exclude': lambda f: f is None }}) + coordinates: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('coordinates'), 'exclude': lambda f: f is None }}) + country: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('country'), 'exclude': lambda f: f is None }}) + european_union_member: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('european_union_member'), 'exclude': lambda f: f is None }}) + in_privacy_restricted_country: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('in_privacy_restricted_country'), 'exclude': lambda f: f is None }}) + postal_code: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('postal_code'), 'exclude': lambda f: f is None }}) + subdivisions: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subdivisions'), 'exclude': lambda f: f is None }}) + time_zone: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('time_zone'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPinResponseBody: + r"""The Pin""" + auth_token: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('authToken'), 'exclude': lambda f: f is None }}) + client_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('clientIdentifier'), 'exclude': lambda f: f is None }}) + code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('code'), 'exclude': lambda f: f is None }}) + created_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('createdAt'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'exclude': lambda f: f is None }}) + expires_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('expiresAt'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'exclude': lambda f: f is None }}) + expires_in: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('expiresIn'), 'exclude': lambda f: f is None }}) + id: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + r"""PinID for use with authentication""" + location: Optional[Location] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('location'), 'exclude': lambda f: f is None }}) + new_registration: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('newRegistration'), 'exclude': lambda f: f is None }}) + product: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('product'), 'exclude': lambda f: f is None }}) + qr: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('qr'), 'exclude': lambda f: f is None }}) + r"""a link to a QR code hosted on plex.tv + The QR code redirects to the relevant `plex.tv/link` authentication page + Which then prompts the user for the 4 Digit Link Pin + """ + trusted: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('trusted'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetPinResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetPinResponseBody] = dataclasses.field(default=None) + r"""The Pin""" + + diff --git a/src/plex_api/models/operations/getplaylist.py b/src/plex_api/models/operations/getplaylist.py new file mode 100644 index 0000000..17ddc26 --- /dev/null +++ b/src/plex_api/models/operations/getplaylist.py @@ -0,0 +1,70 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclasses.dataclass +class GetPlaylistRequest: + playlist_id: float = dataclasses.field(metadata={'path_param': { 'field_name': 'playlistID', 'style': 'simple', 'explode': False }}) + r"""the ID of the playlist""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistMetadata: + added_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + composite: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('composite'), 'exclude': lambda f: f is None }}) + content: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('content'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + leaf_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('leafCount'), 'exclude': lambda f: f is None }}) + playlist_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playlistType'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + smart: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('smart'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistMediaContainer: + metadata: Optional[List[GetPlaylistMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistResponseBody: + r"""The playlist""" + media_container: Optional[GetPlaylistMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetPlaylistResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetPlaylistResponseBody] = dataclasses.field(default=None) + r"""The playlist""" + + diff --git a/src/plex_api/models/operations/getplaylistcontents.py b/src/plex_api/models/operations/getplaylistcontents.py new file mode 100644 index 0000000..ac6f733 --- /dev/null +++ b/src/plex_api/models/operations/getplaylistcontents.py @@ -0,0 +1,178 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from datetime import date +from plex_api import utils +from typing import List, Optional + + +@dataclasses.dataclass +class GetPlaylistContentsRequest: + playlist_id: float = dataclasses.field(metadata={'path_param': { 'field_name': 'playlistID', 'style': 'simple', 'explode': False }}) + r"""the ID of the playlist""" + type: float = dataclasses.field(metadata={'query_param': { 'field_name': 'type', 'style': 'form', 'explode': True }}) + r"""the metadata type of the item to return""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistContentsPart: + audio_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioProfile'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + file: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file'), 'exclude': lambda f: f is None }}) + has64bit_offsets: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has64bitOffsets'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + optimized_for_streaming: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('optimizedForStreaming'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistContentsMedia: + aspect_ratio: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aspectRatio'), 'exclude': lambda f: f is None }}) + audio_channels: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioChannels'), 'exclude': lambda f: f is None }}) + audio_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioCodec'), 'exclude': lambda f: f is None }}) + audio_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioProfile'), 'exclude': lambda f: f is None }}) + bitrate: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + has64bit_offsets: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has64bitOffsets'), 'exclude': lambda f: f is None }}) + height: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('height'), 'exclude': lambda f: f is None }}) + id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + optimized_for_streaming: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('optimizedForStreaming'), 'exclude': lambda f: f is None }}) + part: Optional[List[GetPlaylistContentsPart]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Part'), 'exclude': lambda f: f is None }}) + video_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoCodec'), 'exclude': lambda f: f is None }}) + video_frame_rate: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFrameRate'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + video_resolution: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoResolution'), 'exclude': lambda f: f is None }}) + width: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('width'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistContentsGenre: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistContentsCountry: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistContentsDirector: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistContentsWriter: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistContentsRole: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistContentsMetadata: + added_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + audience_rating: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audienceRating'), 'exclude': lambda f: f is None }}) + audience_rating_image: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audienceRatingImage'), 'exclude': lambda f: f is None }}) + content_rating: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contentRating'), 'exclude': lambda f: f is None }}) + country: Optional[List[GetPlaylistContentsCountry]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Country'), 'exclude': lambda f: f is None }}) + director: Optional[List[GetPlaylistContentsDirector]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Director'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + genre: Optional[List[GetPlaylistContentsGenre]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Genre'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + has_premium_extras: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hasPremiumExtras'), 'exclude': lambda f: f is None }}) + has_premium_primary_extra: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hasPremiumPrimaryExtra'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + library_section_id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + library_section_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionKey'), 'exclude': lambda f: f is None }}) + library_section_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionTitle'), 'exclude': lambda f: f is None }}) + media: Optional[List[GetPlaylistContentsMedia]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Media'), 'exclude': lambda f: f is None }}) + originally_available_at: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('originallyAvailableAt'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'exclude': lambda f: f is None }}) + rating: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('rating'), 'exclude': lambda f: f is None }}) + rating_image: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingImage'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + role: Optional[List[GetPlaylistContentsRole]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Role'), 'exclude': lambda f: f is None }}) + studio: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('studio'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + tagline: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tagline'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + title_sort: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('titleSort'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + writer: Optional[List[GetPlaylistContentsWriter]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Writer'), 'exclude': lambda f: f is None }}) + year: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('year'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistContentsMediaContainer: + composite: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('composite'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + leaf_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('leafCount'), 'exclude': lambda f: f is None }}) + metadata: Optional[List[GetPlaylistContentsMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + playlist_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playlistType'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + smart: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('smart'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistContentsResponseBody: + r"""The playlist contents""" + media_container: Optional[GetPlaylistContentsMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetPlaylistContentsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetPlaylistContentsResponseBody] = dataclasses.field(default=None) + r"""The playlist contents""" + + diff --git a/src/plex_api/models/operations/getplaylists.py b/src/plex_api/models/operations/getplaylists.py new file mode 100644 index 0000000..be186ff --- /dev/null +++ b/src/plex_api/models/operations/getplaylists.py @@ -0,0 +1,85 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from plex_api import utils +from typing import List, Optional + +class PlaylistType(str, Enum): + r"""limit to a type of playlist.""" + AUDIO = 'audio' + VIDEO = 'video' + PHOTO = 'photo' + +class QueryParamSmart(int, Enum): + r"""type of playlists to return (default is all).""" + ZERO = 0 + ONE = 1 + + +@dataclasses.dataclass +class GetPlaylistsRequest: + playlist_type: Optional[PlaylistType] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'playlistType', 'style': 'form', 'explode': True }}) + r"""limit to a type of playlist.""" + smart: Optional[QueryParamSmart] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'smart', 'style': 'form', 'explode': True }}) + r"""type of playlists to return (default is all).""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistsMetadata: + added_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + composite: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('composite'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + icon: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('icon'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + last_viewed_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lastViewedAt'), 'exclude': lambda f: f is None }}) + leaf_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('leafCount'), 'exclude': lambda f: f is None }}) + playlist_type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('playlistType'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + smart: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('smart'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + view_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewCount'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistsMediaContainer: + metadata: Optional[List[GetPlaylistsMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetPlaylistsResponseBody: + r"""returns all playlists""" + media_container: Optional[GetPlaylistsMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetPlaylistsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetPlaylistsResponseBody] = dataclasses.field(default=None) + r"""returns all playlists""" + + diff --git a/src/plex_api/models/operations/getrecentlyadded.py b/src/plex_api/models/operations/getrecentlyadded.py new file mode 100644 index 0000000..88f0165 --- /dev/null +++ b/src/plex_api/models/operations/getrecentlyadded.py @@ -0,0 +1,166 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import dateutil.parser +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from datetime import datetime +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Part: + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + file: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file'), 'exclude': lambda f: f is None }}) + has64bit_offsets: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has64bitOffsets'), 'exclude': lambda f: f is None }}) + has_thumbnail: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hasThumbnail'), 'exclude': lambda f: f is None }}) + id: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + optimized_for_streaming: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('optimizedForStreaming'), 'exclude': lambda f: f is None }}) + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Media: + aspect_ratio: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aspectRatio'), 'exclude': lambda f: f is None }}) + audio_channels: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioChannels'), 'exclude': lambda f: f is None }}) + audio_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioCodec'), 'exclude': lambda f: f is None }}) + bitrate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + has64bit_offsets: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('has64bitOffsets'), 'exclude': lambda f: f is None }}) + height: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('height'), 'exclude': lambda f: f is None }}) + id: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + optimized_for_streaming: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('optimizedForStreaming'), 'exclude': lambda f: f is None }}) + part: Optional[List[Part]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Part'), 'exclude': lambda f: f is None }}) + video_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoCodec'), 'exclude': lambda f: f is None }}) + video_frame_rate: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFrameRate'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + video_resolution: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoResolution'), 'exclude': lambda f: f is None }}) + width: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('width'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Genre: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Director: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Writer: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Country: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Role: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Metadata: + added_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + audience_rating: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audienceRating'), 'exclude': lambda f: f is None }}) + audience_rating_image: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audienceRatingImage'), 'exclude': lambda f: f is None }}) + chapter_source: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('chapterSource'), 'exclude': lambda f: f is None }}) + content_rating: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contentRating'), 'exclude': lambda f: f is None }}) + country: Optional[List[Country]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Country'), 'exclude': lambda f: f is None }}) + director: Optional[List[Director]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Director'), 'exclude': lambda f: f is None }}) + duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + genre: Optional[List[Genre]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Genre'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + library_section_id: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + library_section_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionTitle'), 'exclude': lambda f: f is None }}) + library_section_uuid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionUUID'), 'exclude': lambda f: f is None }}) + media: Optional[List[Media]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Media'), 'exclude': lambda f: f is None }}) + originally_available_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('originallyAvailableAt'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'exclude': lambda f: f is None }}) + primary_extra_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('primaryExtraKey'), 'exclude': lambda f: f is None }}) + rating: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('rating'), 'exclude': lambda f: f is None }}) + rating_image: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingImage'), 'exclude': lambda f: f is None }}) + rating_key: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + role: Optional[List[Role]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Role'), 'exclude': lambda f: f is None }}) + studio: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('studio'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + tagline: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tagline'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + writer: Optional[List[Writer]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Writer'), 'exclude': lambda f: f is None }}) + year: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('year'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetRecentlyAddedMediaContainer: + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('identifier'), 'exclude': lambda f: f is None }}) + media_tag_prefix: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagPrefix'), 'exclude': lambda f: f is None }}) + media_tag_version: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagVersion'), 'exclude': lambda f: f is None }}) + metadata: Optional[List[Metadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + mixed_parents: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mixedParents'), 'exclude': lambda f: f is None }}) + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetRecentlyAddedResponseBody: + r"""The recently added content""" + media_container: Optional[GetRecentlyAddedMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetRecentlyAddedResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetRecentlyAddedResponseBody] = dataclasses.field(default=None) + r"""The recently added content""" + + diff --git a/src/plex_api/models/operations/getresizedphoto.py b/src/plex_api/models/operations/getresizedphoto.py new file mode 100644 index 0000000..2fdea08 --- /dev/null +++ b/src/plex_api/models/operations/getresizedphoto.py @@ -0,0 +1,48 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from enum import Enum + +class MinSize(int, Enum): + r"""images are always scaled proportionally. A value of '1' in minSize will make the smaller native dimension the dimension resized against.""" + ZERO = 0 + ONE = 1 + +class Upscale(int, Enum): + r"""allow images to be resized beyond native dimensions.""" + ZERO = 0 + ONE = 1 + + +@dataclasses.dataclass +class GetResizedPhotoRequest: + blur: float = dataclasses.field(metadata={'query_param': { 'field_name': 'blur', 'style': 'form', 'explode': True }}) + r"""The width for the resized photo""" + height: float = dataclasses.field(metadata={'query_param': { 'field_name': 'height', 'style': 'form', 'explode': True }}) + r"""The height for the resized photo""" + min_size: MinSize = dataclasses.field(metadata={'query_param': { 'field_name': 'minSize', 'style': 'form', 'explode': True }}) + r"""images are always scaled proportionally. A value of '1' in minSize will make the smaller native dimension the dimension resized against.""" + opacity: int = dataclasses.field(default=100, metadata={'query_param': { 'field_name': 'opacity', 'style': 'form', 'explode': True }}) + r"""The opacity for the resized photo""" + upscale: Upscale = dataclasses.field(metadata={'query_param': { 'field_name': 'upscale', 'style': 'form', 'explode': True }}) + r"""allow images to be resized beyond native dimensions.""" + url: str = dataclasses.field(metadata={'query_param': { 'field_name': 'url', 'style': 'form', 'explode': True }}) + r"""path to image within Plex""" + width: float = dataclasses.field(metadata={'query_param': { 'field_name': 'width', 'style': 'form', 'explode': True }}) + r"""The width for the resized photo""" + + + + +@dataclasses.dataclass +class GetResizedPhotoResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/getsearchresults.py b/src/plex_api/models/operations/getsearchresults.py new file mode 100644 index 0000000..515060f --- /dev/null +++ b/src/plex_api/models/operations/getsearchresults.py @@ -0,0 +1,182 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import dateutil.parser +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from datetime import datetime +from plex_api import utils +from typing import List, Optional + + +@dataclasses.dataclass +class GetSearchResultsRequest: + query: str = dataclasses.field(metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }}) + r"""The search query string to use""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSearchResultsPart: + audio_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioProfile'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + file: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file'), 'exclude': lambda f: f is None }}) + id: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSearchResultsMedia: + aspect_ratio: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('aspectRatio'), 'exclude': lambda f: f is None }}) + audio_channels: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioChannels'), 'exclude': lambda f: f is None }}) + audio_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioCodec'), 'exclude': lambda f: f is None }}) + audio_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioProfile'), 'exclude': lambda f: f is None }}) + bitrate: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + height: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('height'), 'exclude': lambda f: f is None }}) + id: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + part: Optional[List[GetSearchResultsPart]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Part'), 'exclude': lambda f: f is None }}) + video_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoCodec'), 'exclude': lambda f: f is None }}) + video_frame_rate: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoFrameRate'), 'exclude': lambda f: f is None }}) + video_profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoProfile'), 'exclude': lambda f: f is None }}) + video_resolution: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoResolution'), 'exclude': lambda f: f is None }}) + width: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('width'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSearchResultsGenre: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSearchResultsDirector: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSearchResultsWriter: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSearchResultsCountry: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSearchResultsRole: + tag: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tag'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSearchResultsMetadata: + added_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + audience_rating: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audienceRating'), 'exclude': lambda f: f is None }}) + audience_rating_image: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audienceRatingImage'), 'exclude': lambda f: f is None }}) + chapter_source: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('chapterSource'), 'exclude': lambda f: f is None }}) + content_rating: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('contentRating'), 'exclude': lambda f: f is None }}) + country: Optional[List[GetSearchResultsCountry]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Country'), 'exclude': lambda f: f is None }}) + director: Optional[List[GetSearchResultsDirector]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Director'), 'exclude': lambda f: f is None }}) + duration: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + genre: Optional[List[GetSearchResultsGenre]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Genre'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + library_section_id: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + library_section_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionTitle'), 'exclude': lambda f: f is None }}) + library_section_uuid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionUUID'), 'exclude': lambda f: f is None }}) + media: Optional[List[GetSearchResultsMedia]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Media'), 'exclude': lambda f: f is None }}) + originally_available_at: Optional[datetime] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('originallyAvailableAt'), 'encoder': utils.datetimeisoformat(True), 'decoder': dateutil.parser.isoparse, 'exclude': lambda f: f is None }}) + personal: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('personal'), 'exclude': lambda f: f is None }}) + primary_extra_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('primaryExtraKey'), 'exclude': lambda f: f is None }}) + rating: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('rating'), 'exclude': lambda f: f is None }}) + rating_image: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingImage'), 'exclude': lambda f: f is None }}) + rating_key: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + role: Optional[List[GetSearchResultsRole]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Role'), 'exclude': lambda f: f is None }}) + source_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceTitle'), 'exclude': lambda f: f is None }}) + studio: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('studio'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + tagline: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('tagline'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + writer: Optional[List[GetSearchResultsWriter]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Writer'), 'exclude': lambda f: f is None }}) + year: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('year'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Provider: + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSearchResultsMediaContainer: + identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('identifier'), 'exclude': lambda f: f is None }}) + media_tag_prefix: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagPrefix'), 'exclude': lambda f: f is None }}) + media_tag_version: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagVersion'), 'exclude': lambda f: f is None }}) + metadata: Optional[List[GetSearchResultsMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + provider: Optional[List[Provider]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Provider'), 'exclude': lambda f: f is None }}) + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSearchResultsResponseBody: + r"""Search Results""" + media_container: Optional[GetSearchResultsMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetSearchResultsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetSearchResultsResponseBody] = dataclasses.field(default=None) + r"""Search Results""" + + diff --git a/src/plex_api/models/operations/getserveractivities.py b/src/plex_api/models/operations/getserveractivities.py new file mode 100644 index 0000000..0b9497e --- /dev/null +++ b/src/plex_api/models/operations/getserveractivities.py @@ -0,0 +1,63 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Context: + library_section_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Activity: + cancellable: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('cancellable'), 'exclude': lambda f: f is None }}) + context: Optional[Context] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Context'), 'exclude': lambda f: f is None }}) + progress: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('progress'), 'exclude': lambda f: f is None }}) + subtitle: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subtitle'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + user_id: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('userID'), 'exclude': lambda f: f is None }}) + uuid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('uuid'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerActivitiesMediaContainer: + activity: Optional[List[Activity]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Activity'), 'exclude': lambda f: f is None }}) + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerActivitiesResponseBody: + r"""The Server Activities""" + media_container: Optional[GetServerActivitiesMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetServerActivitiesResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetServerActivitiesResponseBody] = dataclasses.field(default=None) + r"""The Server Activities""" + + diff --git a/src/plex_api/models/operations/getservercapabilities.py b/src/plex_api/models/operations/getservercapabilities.py new file mode 100644 index 0000000..e8ae1ee --- /dev/null +++ b/src/plex_api/models/operations/getservercapabilities.py @@ -0,0 +1,99 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Directory: + count: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('count'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class MediaContainer: + allow_camera_upload: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowCameraUpload'), 'exclude': lambda f: f is None }}) + allow_channel_access: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowChannelAccess'), 'exclude': lambda f: f is None }}) + allow_media_deletion: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowMediaDeletion'), 'exclude': lambda f: f is None }}) + allow_sharing: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSharing'), 'exclude': lambda f: f is None }}) + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + allow_tuners: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowTuners'), 'exclude': lambda f: f is None }}) + background_processing: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('backgroundProcessing'), 'exclude': lambda f: f is None }}) + certificate: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('certificate'), 'exclude': lambda f: f is None }}) + companion_proxy: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('companionProxy'), 'exclude': lambda f: f is None }}) + country_code: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('countryCode'), 'exclude': lambda f: f is None }}) + diagnostics: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('diagnostics'), 'exclude': lambda f: f is None }}) + directory: Optional[List[Directory]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Directory'), 'exclude': lambda f: f is None }}) + event_stream: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('eventStream'), 'exclude': lambda f: f is None }}) + friendly_name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('friendlyName'), 'exclude': lambda f: f is None }}) + hub_search: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hubSearch'), 'exclude': lambda f: f is None }}) + item_clusters: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('itemClusters'), 'exclude': lambda f: f is None }}) + livetv: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('livetv'), 'exclude': lambda f: f is None }}) + machine_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machineIdentifier'), 'exclude': lambda f: f is None }}) + media_providers: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaProviders'), 'exclude': lambda f: f is None }}) + multiuser: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('multiuser'), 'exclude': lambda f: f is None }}) + music_analysis: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('musicAnalysis'), 'exclude': lambda f: f is None }}) + my_plex: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('myPlex'), 'exclude': lambda f: f is None }}) + my_plex_mapping_state: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('myPlexMappingState'), 'exclude': lambda f: f is None }}) + my_plex_signin_state: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('myPlexSigninState'), 'exclude': lambda f: f is None }}) + my_plex_subscription: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('myPlexSubscription'), 'exclude': lambda f: f is None }}) + my_plex_username: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('myPlexUsername'), 'exclude': lambda f: f is None }}) + offline_transcode: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('offlineTranscode'), 'exclude': lambda f: f is None }}) + owner_features: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ownerFeatures'), 'exclude': lambda f: f is None }}) + photo_auto_tag: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('photoAutoTag'), 'exclude': lambda f: f is None }}) + platform: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('platform'), 'exclude': lambda f: f is None }}) + platform_version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('platformVersion'), 'exclude': lambda f: f is None }}) + plugin_host: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pluginHost'), 'exclude': lambda f: f is None }}) + push_notifications: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('pushNotifications'), 'exclude': lambda f: f is None }}) + read_only_libraries: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('readOnlyLibraries'), 'exclude': lambda f: f is None }}) + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + streaming_brain_abr_version: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('streamingBrainABRVersion'), 'exclude': lambda f: f is None }}) + streaming_brain_version: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('streamingBrainVersion'), 'exclude': lambda f: f is None }}) + sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sync'), 'exclude': lambda f: f is None }}) + transcoder_active_video_sessions: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcoderActiveVideoSessions'), 'exclude': lambda f: f is None }}) + transcoder_audio: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcoderAudio'), 'exclude': lambda f: f is None }}) + transcoder_lyrics: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcoderLyrics'), 'exclude': lambda f: f is None }}) + transcoder_photo: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcoderPhoto'), 'exclude': lambda f: f is None }}) + transcoder_subtitles: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcoderSubtitles'), 'exclude': lambda f: f is None }}) + transcoder_video: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcoderVideo'), 'exclude': lambda f: f is None }}) + transcoder_video_bitrates: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcoderVideoBitrates'), 'exclude': lambda f: f is None }}) + transcoder_video_qualities: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcoderVideoQualities'), 'exclude': lambda f: f is None }}) + transcoder_video_resolutions: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcoderVideoResolutions'), 'exclude': lambda f: f is None }}) + updated_at: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + updater: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updater'), 'exclude': lambda f: f is None }}) + version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version'), 'exclude': lambda f: f is None }}) + voice_search: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('voiceSearch'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerCapabilitiesResponseBody: + r"""The Server Capabilities""" + media_container: Optional[MediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetServerCapabilitiesResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetServerCapabilitiesResponseBody] = dataclasses.field(default=None) + r"""The Server Capabilities""" + + diff --git a/src/plex_api/models/operations/getserveridentity.py b/src/plex_api/models/operations/getserveridentity.py new file mode 100644 index 0000000..5592892 --- /dev/null +++ b/src/plex_api/models/operations/getserveridentity.py @@ -0,0 +1,42 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerIdentityMediaContainer: + claimed: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('claimed'), 'exclude': lambda f: f is None }}) + machine_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machineIdentifier'), 'exclude': lambda f: f is None }}) + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerIdentityResponseBody: + r"""The Server Identity information""" + media_container: Optional[GetServerIdentityMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetServerIdentityResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetServerIdentityResponseBody] = dataclasses.field(default=None) + r"""The Server Identity information""" + + diff --git a/src/plex_api/models/operations/getserverlist.py b/src/plex_api/models/operations/getserverlist.py new file mode 100644 index 0000000..8603911 --- /dev/null +++ b/src/plex_api/models/operations/getserverlist.py @@ -0,0 +1,53 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerListServer: + address: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('address'), 'exclude': lambda f: f is None }}) + host: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('host'), 'exclude': lambda f: f is None }}) + machine_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machineIdentifier'), 'exclude': lambda f: f is None }}) + name: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('name'), 'exclude': lambda f: f is None }}) + port: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('port'), 'exclude': lambda f: f is None }}) + version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerListMediaContainer: + server: Optional[List[GetServerListServer]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Server'), 'exclude': lambda f: f is None }}) + size: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerListResponseBody: + r"""List of Servers""" + media_container: Optional[GetServerListMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetServerListResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetServerListResponseBody] = dataclasses.field(default=None) + r"""List of Servers""" + + diff --git a/src/plex_api/models/operations/getserverpreferences.py b/src/plex_api/models/operations/getserverpreferences.py new file mode 100644 index 0000000..5fe8775 --- /dev/null +++ b/src/plex_api/models/operations/getserverpreferences.py @@ -0,0 +1,73 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional, Union + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Two: + advanced: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('advanced'), 'exclude': lambda f: f is None }}) + default: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default'), 'exclude': lambda f: f is None }}) + enum_values: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('enumValues'), 'exclude': lambda f: f is None }}) + group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }}) + hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }}) + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + label: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + value: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class One: + advanced: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('advanced'), 'exclude': lambda f: f is None }}) + default: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('default'), 'exclude': lambda f: f is None }}) + group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('group'), 'exclude': lambda f: f is None }}) + hidden: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hidden'), 'exclude': lambda f: f is None }}) + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + label: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('label'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + value: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('value'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerPreferencesMediaContainer: + setting: Optional[List[Union[One, Two]]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Setting'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetServerPreferencesResponseBody: + r"""Server Preferences""" + media_container: Optional[GetServerPreferencesMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetServerPreferencesResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetServerPreferencesResponseBody] = dataclasses.field(default=None) + r"""Server Preferences""" + + diff --git a/src/plex_api/models/operations/getsessionhistory.py b/src/plex_api/models/operations/getsessionhistory.py new file mode 100644 index 0000000..f06ee36 --- /dev/null +++ b/src/plex_api/models/operations/getsessionhistory.py @@ -0,0 +1,67 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from datetime import date +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSessionHistoryMetadata: + account_id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('accountID'), 'exclude': lambda f: f is None }}) + device_id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('deviceID'), 'exclude': lambda f: f is None }}) + grandparent_art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentArt'), 'exclude': lambda f: f is None }}) + grandparent_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentKey'), 'exclude': lambda f: f is None }}) + grandparent_thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentThumb'), 'exclude': lambda f: f is None }}) + grandparent_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentTitle'), 'exclude': lambda f: f is None }}) + history_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('historyKey'), 'exclude': lambda f: f is None }}) + index: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('index'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + library_section_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + originally_available_at: Optional[date] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('originallyAvailableAt'), 'encoder': utils.dateisoformat(True), 'decoder': utils.datefromisoformat, 'exclude': lambda f: f is None }}) + parent_index: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentIndex'), 'exclude': lambda f: f is None }}) + parent_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentKey'), 'exclude': lambda f: f is None }}) + parent_thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentThumb'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + viewed_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewedAt'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSessionHistoryMediaContainer: + metadata: Optional[List[GetSessionHistoryMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSessionHistoryResponseBody: + r"""List of Plex Sessions""" + media_container: Optional[GetSessionHistoryMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetSessionHistoryResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetSessionHistoryResponseBody] = dataclasses.field(default=None) + r"""List of Plex Sessions""" + + diff --git a/src/plex_api/models/operations/getsessions.py b/src/plex_api/models/operations/getsessions.py new file mode 100644 index 0000000..60ad59c --- /dev/null +++ b/src/plex_api/models/operations/getsessions.py @@ -0,0 +1,185 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSessionsStream: + album_gain: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('albumGain'), 'exclude': lambda f: f is None }}) + album_peak: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('albumPeak'), 'exclude': lambda f: f is None }}) + album_range: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('albumRange'), 'exclude': lambda f: f is None }}) + audio_channel_layout: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioChannelLayout'), 'exclude': lambda f: f is None }}) + bit_depth: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitDepth'), 'exclude': lambda f: f is None }}) + bitrate: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + channels: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('channels'), 'exclude': lambda f: f is None }}) + codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('codec'), 'exclude': lambda f: f is None }}) + display_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('displayTitle'), 'exclude': lambda f: f is None }}) + extended_display_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('extendedDisplayTitle'), 'exclude': lambda f: f is None }}) + gain: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('gain'), 'exclude': lambda f: f is None }}) + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + index: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('index'), 'exclude': lambda f: f is None }}) + location: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('location'), 'exclude': lambda f: f is None }}) + loudness: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('loudness'), 'exclude': lambda f: f is None }}) + lra: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('lra'), 'exclude': lambda f: f is None }}) + peak: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('peak'), 'exclude': lambda f: f is None }}) + sampling_rate: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('samplingRate'), 'exclude': lambda f: f is None }}) + selected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('selected'), 'exclude': lambda f: f is None }}) + stream_type: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('streamType'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSessionsPart: + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + decision: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('decision'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + file: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('file'), 'exclude': lambda f: f is None }}) + has_thumbnail: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('hasThumbnail'), 'exclude': lambda f: f is None }}) + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + selected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('selected'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + stream: Optional[List[GetSessionsStream]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Stream'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSessionsMedia: + audio_channels: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioChannels'), 'exclude': lambda f: f is None }}) + audio_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioCodec'), 'exclude': lambda f: f is None }}) + bitrate: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bitrate'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + part: Optional[List[GetSessionsPart]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Part'), 'exclude': lambda f: f is None }}) + selected: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('selected'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class User: + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Player: + address: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('address'), 'exclude': lambda f: f is None }}) + local: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('local'), 'exclude': lambda f: f is None }}) + machine_identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('machineIdentifier'), 'exclude': lambda f: f is None }}) + model: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('model'), 'exclude': lambda f: f is None }}) + platform: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('platform'), 'exclude': lambda f: f is None }}) + platform_version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('platformVersion'), 'exclude': lambda f: f is None }}) + product: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('product'), 'exclude': lambda f: f is None }}) + profile: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('profile'), 'exclude': lambda f: f is None }}) + relayed: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('relayed'), 'exclude': lambda f: f is None }}) + remote_public_address: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('remotePublicAddress'), 'exclude': lambda f: f is None }}) + secure: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('secure'), 'exclude': lambda f: f is None }}) + state: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('state'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + user_id: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('userID'), 'exclude': lambda f: f is None }}) + version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Session: + bandwidth: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('bandwidth'), 'exclude': lambda f: f is None }}) + id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('id'), 'exclude': lambda f: f is None }}) + location: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('location'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSessionsMetadata: + added_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + grandparent_art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentArt'), 'exclude': lambda f: f is None }}) + grandparent_guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentGuid'), 'exclude': lambda f: f is None }}) + grandparent_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentKey'), 'exclude': lambda f: f is None }}) + grandparent_rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentRatingKey'), 'exclude': lambda f: f is None }}) + grandparent_thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentThumb'), 'exclude': lambda f: f is None }}) + grandparent_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('grandparentTitle'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + index: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('index'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + library_section_id: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionID'), 'exclude': lambda f: f is None }}) + library_section_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionKey'), 'exclude': lambda f: f is None }}) + library_section_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('librarySectionTitle'), 'exclude': lambda f: f is None }}) + media: Optional[List[GetSessionsMedia]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Media'), 'exclude': lambda f: f is None }}) + music_analysis_version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('musicAnalysisVersion'), 'exclude': lambda f: f is None }}) + parent_guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentGuid'), 'exclude': lambda f: f is None }}) + parent_index: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentIndex'), 'exclude': lambda f: f is None }}) + parent_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentKey'), 'exclude': lambda f: f is None }}) + parent_rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentRatingKey'), 'exclude': lambda f: f is None }}) + parent_studio: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentStudio'), 'exclude': lambda f: f is None }}) + parent_thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentThumb'), 'exclude': lambda f: f is None }}) + parent_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentTitle'), 'exclude': lambda f: f is None }}) + parent_year: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentYear'), 'exclude': lambda f: f is None }}) + player: Optional[Player] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Player'), 'exclude': lambda f: f is None }}) + rating_count: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingCount'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + session: Optional[Session] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Session'), 'exclude': lambda f: f is None }}) + session_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sessionKey'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + title_sort: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('titleSort'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + user: Optional[User] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('User'), 'exclude': lambda f: f is None }}) + view_offset: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewOffset'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSessionsMediaContainer: + metadata: Optional[List[GetSessionsMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetSessionsResponseBody: + r"""List of Active Plex Sessions""" + media_container: Optional[GetSessionsMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetSessionsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetSessionsResponseBody] = dataclasses.field(default=None) + r"""List of Active Plex Sessions""" + + diff --git a/src/plex_api/models/operations/getsourceconnectioninformation.py b/src/plex_api/models/operations/getsourceconnectioninformation.py new file mode 100644 index 0000000..d9e8b81 --- /dev/null +++ b/src/plex_api/models/operations/getsourceconnectioninformation.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class GetSourceConnectionInformationRequest: + source: str = dataclasses.field(metadata={'query_param': { 'field_name': 'source', 'style': 'form', 'explode': True }}) + r"""The source identifier with an included prefix.""" + + + + +@dataclasses.dataclass +class GetSourceConnectionInformationResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/gettimeline.py b/src/plex_api/models/operations/gettimeline.py new file mode 100644 index 0000000..4b09448 --- /dev/null +++ b/src/plex_api/models/operations/gettimeline.py @@ -0,0 +1,50 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from enum import Enum + +class State(str, Enum): + r"""The state of the media item""" + PLAYING = 'playing' + PAUSED = 'paused' + STOPPED = 'stopped' + + +@dataclasses.dataclass +class GetTimelineRequest: + context: str = dataclasses.field(metadata={'query_param': { 'field_name': 'context', 'style': 'form', 'explode': True }}) + r"""The context of the media item""" + duration: float = dataclasses.field(metadata={'query_param': { 'field_name': 'duration', 'style': 'form', 'explode': True }}) + r"""The duration of the media item""" + has_mde: float = dataclasses.field(metadata={'query_param': { 'field_name': 'hasMDE', 'style': 'form', 'explode': True }}) + r"""Whether the media item has MDE""" + key: str = dataclasses.field(metadata={'query_param': { 'field_name': 'key', 'style': 'form', 'explode': True }}) + r"""The key of the media item to get the timeline for""" + play_back_time: float = dataclasses.field(metadata={'query_param': { 'field_name': 'playBackTime', 'style': 'form', 'explode': True }}) + r"""The playback time of the media item""" + play_queue_item_id: float = dataclasses.field(metadata={'query_param': { 'field_name': 'playQueueItemID', 'style': 'form', 'explode': True }}) + r"""The play queue item ID of the media item""" + rating_key: float = dataclasses.field(metadata={'query_param': { 'field_name': 'ratingKey', 'style': 'form', 'explode': True }}) + r"""The rating key of the media item""" + row: float = dataclasses.field(metadata={'query_param': { 'field_name': 'row', 'style': 'form', 'explode': True }}) + r"""The row of the media item""" + state: State = dataclasses.field(metadata={'query_param': { 'field_name': 'state', 'style': 'form', 'explode': True }}) + r"""The state of the media item""" + time: float = dataclasses.field(metadata={'query_param': { 'field_name': 'time', 'style': 'form', 'explode': True }}) + r"""The time of the media item""" + + + + +@dataclasses.dataclass +class GetTimelineResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/gettoken.py b/src/plex_api/models/operations/gettoken.py new file mode 100644 index 0000000..f4a84b4 --- /dev/null +++ b/src/plex_api/models/operations/gettoken.py @@ -0,0 +1,31 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + +GET_TOKEN_SERVERS = [ + "https://plex.tv/api/v2", +] + + +@dataclasses.dataclass +class GetTokenRequest: + pin_id: str = dataclasses.field(metadata={'path_param': { 'field_name': 'pinID', 'style': 'simple', 'explode': False }}) + r"""The PinID to retrieve an access token for""" + x_plex_client_identifier: str = dataclasses.field(metadata={'header': { 'field_name': 'X-Plex-Client-Identifier', 'style': 'simple', 'explode': False }}) + r"""Plex Authentication Token""" + + + + +@dataclasses.dataclass +class GetTokenResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/gettranscodesessions.py b/src/plex_api/models/operations/gettranscodesessions.py new file mode 100644 index 0000000..7eb0a03 --- /dev/null +++ b/src/plex_api/models/operations/gettranscodesessions.py @@ -0,0 +1,71 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class TranscodeSession: + audio_channels: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioChannels'), 'exclude': lambda f: f is None }}) + audio_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioCodec'), 'exclude': lambda f: f is None }}) + audio_decision: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('audioDecision'), 'exclude': lambda f: f is None }}) + complete: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('complete'), 'exclude': lambda f: f is None }}) + container: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('container'), 'exclude': lambda f: f is None }}) + context: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('context'), 'exclude': lambda f: f is None }}) + duration: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('duration'), 'exclude': lambda f: f is None }}) + error: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('error'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + max_offset_available: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('maxOffsetAvailable'), 'exclude': lambda f: f is None }}) + min_offset_available: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('minOffsetAvailable'), 'exclude': lambda f: f is None }}) + progress: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('progress'), 'exclude': lambda f: f is None }}) + protocol: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('protocol'), 'exclude': lambda f: f is None }}) + remaining: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('remaining'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + source_audio_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceAudioCodec'), 'exclude': lambda f: f is None }}) + source_video_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('sourceVideoCodec'), 'exclude': lambda f: f is None }}) + speed: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('speed'), 'exclude': lambda f: f is None }}) + subtitle_decision: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('subtitleDecision'), 'exclude': lambda f: f is None }}) + throttled: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('throttled'), 'exclude': lambda f: f is None }}) + time_stamp: Optional[float] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('timeStamp'), 'exclude': lambda f: f is None }}) + transcode_hw_requested: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('transcodeHwRequested'), 'exclude': lambda f: f is None }}) + video_codec: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoCodec'), 'exclude': lambda f: f is None }}) + video_decision: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('videoDecision'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetTranscodeSessionsMediaContainer: + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + transcode_session: Optional[List[TranscodeSession]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('TranscodeSession'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetTranscodeSessionsResponseBody: + r"""The Transcode Sessions""" + media_container: Optional[GetTranscodeSessionsMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetTranscodeSessionsResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetTranscodeSessionsResponseBody] = dataclasses.field(default=None) + r"""The Transcode Sessions""" + + diff --git a/src/plex_api/models/operations/gettransienttoken.py b/src/plex_api/models/operations/gettransienttoken.py new file mode 100644 index 0000000..c631d16 --- /dev/null +++ b/src/plex_api/models/operations/gettransienttoken.py @@ -0,0 +1,36 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from enum import Enum + +class GetTransientTokenQueryParamType(str, Enum): + r"""`delegation` - This is the only supported `type` parameter.""" + DELEGATION = 'delegation' + +class Scope(str, Enum): + r"""`all` - This is the only supported `scope` parameter.""" + ALL = 'all' + + +@dataclasses.dataclass +class GetTransientTokenRequest: + scope: Scope = dataclasses.field(metadata={'query_param': { 'field_name': 'scope', 'style': 'form', 'explode': True }}) + r"""`all` - This is the only supported `scope` parameter.""" + type: GetTransientTokenQueryParamType = dataclasses.field(metadata={'query_param': { 'field_name': 'type', 'style': 'form', 'explode': True }}) + r"""`delegation` - This is the only supported `type` parameter.""" + + + + +@dataclasses.dataclass +class GetTransientTokenResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/getupdatestatus.py b/src/plex_api/models/operations/getupdatestatus.py new file mode 100644 index 0000000..f6d685e --- /dev/null +++ b/src/plex_api/models/operations/getupdatestatus.py @@ -0,0 +1,57 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from plex_api import utils +from typing import List, Optional + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class Release: + added: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('added'), 'exclude': lambda f: f is None }}) + download_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('downloadURL'), 'exclude': lambda f: f is None }}) + fixed: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('fixed'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + state: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('state'), 'exclude': lambda f: f is None }}) + version: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('version'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetUpdateStatusMediaContainer: + can_install: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('canInstall'), 'exclude': lambda f: f is None }}) + checked_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('checkedAt'), 'exclude': lambda f: f is None }}) + download_url: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('downloadURL'), 'exclude': lambda f: f is None }}) + release: Optional[List[Release]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Release'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + status: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('status'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class GetUpdateStatusResponseBody: + r"""The Server Updates""" + media_container: Optional[GetUpdateStatusMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class GetUpdateStatusResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[GetUpdateStatusResponseBody] = dataclasses.field(default=None) + r"""The Server Updates""" + + diff --git a/src/plex_api/models/operations/logline.py b/src/plex_api/models/operations/logline.py new file mode 100644 index 0000000..d0786b0 --- /dev/null +++ b/src/plex_api/models/operations/logline.py @@ -0,0 +1,50 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from enum import Enum + +class Level(int, Enum): + r"""An integer log level to write to the PMS log with. + 0: Error + 1: Warning + 2: Info + 3: Debug + 4: Verbose + """ + ZERO = 0 + ONE = 1 + TWO = 2 + THREE = 3 + FOUR = 4 + + +@dataclasses.dataclass +class LogLineRequest: + level: Level = dataclasses.field(metadata={'query_param': { 'field_name': 'level', 'style': 'form', 'explode': True }}) + r"""An integer log level to write to the PMS log with. + 0: Error + 1: Warning + 2: Info + 3: Debug + 4: Verbose + """ + message: str = dataclasses.field(metadata={'query_param': { 'field_name': 'message', 'style': 'form', 'explode': True }}) + r"""The text of the message to write to the log.""" + source: str = dataclasses.field(metadata={'query_param': { 'field_name': 'source', 'style': 'form', 'explode': True }}) + r"""a string indicating the source of the message.""" + + + + +@dataclasses.dataclass +class LogLineResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/logmultiline.py b/src/plex_api/models/operations/logmultiline.py new file mode 100644 index 0000000..5a21dc1 --- /dev/null +++ b/src/plex_api/models/operations/logmultiline.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class LogMultiLineResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/markplayed.py b/src/plex_api/models/operations/markplayed.py new file mode 100644 index 0000000..a5fc245 --- /dev/null +++ b/src/plex_api/models/operations/markplayed.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class MarkPlayedRequest: + key: float = dataclasses.field(metadata={'query_param': { 'field_name': 'key', 'style': 'form', 'explode': True }}) + r"""The media key to mark as played""" + + + + +@dataclasses.dataclass +class MarkPlayedResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/markunplayed.py b/src/plex_api/models/operations/markunplayed.py new file mode 100644 index 0000000..665b1d5 --- /dev/null +++ b/src/plex_api/models/operations/markunplayed.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class MarkUnplayedRequest: + key: float = dataclasses.field(metadata={'query_param': { 'field_name': 'key', 'style': 'form', 'explode': True }}) + r"""The media key to mark as Unplayed""" + + + + +@dataclasses.dataclass +class MarkUnplayedResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/performsearch.py b/src/plex_api/models/operations/performsearch.py new file mode 100644 index 0000000..6b6149a --- /dev/null +++ b/src/plex_api/models/operations/performsearch.py @@ -0,0 +1,30 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from typing import Optional + + +@dataclasses.dataclass +class PerformSearchRequest: + query: str = dataclasses.field(metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }}) + r"""The query term""" + limit: Optional[float] = dataclasses.field(default=3, metadata={'query_param': { 'field_name': 'limit', 'style': 'form', 'explode': True }}) + r"""The number of items to return per hub""" + section_id: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'sectionId', 'style': 'form', 'explode': True }}) + r"""This gives context to the search, and can result in re-ordering of search result hubs""" + + + + +@dataclasses.dataclass +class PerformSearchResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/performvoicesearch.py b/src/plex_api/models/operations/performvoicesearch.py new file mode 100644 index 0000000..c552a18 --- /dev/null +++ b/src/plex_api/models/operations/performvoicesearch.py @@ -0,0 +1,30 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from typing import Optional + + +@dataclasses.dataclass +class PerformVoiceSearchRequest: + query: str = dataclasses.field(metadata={'query_param': { 'field_name': 'query', 'style': 'form', 'explode': True }}) + r"""The query term""" + limit: Optional[float] = dataclasses.field(default=3, metadata={'query_param': { 'field_name': 'limit', 'style': 'form', 'explode': True }}) + r"""The number of items to return per hub""" + section_id: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'sectionId', 'style': 'form', 'explode': True }}) + r"""This gives context to the search, and can result in re-ordering of search result hubs""" + + + + +@dataclasses.dataclass +class PerformVoiceSearchResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/refreshlibrary.py b/src/plex_api/models/operations/refreshlibrary.py new file mode 100644 index 0000000..f9fa2d0 --- /dev/null +++ b/src/plex_api/models/operations/refreshlibrary.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class RefreshLibraryRequest: + section_id: float = dataclasses.field(metadata={'path_param': { 'field_name': 'sectionId', 'style': 'simple', 'explode': False }}) + r"""the Id of the library to refresh""" + + + + +@dataclasses.dataclass +class RefreshLibraryResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/searchlibrary.py b/src/plex_api/models/operations/searchlibrary.py new file mode 100644 index 0000000..b747824 --- /dev/null +++ b/src/plex_api/models/operations/searchlibrary.py @@ -0,0 +1,96 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from dataclasses_json import Undefined, dataclass_json +from enum import Enum +from plex_api import utils +from typing import List, Optional + +class Type(int, Enum): + r"""Plex content type to search for""" + ONE = 1 + TWO = 2 + THREE = 3 + FOUR = 4 + + +@dataclasses.dataclass +class SearchLibraryRequest: + section_id: int = dataclasses.field(metadata={'path_param': { 'field_name': 'sectionId', 'style': 'simple', 'explode': False }}) + r"""the Id of the library to query""" + type: Type = dataclasses.field(metadata={'query_param': { 'field_name': 'type', 'style': 'form', 'explode': True }}) + r"""Plex content type to search for""" + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class SearchLibraryMetadata: + added_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('addedAt'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('guid'), 'exclude': lambda f: f is None }}) + index: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('index'), 'exclude': lambda f: f is None }}) + key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('key'), 'exclude': lambda f: f is None }}) + parent_guid: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentGuid'), 'exclude': lambda f: f is None }}) + parent_index: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentIndex'), 'exclude': lambda f: f is None }}) + parent_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentKey'), 'exclude': lambda f: f is None }}) + parent_rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentRatingKey'), 'exclude': lambda f: f is None }}) + parent_studio: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentStudio'), 'exclude': lambda f: f is None }}) + parent_theme: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentTheme'), 'exclude': lambda f: f is None }}) + parent_thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentThumb'), 'exclude': lambda f: f is None }}) + parent_title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentTitle'), 'exclude': lambda f: f is None }}) + parent_year: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('parentYear'), 'exclude': lambda f: f is None }}) + rating_key: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('ratingKey'), 'exclude': lambda f: f is None }}) + summary: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('summary'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title'), 'exclude': lambda f: f is None }}) + type: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('type'), 'exclude': lambda f: f is None }}) + updated_at: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('updatedAt'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class SearchLibraryMediaContainer: + allow_sync: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('allowSync'), 'exclude': lambda f: f is None }}) + art: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('art'), 'exclude': lambda f: f is None }}) + identifier: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('identifier'), 'exclude': lambda f: f is None }}) + media_tag_prefix: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagPrefix'), 'exclude': lambda f: f is None }}) + media_tag_version: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('mediaTagVersion'), 'exclude': lambda f: f is None }}) + metadata: Optional[List[SearchLibraryMetadata]] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('Metadata'), 'exclude': lambda f: f is None }}) + nocache: Optional[bool] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('nocache'), 'exclude': lambda f: f is None }}) + size: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('size'), 'exclude': lambda f: f is None }}) + thumb: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('thumb'), 'exclude': lambda f: f is None }}) + title1: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title1'), 'exclude': lambda f: f is None }}) + title2: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('title2'), 'exclude': lambda f: f is None }}) + view_group: Optional[str] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewGroup'), 'exclude': lambda f: f is None }}) + view_mode: Optional[int] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('viewMode'), 'exclude': lambda f: f is None }}) + + + + +@dataclass_json(undefined=Undefined.EXCLUDE) +@dataclasses.dataclass +class SearchLibraryResponseBody: + r"""The contents of the library by section and type""" + media_container: Optional[SearchLibraryMediaContainer] = dataclasses.field(default=None, metadata={'dataclasses_json': { 'letter_case': utils.get_field_name('MediaContainer'), 'exclude': lambda f: f is None }}) + + + + +@dataclasses.dataclass +class SearchLibraryResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + object: Optional[SearchLibraryResponseBody] = dataclasses.field(default=None) + r"""The contents of the library by section and type""" + + diff --git a/src/plex_api/models/operations/startalltasks.py b/src/plex_api/models/operations/startalltasks.py new file mode 100644 index 0000000..d66f2da --- /dev/null +++ b/src/plex_api/models/operations/startalltasks.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class StartAllTasksResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/starttask.py b/src/plex_api/models/operations/starttask.py new file mode 100644 index 0000000..e9469f2 --- /dev/null +++ b/src/plex_api/models/operations/starttask.py @@ -0,0 +1,43 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from enum import Enum + +class TaskName(str, Enum): + r"""the name of the task to be started.""" + BACKUP_DATABASE = 'BackupDatabase' + BUILD_GRACENOTE_COLLECTIONS = 'BuildGracenoteCollections' + CHECK_FOR_UPDATES = 'CheckForUpdates' + CLEAN_OLD_BUNDLES = 'CleanOldBundles' + CLEAN_OLD_CACHE_FILES = 'CleanOldCacheFiles' + DEEP_MEDIA_ANALYSIS = 'DeepMediaAnalysis' + GENERATE_AUTO_TAGS = 'GenerateAutoTags' + GENERATE_CHAPTER_THUMBS = 'GenerateChapterThumbs' + GENERATE_MEDIA_INDEX_FILES = 'GenerateMediaIndexFiles' + OPTIMIZE_DATABASE = 'OptimizeDatabase' + REFRESH_LIBRARIES = 'RefreshLibraries' + REFRESH_LOCAL_MEDIA = 'RefreshLocalMedia' + REFRESH_PERIODIC_METADATA = 'RefreshPeriodicMetadata' + UPGRADE_MEDIA_ANALYSIS = 'UpgradeMediaAnalysis' + + +@dataclasses.dataclass +class StartTaskRequest: + task_name: TaskName = dataclasses.field(metadata={'path_param': { 'field_name': 'taskName', 'style': 'simple', 'explode': False }}) + r"""the name of the task to be started.""" + + + + +@dataclasses.dataclass +class StartTaskResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/startuniversaltranscode.py b/src/plex_api/models/operations/startuniversaltranscode.py new file mode 100644 index 0000000..288bbe9 --- /dev/null +++ b/src/plex_api/models/operations/startuniversaltranscode.py @@ -0,0 +1,56 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from typing import Optional + + +@dataclasses.dataclass +class StartUniversalTranscodeRequest: + has_mde: float = dataclasses.field(metadata={'query_param': { 'field_name': 'hasMDE', 'style': 'form', 'explode': True }}) + r"""Whether the media item has MDE""" + media_index: float = dataclasses.field(metadata={'query_param': { 'field_name': 'mediaIndex', 'style': 'form', 'explode': True }}) + r"""The index of the media item to transcode""" + part_index: float = dataclasses.field(metadata={'query_param': { 'field_name': 'partIndex', 'style': 'form', 'explode': True }}) + r"""The index of the part to transcode""" + path: str = dataclasses.field(metadata={'query_param': { 'field_name': 'path', 'style': 'form', 'explode': True }}) + r"""The path to the media item to transcode""" + protocol: str = dataclasses.field(metadata={'query_param': { 'field_name': 'protocol', 'style': 'form', 'explode': True }}) + r"""The protocol to use for the transcode session""" + add_debug_overlay: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'addDebugOverlay', 'style': 'form', 'explode': True }}) + r"""Whether to add a debug overlay or not""" + audio_boost: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'audioBoost', 'style': 'form', 'explode': True }}) + r"""The audio boost""" + auto_adjust_quality: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'autoAdjustQuality', 'style': 'form', 'explode': True }}) + r"""Whether to auto adjust quality or not""" + direct_play: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'directPlay', 'style': 'form', 'explode': True }}) + r"""Whether to use direct play or not""" + direct_stream: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'directStream', 'style': 'form', 'explode': True }}) + r"""Whether to use direct stream or not""" + fast_seek: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'fastSeek', 'style': 'form', 'explode': True }}) + r"""Whether to use fast seek or not""" + location: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'location', 'style': 'form', 'explode': True }}) + r"""The location of the transcode session""" + media_buffer_size: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'mediaBufferSize', 'style': 'form', 'explode': True }}) + r"""The size of the media buffer""" + session: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'session', 'style': 'form', 'explode': True }}) + r"""The session ID""" + subtites: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'subtites', 'style': 'form', 'explode': True }}) + r"""The subtitles""" + subtitle_size: Optional[float] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'subtitleSize', 'style': 'form', 'explode': True }}) + r"""The size of the subtitles""" + + + + +@dataclasses.dataclass +class StartUniversalTranscodeResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/stopalltasks.py b/src/plex_api/models/operations/stopalltasks.py new file mode 100644 index 0000000..d7a1c28 --- /dev/null +++ b/src/plex_api/models/operations/stopalltasks.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class StopAllTasksResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/stoptask.py b/src/plex_api/models/operations/stoptask.py new file mode 100644 index 0000000..81dd8f9 --- /dev/null +++ b/src/plex_api/models/operations/stoptask.py @@ -0,0 +1,43 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from enum import Enum + +class PathParamTaskName(str, Enum): + r"""The name of the task to be started.""" + BACKUP_DATABASE = 'BackupDatabase' + BUILD_GRACENOTE_COLLECTIONS = 'BuildGracenoteCollections' + CHECK_FOR_UPDATES = 'CheckForUpdates' + CLEAN_OLD_BUNDLES = 'CleanOldBundles' + CLEAN_OLD_CACHE_FILES = 'CleanOldCacheFiles' + DEEP_MEDIA_ANALYSIS = 'DeepMediaAnalysis' + GENERATE_AUTO_TAGS = 'GenerateAutoTags' + GENERATE_CHAPTER_THUMBS = 'GenerateChapterThumbs' + GENERATE_MEDIA_INDEX_FILES = 'GenerateMediaIndexFiles' + OPTIMIZE_DATABASE = 'OptimizeDatabase' + REFRESH_LIBRARIES = 'RefreshLibraries' + REFRESH_LOCAL_MEDIA = 'RefreshLocalMedia' + REFRESH_PERIODIC_METADATA = 'RefreshPeriodicMetadata' + UPGRADE_MEDIA_ANALYSIS = 'UpgradeMediaAnalysis' + + +@dataclasses.dataclass +class StopTaskRequest: + task_name: PathParamTaskName = dataclasses.field(metadata={'path_param': { 'field_name': 'taskName', 'style': 'simple', 'explode': False }}) + r"""The name of the task to be started.""" + + + + +@dataclasses.dataclass +class StopTaskResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/stoptranscodesession.py b/src/plex_api/models/operations/stoptranscodesession.py new file mode 100644 index 0000000..4cc2400 --- /dev/null +++ b/src/plex_api/models/operations/stoptranscodesession.py @@ -0,0 +1,25 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class StopTranscodeSessionRequest: + session_key: str = dataclasses.field(metadata={'path_param': { 'field_name': 'sessionKey', 'style': 'simple', 'explode': False }}) + r"""the Key of the transcode session to stop""" + + + + +@dataclasses.dataclass +class StopTranscodeSessionResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/updateplaylist.py b/src/plex_api/models/operations/updateplaylist.py new file mode 100644 index 0000000..e269f66 --- /dev/null +++ b/src/plex_api/models/operations/updateplaylist.py @@ -0,0 +1,30 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from typing import Optional + + +@dataclasses.dataclass +class UpdatePlaylistRequest: + playlist_id: float = dataclasses.field(metadata={'path_param': { 'field_name': 'playlistID', 'style': 'simple', 'explode': False }}) + r"""the ID of the playlist""" + summary: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'summary', 'style': 'form', 'explode': True }}) + r"""summary description of the playlist""" + title: Optional[str] = dataclasses.field(default=None, metadata={'query_param': { 'field_name': 'title', 'style': 'form', 'explode': True }}) + r"""name of the playlist""" + + + + +@dataclasses.dataclass +class UpdatePlaylistResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/updateplayprogress.py b/src/plex_api/models/operations/updateplayprogress.py new file mode 100644 index 0000000..d670939 --- /dev/null +++ b/src/plex_api/models/operations/updateplayprogress.py @@ -0,0 +1,29 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http + + +@dataclasses.dataclass +class UpdatePlayProgressRequest: + key: str = dataclasses.field(metadata={'query_param': { 'field_name': 'key', 'style': 'form', 'explode': True }}) + r"""the media key""" + state: str = dataclasses.field(metadata={'query_param': { 'field_name': 'state', 'style': 'form', 'explode': True }}) + r"""The playback state of the media item.""" + time: float = dataclasses.field(metadata={'query_param': { 'field_name': 'time', 'style': 'form', 'explode': True }}) + r"""The time, in milliseconds, used to set the media playback progress.""" + + + + +@dataclasses.dataclass +class UpdatePlayProgressResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/models/operations/uploadplaylist.py b/src/plex_api/models/operations/uploadplaylist.py new file mode 100644 index 0000000..d1803bd --- /dev/null +++ b/src/plex_api/models/operations/uploadplaylist.py @@ -0,0 +1,47 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from __future__ import annotations +import dataclasses +import requests as requests_http +from enum import Enum + +class Force(int, Enum): + r"""Force overwriting of duplicate playlists. + By default, a playlist file uploaded with the same path will overwrite the existing playlist. + The `force` argument is used to disable overwriting. + If the `force` argument is set to 0, a new playlist will be created suffixed with the date and time that the duplicate was uploaded. + """ + ZERO = 0 + ONE = 1 + + +@dataclasses.dataclass +class UploadPlaylistRequest: + force: Force = dataclasses.field(metadata={'query_param': { 'field_name': 'force', 'style': 'form', 'explode': True }}) + r"""Force overwriting of duplicate playlists. + By default, a playlist file uploaded with the same path will overwrite the existing playlist. + The `force` argument is used to disable overwriting. + If the `force` argument is set to 0, a new playlist will be created suffixed with the date and time that the duplicate was uploaded. + """ + path: str = dataclasses.field(metadata={'query_param': { 'field_name': 'path', 'style': 'form', 'explode': True }}) + r"""absolute path to a directory on the server where m3u files are stored, or the absolute path to a playlist file on the server. + If the `path` argument is a directory, that path will be scanned for playlist files to be processed. + Each file in that directory creates a separate playlist, with a name based on the filename of the file that created it. + The GUID of each playlist is based on the filename. + If the `path` argument is a file, that file will be used to create a new playlist, with the name based on the filename of the file that created it. + The GUID of each playlist is based on the filename. + """ + + + + +@dataclasses.dataclass +class UploadPlaylistResponse: + content_type: str = dataclasses.field() + r"""HTTP response content type for this operation""" + raw_response: requests_http.Response = dataclasses.field() + r"""Raw HTTP response; suitable for custom response parsing""" + status_code: int = dataclasses.field() + r"""HTTP response status code for this operation""" + + diff --git a/src/plex_api/playlists.py b/src/plex_api/playlists.py new file mode 100644 index 0000000..4c4e9b3 --- /dev/null +++ b/src/plex_api/playlists.py @@ -0,0 +1,424 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations +from typing import Optional + +class Playlists: + r"""Playlists are ordered collections of media. They can be dumb (just a list of media) or smart (based on a media query, such as \\"all albums from 2017\\"). + They can be organized in (optionally nesting) folders. + Retrieving a playlist, or its items, will trigger a refresh of its metadata. + This may cause the duration and number of items to change. + """ + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def create_playlist(self, request: operations.CreatePlaylistRequest) -> operations.CreatePlaylistResponse: + r"""Create a Playlist + Create a new playlist. By default the playlist is blank. To create a playlist along with a first item, pass: + - `uri` - The content URI for what we're playing (e.g. `server://1234/com.plexapp.plugins.library/library/metadata/1`). + - `playQueueID` - To create a playlist from an existing play queue. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/playlists' + headers = {} + query_params = utils.get_query_params(operations.CreatePlaylistRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.CreatePlaylistResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.CreatePlaylistResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.CreatePlaylistResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_playlists(self, playlist_type: Optional[operations.PlaylistType] = None, smart: Optional[operations.QueryParamSmart] = None) -> operations.GetPlaylistsResponse: + r"""Get All Playlists + Get All Playlists given the specified filters. + """ + request = operations.GetPlaylistsRequest( + playlist_type=playlist_type, + smart=smart, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/playlists' + headers = {} + query_params = utils.get_query_params(operations.GetPlaylistsRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetPlaylistsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetPlaylistsResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetPlaylistsResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_playlist(self, playlist_id: float) -> operations.GetPlaylistResponse: + r"""Retrieve Playlist + Gets detailed metadata for a playlist. A playlist for many purposes (rating, editing metadata, tagging), can be treated like a regular metadata item: + Smart playlist details contain the `content` attribute. This is the content URI for the generator. This can then be parsed by a client to provide smart playlist editing. + """ + request = operations.GetPlaylistRequest( + playlist_id=playlist_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetPlaylistRequest, base_url, '/playlists/{playlistID}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetPlaylistResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetPlaylistResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetPlaylistResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def delete_playlist(self, playlist_id: float) -> operations.DeletePlaylistResponse: + r"""Deletes a Playlist + This endpoint will delete a playlist + """ + request = operations.DeletePlaylistRequest( + playlist_id=playlist_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.DeletePlaylistRequest, base_url, '/playlists/{playlistID}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('DELETE', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.DeletePlaylistResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.DeletePlaylistResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def update_playlist(self, playlist_id: float, title: Optional[str] = None, summary: Optional[str] = None) -> operations.UpdatePlaylistResponse: + r"""Update a Playlist + From PMS version 1.9.1 clients can also edit playlist metadata using this endpoint as they would via `PUT /library/metadata/{playlistID}` + """ + request = operations.UpdatePlaylistRequest( + playlist_id=playlist_id, + title=title, + summary=summary, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.UpdatePlaylistRequest, base_url, '/playlists/{playlistID}', request) + headers = {} + query_params = utils.get_query_params(operations.UpdatePlaylistRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('PUT', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.UpdatePlaylistResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.UpdatePlaylistResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_playlist_contents(self, playlist_id: float, type_: float) -> operations.GetPlaylistContentsResponse: + r"""Retrieve Playlist Contents + Gets the contents of a playlist. Should be paged by clients via standard mechanisms. + By default leaves are returned (e.g. episodes, movies). In order to return other types you can use the `type` parameter. + For example, you could use this to display a list of recently added albums vis a smart playlist. + Note that for dumb playlists, items have a `playlistItemID` attribute which is used for deleting or moving items. + """ + request = operations.GetPlaylistContentsRequest( + playlist_id=playlist_id, + type=type_, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.GetPlaylistContentsRequest, base_url, '/playlists/{playlistID}/items', request) + headers = {} + query_params = utils.get_query_params(operations.GetPlaylistContentsRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetPlaylistContentsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetPlaylistContentsResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetPlaylistContentsResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def clear_playlist_contents(self, playlist_id: float) -> operations.ClearPlaylistContentsResponse: + r"""Delete Playlist Contents + Clears a playlist, only works with dumb playlists. Returns the playlist. + """ + request = operations.ClearPlaylistContentsRequest( + playlist_id=playlist_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.ClearPlaylistContentsRequest, base_url, '/playlists/{playlistID}/items', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('DELETE', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.ClearPlaylistContentsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.ClearPlaylistContentsResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def add_playlist_contents(self, playlist_id: float, uri: str, play_queue_id: Optional[float] = None) -> operations.AddPlaylistContentsResponse: + r"""Adding to a Playlist + Adds a generator to a playlist, same parameters as the POST to create. With a dumb playlist, this adds the specified items to the playlist. + With a smart playlist, passing a new `uri` parameter replaces the rules for the playlist. Returns the playlist. + """ + request = operations.AddPlaylistContentsRequest( + playlist_id=playlist_id, + uri=uri, + play_queue_id=play_queue_id, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.AddPlaylistContentsRequest, base_url, '/playlists/{playlistID}/items', request) + headers = {} + query_params = utils.get_query_params(operations.AddPlaylistContentsRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('PUT', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.AddPlaylistContentsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.AddPlaylistContentsResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.AddPlaylistContentsResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def upload_playlist(self, path: str, force: operations.Force) -> operations.UploadPlaylistResponse: + r"""Upload Playlist + Imports m3u playlists by passing a path on the server to scan for m3u-formatted playlist files, or a path to a single playlist file. + """ + request = operations.UploadPlaylistRequest( + path=path, + force=force, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/playlists/upload' + headers = {} + query_params = utils.get_query_params(operations.UploadPlaylistRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.UploadPlaylistResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.UploadPlaylistResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/plex_api/plex.py b/src/plex_api/plex.py new file mode 100644 index 0000000..5985b22 --- /dev/null +++ b/src/plex_api/plex.py @@ -0,0 +1,17 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from .tv import Tv + +class Plex: + tv: Tv + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + self._init_sdks() + + def _init_sdks(self): + self.tv = Tv(self.sdk_configuration) + + \ No newline at end of file diff --git a/src/plex_api/sdk.py b/src/plex_api/sdk.py new file mode 100644 index 0000000..4561aa9 --- /dev/null +++ b/src/plex_api/sdk.py @@ -0,0 +1,141 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests as requests_http +from .activities import Activities +from .butler import Butler +from .hubs import Hubs +from .library import Library +from .log import Log +from .media import Media +from .playlists import Playlists +from .plex import Plex +from .sdkconfiguration import SDKConfiguration, ServerProtocol +from .search import Search +from .security import Security +from .server import Server +from .sessions import Sessions +from .updater import Updater +from .video import Video +from plex_api import utils +from plex_api.models import components +from typing import Callable, Dict, Union + +class PlexAPI: + r"""Plex-API: A Plex Media Server API Map + An Open API Spec for interacting with Plex.tv and Plex Servers + """ + server: Server + r"""Operations against the Plex Media Server System.""" + media: Media + r"""API Calls interacting with Plex Media Server Media""" + activities: Activities + r"""Activities are awesome. They provide a way to monitor and control asynchronous operations on the server. In order to receive real-time updates for activities, a client would normally subscribe via either EventSource or Websocket endpoints. + Activities are associated with HTTP replies via a special `X-Plex-Activity` header which contains the UUID of the activity. + Activities are optional cancellable. If cancellable, they may be cancelled via the `DELETE` endpoint. Other details: + - They can contain a `progress` (from 0 to 100) marking the percent completion of the activity. + - They must contain an `type` which is used by clients to distinguish the specific activity. + - They may contain a `Context` object with attributes which associate the activity with various specific entities (items, libraries, etc.) + - The may contain a `Response` object which attributes which represent the result of the asynchronous operation. + """ + butler: Butler + r"""Butler is the task manager of the Plex Media Server Ecosystem.""" + hubs: Hubs + r"""Hubs are a structured two-dimensional container for media, generally represented by multiple horizontal rows.""" + search: Search + r"""API Calls that perform search operations with Plex Media Server""" + library: Library + r"""API Calls interacting with Plex Media Server Libraries""" + log: Log + r"""Submit logs to the Log Handler for Plex Media Server""" + plex: Plex + playlists: Playlists + r"""Playlists are ordered collections of media. They can be dumb (just a list of media) or smart (based on a media query, such as \\"all albums from 2017\\"). + They can be organized in (optionally nesting) folders. + Retrieving a playlist, or its items, will trigger a refresh of its metadata. + This may cause the duration and number of items to change. + """ + security: Security + r"""API Calls against Security for Plex Media Server""" + sessions: Sessions + r"""API Calls that perform search operations with Plex Media Server Sessions""" + updater: Updater + r"""This describes the API for searching and applying updates to the Plex Media Server. + Updates to the status can be observed via the Event API. + """ + video: Video + r"""API Calls that perform operations with Plex Media Server Videos""" + + sdk_configuration: SDKConfiguration + + def __init__(self, + access_token: Union[str, Callable[[], str]], + protocol: ServerProtocol = None, + ip: str = None, + port: str = None, + server_idx: int = None, + server_url: str = None, + url_params: Dict[str, str] = None, + client: requests_http.Session = None, + retry_config: utils.RetryConfig = None + ) -> None: + """Instantiates the SDK configuring it with the provided parameters. + + :param access_token: The access_token required for authentication + :type access_token: Union[str, Callable[[], str]] + :param protocol: Allows setting the protocol variable for url substitution + :type protocol: ServerProtocolmodels.ServerProtocol + :param ip: Allows setting the ip variable for url substitution + :type ip: + :param port: Allows setting the port variable for url substitution + :type port: + :param server_idx: The index of the server to use for all operations + :type server_idx: int + :param server_url: The server URL to use for all operations + :type server_url: str + :param url_params: Parameters to optionally template the server URL with + :type url_params: Dict[str, str] + :param client: The requests.Session HTTP client to use for all operations + :type client: requests_http.Session + :param retry_config: The utils.RetryConfig to use globally + :type retry_config: utils.RetryConfig + """ + if client is None: + client = requests_http.Session() + + if callable(access_token): + def security(): + return components.Security(access_token = access_token()) + else: + security = components.Security(access_token = access_token) + + if server_url is not None: + if url_params is not None: + server_url = utils.template_url(server_url, url_params) + server_defaults = [ + { + 'protocol': protocol or 'http', + 'ip': ip or '10.10.10.47', + 'port': port or '32400', + }, + ] + + self.sdk_configuration = SDKConfiguration(client, security, server_url, server_idx, server_defaults, retry_config=retry_config) + + self._init_sdks() + + def _init_sdks(self): + self.server = Server(self.sdk_configuration) + self.media = Media(self.sdk_configuration) + self.activities = Activities(self.sdk_configuration) + self.butler = Butler(self.sdk_configuration) + self.hubs = Hubs(self.sdk_configuration) + self.search = Search(self.sdk_configuration) + self.library = Library(self.sdk_configuration) + self.log = Log(self.sdk_configuration) + self.plex = Plex(self.sdk_configuration) + self.playlists = Playlists(self.sdk_configuration) + self.security = Security(self.sdk_configuration) + self.sessions = Sessions(self.sdk_configuration) + self.updater = Updater(self.sdk_configuration) + self.video = Video(self.sdk_configuration) + \ No newline at end of file diff --git a/src/plex_api/sdkconfiguration.py b/src/plex_api/sdkconfiguration.py new file mode 100644 index 0000000..a9b0c99 --- /dev/null +++ b/src/plex_api/sdkconfiguration.py @@ -0,0 +1,44 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import requests +from dataclasses import dataclass, field +from typing import Dict, List, Tuple, Callable, Union +from enum import Enum +from .utils.retries import RetryConfig +from .utils import utils +from plex_api.models import components + + +SERVERS = [ + '{protocol}://{ip}:{port}', + # The full address of your Plex Server +] +"""Contains the list of servers available to the SDK""" + +class ServerProtocol(str, Enum): + r"""The protocol to use when connecting to your plex server.""" + HTTP = 'http' + HTTPS = 'https' + + +@dataclass +class SDKConfiguration: + client: requests.Session + security: Union[components.Security,Callable[[], components.Security]] = None + server_url: str = '' + server_idx: int = 0 + server_defaults: List[Dict[str, str]] = field(default_factory=List) + language: str = 'python' + openapi_doc_version: str = '0.0.3' + sdk_version: str = '0.0.1' + gen_version: str = '2.245.1' + user_agent: str = 'speakeasy-sdk/python 0.0.1 2.245.1 0.0.3 plexpy' + retry_config: RetryConfig = None + + def get_server_details(self) -> Tuple[str, Dict[str, str]]: + if self.server_url: + return utils.remove_suffix(self.server_url, '/'), {} + if self.server_idx is None: + self.server_idx = 0 + + return SERVERS[self.server_idx], self.server_defaults[self.server_idx] diff --git a/src/plex_api/search.py b/src/plex_api/search.py new file mode 100644 index 0000000..f6c17d8 --- /dev/null +++ b/src/plex_api/search.py @@ -0,0 +1,163 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations +from typing import Optional + +class Search: + r"""API Calls that perform search operations with Plex Media Server""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def perform_search(self, query: str, section_id: Optional[float] = None, limit: Optional[float] = None) -> operations.PerformSearchResponse: + r"""Perform a search + This endpoint performs a search across all library sections, or a single section, and returns matches as hubs, split up by type. It performs spell checking, looks for partial matches, and orders the hubs based on quality of results. In addition, based on matches, it will return other related matches (e.g. for a genre match, it may return movies in that genre, or for an actor match, movies with that actor). + + In the response's items, the following extra attributes are returned to further describe or disambiguate the result: + + - `reason`: The reason for the result, if not because of a direct search term match; can be either: + - `section`: There are multiple identical results from different sections. + - `originalTitle`: There was a search term match from the original title field (sometimes those can be very different or in a foreign language). + - ``: If the reason for the result is due to a result in another hub, the source hub identifier is returned. For example, if the search is for \"dylan\" then Bob Dylan may be returned as an artist result, an a few of his albums returned as album results with a reason code of `artist` (the identifier of that particular hub). Or if the search is for \"arnold\", there might be movie results returned with a reason of `actor` + - `reasonTitle`: The string associated with the reason code. For a section reason, it'll be the section name; For a hub identifier, it'll be a string associated with the match (e.g. `Arnold Schwarzenegger` for movies which were returned because the search was for \"arnold\"). + - `reasonID`: The ID of the item associated with the reason for the result. This might be a section ID, a tag ID, an artist ID, or a show ID. + + This request is intended to be very fast, and called as the user types. + """ + request = operations.PerformSearchRequest( + query=query, + section_id=section_id, + limit=limit, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/hubs/search' + headers = {} + query_params = utils.get_query_params(operations.PerformSearchRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.PerformSearchResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.PerformSearchResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def perform_voice_search(self, query: str, section_id: Optional[float] = None, limit: Optional[float] = None) -> operations.PerformVoiceSearchResponse: + r"""Perform a voice search + This endpoint performs a search specifically tailored towards voice or other imprecise input which may work badly with the substring and spell-checking heuristics used by the `/hubs/search` endpoint. + It uses a [Levenshtein distance](https://en.wikipedia.org/wiki/Levenshtein_distance) heuristic to search titles, and as such is much slower than the other search endpoint. + Whenever possible, clients should limit the search to the appropriate type. + Results, as well as their containing per-type hubs, contain a `distance` attribute which can be used to judge result quality. + """ + request = operations.PerformVoiceSearchRequest( + query=query, + section_id=section_id, + limit=limit, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/hubs/search/voice' + headers = {} + query_params = utils.get_query_params(operations.PerformVoiceSearchRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.PerformVoiceSearchResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.PerformVoiceSearchResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_search_results(self, query: str) -> operations.GetSearchResultsResponse: + r"""Get Search Results + This will search the database for the string provided. + """ + request = operations.GetSearchResultsRequest( + query=query, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/search' + headers = {} + query_params = utils.get_query_params(operations.GetSearchResultsRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetSearchResultsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetSearchResultsResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetSearchResultsResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/plex_api/security.py b/src/plex_api/security.py new file mode 100644 index 0000000..0ba3d2b --- /dev/null +++ b/src/plex_api/security.py @@ -0,0 +1,100 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations + +class Security: + r"""API Calls against Security for Plex Media Server""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_transient_token(self, type_: operations.GetTransientTokenQueryParamType, scope: operations.Scope) -> operations.GetTransientTokenResponse: + r"""Get a Transient Token. + This endpoint provides the caller with a temporary token with the same access level as the caller's token. These tokens are valid for up to 48 hours and are destroyed if the server instance is restarted. + """ + request = operations.GetTransientTokenRequest( + type=type_, + scope=scope, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/security/token' + headers = {} + query_params = utils.get_query_params(operations.GetTransientTokenRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetTransientTokenResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetTransientTokenResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_source_connection_information(self, source: str) -> operations.GetSourceConnectionInformationResponse: + r"""Get Source Connection Information + If a caller requires connection details and a transient token for a source that is known to the server, for example a cloud media provider or shared PMS, then this endpoint can be called. This endpoint is only accessible with either an admin token or a valid transient token generated from an admin token. + Note: requires Plex Media Server >= 1.15.4. + """ + request = operations.GetSourceConnectionInformationRequest( + source=source, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/security/resources' + headers = {} + query_params = utils.get_query_params(operations.GetSourceConnectionInformationRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetSourceConnectionInformationResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetSourceConnectionInformationResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/plex_api/server.py b/src/plex_api/server.py new file mode 100644 index 0000000..b183f41 --- /dev/null +++ b/src/plex_api/server.py @@ -0,0 +1,340 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations +from typing import Optional + +class Server: + r"""Operations against the Plex Media Server System.""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_server_capabilities(self) -> operations.GetServerCapabilitiesResponse: + r"""Server Capabilities + Server Capabilities + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetServerCapabilitiesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetServerCapabilitiesResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetServerCapabilitiesResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_server_preferences(self) -> operations.GetServerPreferencesResponse: + r"""Get Server Preferences + Get Server Preferences + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/:/prefs' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetServerPreferencesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetServerPreferencesResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetServerPreferencesResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_available_clients(self) -> operations.GetAvailableClientsResponse: + r"""Get Available Clients + Get Available Clients + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/clients' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetAvailableClientsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetAvailableClientsResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetAvailableClientsResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_devices(self) -> operations.GetDevicesResponse: + r"""Get Devices + Get Devices + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/devices' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetDevicesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetDevicesResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetDevicesResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_server_identity(self) -> operations.GetServerIdentityResponse: + r"""Get Server Identity + Get Server Identity + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/identity' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetServerIdentityResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetServerIdentityResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetServerIdentityResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_my_plex_account(self) -> operations.GetMyPlexAccountResponse: + r"""Get MyPlex Account + Returns MyPlex Account Information + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/myplex/account' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetMyPlexAccountResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetMyPlexAccountResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetMyPlexAccountResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_resized_photo(self, request: operations.GetResizedPhotoRequest) -> operations.GetResizedPhotoResponse: + r"""Get a Resized Photo + Plex's Photo transcoder is used throughout the service to serve images at specified sizes. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/photo/:/transcode' + headers = {} + query_params = utils.get_query_params(operations.GetResizedPhotoRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetResizedPhotoResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetResizedPhotoResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_server_list(self) -> operations.GetServerListResponse: + r"""Get Server List + Get Server List + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/servers' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetServerListResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetServerListResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetServerListResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/plex_api/sessions.py b/src/plex_api/sessions.py new file mode 100644 index 0000000..83fa2c2 --- /dev/null +++ b/src/plex_api/sessions.py @@ -0,0 +1,179 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations +from typing import Optional + +class Sessions: + r"""API Calls that perform search operations with Plex Media Server Sessions""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_sessions(self) -> operations.GetSessionsResponse: + r"""Get Active Sessions + This will retrieve the \"Now Playing\" Information of the PMS. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/status/sessions' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetSessionsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetSessionsResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetSessionsResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_session_history(self) -> operations.GetSessionHistoryResponse: + r"""Get Session History + This will Retrieve a listing of all history views. + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/status/sessions/history/all' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetSessionHistoryResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetSessionHistoryResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetSessionHistoryResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_transcode_sessions(self) -> operations.GetTranscodeSessionsResponse: + r"""Get Transcode Sessions + Get Transcode Sessions + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/transcode/sessions' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetTranscodeSessionsResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetTranscodeSessionsResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetTranscodeSessionsResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def stop_transcode_session(self, session_key: str) -> operations.StopTranscodeSessionResponse: + r"""Stop a Transcode Session + Stop a Transcode Session + """ + request = operations.StopTranscodeSessionRequest( + session_key=session_key, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = utils.generate_url(operations.StopTranscodeSessionRequest, base_url, '/transcode/sessions/{sessionKey}', request) + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('DELETE', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.StopTranscodeSessionResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 204: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.StopTranscodeSessionResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/plex_api/tv.py b/src/plex_api/tv.py new file mode 100644 index 0000000..7aa0142 --- /dev/null +++ b/src/plex_api/tv.py @@ -0,0 +1,109 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations +from typing import Optional + +class Tv: + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_pin(self, x_plex_client_identifier: str, strong: Optional[bool] = None, server_url: Optional[str] = None) -> operations.GetPinResponse: + r"""Get a Pin + Retrieve a Pin from Plex.tv for authentication flows + """ + request = operations.GetPinRequest( + x_plex_client_identifier=x_plex_client_identifier, + strong=strong, + ) + + base_url = utils.template_url(operations.GET_PIN_SERVERS[0], { + }) + if server_url is not None: + base_url = server_url + + url = base_url + '/pins' + headers = utils.get_headers(request) + query_params = utils.get_query_params(operations.GetPinRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('POST', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetPinResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetPinResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetPinResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_token(self, pin_id: str, x_plex_client_identifier: str, server_url: Optional[str] = None) -> operations.GetTokenResponse: + r"""Get Access Token + Retrieve an Access Token from Plex.tv after the Pin has already been authenticated + """ + request = operations.GetTokenRequest( + pin_id=pin_id, + x_plex_client_identifier=x_plex_client_identifier, + ) + + base_url = utils.template_url(operations.GET_TOKEN_SERVERS[0], { + }) + if server_url is not None: + base_url = server_url + + url = utils.generate_url(operations.GetTokenRequest, base_url, '/pins/{pinID}', request) + headers = utils.get_headers(request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetTokenResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetTokenResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/plex_api/updater.py b/src/plex_api/updater.py new file mode 100644 index 0000000..58393f8 --- /dev/null +++ b/src/plex_api/updater.py @@ -0,0 +1,143 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations +from typing import Optional + +class Updater: + r"""This describes the API for searching and applying updates to the Plex Media Server. + Updates to the status can be observed via the Event API. + """ + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def get_update_status(self) -> operations.GetUpdateStatusResponse: + r"""Querying status of updates + Querying status of updates + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/updater/status' + headers = {} + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetUpdateStatusResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, Optional[operations.GetUpdateStatusResponseBody]) + res.object = out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetUpdateStatusResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def check_for_updates(self, download: Optional[operations.Download] = None) -> operations.CheckForUpdatesResponse: + r"""Checking for updates + Checking for updates + """ + request = operations.CheckForUpdatesRequest( + download=download, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/updater/check' + headers = {} + query_params = utils.get_query_params(operations.CheckForUpdatesRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('PUT', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.CheckForUpdatesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.CheckForUpdatesResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def apply_updates(self, tonight: Optional[operations.Tonight] = None, skip: Optional[operations.Skip] = None) -> operations.ApplyUpdatesResponse: + r"""Apply Updates + Note that these two parameters are effectively mutually exclusive. The `tonight` parameter takes precedence and `skip` will be ignored if `tonight` is also passed + """ + request = operations.ApplyUpdatesRequest( + tonight=tonight, + skip=skip, + ) + + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/updater/apply' + headers = {} + query_params = utils.get_query_params(operations.ApplyUpdatesRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('PUT', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.ApplyUpdatesResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code == 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.ApplyUpdatesResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/src/plex_api/utils/__init__.py b/src/plex_api/utils/__init__.py new file mode 100644 index 0000000..94b7398 --- /dev/null +++ b/src/plex_api/utils/__init__.py @@ -0,0 +1,4 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .retries import * +from .utils import * diff --git a/src/plex_api/utils/retries.py b/src/plex_api/utils/retries.py new file mode 100644 index 0000000..8eba094 --- /dev/null +++ b/src/plex_api/utils/retries.py @@ -0,0 +1,120 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import random +import time +from typing import List + +import requests + + +class BackoffStrategy: + initial_interval: int + max_interval: int + exponent: float + max_elapsed_time: int + + def __init__(self, initial_interval: int, max_interval: int, exponent: float, max_elapsed_time: int): + self.initial_interval = initial_interval + self.max_interval = max_interval + self.exponent = exponent + self.max_elapsed_time = max_elapsed_time + + +class RetryConfig: + strategy: str + backoff: BackoffStrategy + retry_connection_errors: bool + + def __init__(self, strategy: str, backoff: BackoffStrategy, retry_connection_errors: bool): + self.strategy = strategy + self.backoff = backoff + self.retry_connection_errors = retry_connection_errors + + +class Retries: + config: RetryConfig + status_codes: List[str] + + def __init__(self, config: RetryConfig, status_codes: List[str]): + self.config = config + self.status_codes = status_codes + + +class TemporaryError(Exception): + response: requests.Response + + def __init__(self, response: requests.Response): + self.response = response + + +class PermanentError(Exception): + inner: Exception + + def __init__(self, inner: Exception): + self.inner = inner + + +def retry(func, retries: Retries): + if retries.config.strategy == 'backoff': + def do_request(): + res: requests.Response + try: + res = func() + + for code in retries.status_codes: + if "X" in code.upper(): + code_range = int(code[0]) + + status_major = res.status_code / 100 + + if status_major >= code_range and status_major < code_range + 1: + raise TemporaryError(res) + else: + parsed_code = int(code) + + if res.status_code == parsed_code: + raise TemporaryError(res) + except requests.exceptions.ConnectionError as exception: + if retries.config.config.retry_connection_errors: + raise + + raise PermanentError(exception) from exception + except requests.exceptions.Timeout as exception: + if retries.config.config.retry_connection_errors: + raise + + raise PermanentError(exception) from exception + except TemporaryError: + raise + except Exception as exception: + raise PermanentError(exception) from exception + + return res + + return retry_with_backoff(do_request, retries.config.backoff.initial_interval, retries.config.backoff.max_interval, retries.config.backoff.exponent, retries.config.backoff.max_elapsed_time) + + return func() + + +def retry_with_backoff(func, initial_interval=500, max_interval=60000, exponent=1.5, max_elapsed_time=3600000): + start = round(time.time()*1000) + retries = 0 + + while True: + try: + return func() + except PermanentError as exception: + raise exception.inner + except Exception as exception: # pylint: disable=broad-exception-caught + now = round(time.time()*1000) + if now - start > max_elapsed_time: + if isinstance(exception, TemporaryError): + return exception.response + + raise + sleep = ((initial_interval/1000) * + exponent**retries + random.uniform(0, 1)) + if sleep > max_interval/1000: + sleep = max_interval/1000 + time.sleep(sleep) + retries += 1 diff --git a/src/plex_api/utils/utils.py b/src/plex_api/utils/utils.py new file mode 100644 index 0000000..bf7ddc3 --- /dev/null +++ b/src/plex_api/utils/utils.py @@ -0,0 +1,897 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import base64 +import json +import re +import sys +from dataclasses import Field, dataclass, fields, is_dataclass, make_dataclass +from datetime import date, datetime +from decimal import Decimal +from email.message import Message +from enum import Enum +from typing import (Any, Callable, Dict, List, Optional, Tuple, Union, + get_args, get_origin) +from xmlrpc.client import boolean +from typing_inspect import is_optional_type +import dateutil.parser +import requests +from dataclasses_json import DataClassJsonMixin + + +class SecurityClient: + client: requests.Session + query_params: Dict[str, str] = {} + + def __init__(self, client: requests.Session): + self.client = client + + def request(self, method, url, **kwargs): + params = kwargs.get('params', {}) + kwargs["params"] = {**self.query_params, **params} + + return self.client.request(method, url, **kwargs) + + +def configure_security_client(client: requests.Session, security: dataclass): + client = SecurityClient(client) + + if security is None: + return client + + sec_fields: Tuple[Field, ...] = fields(security) + for sec_field in sec_fields: + value = getattr(security, sec_field.name) + if value is None: + continue + + metadata = sec_field.metadata.get('security') + if metadata is None: + continue + if metadata.get('option'): + _parse_security_option(client, value) + return client + if metadata.get('scheme'): + # Special case for basic auth which could be a flattened struct + if metadata.get("sub_type") == "basic" and not is_dataclass(value): + _parse_security_scheme(client, metadata, security) + else: + _parse_security_scheme(client, metadata, value) + + return client + + +def _parse_security_option(client: SecurityClient, option: dataclass): + opt_fields: Tuple[Field, ...] = fields(option) + for opt_field in opt_fields: + metadata = opt_field.metadata.get('security') + if metadata is None or metadata.get('scheme') is None: + continue + _parse_security_scheme( + client, metadata, getattr(option, opt_field.name)) + + +def _parse_security_scheme(client: SecurityClient, scheme_metadata: Dict, scheme: any): + scheme_type = scheme_metadata.get('type') + sub_type = scheme_metadata.get('sub_type') + + if is_dataclass(scheme): + if scheme_type == 'http' and sub_type == 'basic': + _parse_basic_auth_scheme(client, scheme) + return + + scheme_fields: Tuple[Field, ...] = fields(scheme) + for scheme_field in scheme_fields: + metadata = scheme_field.metadata.get('security') + if metadata is None or metadata.get('field_name') is None: + continue + + value = getattr(scheme, scheme_field.name) + + _parse_security_scheme_value( + client, scheme_metadata, metadata, value) + else: + _parse_security_scheme_value( + client, scheme_metadata, scheme_metadata, scheme) + + +def _parse_security_scheme_value(client: SecurityClient, scheme_metadata: Dict, security_metadata: Dict, value: any): + scheme_type = scheme_metadata.get('type') + sub_type = scheme_metadata.get('sub_type') + + header_name = security_metadata.get('field_name') + + if scheme_type == "apiKey": + if sub_type == 'header': + client.client.headers[header_name] = value + elif sub_type == 'query': + client.query_params[header_name] = value + elif sub_type == 'cookie': + client.client.cookies[header_name] = value + else: + raise Exception('not supported') + elif scheme_type == "openIdConnect": + client.client.headers[header_name] = _apply_bearer(value) + elif scheme_type == 'oauth2': + client.client.headers[header_name] = _apply_bearer(value) + elif scheme_type == 'http': + if sub_type == 'bearer': + client.client.headers[header_name] = _apply_bearer(value) + else: + raise Exception('not supported') + else: + raise Exception('not supported') + + +def _apply_bearer(token: str) -> str: + return token.lower().startswith('bearer ') and token or f'Bearer {token}' + + +def _parse_basic_auth_scheme(client: SecurityClient, scheme: dataclass): + username = "" + password = "" + + scheme_fields: Tuple[Field, ...] = fields(scheme) + for scheme_field in scheme_fields: + metadata = scheme_field.metadata.get('security') + if metadata is None or metadata.get('field_name') is None: + continue + + field_name = metadata.get('field_name') + value = getattr(scheme, scheme_field.name) + + if field_name == 'username': + username = value + if field_name == 'password': + password = value + + data = f'{username}:{password}'.encode() + client.client.headers['Authorization'] = f'Basic {base64.b64encode(data).decode()}' + + +def generate_url(clazz: type, server_url: str, path: str, path_params: dataclass, + gbls: Dict[str, Dict[str, Dict[str, Any]]] = None) -> str: + path_param_fields: Tuple[Field, ...] = fields(clazz) + for field in path_param_fields: + request_metadata = field.metadata.get('request') + if request_metadata is not None: + continue + + param_metadata = field.metadata.get('path_param') + if param_metadata is None: + continue + + param = getattr( + path_params, field.name) if path_params is not None else None + param = _populate_from_globals( + field.name, param, 'pathParam', gbls) + + if param is None: + continue + + f_name = param_metadata.get("field_name", field.name) + serialization = param_metadata.get('serialization', '') + if serialization != '': + serialized_params = _get_serialized_params( + param_metadata, field.type, f_name, param) + for key, value in serialized_params.items(): + path = path.replace( + '{' + key + '}', value, 1) + else: + if param_metadata.get('style', 'simple') == 'simple': + if isinstance(param, List): + pp_vals: List[str] = [] + for pp_val in param: + if pp_val is None: + continue + pp_vals.append(_val_to_string(pp_val)) + path = path.replace( + '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) + elif isinstance(param, Dict): + pp_vals: List[str] = [] + for pp_key in param: + if param[pp_key] is None: + continue + if param_metadata.get('explode'): + pp_vals.append( + f"{pp_key}={_val_to_string(param[pp_key])}") + else: + pp_vals.append( + f"{pp_key},{_val_to_string(param[pp_key])}") + path = path.replace( + '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) + elif not isinstance(param, (str, int, float, complex, bool, Decimal)): + pp_vals: List[str] = [] + param_fields: Tuple[Field, ...] = fields(param) + for param_field in param_fields: + param_value_metadata = param_field.metadata.get( + 'path_param') + if not param_value_metadata: + continue + + parm_name = param_value_metadata.get( + 'field_name', field.name) + + param_field_val = getattr(param, param_field.name) + if param_field_val is None: + continue + if param_metadata.get('explode'): + pp_vals.append( + f"{parm_name}={_val_to_string(param_field_val)}") + else: + pp_vals.append( + f"{parm_name},{_val_to_string(param_field_val)}") + path = path.replace( + '{' + param_metadata.get('field_name', field.name) + '}', ",".join(pp_vals), 1) + else: + path = path.replace( + '{' + param_metadata.get('field_name', field.name) + '}', _val_to_string(param), 1) + + return remove_suffix(server_url, '/') + path + + +def is_optional(field): + return get_origin(field) is Union and type(None) in get_args(field) + + +def template_url(url_with_params: str, params: Dict[str, str]) -> str: + for key, value in params.items(): + url_with_params = url_with_params.replace( + '{' + key + '}', value) + + return url_with_params + + +def get_query_params(clazz: type, query_params: dataclass, gbls: Dict[str, Dict[str, Dict[str, Any]]] = None) -> Dict[ + str, List[str]]: + params: Dict[str, List[str]] = {} + + param_fields: Tuple[Field, ...] = fields(clazz) + for field in param_fields: + request_metadata = field.metadata.get('request') + if request_metadata is not None: + continue + + metadata = field.metadata.get('query_param') + if not metadata: + continue + + param_name = field.name + value = getattr( + query_params, param_name) if query_params is not None else None + + value = _populate_from_globals(param_name, value, 'queryParam', gbls) + + f_name = metadata.get("field_name") + serialization = metadata.get('serialization', '') + if serialization != '': + serialized_parms = _get_serialized_params(metadata, field.type, f_name, value) + for key, value in serialized_parms.items(): + if key in params: + params[key].extend(value) + else: + params[key] = [value] + else: + style = metadata.get('style', 'form') + if style == 'deepObject': + params = {**params, **_get_deep_object_query_params( + metadata, f_name, value)} + elif style == 'form': + params = {**params, **_get_delimited_query_params( + metadata, f_name, value, ",")} + elif style == 'pipeDelimited': + params = {**params, **_get_delimited_query_params( + metadata, f_name, value, "|")} + else: + raise Exception('not yet implemented') + return params + + +def get_headers(headers_params: dataclass) -> Dict[str, str]: + if headers_params is None: + return {} + + headers: Dict[str, str] = {} + + param_fields: Tuple[Field, ...] = fields(headers_params) + for field in param_fields: + metadata = field.metadata.get('header') + if not metadata: + continue + + value = _serialize_header(metadata.get( + 'explode', False), getattr(headers_params, field.name)) + + if value != '': + headers[metadata.get('field_name', field.name)] = value + + return headers + + +def _get_serialized_params(metadata: Dict, field_type: type, field_name: str, obj: any) -> Dict[str, str]: + params: Dict[str, str] = {} + + serialization = metadata.get('serialization', '') + if serialization == 'json': + params[metadata.get("field_name", field_name)] = marshal_json(obj, field_type) + + return params + + +def _get_deep_object_query_params(metadata: Dict, field_name: str, obj: any) -> Dict[str, List[str]]: + params: Dict[str, List[str]] = {} + + if obj is None: + return params + + if is_dataclass(obj): + obj_fields: Tuple[Field, ...] = fields(obj) + for obj_field in obj_fields: + obj_param_metadata = obj_field.metadata.get('query_param') + if not obj_param_metadata: + continue + + obj_val = getattr(obj, obj_field.name) + if obj_val is None: + continue + + if isinstance(obj_val, List): + for val in obj_val: + if val is None: + continue + + if params.get( + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]') is None: + params[ + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [ + ] + + params[ + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'].append( + _val_to_string(val)) + else: + params[ + f'{metadata.get("field_name", field_name)}[{obj_param_metadata.get("field_name", obj_field.name)}]'] = [ + _val_to_string(obj_val)] + elif isinstance(obj, Dict): + for key, value in obj.items(): + if value is None: + continue + + if isinstance(value, List): + for val in value: + if val is None: + continue + + if params.get(f'{metadata.get("field_name", field_name)}[{key}]') is None: + params[f'{metadata.get("field_name", field_name)}[{key}]'] = [ + ] + + params[ + f'{metadata.get("field_name", field_name)}[{key}]'].append(_val_to_string(val)) + else: + params[f'{metadata.get("field_name", field_name)}[{key}]'] = [ + _val_to_string(value)] + return params + + +def _get_query_param_field_name(obj_field: Field) -> str: + obj_param_metadata = obj_field.metadata.get('query_param') + + if not obj_param_metadata: + return "" + + return obj_param_metadata.get("field_name", obj_field.name) + + +def _get_delimited_query_params(metadata: Dict, field_name: str, obj: any, delimiter: str) -> Dict[ + str, List[str]]: + return _populate_form(field_name, metadata.get("explode", True), obj, _get_query_param_field_name, delimiter) + + +SERIALIZATION_METHOD_TO_CONTENT_TYPE = { + 'json': 'application/json', + 'form': 'application/x-www-form-urlencoded', + 'multipart': 'multipart/form-data', + 'raw': 'application/octet-stream', + 'string': 'text/plain', +} + + +def serialize_request_body(request: dataclass, request_type: type, request_field_name: str, nullable: bool, optional: bool, serialization_method: str, encoder=None) -> Tuple[ + str, any, any]: + if request is None: + if not nullable and optional: + return None, None, None + + if not is_dataclass(request) or not hasattr(request, request_field_name): + return serialize_content_type(request_field_name, request_type, SERIALIZATION_METHOD_TO_CONTENT_TYPE[serialization_method], + request, encoder) + + request_val = getattr(request, request_field_name) + + if request_val is None: + if not nullable and optional: + return None, None, None + + request_fields: Tuple[Field, ...] = fields(request) + request_metadata = None + + for field in request_fields: + if field.name == request_field_name: + request_metadata = field.metadata.get('request') + break + + if request_metadata is None: + raise Exception('invalid request type') + + return serialize_content_type(request_field_name, request_type, request_metadata.get('media_type', 'application/octet-stream'), + request_val) + + +def serialize_content_type(field_name: str, request_type: any, media_type: str, request: dataclass, encoder=None) -> Tuple[str, any, List[List[any]]]: + if re.match(r'(application|text)\/.*?\+*json.*', media_type) is not None: + return media_type, marshal_json(request, request_type, encoder), None + if re.match(r'multipart\/.*', media_type) is not None: + return serialize_multipart_form(media_type, request) + if re.match(r'application\/x-www-form-urlencoded.*', media_type) is not None: + return media_type, serialize_form_data(field_name, request), None + if isinstance(request, (bytes, bytearray)): + return media_type, request, None + if isinstance(request, str): + return media_type, request, None + + raise Exception( + f"invalid request body type {type(request)} for mediaType {media_type}") + + +def serialize_multipart_form(media_type: str, request: dataclass) -> Tuple[str, any, List[List[any]]]: + form: List[List[any]] = [] + request_fields = fields(request) + + for field in request_fields: + val = getattr(request, field.name) + if val is None: + continue + + field_metadata = field.metadata.get('multipart_form') + if not field_metadata: + continue + + if field_metadata.get("file") is True: + file_fields = fields(val) + + file_name = "" + field_name = "" + content = bytes() + + for file_field in file_fields: + file_metadata = file_field.metadata.get('multipart_form') + if file_metadata is None: + continue + + if file_metadata.get("content") is True: + content = getattr(val, file_field.name) + else: + field_name = file_metadata.get( + "field_name", file_field.name) + file_name = getattr(val, file_field.name) + if field_name == "" or file_name == "" or content == bytes(): + raise Exception('invalid multipart/form-data file') + + form.append([field_name, [file_name, content]]) + elif field_metadata.get("json") is True: + to_append = [field_metadata.get("field_name", field.name), [ + None, marshal_json(val, field.type), "application/json"]] + form.append(to_append) + else: + field_name = field_metadata.get( + "field_name", field.name) + if isinstance(val, List): + for value in val: + if value is None: + continue + form.append( + [field_name + "[]", [None, _val_to_string(value)]]) + else: + form.append([field_name, [None, _val_to_string(val)]]) + return media_type, None, form + + +def serialize_dict(original: Dict, explode: bool, field_name, existing: Optional[Dict[str, List[str]]]) -> Dict[ + str, List[str]]: + if existing is None: + existing = [] + + if explode is True: + for key, val in original.items(): + if key not in existing: + existing[key] = [] + existing[key].append(val) + else: + temp = [] + for key, val in original.items(): + temp.append(str(key)) + temp.append(str(val)) + if field_name not in existing: + existing[field_name] = [] + existing[field_name].append(",".join(temp)) + return existing + + +def serialize_form_data(field_name: str, data: dataclass) -> Dict[str, any]: + form: Dict[str, List[str]] = {} + + if is_dataclass(data): + for field in fields(data): + val = getattr(data, field.name) + if val is None: + continue + + metadata = field.metadata.get('form') + if metadata is None: + continue + + field_name = metadata.get('field_name', field.name) + + if metadata.get('json'): + form[field_name] = [marshal_json(val, field.type)] + else: + if metadata.get('style', 'form') == 'form': + form = {**form, **_populate_form( + field_name, metadata.get('explode', True), val, _get_form_field_name, ",")} + else: + raise Exception( + f'Invalid form style for field {field.name}') + elif isinstance(data, Dict): + for key, value in data.items(): + form[key] = [_val_to_string(value)] + else: + raise Exception(f'Invalid request body type for field {field_name}') + + return form + + +def _get_form_field_name(obj_field: Field) -> str: + obj_param_metadata = obj_field.metadata.get('form') + + if not obj_param_metadata: + return "" + + return obj_param_metadata.get("field_name", obj_field.name) + + +def _populate_form(field_name: str, explode: boolean, obj: any, get_field_name_func: Callable, delimiter: str) -> \ + Dict[str, List[str]]: + params: Dict[str, List[str]] = {} + + if obj is None: + return params + + if is_dataclass(obj): + items = [] + + obj_fields: Tuple[Field, ...] = fields(obj) + for obj_field in obj_fields: + obj_field_name = get_field_name_func(obj_field) + if obj_field_name == '': + continue + + val = getattr(obj, obj_field.name) + if val is None: + continue + + if explode: + params[obj_field_name] = [_val_to_string(val)] + else: + items.append( + f'{obj_field_name}{delimiter}{_val_to_string(val)}') + + if len(items) > 0: + params[field_name] = [delimiter.join(items)] + elif isinstance(obj, Dict): + items = [] + for key, value in obj.items(): + if value is None: + continue + + if explode: + params[key] = _val_to_string(value) + else: + items.append(f'{key}{delimiter}{_val_to_string(value)}') + + if len(items) > 0: + params[field_name] = [delimiter.join(items)] + elif isinstance(obj, List): + items = [] + + for value in obj: + if value is None: + continue + + if explode: + if not field_name in params: + params[field_name] = [] + params[field_name].append(_val_to_string(value)) + else: + items.append(_val_to_string(value)) + + if len(items) > 0: + params[field_name] = [delimiter.join( + [str(item) for item in items])] + else: + params[field_name] = [_val_to_string(obj)] + + return params + + +def _serialize_header(explode: bool, obj: any) -> str: + if obj is None: + return '' + + if is_dataclass(obj): + items = [] + obj_fields: Tuple[Field, ...] = fields(obj) + for obj_field in obj_fields: + obj_param_metadata = obj_field.metadata.get('header') + + if not obj_param_metadata: + continue + + obj_field_name = obj_param_metadata.get( + 'field_name', obj_field.name) + if obj_field_name == '': + continue + + val = getattr(obj, obj_field.name) + if val is None: + continue + + if explode: + items.append( + f'{obj_field_name}={_val_to_string(val)}') + else: + items.append(obj_field_name) + items.append(_val_to_string(val)) + + if len(items) > 0: + return ','.join(items) + elif isinstance(obj, Dict): + items = [] + + for key, value in obj.items(): + if value is None: + continue + + if explode: + items.append(f'{key}={_val_to_string(value)}') + else: + items.append(key) + items.append(_val_to_string(value)) + + if len(items) > 0: + return ','.join([str(item) for item in items]) + elif isinstance(obj, List): + items = [] + + for value in obj: + if value is None: + continue + + items.append(_val_to_string(value)) + + if len(items) > 0: + return ','.join(items) + else: + return f'{_val_to_string(obj)}' + + return '' + + +def unmarshal_json(data, typ, decoder=None): + unmarshal = make_dataclass('Unmarshal', [('res', typ)], + bases=(DataClassJsonMixin,)) + json_dict = json.loads(data) + try: + out = unmarshal.from_dict({"res": json_dict}) + except AttributeError as attr_err: + raise AttributeError( + f'unable to unmarshal {data} as {typ} - {attr_err}') from attr_err + + return out.res if decoder is None else decoder(out.res) + + +def marshal_json(val, typ, encoder=None): + if not is_optional_type(typ) and val is None: + raise ValueError(f"Could not marshal None into non-optional type: {typ}") + + marshal = make_dataclass('Marshal', [('res', typ)], + bases=(DataClassJsonMixin,)) + marshaller = marshal(res=val) + json_dict = marshaller.to_dict() + val = json_dict["res"] if encoder is None else encoder(json_dict["res"]) + + return json.dumps(val, separators=(',', ':'), sort_keys=True) + + +def match_content_type(content_type: str, pattern: str) -> boolean: + if pattern in (content_type, "*", "*/*"): + return True + + msg = Message() + msg['content-type'] = content_type + media_type = msg.get_content_type() + + if media_type == pattern: + return True + + parts = media_type.split("/") + if len(parts) == 2: + if pattern in (f'{parts[0]}/*', f'*/{parts[1]}'): + return True + + return False + + +def datetimeisoformat(optional: bool): + def isoformatoptional(val): + if optional and val is None: + return None + return _val_to_string(val) + + return isoformatoptional + + +def dateisoformat(optional: bool): + def isoformatoptional(val): + if optional and val is None: + return None + return date.isoformat(val) + + return isoformatoptional + + +def datefromisoformat(date_str: str): + return dateutil.parser.parse(date_str).date() + + +def bigintencoder(optional: bool): + def bigintencode(val: int): + if optional and val is None: + return None + return str(val) + + return bigintencode + + +def bigintdecoder(val): + if isinstance(val, float): + raise ValueError(f"{val} is a float") + return int(val) + + +def decimalencoder(optional: bool, as_str: bool): + def decimalencode(val: Decimal): + if optional and val is None: + return None + + if as_str: + return str(val) + + return float(val) + + return decimalencode + + +def decimaldecoder(val): + return Decimal(str(val)) + + +def map_encoder(optional: bool, value_encoder: Callable): + def map_encode(val: Dict): + if optional and val is None: + return None + + encoded = {} + for key, value in val.items(): + encoded[key] = value_encoder(value) + + return encoded + + return map_encode + + +def map_decoder(value_decoder: Callable): + def map_decode(val: Dict): + decoded = {} + for key, value in val.items(): + decoded[key] = value_decoder(value) + + return decoded + + return map_decode + + +def list_encoder(optional: bool, value_encoder: Callable): + def list_encode(val: List): + if optional and val is None: + return None + + encoded = [] + for value in val: + encoded.append(value_encoder(value)) + + return encoded + + return list_encode + + +def list_decoder(value_decoder: Callable): + def list_decode(val: List): + decoded = [] + for value in val: + decoded.append(value_decoder(value)) + + return decoded + + return list_decode + +def union_encoder(all_encoders: Dict[str, Callable]): + def selective_encoder(val: any): + if type(val) in all_encoders: + return all_encoders[type(val)](val) + return val + return selective_encoder + +def union_decoder(all_decoders: List[Callable]): + def selective_decoder(val: any): + decoded = val + for decoder in all_decoders: + try: + decoded = decoder(val) + break + except (TypeError, ValueError): + continue + return decoded + return selective_decoder + +def get_field_name(name): + def override(_, _field_name=name): + return _field_name + + return override + + +def _val_to_string(val): + if isinstance(val, bool): + return str(val).lower() + if isinstance(val, datetime): + return val.isoformat().replace('+00:00', 'Z') + if isinstance(val, Enum): + return str(val.value) + + return str(val) + + +def _populate_from_globals(param_name: str, value: any, param_type: str, gbls: Dict[str, Dict[str, Dict[str, Any]]]): + if value is None and gbls is not None: + if 'parameters' in gbls: + if param_type in gbls['parameters']: + if param_name in gbls['parameters'][param_type]: + global_value = gbls['parameters'][param_type][param_name] + if global_value is not None: + value = global_value + + return value + + +def decoder_with_discriminator(field_name): + def decode_fx(obj): + kls = getattr(sys.modules['sdk.models.components'], obj[field_name]) + return unmarshal_json(json.dumps(obj), kls) + return decode_fx + + +def remove_suffix(input_string, suffix): + if suffix and input_string.endswith(suffix): + return input_string[:-len(suffix)] + return input_string diff --git a/src/plex_api/video.py b/src/plex_api/video.py new file mode 100644 index 0000000..3c4013d --- /dev/null +++ b/src/plex_api/video.py @@ -0,0 +1,90 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +from .sdkconfiguration import SDKConfiguration +from plex_api import utils +from plex_api.models import errors, operations + +class Video: + r"""API Calls that perform operations with Plex Media Server Videos""" + sdk_configuration: SDKConfiguration + + def __init__(self, sdk_config: SDKConfiguration) -> None: + self.sdk_configuration = sdk_config + + + + def start_universal_transcode(self, request: operations.StartUniversalTranscodeRequest) -> operations.StartUniversalTranscodeResponse: + r"""Start Universal Transcode + Begin a Universal Transcode Session + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/video/:/transcode/universal/start.mpd' + headers = {} + query_params = utils.get_query_params(operations.StartUniversalTranscodeRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.StartUniversalTranscodeResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.StartUniversalTranscodeResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + + + def get_timeline(self, request: operations.GetTimelineRequest) -> operations.GetTimelineResponse: + r"""Get the timeline for a media item + Get the timeline for a media item + """ + base_url = utils.template_url(*self.sdk_configuration.get_server_details()) + + url = base_url + '/:/timeline' + headers = {} + query_params = utils.get_query_params(operations.GetTimelineRequest, request) + headers['Accept'] = 'application/json' + headers['user-agent'] = self.sdk_configuration.user_agent + + if callable(self.sdk_configuration.security): + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security()) + else: + client = utils.configure_security_client(self.sdk_configuration.client, self.sdk_configuration.security) + + http_res = client.request('GET', url, params=query_params, headers=headers) + content_type = http_res.headers.get('Content-Type') + + res = operations.GetTimelineResponse(status_code=http_res.status_code, content_type=content_type, raw_response=http_res) + + if http_res.status_code == 200: + pass + elif http_res.status_code == 400 or http_res.status_code >= 400 and http_res.status_code < 500 or http_res.status_code >= 500 and http_res.status_code < 600: + raise errors.SDKError('API error occurred', http_res.status_code, http_res.text, http_res) + elif http_res.status_code == 401: + if utils.match_content_type(content_type, 'application/json'): + out = utils.unmarshal_json(http_res.text, errors.GetTimelineResponseBody) + out.raw_response = http_res + raise out + else: + raise errors.SDKError(f'unknown content-type received: {content_type}', http_res.status_code, http_res.text, http_res) + + return res + + \ No newline at end of file diff --git a/tests/helpers.py b/tests/helpers.py new file mode 100644 index 0000000..b3d0950 --- /dev/null +++ b/tests/helpers.py @@ -0,0 +1,61 @@ +"""Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.""" + +import re + + +def sort_query_parameters(url): + parts = url.split("?") + + if len(parts) == 1: + return url + + query = parts[1] + params = query.split("&") + + params.sort(key=lambda x: x.split('=')[0]) + + return parts[0] + "?" + "&".join(params) + + +def sort_serialized_maps(inp: any, regex: str, delim: str): + + def sort_map(m): + entire_match = m.group(0) + + groups = m.groups() + + for group in groups: + pairs = [] + if '=' in group: + pairs = group.split(delim) + + pairs.sort(key=lambda x: x.split('=')[0]) + else: + values = group.split(delim) + + if len(values) == 1: + pairs = values + else: + pairs = [''] * int(len(values)/2) + # loop though every 2nd item + for i in range(0, len(values), 2): + pairs[int(i/2)] = values[i] + delim + values[i+1] + + pairs.sort(key=lambda x: x.split(delim)[0]) + + entire_match = entire_match.replace(group, delim.join(pairs)) + + return entire_match + + if isinstance(inp, str): + return re.sub(regex, sort_map, inp) + elif isinstance(inp, list): + for i, v in enumerate(inp): + inp[i] = sort_serialized_maps(v, regex, delim) + return inp + elif isinstance(inp, dict): + for k, v in inp.items(): + inp[k] = sort_serialized_maps(v, regex, delim) + return inp + else: + raise Exception("Unsupported type")